Categorías
Entradas Entries

Trabajando con imágenes y CNN

A partir del dataset de imágenes en crudo, sin ninguna información adicional salvo los píxeles que componen sus representaciones digitales, se procedió a analizar cada imagen con una Red Neuronal Convolucional (CNN, de sus siglas en inglés). Para las computadoras, las imágenes no son más que tablas gigantes de números. Así, una imagen en escala de grises de 100×100 píxels (100 de alto por 100 de ancho) puede verse como una tabla con 100 filas y 100 columnas en las que cada celda contiene un valor que codifica la cantidad de blanco que contiene. El negro suele corresponder con el valor más bajo, el 0; mientras que el valor más alto se reserva para el blanco. Este valor más alto es arbitrario y depende de la profundidad de color que se desee. Suele ser habitual codificar hasta 256 niveles, necesitando 1 byte para almacenar cada píxel (1 byte = 2^8 = 256). Si en lugar de una imagen en escala de grises tenemos imágenes en color, cada color se descompone en sus componentes según un modelo cromático. El modelo RGB, por ejemplo, descompone cada color de forma aditiva en la cantidad de rojo (Red), verde (Green), y azul (Blue), necesitando entonces 3 valores cada uno entre 0 y 256 para codificar un color. Esto se traduce en almacenar un punto de 3 dimensiones en cada una de esas celdas, o bien tener 3 tablas para cada componente del color.

Estas tablas o matrices son las entradas de las redes neuronales convolucionales. Las redes neuronales (artificiales) son sistemas de aprendizaje automático vagamente inspirados en las redes neuronales biológicas presentes en los cerebros de los animales. Estos sistemas «aprenden» a realizar operaciones a partir de ejemplos, generalmente sin estar programados con reglas específicas para cada tarea. Internamente, una red de este tipo se basa en un conjunto de unidades o nodos conectados, llamados neuronas artificiales, que modelan las neuronas de un cerebro biológico. Cada conexión, como las sinapsis en un cerebro biológico, puede transmitir una señal a otras neuronas. Una neurona artificial que recibe una señal la procesa y puede señalar a las neuronas conectadas a ella. Las conexiones entre neuronas están ponderadas y las neuronas se suelen disponer en capas que se conectan secuencialmente (aunque esta configuración admite variaciones). La última capa suele ser la de salida y se ajusta, en el caso del aprendizaje supervisado, al número de casos que se quiera predecir. Gato vs perro, persona vs animal, o múltiples clases si fuera preciso. Inicialmente, los pesos de las neuronas se distribuyen aleatoriamente. Cuando una entrada se procesa, pasa por todas las neuronas de acuerdo a como se activa cada una, y al llegar a la salida se compara el resultado con el resultado esperado, diferencia que se conoce como pérdida, ajustándose los pesos de las conexiones para que en la próxima iteración la salida se parezca más a lo esperado, es decir, se minimice la pérdida. Con el suficiente número de iteraciones y de ejemplos de entrenamiento, la salida esperada y la producida serán prácticamente las mismas y la red habrá aprendido una tarea de clasificación, lo que equivale a conocer el conjunto de pesos específicos de cada conexión, ya que la disposición de las neuronas en capas (la arquitectura de la red) y las funciones de activación de las mismas no cambia.

La particularidad de las redes neuronales convolucionales es que realizan operaciones de convolución sobre las imágenes. Estas operaciones comprimen y reducen las imágenes hasta permitir que se pueda operar con ellas a nivel de cada capa de la red o incluso de neuronas independientes. En general, el número de neuronas de las capas suele decrecer desde la entrada, llegar a un mínimo, y luego volver a crecer hasta la capa de salida. Si nuestras entradas son imágenes de 100×100 píxeles RGB y queremos clasificar gatos vs perros, la entrada debe ser de al menos 3x100x100 y la salida 2. En el proceso, para conseguir esa condensación de la información, se usan convoluciones que transforman el espacio de la imagen en espacios semánticamente equivalentes que mantienen la información necesaria para realizar la clasificación. En general, la capa anterior a la última, es decir, la capa que viene justo antes de la final, suele ser un vector que codifica la imagen en un espacio mucho más pequeño y mantiene sus propiedades semánticas a la vez que permite comparaciones usando operaciones de espacios vectoriales sobre ellas. Esto es, si miramos esa penúltima capa y las representamos en un espacio vectorial, la distancia entre dos imágenes que contienen solo perros será menor que entre una imagen que contiene un perro y otra que contiene un gato.

Esta información de la penúltima capa es la que se ha usado para transformar cada imagen del proyecto Barr X Inception CNN en un vector que la represente. Pero en lugar de usar como meta una tarea de clasificación de gatos vs perros, se ha usado la versión 3 de la arquitectura Inception entrenada para clasificar más de 1.000 categorías distintas sobre más de 1 millón de imágenes de ImageNet 2012. En nuestro caso, al no necesitar la clasificación en esas categorías prefijadas, hemos usado la información de la penúltima capa como vector de representación numérica de cada imagen que además mantiene las propiedades esperadas de similitud semántica con respecto de las operaciones del espacio vectorial en que se encuentran.

Sin embargo, el tamaño de este vector (2.048) es demasiado grande como para poder representarlo en un espacio bidimensional. Para resolver este problema, se ha aplicado un algoritmo de reducción de dimensionalidad, en concreto UMAP, para poder proyectar los resultados del análisis en un espacio de 2.048 dimensiones a uno bidimensional que se pueda representar en una pantalla. UMAP es un algoritmo para la reducción de dimensiones basado en múltiples técnicas de aprendizaje e ideas del análisis de datos topológicos. La primera fase del algoritmo consiste en la construcción de una representación topológica difusa. La segunda fase consiste en optimizar la representación de baja dimensionalidad para obtener una representación topológica difusa lo más parecida posible de acuerdo a una medida prestada de la Teoría de la Información (la entropía cruzada). Esto nos permite transformar un vector de 2.048 valores en uno de 2, permitiendo representar visualmente cada imagen como un punto en el espacio vectorial definido con UMAP, que además de ser teóricamente correcto, tiene una fuerte base matemática.

El último paso en la construcción de nuestro espacio visual es la identificación de clústeres de imágenes. La detección de clústeres se ha realizado con HDBSCAN, una versión refinada del algoritmo clásico DBSCAN para aprendizaje no supervisado usando medidas de densidad dispuestas en una jerarquía. Dado un espacio, DBSCAN agrupa puntos que están muy juntos (puntos con muchos vecinos cercanos), marcando como atípicos los puntos que se encuentran solos en regiones de baja densidad (cuyos vecinos más cercanos están demasiado lejos). De esta forma, el algoritmo es no paramétrico, es decir, no requiere de ninguna información a priori sobre el número de clústeres a encontrar, sino que será capaz de identificar un número óptimo de clústeres basándose en esta idea de la densidad.

En resumen, el procedimiento para cada imagen de un tamaño arbitrario pasa por reescalarla y obtener una representación vectorial de acuerdo a las relaciones semánticas que estable una CNN con arquitectura Inception V3 entrenada con el dataset ImageNet 2012. Este vector es reducido hasta obtener un par de coordenadas que permitan representar cada imagen en un espacio cartesiano. Finalmente, estos puntos se agrupan en clústeres de densidad y la visualización se completa.


Cita recomendada: De la Rosa, Javier. «Trabajando con imágenes y CNN», en Barr X Inception CNN (dir. Nuria Rodríguez Ortega, 2020). Disponible en: http://barrxcnn.hdplus.es/trabajando-con-imagenes-y-cnn/ [fecha de acceso].

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.