Reconocimiento de imagenes: Ingenio humano tras la Inteligencia Artificial
El 14 de mayo de 2020, Sony Corporation anunció el lanzamiento de 2 modelos de chip sensor de imágenes con funcionalidades de Inteligencia Artificial (IA). Estos chips, que se usarán en cámaras, celulares y otros dispositivos, generan, además de la ubicación y fecha, información de reconocimiento de personas y objetos en la imagen. De esta forma, sin enviar datos al exterior, el chip dirá si hay personas y objetos en la foto.
Es fácil entender que, si tiene GPS y reloj, una cámara puede poner la ubicación, fecha y hora en una foto. ¿Pero poner si la imagen es de un perro o de un gato? ¿Cómo puede programarse un chip para que reconozca una imagen? En este blog trataremos de entenderlo.
Imagen incluida en el anuncio de Sony
Para que una computadora interprete una imagen primero hay que convertir su información al lenguaje de los números, concretamente, al lenguaje de los bits y bytes. Un bit es un dígito binario, que puede tener valor de 0 o 1. Un byte es un grupo de 8 bits y los valores que puede tener son las combinaciones de los valores de sus 8 bits, desde 0, si todos están en 0, a 255 si todos son 1.
Una imagen en blanco y negro se traduce en números, se digitaliza, a partir de la intensidad de la luz, que se manifiesta en tonos de gris. La imagen se divide en pequeños cuadros, llamados pixeles, a los cuales se da un valor de acuerdo con el tono de gris dominante en cada uno, desde 0 para el negro, hasta 255 para el blanco. Este valor se almacena en un byte. Así, una imagen con una resolución de 1024x720 pixeles, ocupa 737,280 bytes, equivalentes a 0.7 megabytes.
La ilustración de abajo muestra una foto en blanco y negro, la cual se dividió en 28x32 pixeles (896 en total). Del lado derecho se muestra la matriz de valores correspondientes al tono promedio en cada píxel. Estos 896 valores son la manera en que la computadora representa la imagen.
Para digitalizar una imagen a color se parte de que hay 3 colores primarios en la luz (rojo, verde y azul) y de que todos los demás colores son una combinación de ellos. Por eso una imagen a color se digitaliza con 3 matrices, una por cada color primario. Una imagen digitalizada a color ocupa el triple de memoria que una en blanco y negro.
La ilustración de abajo muestra las matrices de una imagen a color dividida en 28x25 pixeles (700 en total). Las 3 matrices contienen un total de 2,100 valores, que son la representación de la imagen para una computadora.
Ya que tenemos una imagen digitalizada, ¿cómo hacer para que una computadora pueda detectar si otra imagen es también de la misma persona? más fácil, ¿cómo hacer para que sepa si hay una persona en una imagen?
Comparar píxel por píxel 2 imágenes digitalizadas sólo sirve para ver qué tan parecida es una con la otra. Si embargo, 2 fotos de una misma persona, pero en diferente posición, con otra ropa, y en escenarios e iluminación distintos, generarán imágenes digitalizadas que no son nada parecidas.
La solución es un procedimiento planteado en 1990 por Yann LeCun para el reconocimiento de dígitos escritos. El procedimiento utiliza lo que se conoce como redes neuronales convolucionales (RNC). Hace menos de 10 años, RNC implementadas por LeCun y otros alcanzaron una exactitud que superó al ser humano. Esto desató la revolución tecnológica que hoy permite a Sony incorporar aplicaciones de reconocimiento de personas y objetos en chips.
Para entender este ingenioso y sorprendentemente efectivo procedimiento usaremos una imagen en blanco y negro de la letra X, con una resolución de 10x10 pixeles. Haremos simples los cálculos con una imagen digitalizada en la que un píxel tiene valor 0 si más de la mitad de su área es de color blanco y 1 si más de la mitad es de color negro.
El procedimiento tiene dos componentes: la convolución y el agrupamiento máximo.
La convolución echa mano del concepto de filtro, esencial en el procesamiento digital de imágenes, para captar los características principales del objeto o entidad representado en una imagen. Los filtros son algoritmos que hacen transformaciones matemáticas en los pixeles de una imagen a fin de lograr un efecto o destacar ciertos patrones. En nuestro caso, usaremos como filtros 3 matrices de 3x3 con los patrones que más caracterizan una X, el cruce de dos líneas al centro y las diagonales.
La convolución consiste en aplicar un filtro a todos los grupos de pixeles del tamaño del filtro que pueden formarse en una imagen. ¿Qué es aplicar el filtro? Es multiplicar cada píxel del grupo por el píxel correspondiente del filtro y luego sumar los resultados. La ilustración muestra cómo se aplica el filtro del cruce de líneas a la esquina superior izquierda de la imagen digitalizada de la X. La suma de los resultados es 1, valor que se coloca en lo que será una nueva imagen digital de la X.
Al aplicar los otros 2 filtros tenemos el primer elemento de las 3 matrices, una por cada filtro, que representarán a la X.
Este proceso se repite para toda la imagen, desplazando un píxel a la derecha el filtro hasta agotar el primer renglón, como muestra la animación, y recorriendo así todos los renglones.
Al terminar obtenemos 3 matrices que tienen la característica de acentuar la semejanza o diferencia de la imagen con los patrones de los filtros. El filtro naranja acentúa mucho el cruce de las líneas, en tanto que los otros dos acentúan la presencia de las diagonales.
Como segunda parte, el agrupamiento máximo reduce el tamaño de las matrices obtenidas en la convolución. El proceso es similar, pero en lugar de aplicar un filtro, se elige el valor máximo de los pixeles que forman el grupo del tamaño elegido (generalmente 2x2 o 3x3). El resultado es una matriz que es 4 o 9 veces más chica que la original.
La siguiente animación ilustra la aplicación de un agrupamiento máximo de 2x2.
Al final del procedimiento se obtienen 3 matrices de 4x4 que preservan las características principales de la X: la intersección y las diagonales. De esta forma, se tiene una representación que destaca los principales atributos y que consta de sólo 48 valores, menos de la mitad que la imagen digitalizada original.
Hasta aquí la parte ingeniosa del procedimiento. Ahora viene la parte sorprendente, que es la capacidad para identificar si una imagen tiene los atributos de la imagen original y, con ello, la probabilidad de que contenga cierta entidad u objeto.
Para ilustrar esto apliquemos la convolución y el agrupamiento máximo a otra letra X, en un tipo de letra distinto y ligeramente girada a la izquierda. Las matrices finales resaltan la presencia de la intersección de las líneas, así como de las diagonales (un poco menos de la segunda, que es más gruesa en la X original). La suma del valor absoluto de las diferencias con respecto a los elementos de las matrices de la X original es 13.
Ahora veamos qué pasa con una imagen de la letra O. Luego de aplicar la convolución y el agrupamiento, las matrices resultantes muestran vacío el centro, no hay cruce de líneas, y se acentúa que no hay diagonales. La suma del valor absoluto de las diferencias con respecto a los elementos de las matrices de la X original es 20, claramente superior a la diferencia de la X girada.
Con este procedimiento, una red neuronal artificial normal puede detectar la presencia de una X en una imagen a partir de 48 valores. Simplemente le alimentamos miles de ejemplos de imágenes digitalizadas a 48 valores, indicando cuáles contienen una X y cuáles no. La red neuronal detectará los patrones y relaciones para predecir si una imagen nueva contiene una X. (Lee nuestro artículo sobre el tema y entérate cómo funcionan)
El tema es, ¿qué pasa si ahora quiero que la red neuronal aprenda a detectar otra letra, o un animal, o un objeto, o una persona? Hay que diseñar los filtros que destaquen los atributos más destacados de lo que quiero detectar, y esto no es una labor sencilla. De hecho, es una tarea complicada que involucra complejos modelos matemáticos ¿Qué hacer entonces?
La arquitectura de las RNC elimina el problema, ya que incorpora dentro de su alcance el descubrimiento de los filtros adecuados. De esta forma, para entrenar una RNC se alimentan ejemplos con sus categorías, como en una red neuronal tradicional, y la red encuentra todos los parámetros necesarios para clasificar la imagen en una categoría, incluyendo los filtros.
La investigación de las RNC descubrió que, al usar varias capas sucesivas de convolución y agrupamiento, la red puede detectar patrones más complejos en la imagen, que permiten mayor exactitud en la interpretación. Por ejemplo, una capa de convolución detecta tal vez líneas y curvas en un rostro, una segunda detectará formas geométricas y una tercera tal vez partes como narices, bocas u ojos. La RNC que en 2015 superó el desempeño humano en la clasificación de imágenes tenía 152 capas en total, incluyendo las de convolución, agrupamiento y de la red tradicional.
Arquitectura de una red neuronal convolucional publicada en este artículo
Al entrenar una RNC de cientos de capas con miles de millones de ejemplos, proceso que puede llevar semanas, se obtienen los parámetros que, con simples operaciones, nos darán la probabilidad de que en una imagen esté una persona u objeto. Estas operaciones pueden ser después fácilmente ejecutadas por un chip, pero no deja de ser sorprendente.
Sin embargo, lo que para mí resulta verdaderamente importante es que un procedimiento como el que describimos, sin el menor asomo de inteligencia, puede realizar una actividad que hasta hoy suponíamos requería de memoria, cálculos y aprendizaje ¿Será que de la misma manera podrán reproducirse muchos de nuestros procesos mentales? ¿Sera que nuestra inteligencia no es más que el resultado de procesos automáticos que aún no hemos explicado?
¿Qué opinas? Comparte tus comentarios abajo. ¿Te gustó este artículo? Lee otros artículos de nuestro blog IF Inteligencia Futura aquí.