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
yNew 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 introduce algunos cambios menores respecto a sus predecesores:
- En
Focus
que se encontraba en versiones anteriores, se sustituye por una estructura6x6 Conv2d
estructura. Este cambio aumenta la eficacia #4825. - En
SPP
se sustituye porSPPF
. Esta alteración duplica con creces la velocidad de procesamiento.
Para comprobar la velocidad de SPP
y SPPF
se 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):
"""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()
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 modo que los modelos de detección de objetos puedan manejar mejor las distintas escalas y traslaciones de los objetos.
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.
Transformaciones Afines Aleatorias: Esto incluye rotación, escalado, traslación y cizallamiento aleatorios de las imágenes.
Aumento MixUp: Método que crea imágenes compuestas tomando una combinación lineal de dos imágenes y sus etiquetas asociadas.
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.
Volteo Horizontal Aleatorio: Un método de aumento que voltea aleatoriamente las imágenes horizontalmente.
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.
- Planificador de LR de Calentamiento y 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 dePrecisió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:
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.
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.
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:
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.
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
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.
- Si la proporción calculada está dentro del umbral, haz coincidir la casilla de la verdad sobre el terreno con el ancla correspondiente.
- 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.
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 .