|
|
||
|---|---|---|
| .. | ||
| lab | ||
| ObjectDetection.ipynb | ||
| README.md | ||
README.md
Detección de Objetos
Los modelos de clasificación de imágenes que hemos visto 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 también queremos determinar su ubicación precisa. Esto es exactamente el objetivo de la detección de objetos.
Cuestionario previo a la lección
Imagen de sitio web de YOLO v2
Un Enfoque Ingenuo para la Detección de Objetos
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 o mosaicos.
- Ejecutar un modelo de clasificación de imágenes en cada mosaico.
- Aquellos mosaicos que resulten en una activación suficientemente alta pueden considerarse como 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 la caja delimitadora 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 las cajas delimitadoras, y para ello necesitamos conjuntos de datos específicos.
Regresión para la Detección de Objetos
Esta publicación de blog ofrece una excelente introducción a la detección de formas.
Conjuntos de Datos para la Detección de Objetos
Es posible que encuentres los siguientes conjuntos de datos para esta tarea:
- PASCAL VOC - 20 clases
- COCO - Objetos Comunes en Contexto. 80 clases, cajas delimitadoras y máscaras de segmentación
Métricas de Detección de Objetos
Intersección sobre Unió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 de la caja delimitadora. Para esto último, usamos la llamada Intersección sobre Unión (IoU), que mide qué tan bien se superponen dos cajas (o dos áreas arbitrarias).
Figura 2 de esta excelente publicación 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 disjuntas será 0. En otros casos, variará entre 0 y 1. Normalmente solo consideramos aquellas cajas delimitadoras para las que IoU supera un cierto valor.
Precisión Promedio
Supongamos que queremos medir qué tan bien se reconoce una clase de objetos C dada. Para medirlo, usamos la métrica de Precisión Promedio, que se calcula de la siguiente manera:
- Consideramos la curva de Precisión-Recall, que muestra la precisión dependiendo de un valor 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 C dada es el área bajo esta curva. Más precisamente, el eje de Recall se divide típicamente en 10 partes, y la Precisión se promedia en todos esos puntos:
AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10})
AP e IoU
Solo consideraremos aquellas detecciones para las que IoU esté por encima de un cierto valor. Por ejemplo, en el conjunto de datos PASCAL VOC típicamente se asume \mbox{IoU Threshold} = 0.5, mientras que en COCO AP se mide para diferentes valores de \mbox{IoU Threshold}.
Imagen de NeuroWorkshop
Precisión Promedio Media - mAP
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 \mbox{IoU Threshold}. El proceso de cálculo de mAP se describe en detalle
en esta publicación de blog, y también aquí con ejemplos de código.
Diferentes Enfoques para la Detección de Objetos
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 una 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 una manera más inteligente. Una de las principales desventajas de estos métodos es que son lentos, ya que se necesitan muchos pases 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 un solo pase.
R-CNN: CNN Basada en Regiones
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 de la caja delimitadora. Artículo oficial
Imagen de van de Sande et al. ICCV’11
Imágenes de este blog
F-RCNN - Fast R-CNN
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
Faster R-CNN
La idea principal de este enfoque es usar una red neuronal para predecir las ROI, la llamada Red de Propuesta de Regiones. Artículo, 2016
Imagen del artículo oficial
R-FCN: Red Completamente Convolucional Basada en Regiones
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 un Mapa de Puntuación Sensible a la Posición. Cada objeto de las clases
Cse divide en regiones dek\times k, y entrenamos para predecir partes de los objetos. - Para cada parte de las regiones
k\times k, todas las redes votan por las clases de objetos, y se selecciona la clase de objeto con el máximo voto.
Imagen del artículo oficial
YOLO - You Only Look Once
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
nposibles objetos, las coordenadas de la caja delimitadora y la confianza = probabilidad * IoU.
Imagen del artículo oficial
Otros Algoritmos
- RetinaNet: artículo oficial
- SSD (Single Shot Detector): artículo oficial
✍️ Ejercicios: Detección de Objetos
Continúa tu aprendizaje en el siguiente cuaderno:
Conclusión
En esta lección hiciste un recorrido rápido por las diversas formas en que se puede lograr la detección de objetos.
🚀 Desafío
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
Cuestionario posterior a la lección
Revisión y Autoestudio
- 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
Asignación: Detección de Objetos
Descargo de responsabilidad:
Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción.









