Ultralytics YOLOv5 Arquitectura
YOLOv5 (v6.0/6.1) is a powerful object detection algorithm developed by Ultralytics. This article dives deep into the YOLOv5 architecture, data augmentation strategies, training methodologies, and loss computation techniques. This comprehensive understanding will help improve your practical application of object detection in various fields, including surveillance, autonomous vehicles, and image recognition.
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 employs various data augmentation techniques to improve the model's ability to generalize and reduce overfitting. These techniques include:
-
Mosaic Augmentation: An image processing technique that combines four training images into one in ways that encourage object detection models to better handle various object scales and translations.
-
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.
- Warmup and Cosine LR Scheduler: A method to adjust the learning rate to enhance model performance.
- 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.
- Mixed Precision Training: A method to perform operations in half-precision format, reducing memory usage and enhancing computational speed.
- 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.
The overall loss function is depicted by:
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.
The revised formulas for calculating the predicted bounding box are as follows:
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
The build target process in YOLOv5 is critical for training efficiency and model accuracy. It involves assigning ground truth boxes to the appropriate grid cells in the output map and matching them with the appropriate anchor boxes.
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 .