Architecture de YOLOv5 par Ultralytics
YOLOv5 (v6.0/6.1) est un algorithme de détection d'objets puissant développé par Ultralytics. Cet article explore en profondeur l'architecture de YOLOv5, ses stratégies d'augmentation de données, ses méthodologies d'entraînement et ses techniques de calcul de perte. Cette compréhension complète t'aidera à améliorer ton application pratique de la détection d'objets dans divers domaines, notamment la surveillance, les véhicules autonomes et la reconnaissance d'images.
Structure du modèle
L'architecture de YOLOv5 se compose de trois parties principales :
- Backbone (colonne vertébrale) : C'est le corps principal du réseau. Pour YOLOv5, le backbone est conçu en utilisant la structure
CSPDarknet53, une modification de l'architecture Darknet utilisée dans les versions précédentes. - Neck (cou) : Cette partie connecte le backbone et la tête. Dans YOLOv5, les structures
SPPF(Spatial Pyramid Pooling - Fast) etPANet(Path Aggregation Network) sont utilisées. - Head (tête) : Cette partie est responsable de la génération du résultat final. YOLOv5 utilise la
YOLOv3 Headà cet effet.
La structure du modèle est illustrée dans l'image ci-dessous. Les détails de la structure du modèle se trouvent dans models/yolov5l.yaml.

YOLOv5 introduit quelques 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. Ce changement améliore l'efficacité #4825. - La structure
SPPest remplacée parSPPF. Cette modification plus que double la vitesse de traitement tout en conservant le même résultat.
Pour tester la vitesse de SPP et SPPF, le code suivant peut être utilisé :
SPP vs SPPF speed profiling example (click to open)
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()résultat :
True
SPP time: 0.5373051166534424
SPPF time: 0.20780706405639648Techniques d'augmentation de données
YOLOv5 utilise diverses techniques d'augmentation de données pour améliorer la capacité de généralisation du modèle et réduire le surapprentissage. Ces techniques incluent :
-
Augmentation Mosaic : Une technique de traitement d'image qui combine quatre images d'entraînement en une seule, encourageant les modèles de détection d'objets à mieux gérer diverses échelles et translations d'objets.

-
Augmentation Copy-Paste : Une méthode d'augmentation de données innovante qui copie des morceaux aléatoires d'une image et les colle sur une autre image choisie au hasard, générant ainsi efficacement un nouvel échantillon d'entraînement.

-
Transformations affines aléatoires : Cela inclut la rotation, la mise à l'échelle, la translation et le cisaillement aléatoires des images.

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

-
Albumentations : Une puissante bibliothèque d'augmentation d'images qui prend en charge une grande variété de techniques d'augmentation. En savoir plus sur l'utilisation des augmentations Albumentations.
-
Augmentation HSV : Modifications aléatoires de la teinte (Hue), de la saturation (Saturation) et de la valeur (Value) des images.

-
Retournement horizontal aléatoire : Une méthode d'augmentation qui retourne les images horizontalement de manière aléatoire.

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 multi-échelle : Les images d'entrée sont redimensionnées de manière aléatoire dans une plage de 0,5 à 1,5 fois leur taille d'origine pendant le processus d'entraînement.
- AutoAnchor : Cette stratégie optimise les boîtes d'ancrage (anchor boxes) préalables pour correspondre aux caractéristiques statistiques des boîtes de vérité terrain (ground truth) dans tes données personnalisées.
- Planificateur Warmup et Cosine LR : Une méthode pour ajuster le taux d'apprentissage afin d'améliorer les performances du modèle.
- Moyenne mobile exponentielle (EMA) : Une stratégie qui utilise la moyenne des paramètres sur les étapes passées pour stabiliser le processus d'entraînement et réduire l'erreur de généralisation.
- Entraînement en précision mixte : Une méthode pour effectuer des opérations dans un format demi-précision, réduisant l'utilisation de la mémoire et améliorant la vitesse de calcul.
- Évolution des hyperparamètres : Une stratégie pour ajuster automatiquement les hyperparamètres afin d'obtenir des performances optimales. En savoir plus sur le réglage des hyperparamètres.
Fonctionnalités supplémentaires
4.1 Calculer les pertes
La perte dans YOLOv5 est calculée comme une combinaison de trois composantes de perte individuelles :
- Perte de classes (Perte BCE) : Perte d'entropie croisée binaire (Binary Cross-Entropy), mesure l'erreur pour la tâche de classification.
- Perte d'objectivité (Perte BCE) : Une autre perte d'entropie croisée binaire, calcule l'erreur dans la détection si un objet est présent ou non dans une cellule de grille particulière.
- Perte de localisation (Perte CIoU) : Perte IoU complète, mesure l'erreur dans la localisation de l'objet au sein de la cellule de la grille.
La fonction de perte globale est représentée par :
4.2 Équilibrer les pertes
Les pertes d'objectivité des trois couches de prédiction (P3, P4, P5) sont pondérées différemment. Les poids d'équilibre sont [4.0, 1.0, 0.4] respectivement. Cette approche garantit que les prédictions à différentes échelles contribuent de manière appropriée à la perte totale.
4.3 Éliminer la sensibilité à la grille
L'architecture YOLOv5 apporte des changements importants à la stratégie de prédiction de boîte par rapport aux versions précédentes de YOLO. Dans YOLOv2 et YOLOv3, les coordonnées de la boîte étaient prédites directement en utilisant l'activation de la dernière couche.
Cependant, dans YOLOv5, la formule pour prédire les coordonnées de la boîte a été mise à jour pour réduire la sensibilité à la grille et empêcher le modèle de prédire des dimensions de boîte non bornées.
Les formules révisées pour calculer 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 de décalage du point central est ajustée de (0, 1) à (-0,5, 1,5). Par conséquent, le décalage peut 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 ajustement. Les équations de boîte originales yolo/darknet présentent un défaut grave. La largeur et la hauteur sont complètement illimitées car elles sont simplement out=exp(in), ce qui est dangereux, car cela peut entraîner des gradients incontrôlés, des instabilités, des pertes NaN et, finalement, une perte totale de l'entraînement. Réfère-toi à ce problème pour plus de détails.
4.4 Construire 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 implique d'assigner les boîtes de vérité terrain aux cellules de grille appropriées dans la carte de sortie et de les faire correspondre avec les boîtes d'ancrage appropriées.
Ce processus suit ces étapes :
- Calcule le rapport entre les dimensions de la boîte de vérité terrain et les dimensions de chaque modèle d'ancrage.
- Si le rapport calculé est dans le seuil, fais correspondre la boîte de vérité terrain avec l'ancre correspondante.
- Assigne l'ancre correspondante 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 assignée à plus d'une ancre car la plage de décalage du point central est ajustée de (0, 1) à (-0,5, 1,5), rendant possibles des correspondances supplémentaires.
De cette façon, le processus de construction des cibles garantit que chaque objet de vérité terrain est correctement assigné et mis en correspondance pendant le processus d'entraînement, permettant à YOLOv5 d'apprendre la tâche de détection d'objets plus efficacement.
Conclusion
YOLOv5 représente une étape significative dans l'évolution de la détection d'objets en temps réel. Ses choix architecturaux, ses stratégies d'entraînement et ses raffinements techniques offrent des performances et une efficacité solides par rapport aux versions précédentes de YOLO.
Les principales améliorations de YOLOv5 incluent l'utilisation d'une architecture dynamique, une large gamme de techniques d'augmentation de données, des stratégies d'entraînement innovantes, ainsi que des ajustements importants dans le calcul des pertes et le 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 un haut degré de vitesse, qui est la marque de fabrique des modèles YOLO.