Los fundamentos de la detección de objetos. Publicado originalmente en The Deep Hub.
You Only Look Once (YOLO) es un tipo innovador de red neuronal convolucional para detección de objetos.
A diferencia de los sistemas tradicionales, que procesan una imagen en varias fases, YOLO reúne el trabajo en un único paso, lo que lo hace muy rápido y eficiente.
YOLO plantea la detección de objetos como un único problema de regresión.
La detección de objetos contiene dos componentes:
- Localización: identificar dónde están los objetos en una imagen.
- Clasificación: determinar qué son esos objetos.
Clasificación de imágenes frente a detección de objetos | Fuente
Los métodos tradicionales suelen resolverlos por separado: un algoritmo propone regiones y otro las clasifica. YOLO predice directamente bounding boxes y probabilidades de clase a la vez.
Funcionamiento general
Al recibir una imagen, YOLO la divide conceptualmente en una cuadrícula.
Imagen dividida en cuadrículas | Fuente
Cada celda predice:
- Bounding boxes: cajas con coordenadas de posibles objetos.
- Puntuaciones de confianza: probabilidad de que una caja contenga un objeto real.
- Probabilidades de clase: probabilidad de que pertenezca a una clase, como coche, gato o persona.
Múltiples bounding boxes | Fuente
Después, YOLO elimina cajas superpuestas o con confianza baja con Non-Maximum Suppression.
Cuadrícula, cajas y non-maximum suppression | Fuente
Anotación de imágenes
Anotar imágenes consiste en añadir metadatos: etiquetas de objetos, características o clases. En YOLO marcamos los objetos con bounding boxes y su clasificación.
Objeto anotado con bounding box | Fuente
Formatos comunes:
- Pascal VOC: esquina superior izquierda y esquina inferior derecha: [x_min, y_min, x_max, y_max].
- COCO: esquina superior izquierda, ancho y alto: [x_min, y_min, width, height].
- YOLO: centro de la caja, ancho y alto: [x_center, y_center, width, height].
Tipos de anotación | Fuente
YOLO utiliza, naturalmente, el formato YOLO.
Arquitectura de YOLO
YOLO ha tenido muchas versiones, de YOLOv1 a YOLOv9 cuando se escribió el artículo. Su estructura general tiene tres componentes:
- Backbone: CNN preentrenada para extraer características visuales.
- Neck: capas que mezclan características de distintas escalas.
- Head: capas finales de detección.
Backbone
El backbone original tiene 24 capas convolucionales para extraer características.
Las capas convolucionales aplican kernels que recorren la imagen y aprenden patrones complejos.
Operación de convolución | Fuente
Entre ellas hay capas de max pooling, que reducen las dimensiones espaciales de los mapas de características usando el valor máximo de cada ventana.
Representación de max pooling | Fuente
Si necesitas repasar CNN, consulta Redes neuronales convolucionales: una guía completa.
Neck
El neck, opcional, está entre backbone y head. Combina mapas de características de varias capas, lo que ayuda a detectar objetos de distintas escalas.
YOLOv1 no tenía neck; versiones posteriores incorporaron componentes como PANet y FPN.
Head
El head realiza las predicciones a partir de los mapas de características del backbone y, si existe, del neck.
Sus tareas son:
- Clasificar objetos.
- Predecir bounding boxes.
- Estimar objectness, la probabilidad de que haya un objeto dentro de la caja.
Arquitectura completa de YOLOv1 | Fuente
YOLOv1 tenía 24 capas convolucionales, 4 de max pooling y 2 totalmente conectadas. Las versiones posteriores cambiaron notablemente esta estructura.
Proceso de entrenamiento
1. Entrada
La imagen se redimensiona al tamaño fijo que espera el modelo, por ejemplo 416 × 416. En esta fase se procesa como un todo, sin cuadrícula.
Redimensionamiento | Fuente
2. CNN
La imagen pasa por capas convolucionales, activaciones como ReLU, pooling y, en ocasiones, normalización por lotes. Las capas tempranas detectan bordes y esquinas; las profundas, patrones complejos.
Visualización 3D de una CNN | Fuente
3. Mapa de características y cuadrícula
La salida es un mapa de características más pequeño que conserva información espacial esencial. YOLO lo divide en una cuadrícula S × S antes de las capas finales.
Creación de mapa de características | Fuente
4. Predicciones por celda
Cada celda predice varias cajas, sus coordenadas, confianza y probabilidades de clase.
Arquitectura YOLO | Fuente
La celda que contiene el centro de un objeto se encarga de predecir su caja. Como no sabemos qué celda será, todas generan predicciones y se elige la mejor.
Celda responsable de coordenadas, objectness y clase | Fuente
5. Non-Maximum Suppression
YOLO genera varias cajas por objeto. Las ordena de mayor a menor confianza y elige la mejor como referencia.
Imagen con múltiples bounding boxes | Fuente
Compara esa caja con las demás y suprime las que se superponen mucho, porque probablemente detectan el mismo objeto. Repite el proceso hasta conservar solo las detecciones más fiables.
Non-Maximum Suppression | Fuente
Intersection over Union (IoU)
IoU mide el solapamiento entre dos cajas: divide el área de intersección entre el área de unión. Si supera un umbral, la caja con menos confianza se suprime.
Intersection over Union | Fuente
Un ejemplo conceptual
Supongamos que entrenamos con dos caballos muy similares, pero uno mide un metro más. Aunque sus centros sean similares, YOLO aprende características de tamaño, forma, textura y otros rasgos que le permiten ajustar las dimensiones de cada caja mediante regresión.
Objetos con centros parecidos y tamaños distintos | Fuente
Función de pérdida
La pérdida de YOLO tiene tres partes:
- Pérdida de localización: penaliza diferencias entre las cajas predichas y las reales, tanto en centro (x, y) como en ancho y alto (w, h).
- Pérdida de confianza: enseña a diferenciar cajas que contienen objetos de las que solo capturan fondo. Reduce el peso de las muchas cajas sin objeto con el coeficiente λ_noobj.
- Pérdida de clasificación: penaliza clases incorrectas dentro de las cajas con objeto.
La función completa se optimiza iterativamente con backpropagation para reducir el error.
Explicación completa de la pérdida de YOLO | Fuente
Bibliografía
¡Gracias por leer! Si te ha gustado el artículo, puedes dejar hasta 50 aplausos y seguirme en Medium para estar al día de las próximas publicaciones.
También puedes seguir mi nueva publicación:
The Deep Hub Tu espacio sobre ciencia de datos.