YOLO Vision 2026:

Arquitectura de Ultralytics YOLOv5#

YOLOv5 (v6.0/6.1) es un potente algoritmo de detección de objetos desarrollado por Ultralytics. Este artículo profundiza en la arquitectura de YOLOv5, las estrategias de data augmentation, las metodologías de entrenamiento y las técnicas de cálculo de pérdidas. Esta comprensión integral ayudará a mejorar tu aplicación práctica de la detección de objetos en varios campos, incluidos la videovigilancia, los vehículos autónomos y el reconocimiento de imágenes.

1. Estructura del modelo#

La arquitectura de YOLOv5 consta de tres partes principales:

  • Backbone: Este es el cuerpo principal de la red. Para YOLOv5, el backbone está diseñado utilizando la estructura CSPDarknet53, una modificación de la arquitectura Darknet utilizada en versiones anteriores.
  • Neck: Esta parte conecta el backbone y la head. En YOLOv5, se utilizan las estructuras SPPF (Spatial Pyramid Pooling - Fast) y PANet (Path Aggregation Network).
  • Head: Esta parte es responsable de generar el resultado final. YOLOv5 utiliza YOLOv3 Head para este propósito.

La estructura del modelo se muestra en la imagen a continuación. Los detalles de la estructura del modelo se pueden encontrar en models/yolov5l.yaml.

YOLOv5 architecture showing backbone, neck, and head

YOLOv5 introduce algunas mejoras notables en comparación con sus predecesores:

  1. La estructura Focus, encontrada en versiones anteriores, se reemplaza por una estructura 6x6 Conv2d. Este cambio aumenta la eficiencia #4825.
  2. La estructura SPP se reemplaza por SPPF. Esta alteración duplica con creces la velocidad de procesamiento mientras mantiene el mismo resultado.

Para probar la velocidad de SPP y SPPF, se puede utilizar el siguiente código:

SPP vs SPPF speed profiling example (click to open)
import time

import torch
from torch import nn

class SPP(nn.Module):
    def __init__(self):
        """Initializes an SPP module with three different sizes of max pooling layers."""
        super().__init__()
        self.maxpool1 = nn.MaxPool2d(5, 1, padding=2)
        self.maxpool2 = nn.MaxPool2d(9, 1, padding=4)
        self.maxpool3 = nn.MaxPool2d(13, 1, padding=6)

    def forward(self, x):
        """Applies three max pooling layers on input `x` and concatenates results along channel dimension."""
        o1 = self.maxpool1(x)
        o2 = self.maxpool2(x)
        o3 = self.maxpool3(x)
        return torch.cat([x, o1, o2, o3], dim=1)

class SPPF(nn.Module):
    def __init__(self):
        """Initializes an SPPF module with a specific configuration of MaxPool2d layer."""
        super().__init__()
        self.maxpool = nn.MaxPool2d(5, 1, padding=2)

    def forward(self, x):
        """Applies sequential max pooling and concatenates results with input tensor."""
        o1 = self.maxpool(x)
        o2 = self.maxpool(o1)
        o3 = self.maxpool(o2)
        return torch.cat([x, o1, o2, o3], dim=1)

def main():
    """Compares outputs and performance of SPP and SPPF on a random tensor (8, 32, 16, 16)."""
    input_tensor = torch.rand(8, 32, 16, 16)
    spp = SPP()
    sppf = SPPF()
    output1 = spp(input_tensor)
    output2 = sppf(input_tensor)

    print(torch.equal(output1, output2))

    t_start = time.time()
    for _ in range(100):
        spp(input_tensor)
    print(f"SPP time: {time.time() - t_start}")

    t_start = time.time()
    for _ in range(100):
        sppf(input_tensor)
    print(f"SPPF time: {time.time() - t_start}")

if __name__ == "__main__":
    main()

resultado:

True
SPP time: 0.5373051166534424
SPPF time: 0.20780706405639648

2. Técnicas de Data Augmentation#

YOLOv5 emplea varias técnicas de aumento de datos para mejorar la capacidad del modelo para generalizar y reducir el overfitting. Estas técnicas incluyen:

  • Mosaic Augmentation: Una técnica de procesamiento de imágenes que combina cuatro imágenes de entrenamiento en una de manera que anima a los modelos de object detection a gestionar mejor varias escalas de objetos y traslaciones.

    YOLOv5 mosaic data augmentation combining four images

  • Copy-Paste Augmentation: Un método innovador de data augmentation que copia parches aleatorios de una imagen y los pega sobre otra imagen elegida al azar, generando efectivamente una nueva muestra de entrenamiento.

    YOLOv5 copy-paste augmentation for instance segmentation

  • Random Affine Transformations: Esto incluye rotación aleatoria, escalado, traslación y deformación (shearing) de las imágenes.

    YOLOv5 random affine transformations for training

  • MixUp Augmentation: Un método que crea imágenes compuestas tomando una combinación lineal de dos imágenes y sus etiquetas asociadas.

    YOLOv5 MixUp data augmentation blending two images

  • Albumentations: Una potente librería de aumento de imágenes que admite una amplia variedad de técnicas de aumento. Obtén más información sobre cómo usar los aumentos de Albumentations.

  • HSV Augmentation: Cambios aleatorios en el tono (Hue), saturación (Saturation) y valor (Value) de las imágenes.

    YOLOv5 HSV color space augmentation examples

  • Random Horizontal Flip: Un método de aumento que voltea las imágenes horizontalmente de forma aleatoria.

    YOLOv5 random horizontal flip augmentation

3. Estrategias de entrenamiento#

YOLOv5 aplica varias estrategias de entrenamiento sofisticadas para mejorar el rendimiento del modelo. Incluyen:

  • Multiscale Training: Las imágenes de entrada se reescalan aleatoriamente dentro de un rango de 0.5 a 1.5 veces su tamaño original durante el proceso de entrenamiento.
  • AutoAnchor: Esta estrategia optimiza las cajas de anclaje previas (anchor boxes) para que coincidan con las características estadísticas de las cajas de verdad fundamental (ground truth boxes) en tus datos personalizados.
  • Warmup and Cosine LR Scheduler: Un método para ajustar la learning rate para mejorar el rendimiento del modelo.
  • Exponential Moving Average (EMA): Una estrategia que utiliza el promedio de los parámetros durante los pasos anteriores para estabilizar el proceso de entrenamiento y reducir el error de generalización.
  • Entrenamiento en Mixed Precision: Un método para realizar operaciones en formato de media precision, reduciendo el uso de memoria y mejorando la velocidad computacional.
  • Evolución de hiperparámetros: Una estrategia para ajustar automáticamente los hiperparámetros y lograr un rendimiento óptimo. Obtén más información sobre la optimización de hiperparámetros.

4. Funciones adicionales#

4.1 Calcular pérdidas (Compute Losses)#

La pérdida en YOLOv5 se calcula como una combinación de tres componentes de pérdida individuales:

  • Classes Loss (BCE Loss): Pérdida de entropía cruzada binaria (Binary Cross-Entropy), mide el error para la tarea de clasificación.
  • Objectness Loss (BCE Loss): Otra pérdida de entropía cruzada binaria, calcula el error al detectar si un objeto está presente en una celda de rejilla (grid cell) particular o no.
  • Location Loss (CIoU Loss): Pérdida de IoU completa (Complete IoU), mide el error al localizar el objeto dentro de la celda de la rejilla.

La loss function general se representa mediante:

YOLOv5 total loss function formula

4.2 Balancear pérdidas (Balance Losses)#

Las pérdidas de objectness de las tres capas de predicción (P3, P4, P5) se ponderan de forma diferente. Los pesos de balance son respectivamente [4.0, 1.0, 0.4]. Este enfoque garantiza que las predicciones a diferentes escalas contribuyan adecuadamente a la pérdida total.

YOLOv5 objectness loss balance formula

4.3 Eliminar la sensibilidad de la rejilla (Grid Sensitivity)#

La arquitectura de YOLOv5 realiza algunos cambios importantes en la estrategia de predicción de cajas en comparación con versiones anteriores de YOLO. En YOLOv2 y YOLOv3, las coordenadas de la caja se predecían directamente utilizando la activación de la última capa.

Bounding box x-coordinate prediction formula Bounding box y-coordinate prediction formula Bounding box width prediction formula Bounding box height prediction formula

YOLOv5 grid computation

Sin embargo, en YOLOv5, la fórmula para predecir las coordenadas de la caja se ha actualizado para reducir la sensibilidad de la rejilla y evitar que el modelo prediga dimensiones de caja no acotadas.

Las fórmulas revisadas para calcular el bounding box predicho son las siguientes:

YOLOv5 revised bounding box x-coordinate formula YOLOv5 revised bounding box y-coordinate formula YOLOv5 revised bounding box width formula YOLOv5 revised bounding box height formula

Compara el desplazamiento del punto central antes y después del escalado. El rango de desplazamiento del punto central se ajusta de (0, 1) a (-0.5, 1.5). Por lo tanto, el desplazamiento puede obtener fácilmente 0 o 1.

YOLOv5 grid scaling

Compara la relación de escala de altura y anchura (en relación con el anchor) antes y después del ajuste. Las ecuaciones originales de las cajas de yolo/darknet tienen un fallo grave. La anchura y la altura no están completamente acotadas, ya que simplemente son out=exp(in), lo cual es peligroso, ya que puede provocar gradientes desbocados, inestabilidades, pérdidas NaN y, en última instancia, una pérdida total del entrenamiento. Consulta esta incidencia para obtener más detalles.

YOLOv5 unbounded scaling

4.4 Crear objetivos (Build Targets)#

El proceso de construcción de objetivos en YOLOv5 es fundamental para la eficiencia del entrenamiento y la accuracy del modelo. Implica asignar cajas de ground truth a las celdas de la cuadrícula adecuadas en el mapa de salida y hacerlas coincidir con las cajas de anclaje apropiadas.

Este proceso sigue estos pasos:

  • Calcula la proporción entre las dimensiones de la caja de verdad fundamental y las dimensiones de cada plantilla de anclaje.

Ground truth to anchor width ratio formula

Ground truth to anchor height ratio formula

Maximum width ratio formula

Maximum height ratio formula

Overall maximum ratio formula

Anchor matching threshold formula

YOLOv5 IoU computation
  • Si la relación calculada está dentro del umbral, empareja la caja de verdad fundamental con el anclaje correspondiente.
YOLOv5 grid overlap
  • Asigna el anclaje emparejado a las celdas apropiadas, teniendo en cuenta que debido al desplazamiento revisado del punto central, una caja de verdad fundamental puede asignarse a más de un anclaje porque el rango de desplazamiento del punto central se ajusta de (0, 1) a (-0.5, 1.5), lo que hace posibles coincidencias adicionales.
YOLOv5 anchor selection

De esta manera, el proceso de construcción de objetivos garantiza que cada objeto de verdad fundamental se asigne y empareje correctamente durante el proceso de entrenamiento, lo que permite a YOLOv5 aprender la tarea de detección de objetos de manera más efectiva.

Conclusión#

YOLOv5 representa un paso significativo en la evolución de la detección de objetos en tiempo real. Sus elecciones arquitectónicas, estrategias de entrenamiento y refinamientos de ingeniería ofrecen un rendimiento y una eficiencia sólidos en relación con las versiones anteriores de YOLO.

Las principales mejoras en YOLOv5 incluyen el uso de una arquitectura dinámica, una amplia gama de técnicas de data augmentation, estrategias de entrenamiento innovadoras, así como ajustes importantes en el cálculo de pérdidas y en el proceso de construcción de objetivos. Todas estas innovaciones mejoran significativamente la precisión y la eficiencia de la detección de objetos manteniendo un alto grado de velocidad, que es el sello distintivo de los modelos YOLO.

Comentarios