Redes neuronales convolucionales explicadas

Buenas! como andan? Acá estamos de nuevo, semana número 42 de este año 2019 y hoy vamos a hablar de visión artificial, también llamada visión por ordenador o computer vision, en inglés.

Un tema que fué sugerido por Victor H. Angel que escribió desde Colombia, asi que Victor muchas gracias por dejar tu comentario en ivoox con la sugerencia y hoy vamos a hablar de esto.

En realidad más específicamente vamos a hacer una introducción a las redes neuronales convolucionales (CNN por sus siglas en inglés) que es una de las técnicas más usadas en la actualidad para procesar imágenes, videos y por ejemplo poder clasificar las imágenes. 

O sea, poder darle imagenes a la red y que nos diga que es lo que vé.

En este caso, estamos hablando de aprendizaje supervisado, si se acuerdan en el episodio llamado “tipos de machine learning” dijimos que en el aprendizaje supervisado los algoritmos se entrenaban con datos etiquetados.

Pero antes de continuar, me gustaría decirles que me pueden encontrar en twitter como @pochocosta y que si todavía no lo hicieron, se pueden suscribir al podcast en Apple Podcast, Google Podcast, iVoox y Spotify para enterarse cada vez que salga un nuevo episodio.

Convolutional Neural Networks

Ahora sí, sigamos con el tema. Agarrensé que hoy viene cargadito de teoría el episodio! Les recomiendo escucharlo con tranquilidad, y para los que estén más interesados en aprender quizás hasta escucharlo más de una vez.

Decíamos que íbamos a aplicar aprendizaje supervisado para entrenar una red con fotos etiquetadas para que aprenda a clasificarlas.

Un ejemplo simple, podríamos entrenar a una red para que aprenda a distinguir caballos y perros.

Esto podría parecer que no tiene mucho sentido, de hecho un niño de 2 años tambien puede hacerlo y no hace falta que tenga tanto entrenamiento.

Pero los casos de uso en los que se pueden aplicar este tipo de redes son muchísimos, creo que tantos como los que te permita tu imaginación.

En medicina por ejemplo se usan para detectar tumores o lesiones. En coches autónomos se pueden detectar vehículos, personas, semáforos, señales de tránsito. En aeropuertos para encontrar personas con pedido de captura. 

Como les decía antes, los casos de uso pueden ser tantos como la imaginación lo permita. 

Así que si quieren dejenme un comentario y cuentenme para que lo están usando o para que lo usarían! Me va a encantar leerlos!

Ahora metamonos en como es que funciona esto.

Hace algunas semanas hubo un episodio titulado “cómo funcionan las redes neuronales” donde se hace una primera introducción al funcionamiento de las redes neuronales

Las que se mencionan ahí tienen capas densas o totalmente conectadas. 

Es un funcionamiento muy interesante, aunque no son ideales para el procesamiento de imágenes.

Para trabajar con imágenes son más eficientes las redes neuronales convolucionales.

Así que si no escuchaste ese episodio, te recomiendo que pongas pausa, vayas a escuchar ese episodio y vuelvas cuando lo termines.

Bueno, ahora ya estamos todos parados en la misma página así que sigamos!

Procesamiento de imágenes con aprendizaje automático

Al igual que las redes neuronales densas, las convolucionales también trabajan con pesos y sesgos, tienen una capa de entrada y una capa de salida, y también están inspiradas en cómo funciona el cerebro humano.

Nosotros los humanos estamos todo el tiempo viendo el mundo que nos rodea, etiquetando objetos, haciendo predicciones…lo tenemos incorporado. No nos damos cuenta.

Lo que vemos entra por la retina, viaja por el nervio óptico y va hacia la corteza visual primaria.

Según el estudio que se hizo para entender cómo funciona esto en el cerebro, se encontró que según las formas que vemos se activan algunas neuronas específicas.

Estas zonas detectan las características más básicas de lo que vemos, como ser líneas, bordes, texturas.

Después en base a eso se pueden reconocer estructuras más complejas como una oreja o un ojo. Y así va aumentando la complejidad hasta reconocer el objeto completo.

Bueno, así sería más o menos como los humanos procesamos lo que vemos. Ahora pasemos a como lo hacen las máquinas.

Las máquinas lo que hacen es entrenarse con un conjunto de fotos recorriendo una por una para encontrar características y patrones y después poder asociarlos con la etiqueta que le dimos.

Así lo va a ir haciendo con todas las fotos del conjunto de entrenamiento. Para después usar todo ese conocimiento adquirido y poder clasificar fotos nuevas que nunca ha visto.

Ok. Ahora metámonos un poco más en como hace todo esto técnicamente.

Las máquinas cuando analizan una imagen, lo que hacen es descomponerla en su componente más básico, el pixel. O sea, una imagen es un conjunto de pixeles.

Estos píxeles son valores numéricos que representan un color en un modelo de colores. El más común es el RGB, seguramente ya lo conozcan. 

RGB quiere decir Red Green y Blue, que son los 3 colores primarios y se refieren a los valores de cada uno de estos colores que se necesitan para representar el color que debe reflejar ese pixel.

Para darnos una idea, imaginemonos como una planilla de cálculo llena de números, con filas y columnas, donde cada celda representa un pixel de la foto.

Esta planilla de cálculo tendrá tantas filas como pixeles de altura y tantas columnas como pixeles de ancho. Y si la imagen es a color tendremos 3 hojas, donde cada hoja representa los valores para cada uno de los colores primarios. Rojo, verde y azul. Esto sería la profundidad.

Si tenemos una imagen de 32px por 32px, la capa de la red tendrá una altura de 32, un ancho de 32 y la profundidad será de 3, por los tres canales de colores.

En cambio si la foto es en blanco y negro con una sola hoja nos alcanzaría para representarla, ya que se usaría la escala de grises para representar los píxeles.

La capa convolucional

Las redes neuronales convolucionales tienen un tipo de capa que es la que le da el nombre. Se llama capa convolucional o capa de convolución.

Esta capa se encarga de recorrer todos los valores numéricos que representan los pixeles pero en vez de hacerlo individualmente pixel por pixel, lo hace de manera agrupada.

Para tener una representación visual, imaginemos de nuevo que tenemos todos los valores en una planilla de cálculo. Y lo que hace la convolución es agarrar un grupo de celdas cercanas, por ej. cuadrados de 3 celdas por 3 celdas o de 5×5 y así ir moviéndose de arriba hacia abajo y de izquierda a derecha hasta recorrer todos los valores de la planilla de cálculo.

El tamaño de ese grupo está definido por un parámetro que se llama tamaño de filtro.

Ahora bien, a cada uno de estos grupos de pixeles se los va a multiplicar con otra matriz del mismo tamaño llamada núcleo. A esto se lo conoce como “aplicarle un filtro”.

¿Qué es esto de aplicarles un filtro? Es aplicarles una función matemática. En este caso, se trata de multiplicar cada uno de los valores tomados de este grupo de celdas de la convolución por el que se encuentra en la misma posición del núcleo y después sumarlos. 

El resultado de esta operación genera una nueva matriz que será una nueva capa oculta de nuestra red y al que se le llama mapa de características.

aplicar un filtro a una imágen

Otra cosa para tener en cuenta con respecto a la convolución es que distancia vamos a mover el filtro para ir recorriendo la foto. Ese dato se llama “paso”. Si lo hacemos de uno en uno la matriz resultante será del mismo tamaño, pero si lo hacemos de a dos o más, la matriz resultante va a ser de un tamaño menor a la imagen original.

Y bueno de esto básicamente es de lo que se trata la capa de convolución. Lo que tenemos que tener en cuenta es que no se aplica un único filtro, sino que se aplican muchos. Y estos son los que van a ir detectando patrones, formas, desde más simples a más complejas.

Esa cantidad de filtros es la que determina la “profundidad” de la capa.

La capa de pooling

Además de las capas de convolución este tipo de redes neuronales también usan otras capas que se llaman capas de pooling.

Estas capas se aplican justo después de las convolucionales y sirven para simplificar o reducir las matrices generadas por las capas convolucionales.

Lo que hacen es tomar estas matrices en pequeños grupos, supongamos por ejemplo un grupo de 2 x 2. Tendríamos 4 valores. ¿Se entiende? Y lo que se trata de hacer es reducir o simplificar esos 4 valores en uno solo.

Este pooling puede ser de tipo Max Pooling donde tomaríamos el valor más grande de esos 4. O de tipo Average pooling donde haríamos un promedio.

Ejemplo de Max. Pooling

La verdad es que estos dos tipos de capas son fantásticos para procesar imágenes, ya que las redes neuronales tradicionales (las perceptrón multicapa) necesitan manejar y aprender muchísimos pesos y sesgos, y además no son buenas para manejar las relaciones espaciales de la foto.

En cambio las redes convolucionales usan núcleos que comparten los pesos, y al aplicar los filtros se buscan relaciones en píxeles cercanos. Por eso son efectivas y además más eficientes. Sin contar que en conjunto con las capas de pooling hacen que se reduzca increíblemente la cantidad de neuronas necesarias, lo cual hace que requiera mucho menos capacidad de cómputo.

El perceptrón multicapa

Y bueno ahora nos queda hablar del tercer tipo de capa que tienen estas redes neuronales que es la capa totalmente conectada.

Clasificación de imágenes

No me voy a meter en como trabaja esta capa porque eso ya lo hablamos en el episodio que les mencioné al principio. Simplemente sepamos que esta capa es la que toma todas las características de la última capa y en base a eso hace una predicción.

Esa predicción es la que va a dar un resultado como por ejemplo 92% de probabilidad de ser caballo y 8% de ser perro.

Típica red neuronal convolucional

Al igual que como habíamos hablado en las redes neuronales tradicionales, acá también el proceso de aprendizaje está basado en la propagación hacia atrás, o sea encontrar los pesos y los sesgos que hagan que la red obtenga los mejores resultados.

Y bueno este sería más o menos un resumen de cómo funcionan las redes neuronales convolucionales. Es un tema complejo ya sé, espero que se hayan quedado con los conceptos principales.

Hay muchísimos detalles y posibilidades que no mencioné, como las funciones de activación, padding, etc, etc. Pero bueno, tampoco quería que se haga tan extenso y aburrirlos por demás.

Hoy más que nunca les pido que me manden sus comentarios para ver si se entendió la explicación o que cosa no quedó clara. Y si les gustó les pido que lo compartan y me regalen una reseña de 5 estrellas en iTunes en forma de agradecimiento 🙂

Dejar recomendación en iTunes

Comentarios

Deja una respuesta

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