YOLO Vision 2026 :

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) et PANet (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.

Architecture de YOLOv5 montrant le backbone, le neck et la tête

YOLOv5 introduit plusieurs améliorations notables par rapport à ses prédécesseurs :

  1. La structure Focus, présente dans les versions précédentes, est remplacée par une structure 6x6 Conv2d. Cette modification accroît l’efficacité #4825.
  2. La structure SPP est remplacée par SPPF. 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.20780706405639648

2. 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 Mosaic des données de YOLOv5 combinant quatre images

  • 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.

    Augmentation Copy-Paste de YOLOv5 pour la segmentation d’instances

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

    Transformations affines aléatoires de YOLOv5 pour l’entraînement

  • 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.

    Augmentation MixUp des données de YOLOv5 mélangeant deux images

  • 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.

    Exemples d’augmentation de l’espace colorimétrique HSV de YOLOv5

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

    Augmentation par retournement horizontal aléatoire de YOLOv5

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 :

Formule de la fonction de perte totale de YOLOv5

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.

Formule d’équilibrage de la perte d’objectness de YOLOv5

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.

Formule de prédiction de la coordonnée x de la boîte englobante Formule de prédiction de la coordonnée y de la boîte englobante Formule de prédiction de la largeur de la boîte englobante Formule de prédiction de la hauteur de la boîte englobante

YOLOv5 grid computation

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 :

Formule révisée de la coordonnée x de la boîte englobante de YOLOv5 Formule révisée de la coordonnée y de la boîte englobante de YOLOv5 Formule révisée de la largeur de la boîte englobante de YOLOv5 Formule révisée de la hauteur de la boîte englobante de YOLOv5

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.

YOLOv5 grid scaling

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.

YOLOv5 unbounded scaling

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.

Formule du rapport entre la largeur de la vérité terrain et celle de l’ancre

Formule du rapport entre la hauteur de la vérité terrain et celle de l’ancre

Formule du rapport maximal des largeurs

Formule du rapport maximal des hauteurs

Formule du rapport maximal global

Formule du seuil d’association des ancres

YOLOv5 IoU computation
  • Si le rapport calculé est inférieur au seuil, associe la boîte de vérité terrain à l’ancre correspondante.
YOLOv5 grid overlap
  • 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.
YOLOv5 anchor selection

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.

Commentaires