Uso de la red neuronal convolucional para la clasificación de imágenes

Publicado: 2020-08-14

La clasificación de imágenes se renueva. Gracias a CNN.

Las redes neuronales convolucionales (CNN) son la columna vertebral de la clasificación de imágenes, un fenómeno de aprendizaje profundo que toma una imagen y le asigna una clase y una etiqueta que la hace única. La clasificación de imágenes mediante CNN forma una parte importante de los experimentos de aprendizaje automático.

Junto con el uso de CNN y sus capacidades inducidas, ahora se usa ampliamente para una variedad de aplicaciones, desde el etiquetado de imágenes de Facebook hasta las recomendaciones de productos de Amazon e imágenes de atención médica para automóviles automáticos. La razón por la que CNN es tan popular es que requiere muy poco procesamiento previo, lo que significa que puede leer imágenes 2D mediante la aplicación de filtros que otros algoritmos convencionales no pueden. Profundizaremos en el proceso de cómo funciona la clasificación de imágenes usando CNN .

Tabla de contenido

¿Cómo funciona CNN?

Las CNN están equipadas con una capa de entrada, una capa de salida y capas ocultas, todas las cuales ayudan a procesar y clasificar las imágenes. Las capas ocultas comprenden capas convolucionales, capas ReLU, capas de agrupación y capas totalmente conectadas, todas las cuales juegan un papel crucial. Obtenga más información sobre la red neuronal convolucional.

Veamos cómo funciona la clasificación de imágenes usando CNN :

Imagina que la imagen de entrada es la de un elefante. Esta imagen, con píxeles, se ingresa primero en las capas convolucionales. Si es una imagen en blanco y negro, la imagen se interpreta como una capa 2D, a cada píxel se le asigna un valor entre '0' y '255', siendo '0' completamente negro y '255' completamente blanco. Si, por el contrario, es una imagen en color, esta se convierte en una matriz 3D, con una capa azul, verde y roja, con cada valor de color entre 0 y 255.

Entonces comienza la lectura de la matriz, para lo cual el software selecciona una imagen más pequeña, conocida como 'filtro' (o kernel). La profundidad del filtro es la misma que la profundidad de la entrada. Luego, el filtro produce un movimiento de convolución junto con la imagen de entrada, moviéndose a la derecha a lo largo de la imagen en 1 unidad.

Luego multiplica los valores con los valores de la imagen original. Todas las cifras multiplicadas se suman y se genera un solo número. El proceso se repite con toda la imagen y se obtiene una matriz más pequeña que la imagen de entrada original.

La matriz final se denomina mapa de características de un mapa de activación. La convolución de una imagen ayuda a realizar operaciones como detección de bordes, nitidez y desenfoque, mediante la aplicación de diferentes filtros. Todo lo que hay que hacer es especificar aspectos como el tamaño del filtro, el número de filtros y/o la arquitectura de la red.

Desde una perspectiva humana, esta acción es similar a identificar los colores simples y los límites de una imagen. Sin embargo, para clasificar la imagen y reconocer las características que la hacen, digamos, la de un elefante y no la de un gato, es necesario identificar características únicas como las orejas grandes y la trompa del elefante. Aquí es donde entran las capas no lineales y de agrupación.

La capa no lineal (ReLU) sigue a la capa de convolución, donde se aplica una función de activación a los mapas de características para aumentar la no linealidad de la imagen. La capa ReLU elimina todos los valores negativos y aumenta la precisión de la imagen. Aunque existen otras operaciones como tanh o sigmoid, ReLU es la más popular ya que puede entrenar la red mucho más rápido.

El siguiente paso es crear varias imágenes de un mismo objeto para que la red siempre pueda reconocer esa imagen, sea cual sea su tamaño o ubicación. Por ejemplo, en la imagen del elefante, la red debe reconocer al elefante, ya sea que esté caminando, parado o corriendo. Debe haber flexibilidad de imagen, y ahí es donde entra en juego la capa de agrupación.

Trabaja con las medidas de la imagen (alto y ancho) para reducir progresivamente el tamaño de la imagen de entrada para que los objetos en la imagen puedan ser localizados e identificados dondequiera que se encuentren.

El agrupamiento también ayuda a controlar el "sobreajuste" donde hay demasiada información sin margen para otras nuevas. Quizás, el ejemplo más común de agrupación es la agrupación máxima, donde la imagen se divide en una serie de áreas que no se superponen.

La agrupación máxima se trata de identificar el valor máximo en cada área para que se excluya toda la información adicional y la imagen se reduzca en tamaño. Esta acción también ayuda a tener en cuenta las distorsiones en la imagen.

Ahora viene la capa completamente conectada que agrega una red neuronal artificial para usar CNN. Esta red artificial combina diferentes características y ayuda a predecir las clases de imágenes con mayor precisión. En esta etapa, se calcula el gradiente de la función de error con respecto al peso de la red neuronal. Los pesos y los detectores de características se ajustan para optimizar el rendimiento y este proceso se repite repetidamente.

Así es como se ve la arquitectura de CNN:

Fuente

Aprovechamiento de conjuntos de datos para CNN Application-MNIST

Se pueden usar varios conjuntos de datos para aplicar CNN de manera efectiva. Los tres más populares y vitales en la clasificación de imágenes usando CNN son MNIST, CIFAR-10 e ImageNet. Veamos primero MNIST.

1. MNIST

MNIST es un acrónimo del conjunto de datos del Instituto Nacional Modificado de Estándares y Tecnología y comprende 60 000 imágenes cuadradas pequeñas de 28 × 28 en escala de grises de dígitos únicos escritos a mano entre 0 y 9. MNIST es un conjunto de datos popular y bien entendido que es, en su mayor parte parte, 'resuelto'. Se puede usar en visión por computadora y aprendizaje profundo para practicar, desarrollar y evaluar la clasificación de imágenes usando CNN . Entre otras cosas, esto incluye pasos para evaluar el rendimiento del modelo, explorar posibles mejoras y usarlo para predecir nuevos datos.

Su USP es que ya tiene un conjunto de datos de prueba y entrenamiento bien definido que podemos usar. Este conjunto de entrenamiento se puede dividir además en un conjunto de datos de entrenamiento y validación si se necesita evaluar el rendimiento de un modelo de ejecución de entrenamiento. Su rendimiento en el conjunto de entrenamiento y validación en cada ejecución se puede registrar como curvas de aprendizaje para obtener una mayor comprensión de qué tan bien el modelo está aprendiendo el problema.

Keras, una de las principales API de redes neuronales, respalda esto al estipular el argumento "validation_data " para el modelo. Función Fit() al entrenar el modelo, que finalmente devuelve un objeto que menciona el rendimiento del modelo para la pérdida y las métricas en cada ejecución de entrenamiento. Afortunadamente, MNIST está equipado con Keras de forma predeterminada, y los archivos de prueba y entrenamiento se pueden cargar con solo unas pocas líneas de código.

Curiosamente, un artículo de Yann LeCun, profesor del Instituto Courant de Ciencias Matemáticas de la Universidad de Nueva York y Corinna Cortes, científica investigadora de Google Labs en Nueva York, señala que la base de datos especial 3 (SD-3) del MNIST se asignó originalmente como una conjunto de entrenamiento. La base de datos especial 1 (SD-1) se designó como conjunto de prueba.

Sin embargo, creen que el SD-3 es mucho más fácil de identificar y reconocer que el SD-1 porque el SD-3 se obtuvo de los empleados que trabajan en la Oficina del Censo, mientras que el SD-1 se obtuvo entre los estudiantes de secundaria. Dado que las conclusiones precisas de los experimentos de aprendizaje exigen que el resultado debe ser independiente del conjunto de entrenamiento y la prueba, se consideró necesario desarrollar una nueva base de datos al perder los conjuntos de datos.

Al utilizar el conjunto de datos, se recomienda dividirlo en minilotes, almacenarlo en variables compartidas y acceder a él en función del índice de minilotes. Puede que se pregunte por la necesidad de variables compartidas, pero esto está relacionado con el uso de la GPU. Lo que sucede es que al copiar datos en la memoria de la GPU, si copia cada minilote por separado cuando sea necesario, el código de la GPU se ralentizará y no será mucho más rápido que el código de la CPU. Si tiene sus datos en las variables compartidas de Theano, existe una buena posibilidad de copiar todos los datos en la GPU de una sola vez cuando se crean las variables compartidas.

Posteriormente la GPU puede utilizar el minibatch accediendo a estas variables compartidas sin necesidad de copiar información de la memoria de la CPU. Además, debido a que los puntos de datos suelen ser números reales y enteros de etiquetas, sería bueno usar diferentes variables para estos, así como para el conjunto de validación, un conjunto de entrenamiento y un conjunto de prueba, para que el código sea más fácil de leer.

El siguiente código le muestra cómo almacenar datos y acceder a un minilote:

Fuente

2. Conjunto de datos CIFAR-10

CIFAR significa Instituto Canadiense de Investigación Avanzada, y el conjunto de datos CIFAR-10 fue desarrollado por investigadores del instituto CIFAR, junto con el conjunto de datos CIFAR-100. El conjunto de datos CIFAR-10 consta de 60 000 imágenes en color de 32 × 32 píxeles de objetos que pertenecen a diez clases, como gatos, barcos, pájaros, ranas, etc. Estas imágenes son mucho más pequeñas que una fotografía promedio y están destinadas a fines de visión por computadora.

CIFAR es un conjunto de datos sencillo y bien entendido que tiene una precisión del 80 % en la clasificación de imágenes utilizando el proceso CNN y del 90 % en el conjunto de datos de prueba. Además, hasta 1000 imágenes repartidas en un lote de prueba y cinco lotes de entrenamiento.

El conjunto de datos CIFAR-10 consta de 1000 imágenes seleccionadas al azar de cada clase, pero algunos lotes pueden contener más imágenes de una clase que de otra. Sin embargo, los lotes de entrenamiento contienen exactamente 5000 imágenes de cada clase. Se prefiere el conjunto de datos CIFAR-10 por su facilidad de uso como punto de partida para resolver problemas de uso de CNN de clasificación de imágenes .

El diseño de su arnés de prueba es modular y se puede desarrollar con cinco elementos que incluyen la carga del conjunto de datos, la definición del modelo, la preparación del conjunto de datos y la evaluación y presentación de resultados. El siguiente ejemplo muestra el conjunto de datos CIFAR-10 utilizando la API de Keras con las primeras nueve imágenes en el conjunto de datos de entrenamiento:

Fuente

Ejecutar el ejemplo carga el conjunto de datos CIFAR-10 e imprime su forma.

3. Red de imágenes

ImageNet tiene como objetivo categorizar y etiquetar imágenes en casi 22,000 categorías basadas en palabras y frases predefinidas. Para ello, sigue la jerarquía de WordNet, donde cada palabra o frase es un sinónimo o synset (en resumen). En ImageNet, todas las imágenes se organizan de acuerdo con estos synsets, para tener más de mil imágenes por synset.

Sin embargo, cuando se hace referencia a ImageNet en visión por computadora y aprendizaje profundo, lo que en realidad se refiere es el Desafío de reconocimiento a gran escala de ImageNet o ILSVRC. El objetivo aquí es categorizar una imagen en 1000 categorías diferentes mediante el uso de más de 100 000 imágenes de prueba, ya que el conjunto de datos de entrenamiento contiene alrededor de 1,2 millones de imágenes.

Quizás el mayor desafío aquí es que las imágenes en ImageNet miden 224 × 224, por lo que procesar una cantidad tan grande de datos requiere una gran capacidad de CPU, GPU y RAM. Esto podría resultar imposible para una computadora portátil promedio, entonces, ¿cómo se supera este problema?

Una forma de hacerlo es utilizar Imagenette, un conjunto de datos extraído de ImageNet que no requiere demasiados recursos. Este conjunto de datos tiene dos carpetas llamadas 'train' (entrenamiento) y 'Val' (validación) con carpetas individuales para cada clase. Todas estas clases tienen el mismo ID que el conjunto de datos original, y cada una de las clases tiene alrededor de 1000 imágenes, por lo que la configuración completa está bastante equilibrada.

Otra opción es utilizar el aprendizaje por transferencia, un método que utiliza pesos previamente entrenados en grandes conjuntos de datos. Esta es una forma muy efectiva de clasificación de imágenes usando CNN porque podemos usarla para producir modelos que funcionen bien para nosotros. El único aspecto que debería poder hacer una clasificación de imágenes usando el modelo CNN es clasificar imágenes que pertenecen a la misma clase y distinguir entre aquellas que son diferentes. Aquí es donde podemos hacer uso de los pesos previamente entrenados. La ventaja aquí es que podemos usar diferentes métodos según el tipo de conjunto de datos con el que estemos trabajando.

Lea también: Los 7 tipos de redes neuronales artificiales que los ingenieros de ML deben saber

Resumiendo

En resumen, la clasificación de imágenes con CNN ha hecho que el proceso sea más fácil, más preciso y menos pesado. Si desea profundizar en el aprendizaje automático, upGrad tiene una variedad de cursos que lo ayudarán a dominarlo como un profesional.

upGrad ofrece varios cursos en línea con una amplia gama de subcategorías; visita el sitio oficial para más información.

Si está interesado en obtener más información sobre el aprendizaje automático, consulte el Diploma PG en aprendizaje automático e IA de IIIT-B y upGrad, que está diseñado para profesionales que trabajan y ofrece más de 450 horas de capacitación rigurosa, más de 30 estudios de casos y asignaciones, IIIT- B Estado de exalumno, más de 5 proyectos prácticos finales prácticos y asistencia laboral con las mejores empresas.

¿Qué son las redes neuronales convolucionales?

Las redes neuronales convolucionales (CNN, por sus siglas en inglés), o convnets, son una categoría de redes neuronales artificiales profundas de avance, que se aplican más comúnmente al análisis de imágenes visuales. El diseño de las CNN se inspira libremente en la organización de la corteza visual de los mamíferos, aunque también se han aplicado al audio, el habla y otros dominios. Las CNN utilizan una variación de perceptrones multicapa diseñados para requerir un preprocesamiento mínimo. Esto los hace menos propensos a errores y más portátiles para un conjunto diverso de problemas, pero sacrifica la capacidad de realizar transformaciones no lineales en sus entradas.

¿Por qué las redes neuronales convolucionales son buenas para la clasificación de imágenes?

La gran limitación de CNN es que no puede captar el contexto de una imagen. Tampoco es capaz de hacer caras y hacer color. Más limitaciones de CNN: Las técnicas de aprendizaje utilizadas en las redes neuronales no son suficientes para reproducir funciones cognitivas superiores como el reconocimiento de objetos, el aprendizaje, la conciencia espacial y la capacidad de transferir experiencias. La arquitectura de las redes neuronales no es lo suficientemente flexible para superar estas limitaciones.

¿Por qué CNN es mejor para la clasificación de imágenes?