domingo, junio 20, 2021

Cómo enseñar a un modelo de Inteligencia Artificial lo que está cerca o lejos usando Deep Learning

Muy pocos lectores no se acordarán de Barrio Sésamo - sobre todo los ya vacunados -, esa serie infantil fantástica donde a los niños se les enseñan conceptos muy sencillos, como contar ovejas, diferencia entre dentro y fuera, o entre cerca y lejos. Los programadores, sobre todo los que entrenamos modelos de Inteligencia Artificial, no dejamos de ser similares a Coco (o Archichaldo), ya que enseñamos estos conceptos a robots o máquinas. 

Figura 1: Cómo enseñar a un modelo de Inteligencia Artificial
lo que está cerca o lejos usando Deep Learning

¿Contar? Muy sencillo, contador++ (o contador+=1) y ya lo tenemos, pero también podemos entrenar un algoritmo en GPT3 para resolver el mismo problema enseñándole a leer. ¿Dentro o fuera? Esto lo hacemos con un simple booleano isIn pero tenemos que resolver problemas de geometría computacional para saber si un punto está dentro o fuera del área de un polígono. Hoy vamos a hablar de otro problema como es ¿está cerca o lejos? Aquí Grover, que fue llamado Coco en España y Archivaldo en muchos países de Latinoamérica nos lo explica:


Figura 2: Archibald explicando si algo está cerca o lejos

Los humanos somos sistemas altamente complejos, con una capacidad visual y cognitiva que ya querrían todos esos sistemas de Computer Vision y Artificial General Intelligence. Además, a parte de seguramente el dedo meñique del pie, pocas cosas del cuerpo humano están porqué sí. Por ejemplo, veamos un ejemplo:

Figura 3: Perspective Projection de una cámara y esquema de cómo ve el ojo humano

No me pondré mucho en detalle sobre el tema, pero podemos observar que la imagen capturada por el foco es un plano cercano de la cámara, tal y como haría nuestro ojo con la luz reflejada del objeto. Pero entonces, ¿por qué tenemos dos ojos? Veamos qué es la retinal disparity.

Figura 4: Retinal disparity, un concepto que a cualquier ex-niño curioso le sonará

Como vemos, nuestra visión del mundo con cada uno de los ojos es distinta, y es gracias a ello que tenemos absoluta percepción de la profundidad de las escenas. Si un objeto tiene muy diferente posición entre la visión de un ojo y otro, quiere decir que este se encuentra muy cercano a nuestra posición, como sería el caso del dedo. En cambio, si prácticamente este no varía, querrá decir que es un objeto lejano.

Estos conceptos son muy intuitivos, hasta aquí bien. ¿Pero entonces, cómo podemos los humanos interpretar profundidad en imágenes? Sencillo, porque nuestra experiencia nos ha enseñado a interpretarla. Veamos un ejemplo:

Figura 5: Aunque parezca surrealista, acabo de poner
una imagen de primaria en un post de IA

Viendo esta imagen, alguno estará pensando que me estoy pasando de infantil… y seguramente tiene razón, pero todo tiene un sentido. En la imagen de arriba uno puede ver que el gato (izquierda) está lejos de la mesa, y el gato (derecha) está cerca del bolso. Pero todo esto es relativo a los píxeles de distancia entre un objeto y otro, ¿cómo lo tenemos tan claro? En primer lugar, el autor de este dibujo trató de exponer la realidad de las dimensiones de los dibujos con distintos temas:

- La mesa es del mismo tamaño del gato a nivel de píxeles, pero a nosotros nos han enseñado que una mesa es más grande que un gato.

- Además, el gato de la izquierda se encuentra cerca del límite inferior de la imagen, mientras que la mesa cerca del límite superior.

- En la derecha, el gato y el bolso están en la misma altura y tienen dimensiones parecidas.

Esto os podrá parecer un ejercicio muy sencillo de realizar, y ciertamente es así. Pero no lo es tanto para las redes neuronales en visión monocular, aunque sea una tarea importante sobre todo para coches autónomos. Un Tesla, por ejemplo, no sólo debe reconocer coches sino la distancia a la que se encuentran, y con Computer Vision se puede hacer esto (aunque también con Lidar). Pero a partir de una sola imagen puede ser muy complejo calcular el tamaño real de un objeto. Si lo observamos desde el punto focal, un objeto podría tener distintos tamaños y todos corresponderse con un tamaño real del objeto.

Figura 6: ¿Cómo decidimos aquí cual de los cubos corresponde al real?

Si conocéis conceptos básicos de Deep Learning, recordaréis que la gran mayoría de tareas más conocidas (Image Classification, Object Recognition…) se basan en datos etiquetados de ejemplos concretos que queremos que la red clasifique. ¿Pero podemos enseñar a una red neuronal distintas imágenes de “esto está cerca” y “esto está lejos” y así poder enseñarla a diferenciarlo? No creo que sea lo óptimo.



Para eso se utilizan mapas de profundidad, y suelen, y deben, estar etiquetados de forma automática. Uno de los datasets más conocidos y, a mi parecer, creativos de cómo etiquetar estos datos proviene de uno de los Challenge más famosos de los últimos años: el Mannequin Challenge Dataset.

Figura 8: Mannequin Challenge Telefónica 2016 con LUCA & ElevenPaths

Si lo recordáis, en estos vídeos un grupo de personas se quedaba quieta mientras la cámara se iba moviendo. A partir de distintas vistas de las personas, se podían estimar mapas de profundidad Multi-View Stereo, para luego ser utilizados, por ejemplo, en 3D Computer Vision.


Figura 9: Reconstrucción 3D con MultiView Stereo

MiDas, un algoritmo de Intel que utiliza distintos datasets para entrenar pero valida con uno no visto durante el entreno (Zero-Shot Cross-dataset Transfer), proporciona una forma muy sencilla de calcular los mapas de profundidad a partir del Torchhub de Pytorch. Cargando el modelo en cuestión podemos inferir cualquier imagen que tengamos en local y calcular la profundidad de la imagen. Veamos un ejemplo:

Figura 10: Foto del Equipo de Ideas Locas con Chema Alonso 
y su mapa de profundidad con MiDas y Matplotlib

Como vemos a la derecha, Chema Alonso (que hacía la fotografía) se encontraba en primer plano y está activado en color amarillo. En cambio, Rober y yo (al fondo) estamos más oscuros. Me pareció curioso que la mascarilla de Álvaro (debido a los colores o a su forma) se detectara como más cercano a la cámara, en un color parecido al de Pablo (izquierda). Supongo que los algoritmos de IA y la pandemia no se llevan bien.

¡Saludos!

Autor: Bruno Ibáñez, Investigador de Ciberseguridad e IA en Ideas Locas

No hay comentarios:

Publicar un comentario