Los modelos de clasificación de imágenes que hemos tratado hasta ahora toman una imagen y producen un resultado categórico, como la clase 'número' en un problema de MNIST. Sin embargo, en muchos casos no solo queremos saber que una imagen contiene objetos, sino que queremos determinar su ubicación precisa. Este es precisamente el objetivo de la detección de objetos.
Imagen de sitio web de YOLO v2
Supongamos que queremos encontrar un gato en una imagen. Un enfoque muy ingenuo para la detección de objetos sería el siguiente:
- Dividir la imagen en varias secciones.
- Ejecutar clasificación de imágenes en cada sección.
- Las secciones que resulten en una activación suficientemente alta pueden considerarse que contienen el objeto en cuestión.
Imagen del Cuaderno de Ejercicios
Sin embargo, este enfoque está lejos de ser ideal, ya que solo permite al algoritmo localizar el cuadro delimitador del objeto de manera muy imprecisa. Para una ubicación más precisa, necesitamos ejecutar algún tipo de regresión para predecir las coordenadas de los cuadros delimitadores, y para ello necesitamos conjuntos de datos específicos.
Este artículo ofrece una excelente introducción a la detección de formas.
Es posible que encuentres los siguientes conjuntos de datos para esta tarea:
- PASCAL VOC - 20 clases
- COCO - Objetos Comunes en Contexto. 80 clases, cuadros delimitadores y máscaras de segmentación.
Mientras que para la clasificación de imágenes es fácil medir qué tan bien funciona el algoritmo, para la detección de objetos necesitamos medir tanto la corrección de la clase como la precisión de la ubicación inferida del cuadro delimitador. Para esto último, usamos la llamada Intersección sobre Unión (IoU), que mide qué tan bien se superponen dos cuadros (o dos áreas arbitrarias).
Figura 2 de este excelente artículo sobre IoU
La idea es simple: dividimos el área de intersección entre dos figuras por el área de su unión. Para dos áreas idénticas, IoU sería 1, mientras que para áreas completamente separadas será 0. En otros casos, variará de 0 a 1. Normalmente solo consideramos aquellos cuadros delimitadores para los cuales IoU está por encima de un cierto valor.
Supongamos que queremos medir qué tan bien se reconoce una clase de objetos
- Considerar la curva de Precisión-Recall que muestra la precisión dependiendo de un valor de umbral de detección (de 0 a 1).
- Dependiendo del umbral, obtendremos más o menos objetos detectados en la imagen y diferentes valores de precisión y recall.
- La curva se verá así:
Imagen de NeuroWorkshop
La Precisión Promedio para una clase dada
Solo consideraremos aquellas detecciones para las cuales IoU está por encima de un cierto valor. Por ejemplo, en el conjunto de datos PASCAL VOC típicamente
Imagen de NeuroWorkshop
La métrica principal para la detección de objetos se llama Precisión Promedio Media, o mAP. Es el valor de la Precisión Promedio, promediado entre todas las clases de objetos, y a veces también sobre
Existen dos grandes clases de algoritmos de detección de objetos:
- Redes de Propuesta de Regiones (R-CNN, Fast R-CNN, Faster R-CNN). La idea principal es generar Regiones de Interés (ROI) y ejecutar CNN sobre ellas, buscando la activación máxima. Es un poco similar al enfoque ingenuo, con la excepción de que las ROI se generan de manera más inteligente. Una de las principales desventajas de estos métodos es que son lentos, porque necesitamos muchas pasadas del clasificador CNN sobre la imagen.
- Métodos de una sola pasada (YOLO, SSD, RetinaNet). En estas arquitecturas diseñamos la red para predecir tanto las clases como las ROI en una sola pasada.
R-CNN utiliza Selective Search para generar una estructura jerárquica de regiones ROI, que luego se pasan por extractores de características CNN y clasificadores SVM para determinar la clase del objeto, y regresión lineal para determinar las coordenadas del cuadro delimitador. Artículo Oficial
Imagen de van de Sande et al. ICCV’11
Imágenes de este artículo
Este enfoque es similar a R-CNN, pero las regiones se definen después de que se han aplicado las capas de convolución.
Imagen del Artículo Oficial, arXiv, 2015
La idea principal de este enfoque es usar una red neuronal para predecir las ROI, llamada Red de Propuesta de Regiones. Artículo, 2016
Imagen del Artículo Oficial
Este algoritmo es incluso más rápido que Faster R-CNN. La idea principal es la siguiente:
- Extraemos características usando ResNet-101.
- Las características se procesan mediante Position-Sensitive Score Map. Cada objeto de
$C$ clases se divide en regiones de$k\times k$ , y entrenamos para predecir partes de objetos. - Para cada parte de las regiones de
$k\times k$ , todas las redes votan por las clases de objetos, y se selecciona la clase de objeto con el voto máximo.
Imagen del Artículo Oficial
YOLO es un algoritmo de una sola pasada en tiempo real. La idea principal es la siguiente:
- La imagen se divide en regiones de
$S\times S$ . - Para cada región, CNN predice
$n$ posibles objetos, las coordenadas del cuadro delimitador y la confianza=probabilidad * IoU.
Imagen del Artículo Oficial
- RetinaNet: Artículo Oficial
- SSD (Single Shot Detector): Artículo Oficial
Continúa tu aprendizaje en el siguiente cuaderno:
En esta lección hiciste un recorrido rápido por las diversas formas en que se puede lograr la detección de objetos.
Lee estos artículos y cuadernos sobre YOLO y pruébalos por ti mismo:
- Buen artículo que describe YOLO.
- Sitio oficial
- YOLO: Implementación en Keras, cuaderno paso a paso
- YOLO v2: Implementación en Keras, cuaderno paso a paso
- Detección de Objetos por Nikhil Sardana.
- Una buena comparación de algoritmos de detección de objetos.
- Revisión de algoritmos de aprendizaje profundo para la detección de objetos.
- Introducción paso a paso a los algoritmos básicos de detección de objetos.
- Implementación de Faster R-CNN en Python para la detección de objetos.











