Passer au contenu

Architecture Ultralytics YOLOv5

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, les stratégies d'augmentation des données, les méthodologies d'entraînement et les techniques de calcul des pertes. Cette compréhension globale vous aidera à améliorer votre application 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: C'est le corps principal du réseau. Pour YOLOv5, le backbone est conçu en utilisant le CSPDarknet53 structure, une modification de l'architecture Darknet utilisée dans les versions précédentes.
  • Neck: Cette partie connecte le backbone et la tête. Dans YOLOv5, SPPF (Spatial Pyramid Pooling - Fast) et PANet Les structures (Path Aggregation Network) sont utilisées.
  • Tête: Cette partie est responsable de la génération de la sortie finale. YOLOv5 utilise le YOLOv3 Head à cette fin.

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 yolov5l.yaml.

yolov5

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

  1. L'argument Focus la structure, présente dans les versions antérieures, est remplacée par un 6x6 Conv2d structure. Ce changement améliore l'efficacité #4825.
  2. L'argument SPP la structure 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 SPPF, le code suivant peut être utilisé :

Exemple de profilage de la vitesse SPP vs SPPF (cliquez pour ouvrir)
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.20780706405639648

2. Techniques d'augmentation des données

YOLOv5 utilise diverses techniques d'augmentation des données pour améliorer la capacité du modèle à généraliser et à réduire le surapprentissage. Ces techniques comprennent :

  • Augmentation mosaïque : Une technique de traitement d’image qui combine quatre images d’entraînement en une seule de manière à encourager les modèles de détection d’objets à mieux gérer différentes échelles et translations d’objets.

    mosaïque

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

    copier-coller

  • Transformations affines aléatoires : Cela comprend la rotation aléatoire, la mise à l’échelle, la translation et le cisaillement des images.

    random-affine

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

    mixup

  • Albumentations : Une bibliothèque puissante pour l’augmentation d’images qui prend en charge une grande variété de techniques d’augmentation. Apprenez-en davantage sur l’utilisation des augmentations d’Albumentations.

  • Augmentation HSV : Modifications aléatoires de la Teinte, de la Saturation et de la Valeur des images.

    hsv

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

    horizontal-flip

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 multi-échelle : Les images d’entrée sont redimensionnées aléatoirement entre 0,5 et 1,5 fois leur taille d’origine pendant le processus d’entraînement.
  • AutoAnchor : Cette stratégie optimise les boîtes d'ancrage antérieures pour qu'elles correspondent aux caractéristiques statistiques des boîtes de vérité terrain dans vos données personnalisées.
  • Warmup et planificateur LR cosinus : 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 en format de 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. Pour en savoir plus, consultez la section sur le réglage des hyperparamètres.

4. 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, mesure l'erreur pour la tâche de classification.
  • Perte d'objectivité (BCE Loss): Une autre perte d'entropie croisée binaire, calcule l'erreur de détection de la présence d'un objet dans une cellule de grille particulière ou non.
  • Perte de localisation (Perte CIoU) : 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 :

perte

4.2 Équilibrer les pertes

Les pertes d'objectivité des trois couches de prédiction (P3, P4, P5) sont pondérés différemment. Les poids d'équilibrage 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.

obj_loss

4.3 Éliminer la sensibilité de la grille

L'architecture YOLOv5 apporte des modifications importantes à la stratégie de prédiction des boîtes par rapport aux versions antérieures de YOLO. Dans YOLOv2 et YOLOv3, les coordonnées des boîtes étaient directement prédites à l'aide de l'activation de la dernière couche.

b_x b_y b_w b_h

Calcul de la grille YOLOv5

Cependant, dans YOLOv5, la formule de prédiction des coordonnées de la boîte a été mise à jour pour réduire la sensibilité de 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 :

bx by bw bh

Comparez 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 être de 0 ou 1.

Mise à l'échelle de la grille YOLOv5

Comparez le rapport d'échelle de hauteur et de largeur (par rapport à l'ancre) avant et après ajustement. Les équations de boîte yolo/darknet originales ont un défaut sérieux. 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ôlables, des instabilités, des pertes NaN et, finalement, une perte complète de l'entraînement. Reportez-vous à ce problème pour plus de détails.

Mise à l'échelle illimitée de YOLOv5

4.4 Construire les cibles

Le processus de build target dans YOLOv5 est essentiel pour l'efficacité de l'entraînement et la précision du modèle. Il implique l'attribution des boîtes de vérité terrain aux cellules de grille appropriées dans la carte de sortie et leur mise en correspondance avec les boîtes d'ancrage appropriées.

Ce processus suit les étapes suivantes :

  • Calculer le ratio entre les dimensions de la boîte de vérité terrain et les dimensions de chaque modèle d'ancrage.

rw

rh

rwmax

rhmax

rmax

correspondance

Calcul de l'IoU YOLOv5

  • Si le ratio calculé se situe dans la limite, faites correspondre la boîte de vérité terrain avec l'ancre correspondante.

Chevauchement de la grille YOLOv5

  • Attribuez 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 attribuée à plus d'une ancre. Étant donné que la plage de décalage du point central est ajustée de (0, 1) à (-0.5, 1.5). La boîte GT peut être attribuée à plus d'ancres.

Sélection d'ancres YOLOv5

De cette façon, le processus de construction des cibles garantit que chaque objet de vérité terrain est correctement attribué et mis en correspondance pendant le processus d'entraînement, ce qui permet à YOLOv5 d'apprendre plus efficacement la tâche de détection d'objets.

Conclusion

En conclusion, YOLOv5 représente une avancée significative dans le développement de modèles de détection d'objets en temps réel. En intégrant diverses nouvelles fonctionnalités, améliorations et stratégies d'entraînement, il surpasse les versions précédentes de la famille YOLO en termes de performances et d'efficacité.

Les principales améliorations de YOLOv5 incluent 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 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 degré élevé de vitesse, qui est la marque de fabrique des modèles YOLO.



📅 Créé il y a 1 an ✏️ Mis à jour il y a 5 mois

Commentaires