YOLO Vision 2026:

Arquitectura de Ultralytics YOLOv5#

YOLOv5 (v6.0/6.1) es un potente algoritmo de detección de objetos desarrollado por Ultralytics. En este artículo se profundiza en la arquitectura de YOLOv5, las estrategias de aumento de datos, las metodologías de entrenamiento y las técnicas de cálculo de pérdidas. Esta comprensión exhaustiva te ayudará a mejorar la aplicación práctica de la detección de objetos en diversos campos, como la vigilancia, 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: Es el cuerpo principal de la red. En YOLOv5, el backbone está diseñado mediante la estructura CSPDarknet53, una modificación de la arquitectura Darknet utilizada en versiones anteriores.
  • Neck: Esta parte conecta el backbone y el head. En YOLOv5 se utilizan las estructuras SPPF (agrupación piramidal espacial rápida) y PANet (red de agregación de rutas).
  • Head: Esta parte se encarga de generar la salida final. YOLOv5 utiliza YOLOv3 Head para este fin.

La estructura del modelo se muestra en la siguiente imagen. Puedes consultar los detalles de la estructura del modelo en models/yolov5l.yaml.

Arquitectura de YOLOv5 que muestra el backbone, el neck y el head

YOLOv5 introduce varias mejoras destacables con respecto a sus predecesores:

  1. La estructura Focus, presente en versiones anteriores, se sustituye por una estructura 6x6 Conv2d. Este cambio mejora la eficiencia #4825.
  2. La estructura SPP se sustituye por SPPF. Esta modificación duplica con creces la velocidad de procesamiento manteniendo la misma salida.

Para probar la velocidad de SPP y SPPF, puedes 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 aumento de datos#

YOLOv5 emplea diversas técnicas de aumento de datos para mejorar la capacidad de generalización del modelo y reducir el sobreajuste. Estas técnicas incluyen:

  • Aumento Mosaic: Una técnica de procesamiento de imágenes que combina cuatro imágenes de entrenamiento en una, de forma que ayuda a los modelos de detección de objetos a gestionar mejor distintas escalas y traslaciones de objetos.

    Aumento de datos Mosaic de YOLOv5 que combina cuatro imágenes

  • Aumento Copy-Paste: Un innovador método de aumento de datos que copia parches aleatorios de una imagen y los pega sobre otra imagen elegida aleatoriamente, generando de forma eficaz una nueva muestra de entrenamiento.

    Aumento Copy-Paste de YOLOv5 para la segmentación de instancias

  • Transformaciones afines aleatorias: Incluyen la rotación, el escalado, la traslación y el cizallamiento aleatorios de las imágenes.

    Transformaciones afines aleatorias de YOLOv5 para el entrenamiento

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

    Aumento de datos MixUp de YOLOv5 que combina dos imágenes

  • Albumentations: Una potente biblioteca de aumento de imágenes compatible con una amplia variedad de técnicas de aumento. Obtén más información sobre cómo utilizar los aumentos de Albumentations.

  • Aumento HSV: Cambios aleatorios en el tono, la saturación y el valor de las imágenes.

    Ejemplos de aumento del espacio de color HSV en YOLOv5

  • Volteo horizontal aleatorio: Un método de aumento que voltea las imágenes horizontalmente de forma aleatoria.

    Aumento de volteo horizontal aleatorio de YOLOv5

3. Estrategias de entrenamiento#

YOLOv5 aplica varias estrategias sofisticadas de entrenamiento para mejorar el rendimiento del modelo. Entre ellas se incluyen:

  • Entrenamiento multiescala: Las imágenes de entrada se redimensionan aleatoriamente entre 0,5 y 1,5 veces su tamaño original durante el proceso de entrenamiento.
  • AutoAnchor: Esta estrategia optimiza las cajas anchor previas para que coincidan con las características estadísticas de las cajas de verdad terreno de tus datos personalizados.
  • Programador de LR con calentamiento y coseno: Un método para ajustar la tasa de aprendizaje y mejorar el rendimiento del modelo.
  • Media móvil exponencial (EMA): Una estrategia que utiliza la media de los parámetros de los pasos anteriores para estabilizar el proceso de entrenamiento y reducir el error de generalización.
  • Entrenamiento de precisión mixta: Un método para realizar operaciones en formato de precisión media, reduciendo el uso de memoria y mejorando la velocidad de cálculo.
  • 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 el ajuste de hiperparámetros.

4. Funciones adicionales#

4.1 Calcular las pérdidas#

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

  • Pérdida de clases (pérdida BCE): Pérdida de entropía cruzada binaria que mide el error de la tarea de clasificación.
  • Pérdida de objetualidad (pérdida BCE): Otra pérdida de entropía cruzada binaria que calcula el error al detectar si hay un objeto presente o no en una celda concreta de la cuadrícula.
  • Pérdida de localización (pérdida CIoU): Pérdida de IoU completa que mide el error al localizar el objeto dentro de la celda de la cuadrícula.

La función de pérdida global se representa mediante:

Fórmula de la función de pérdida total de YOLOv5

4.2 Equilibrar las pérdidas#

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

Fórmula de equilibrio de la pérdida de objetualidad de YOLOv5

4.3 Eliminar la sensibilidad a la cuadrícula#

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

Fórmula de predicción de la coordenada x de la caja delimitadora Fórmula de predicción de la coordenada y de la caja delimitadora Fórmula de predicción de la anchura de la caja delimitadora Fórmula de predicción de la altura de la caja delimitadora

YOLOv5 grid computation

Sin embargo, en YOLOv5, la fórmula para predecir las coordenadas de la caja se ha actualizado para reducir la sensibilidad a la cuadrícula y evitar que el modelo prediga dimensiones de caja sin límites.

Las fórmulas revisadas para calcular la caja delimitadora predicha son las siguientes:

Fórmula revisada de la coordenada x de la caja delimitadora de YOLOv5 Fórmula revisada de la coordenada y de la caja delimitadora de YOLOv5 Fórmula revisada de la anchura de la caja delimitadora de YOLOv5 Fórmula revisada de la altura de la caja delimitadora de YOLOv5

Compara el desplazamiento del punto central antes y después del escalado. El intervalo de desplazamiento del punto central se ajusta de (0, 1) a (-0,5, 1,5). Por tanto, el desplazamiento puede ser fácilmente 0 o 1.

YOLOv5 grid scaling

Compara la proporción de escalado de la altura y la anchura (con respecto al anchor) antes y después del ajuste. Las ecuaciones originales de cajas de yolo/darknet presentan un defecto grave. La anchura y la altura no están limitadas en absoluto, ya que simplemente se calculan como out=exp(in), lo cual es peligroso porque puede provocar gradientes descontrolados, inestabilidades, pérdidas NaN y, en última instancia, la pérdida completa del entrenamiento. Consulta este problema para obtener más información.

YOLOv5 unbounded scaling

4.4 Crear objetivos#

El proceso de creación de objetivos en YOLOv5 es fundamental para la eficiencia del entrenamiento y la precisión del modelo. Consiste en asignar las cajas de verdad terreno a las celdas de cuadrícula adecuadas del mapa de salida y emparejarlas con las cajas anchor correspondientes.

Este proceso sigue estos pasos:

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

Fórmula de la proporción entre la anchura de la verdad terreno y el anchor

Fórmula de la proporción entre la altura de la verdad terreno y el anchor

Fórmula de la proporción máxima de anchura

Fórmula de la proporción máxima de altura

Fórmula de la proporción máxima global

Fórmula del umbral de emparejamiento de anchors

YOLOv5 IoU computation
  • Si la proporción calculada está dentro del umbral, empareja la caja de verdad terreno con el anchor correspondiente.
YOLOv5 grid overlap
  • Asigna el anchor emparejado a las celdas adecuadas, teniendo en cuenta que, debido al desplazamiento revisado del punto central, una caja de verdad terreno puede asignarse a más de un anchor, ya que el intervalo de desplazamiento del punto central se ajusta de (0, 1) a (-0,5, 1,5), lo que permite emparejamientos adicionales.
YOLOv5 anchor selection

De este modo, el proceso de creación de objetivos garantiza que cada objeto de verdad terreno se asigne y empareje correctamente durante el entrenamiento, lo que permite a YOLOv5 aprender la tarea de detección de objetos con mayor eficacia.

Conclusión#

YOLOv5 representa un avance significativo en la evolución de la detección de objetos en tiempo real. Sus decisiones arquitectónicas, estrategias de entrenamiento y mejoras de ingeniería proporcionan un sólido rendimiento y eficiencia en comparación con versiones anteriores de YOLO.

Las principales mejoras de YOLOv5 incluyen el uso de una arquitectura dinámica, una amplia variedad de técnicas de aumento de datos, estrategias innovadoras de entrenamiento, así como ajustes importantes en el cálculo de pérdidas y en el proceso de creación de objetivos. Todas estas innovaciones mejoran significativamente la precisión y la eficiencia de la detección de objetos, manteniendo al mismo tiempo un alto nivel de velocidad, que es el rasgo distintivo de los modelos YOLO.

Comentarios