Saltar al contenido

Ultralytics YOLOv5 Arquitectura

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 aumento de datos, las metodologías de entrenamiento y las técnicas de cálculo de pérdidas. Este conocimiento exhaustivo 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

YOLOv5consta de tres partes principales:

  • Red troncal: Es el cuerpo principal de la red. Para YOLOv5, la red troncal se diseña utilizando el método New CSP-Darknet53 una modificación de la arquitectura Darknet utilizada en versiones anteriores.
  • Cuello: Esta parte conecta la columna vertebral y la cabeza. En YOLOv5, SPPF y New CSP-PAN se utilizan estructuras.
  • Cabeza: Esta parte se encarga de generar el resultado final. YOLOv5 utiliza la función YOLOv3 Head para este fin.

La estructura del modelo se representa en la imagen siguiente. Los detalles de la estructura del modelo se encuentran en yolov5l.yaml.

yolov5

YOLOv5 introduce algunos cambios menores respecto a sus predecesores:

  1. En Focus que se encontraba en versiones anteriores, se sustituye por una estructura 6x6 Conv2d estructura. Este cambio aumenta la eficacia #4825.
  2. En SPP se sustituye por SPPF. Esta alteración duplica con creces la velocidad de procesamiento.

Para comprobar la velocidad de SPP y SPPFse puede utilizar el siguiente código:

Ejemplo de perfil de velocidad SPP vs SPPF (haz clic para abrir)
import time
import torch
import torch.nn as nn


class SPP(nn.Module):
    def __init__(self):
        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):
        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):
        super().__init__()
        self.maxpool = nn.MaxPool2d(5, 1, padding=2)

    def forward(self, x):
        o1 = self.maxpool(x)
        o2 = self.maxpool(o1)
        o3 = self.maxpool(o2)
        return torch.cat([x, o1, o2, o3], dim=1)


def main():
    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 varias técnicas de aumento de datos para mejorar la capacidad de generalización del modelo y reducir el sobreajuste. Estas técnicas incluyen:

  • Aumento en mosaico: Técnica de procesamiento de imágenes que combina cuatro imágenes de entrenamiento en una sola, de forma que los modelos de detección de objetos puedan manejar mejor las distintas escalas y traslaciones de los objetos.

mosaico

  • Aumento Copia-Pega: Un innovador método de aumento de datos que copia parches aleatorios de una imagen y los pega en otra imagen elegida al azar, generando así una nueva muestra de entrenamiento.

copiar-pegar

  • Transformaciones Afines Aleatorias: Esto incluye rotación, escalado, traslación y cizallamiento aleatorios de las imágenes.

aleatorio-afín

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

confusión

  • Albumentaciones: Una potente biblioteca para aumentar imágenes que admite una gran variedad de técnicas de aumento.

  • Aumento HSV: Cambios aleatorios en el Tono, la Saturación y el Valor de las imágenes.

hsv

  • Volteo Horizontal Aleatorio: Un método de aumento que voltea aleatoriamente las imágenes horizontalmente.

horizontal-flip

3. Estrategias de formación

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

  • Entrenamiento multiescala: 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.
  • Anclaje automático: Esta estrategia optimiza las casillas de anclaje previo para que coincidan con las características estadísticas de las casillas de verdad básica de tus datos personalizados.
  • Calentamiento y Programador LR Coseno: Un método para ajustar la tasa de aprendizaje para mejorar el rendimiento del modelo.
  • Media móvil exponencial (EMA): Estrategia que utiliza la media de los parámetros sobre 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 media precisión, reduciendo el uso de memoria y mejorando la velocidad de cálculo.
  • Evolución de los hiperparámetros: Una estrategia para ajustar automáticamente los hiperparámetros para conseguir un rendimiento óptimo.

4. Características adicionales

4.1 Calcula las pérdidas

La pérdida en 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, mide el error de la tarea de clasificación.
  • Pérdida de Objectidad (Pérdida BCE): Otra pérdida de Entropía Cruzada Binaria, calcula el error al detectar si un objeto está presente o no en una determinada celda de la cuadrícula.
  • Pérdida de Localización (Pérdida CIoU): Pérdida de IoU completa, mide el error en la localización del objeto dentro de la celda de la cuadrícula.

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

pérdida

4.2 Pérdidas de saldo

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

obj_pérdida

4.3 Eliminar la sensibilidad de la red

La arquitectura YOLOv5 introduce 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 las cajas se predecían directamente utilizando la activación de la última capa.

b_x b_y b_w b_h

YOLOv5 cálculo de cuadrícula

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

Las fórmulas revisadas para calcular el cuadro delimitador previsto son las siguientes:

bx por bw bh

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 tanto, el desplazamiento puede ser fácilmente 0 ó 1.

YOLOv5 escala de cuadrícula

Compara la relación de escala de altura y anchura (relativa al ancla) antes y después del ajuste. Las ecuaciones originales de la caja yolo/darknet tienen un grave defecto. La anchura y la altura son completamente ilimitadas, ya que son simplemente out=exp(in), lo que es peligroso, ya que puede provocar gradientes desbocados, inestabilidades, pérdidas NaN y, en última instancia, una pérdida completa del entrenamiento. consulta este tema

YOLOv5 escala ilimitada

4.4 Objetivos de construcción

El proceso de construcción del objetivo en YOLOv5 es fundamental para la eficacia del entrenamiento y la precisión del modelo. Implica asignar casillas de verdad sobre el terreno a las celdas de cuadrícula adecuadas del mapa de salida y hacerlas coincidir con las casillas de anclaje apropiadas.

Este proceso sigue estos pasos:

  • Calcula la relación entre las dimensiones de la caja de la verdad sobre el terreno y las dimensiones de cada plantilla de anclaje.

rw

rh

rwmax

rhmax

rmax

coincide

YOLOv5 Cálculo del IoU

  • Si la proporción calculada está dentro del umbral, haz coincidir la casilla de la verdad sobre el terreno con el ancla correspondiente.

YOLOv5 solapamiento de rejilla

  • Asigna el ancla emparejada a las casillas apropiadas, teniendo en cuenta que, debido al desplazamiento revisado del punto central, una casilla de la verdad sobre el terreno puede asignarse a más de un ancla. Debido a que el rango de desplazamiento del punto central se ajusta de (0, 1) a (-0,5, 1,5). La caja GT puede asignarse a más anclas.

YOLOv5 selección del ancla

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

Conclusión

En conclusión, YOLOv5 representa un importante paso adelante en el desarrollo de modelos de detección de objetos en tiempo real. Al incorporar varias funciones nuevas, mejoras y estrategias de entrenamiento, supera en rendimiento y eficacia a las versiones anteriores de la familia YOLO .

Las principales mejoras de YOLOv5 incluyen el uso de una arquitectura dinámica, una amplia gama de técnicas de aumento de datos, estrategias de entrenamiento innovadoras, así como importantes ajustes en las pérdidas de computación y en el proceso de construcción de objetivos. Todas estas innovaciones mejoran significativamente la precisión y la eficacia de la detección de objetos, conservando al mismo tiempo un alto grado de velocidad, que es la marca distintiva de los modelos YOLO .



Creado 2023-11-12, Actualizado 2024-01-14
Autores: glenn-jocher (5), sergiuwaxmann (1)

Comentarios