¿Cómo identifican las máquinas los objetos de la imagen?

Hay dos tipos:

  • Clasificación
  • Detección

La clasificación se basa en la identificación del objeto más dominante en una imagen (escena).

La detección es clasificación más localización, es decir, reconocer y encontrar la ubicación de todos los objetos conocidos en la imagen.


La forma en que se resuelven los problemas de visión actualmente es principalmente mediante el uso de redes neuronales convolucionales (ConvNet). Por lo tanto, para comprender cómo funciona Google Photos, por ejemplo, debe comprender que hay una ConvNet a gran escala ejecutándose en los servidores de Google Cloud que se encuentra en el corazón de Google Photos.

Pero, ¿qué es un ConvNet?

Es un tipo especial de red neuronal artificial (ANN) basada en la operación de convolución de las matemáticas y el procesamiento de imágenes. Un ConvNet tiene principalmente tres capas alternas, a saber, convolución, activación por elementos y agrupación.

  • Una convolución en ConvNet se define como el deslizamiento de un núcleo (ventana de pesos 2D) sobre el mapa de características de entrada para producir un mapa de características de salida que luego se alimenta a otra capa conv después de una operación de agrupación y activación por elementos. Esto es en realidad una correlación cruzada, la ventana muestra un área pequeña en el mapa de características, hace un producto de puntos para calcular la salida en ese punto y luego pasa a la siguiente ubicación. Para una convolución, el mapa de características de entrada o el núcleo se voltea. La correlación cruzada se usa en la práctica porque es conveniente implementarla. Hay tipos interesantes de operaciones de convolución en ConvNets como:
    • Convolución dilatada: el tamaño del núcleo aumenta deliberadamente (dilatado) al llenar algunas entradas del núcleo con ceros. Por ejemplo, un núcleo de 3 × 3 se puede dilatar en un núcleo de 5 × 5 mientras se mantiene el mismo recuento de parámetros en ambos casos. Esto se debe a que el núcleo dilatado, en este caso, tiene 16 entradas cero que actúan solo para aumentar el tamaño del núcleo y nada más. La dilatación permite aumentar el tamaño de los campos receptivos sin pérdida de resolución espacial.
    • Convolución zancada: en este tipo, la operación de convolución, en lugar de escanear cada ubicación, omite algunas ubicaciones como dar grandes pasos mientras camina. Esto da como resultado que el mapa de características de salida sea de menor resolución en comparación con la resolución del mapa de características de entrada. La convolución estriada puede reemplazar la agrupación en algunas arquitecturas.
  • Al igual que un ANN típico, un ConvNet tiene una función de activación no lineal por elementos que se aplica al resultado lineal de una operación de convolución.
    • Esto garantiza que varias capas no colapsen en una sola capa equivalente.
    • También actúa como un proceso de toma de decisiones, el sigmoide, por ejemplo, calcula una probabilidad que puede ser útil al tomar decisiones en la capa de salida. La extensión de la función sigmoidea (logística) es el softmax que genera una distribución de probabilidad. Por ejemplo, en Google Photos puede haber miles de categorías diferentes en las que se pueden clasificar las imágenes. El softmax generará la probabilidad de que el contenido de la imagen se encuentre en una o más de las categorías. Si la probabilidad es lo suficientemente alta para una categoría particular, entonces eso se convierte en la etiqueta de la imagen.
  • Para las capas ocultas, puede aplicar la agrupación, que es solo una forma elegante de submuestreo. La agrupación reduce la resolución del mapa de características conv antes de enviarlo a la siguiente capa. Esto se hace para reducir deliberadamente la complejidad, así como para aumentar los tamaños de campo receptivo efectivo de los núcleos en la jerarquía de las capas de procesamiento. Hay principalmente dos tipos de agrupación.
    • Sumar-agrupación: Esto implica sumar los valores de activación dentro de un bloque 2D que define la ventana de agrupación.
    • Agrupación máxima: esto implica dejar pasar el valor de activación máximo dentro de la ventana de agrupación mientras se bloquean los demás. Durante la retropropagación, la unidad de activación máxima también tiene la culpa del error. Por lo tanto, en la implementación real, se deben rastrear las unidades de activación máximas.

De esa manera, ConvNet asignará progresivamente la imagen de un espacio de píxeles a un espacio de categoría de una capa por capa. Cuantas más capas haya, más profundo es el sistema, por lo tanto, las ConvNets son parte de una revolución interesante en inteligencia artificial (IA) llamada aprendizaje profundo (DL).

Por ejemplo, un ConvNet se puede usar en situaciones en las que tenemos imágenes de entrenamiento que pueden caer en una de las mil categorías (desafío de ImageNet de clase 1000, por ejemplo). Necesitamos en la salida una función de activación softmax de 1000 vías. Y entre la imagen de entrada y la salida tenemos estas muchas capas alternas de convolución + activación + agrupación. Para entrenar un sistema de este tipo, solo definimos una función objetivo diferenciable que nos dice qué tan bien funciona ConvNet en los datos de entrenamiento y luego dejamos que los pesos se adapten a través de un algoritmo de optimización basado en el descenso de gradiente, como el descenso de gradiente estocástico (SGD).

De esta manera, nos preocupamos más por los dos extremos del sistema, los extremos de entrada y salida, por lo tanto, podemos lograr un aprendizaje de extremo a extremo con ConvNets sin hacer cosas explícitas de ingeniería de visión por computadora (CV) en el sistema.

ConvNets también puede extenderse a problemas de detección, aunque este enfoque requiere cierta experiencia de dominio en CV para comprender los principios de funcionamiento de un sistema de detección de objetos. Esto se debe a que con la detección, solo tener tres operaciones, convolución + activación + agrupación, no es suficiente. Hay muchos enfoques para lograr la detección de objetos, pero la detección de objetos en sí es extremadamente difícil de resolver, incluso para los enfoques basados ​​en ConvNet. El actual estado de la técnica en los marcos de detección de objetos involucra algunas cabezas de regresión de cuadro delimitador que se deslizan sobre un mapa de características de conv de alto nivel para detectar y localizar objetos.


Dicho esto, la visión por computadora es un campo muy interesante con muchas áreas de aplicaciones. Personalmente, estoy interesado en cómo funciona la visión, especialmente en el cerebro humano, y cómo implementar algunas de esas cosas en las máquinas. Con los avances como ConvNets, el campo de la visión por computadora se ha acercado un paso más a la realización de ese sueño.

Pero el CV es difícil, realmente difícil de resolver y la mayoría de los sistemas en realidad no son tan robustos como se comercializan. Los sistemas actuales de aprendizaje automático (ML) también requieren enormes cantidades de ejemplos de capacitación redundantes para que puedan aprender tareas triviales. A pesar de entrenarlos en cantidades tan grandes de ejemplos, todavía luchan con la solidez, lo que nos dice que tiene que haber mejores formas de resolver problemas relacionados con la visión, por ejemplo, podemos usar un enfoque modular para resolver el reconocimiento y detección de objetos. Un sistema de visión compuesto por diferentes módulos, cada uno especializado para tratar un subproblema, puede funcionar mejor. Esto es solo del teorema de no almuerzo gratis.

Aunque lo que describí anteriormente es probablemente los mejores enfoques actuales que se utilizan en:

  • Sistemas de detección de peatones en vehículos autónomos.
  • Fotos de Google
  • Búsqueda de imágenes de Google.
  • No Hotdog [1].
  • Robótica

Espero que esto ayude.

Notas al pie

[1] El ingeniero detrás de la aplicación Not Hotdog de ‘Silicon Valley’ pensó mucho en AI

No hay una sola manera de hacer esto, principalmente depende del tipo de objeto que está tratando de identificar.

Algunos algoritmos bien conocidos primero intentarían identificar algunos componentes comunes (partes de) del objeto de destino. Por ejemplo, para identificar una cara, primero intentaría localizar una nariz, un par de ojos y una boca, luego verificaría sus relaciones espaciales, por ejemplo, ambos ojos están uno al lado del otro y por encima de la nariz. Cuantos más componentes encuentre y más se asemeje su disposición espacial a la de su objeto de destino (debe modelar su objeto de destino antes de comenzar a localizar sus componentes), es más probable que encuentre el objeto de destino cerca de esos componentes.

Ahora esto parece una respuesta recursiva, ¿cómo encuentras los ojos ?, ¿buscas cejas, iris y pestañas ?, bueno, en algún momento, los componentes no varían tanto, al menos no tanto como el objeto objetivo, en ese punto puede usar algunas imágenes naturales del componente, promediarlas y usar operaciones en píxeles para localizar ese componente, avanzaría en estas primeras detecciones hacia su objetivo real.