Architecture d’Ultralytics YOLOv5#
YOLOv5 (v6.0/6.1) est un puissant algorithme de détection d’objets développé par Ultralytics. Cet article examine en profondeur l’architecture de YOLOv5, les stratégies d’augmentation des données, les méthodologies d’entraînement et les techniques de calcul de la fonction de perte. Cette compréhension complète t’aidera à améliorer ton utilisation pratique de la détection d’objets dans divers domaines, notamment la surveillance, les véhicules autonomes et la reconnaissance d’images.
1. Structure du modèle#
L’architecture de YOLOv5 se compose de trois parties principales :
- Backbone : il s’agit du corps principal du réseau. Pour YOLOv5, le backbone est conçu à l’aide de la structure
CSPDarknet53, une modification de l’architecture Darknet utilisée dans les versions précédentes. - Neck : cette partie relie le backbone et la tête. Dans YOLOv5, les structures
SPPF(Spatial Pyramid Pooling - Fast) etPANet(Path Aggregation Network) sont utilisées. - Tête : cette partie est chargée de générer la sortie finale. YOLOv5 utilise
YOLOv3 Headà cette fin.
La structure du modèle est présentée dans l’image ci-dessous. Les détails de la structure du modèle sont disponibles dans models/yolov5l.yaml.

YOLOv5 introduit plusieurs améliorations notables par rapport à ses prédécesseurs :
- La structure
Focus, présente dans les versions précédentes, est remplacée par une structure6x6 Conv2d. Cette modification accroît l’efficacité #4825. - La structure
SPPest remplacée parSPPF. Cette modification fait plus que doubler la vitesse de traitement tout en conservant la même sortie.
Pour tester la vitesse de SPP et de SPPF, tu peux utiliser le code suivant :
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()résultat :
True
SPP time: 0.5373051166534424
SPPF time: 0.207807064056396482. Techniques d’augmentation des données#
YOLOv5 utilise diverses techniques d’augmentation des données afin d’améliorer la capacité de généralisation du modèle et de réduire le surapprentissage. Ces techniques comprennent :
-
Augmentation Mosaic : technique de traitement d’image qui combine quatre images d’entraînement en une seule, de manière à aider les modèles de détection d’objets à mieux gérer différentes échelles et translations d’objets.

-
Augmentation Copy-Paste : méthode innovante d’augmentation des données qui copie des régions aléatoires d’une image et les colle sur une autre image choisie aléatoirement, générant ainsi un nouvel échantillon d’entraînement.

-
Transformations affines aléatoires : elles comprennent la rotation, la mise à l’échelle, la translation et l’inclinaison aléatoires des images.

-
Augmentation MixUp : méthode qui crée des images composites en effectuant une combinaison linéaire de deux images et de leurs annotations associées.

-
Albumentations : bibliothèque performante d’augmentation d’images prenant en charge une grande variété de techniques d’augmentation. En savoir plus sur l’utilisation des augmentations d’Albumentations.
-
Augmentation HSV : modifications aléatoires de la teinte, de la saturation et de la valeur des images.

-
Retournement horizontal aléatoire : méthode d’augmentation qui retourne aléatoirement les images horizontalement.

3. Stratégies d’entraînement#
YOLOv5 applique plusieurs stratégies d’entraînement sophistiquées pour améliorer les performances du modèle. Elles comprennent :
- Entraînement multirésolution : les images d’entrée sont redimensionnées aléatoirement entre 0,5 et 1,5 fois leur taille d’origine pendant l’entraînement.
- AutoAnchor : cette stratégie optimise les boîtes d’ancrage a priori afin qu’elles correspondent aux caractéristiques statistiques des boîtes de vérité terrain de tes données personnalisées.
- Warmup et planificateur LR cosinus : méthode permettant d’ajuster le taux d’apprentissage afin d’améliorer les performances du modèle.
- Moyenne mobile exponentielle (EMA) : stratégie qui utilise la moyenne des paramètres sur les étapes précédentes pour stabiliser l’entraînement et réduire l’erreur de généralisation.
- Entraînement en précision mixte : méthode qui exécute les opérations dans un format en demi-précision, réduisant ainsi l’utilisation de la mémoire et améliorant la vitesse de calcul.
- Évolution des hyperparamètres : stratégie visant à ajuster automatiquement les hyperparamètres pour obtenir des performances optimales. En savoir plus sur l’ajustement des hyperparamètres.
4. Fonctionnalités supplémentaires#
4.1 Calcul des pertes#
La perte de YOLOv5 est calculée comme une combinaison de trois composantes de perte individuelles :
- Perte des classes (BCE Loss) : la perte d’entropie croisée binaire mesure l’erreur de la tâche de classification.
- Perte d’objectness (BCE Loss) : une autre perte d’entropie croisée binaire qui calcule l’erreur commise lors de la détection de la présence ou de l’absence d’un objet dans une cellule particulière de la grille.
- Perte de localisation (CIoU Loss) : la perte IoU complète mesure l’erreur de localisation de l’objet dans la cellule de la grille.
La fonction de perte globale est représentée par :
4.2 Équilibrage des pertes#
Les pertes d’objectness des trois couches de prédiction (P3, P4, P5) sont pondérées différemment. Les poids d’équilibrage sont respectivement [4.0, 1.0, 0.4]. Cette approche garantit que les prédictions à différentes échelles contribuent de manière appropriée à la perte totale.
4.3 Élimination de la sensibilité à la grille#
L’architecture de YOLOv5 apporte plusieurs modifications importantes à la stratégie de prédiction des boîtes par rapport aux versions précédentes de YOLO. Dans YOLOv2 et YOLOv3, les coordonnées des boîtes étaient prédites directement à l’aide de l’activation de la dernière couche.
Cependant, dans YOLOv5, la formule de prédiction des coordonnées des boîtes a été mise à jour afin de réduire la sensibilité à la grille et d’empêcher le modèle de prédire des dimensions de boîte non bornées.
Les formules révisées de calcul de la boîte englobante prédite sont les suivantes :
Compare le décalage du point central avant et après la mise à l’échelle. La plage du décalage du point central est ajustée de (0, 1) à (-0.5, 1.5). Le décalage peut donc facilement atteindre 0 ou 1.
Compare le rapport de mise à l’échelle de la hauteur et de la largeur (par rapport à l’ancre) avant et après l’ajustement. Les équations originales des boîtes yolo/darknet présentent un défaut sérieux. La largeur et la hauteur sont complètement non bornées, car elles suivent simplement out=exp(in), ce qui est dangereux, car cela peut entraîner une explosion des gradients, des instabilités, des pertes NaN et, à terme, une interruption complète de l’entraînement. Consulte ce problème pour plus de détails.
4.4 Construction des cibles#
Le processus de construction des cibles dans YOLOv5 est essentiel pour l’efficacité de l’entraînement et la précision du modèle. Il consiste à attribuer les boîtes de vérité terrain aux cellules appropriées de la grille dans la carte de sortie et à les associer aux boîtes d’ancrage appropriées.
Ce processus suit les étapes suivantes :
- Calcule le rapport entre les dimensions de la boîte de vérité terrain et celles de chaque modèle d’ancrage.
- Si le rapport calculé est inférieur au seuil, associe la boîte de vérité terrain à l’ancre correspondante.
- Attribue l’ancre associée aux cellules appropriées, en gardant à l’esprit qu’en raison du décalage révisé du point central, une boîte de vérité terrain peut être attribuée à plusieurs ancres, car la plage du décalage du point central est ajustée de (0, 1) à (-0.5, 1.5), ce qui permet des associations supplémentaires.
Ainsi, le processus de construction des cibles garantit que chaque objet de vérité terrain est correctement attribué et associé pendant l’entraînement, ce qui permet à YOLOv5 d’apprendre plus efficacement la tâche de détection d’objets.
Conclusion#
YOLOv5 constitue une étape importante dans l’évolution de la détection d’objets en temps réel. Ses choix architecturaux, ses stratégies d’entraînement et ses améliorations techniques offrent de solides performances et une bonne efficacité par rapport aux versions précédentes de YOLO.
Les principales améliorations de YOLOv5 comprennent l’utilisation d’une architecture dynamique, une vaste gamme de techniques d’augmentation des données, des stratégies d’entraînement innovantes, ainsi que des ajustements importants du calcul des pertes et du processus de construction des cibles. Toutes ces innovations améliorent considérablement la précision et l’efficacité de la détection d’objets tout en conservant une vitesse élevée, caractéristique des modèles YOLO.