Skip to content

Ultralytics YOLOv5 L'architecture

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 des pertes. Cette compréhension globale te permettra d'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.

1. Structure du modèle

YOLOv5L'architecture du site se compose de trois parties principales :

  • Dorsale: Il s'agit du corps principal du rĂ©seau. Pour YOLOv5, l'Ă©pine dorsale est conçue Ă  l'aide de la fonction New CSP-Darknet53 une modification de l'architecture Darknet utilisĂ©e dans les versions prĂ©cĂ©dentes.
  • Cou: Cette partie relie la colonne vertĂ©brale et la tĂŞte. Sur YOLOv5, SPPF et New CSP-PAN sont utilisĂ©es.
  • TĂŞte: Cette partie est responsable de la production du rĂ©sultat final. YOLOv5 utilise la fonction YOLOv3 Head Ă  cette fin.

La structure du modèle est représentée dans l'image ci-dessous. Les détails de la structure du modèle se trouvent dans yolov5l.yaml.

yolov5

YOLOv5 introduit quelques changements mineurs par rapport à ses prédécesseurs :

  1. Le Focus que l'on trouvait dans les versions précédentes, est remplacée par une structure 6x6 Conv2d structure. Ce changement renforce l'efficacité #4825.
  2. Le SPP est remplacée par SPPF. Cette modification fait plus que doubler la vitesse de traitement.

Pour tester la vitesse de SPP et SPPFLe code suivant peut être utilisé :

Exemple de profilage de vitesse SPP vs SPPF (cliquer 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 à se généraliser et à réduire la suradaptation. Ces techniques comprennent :

  • Augmentation de la mosaĂŻque: Une technique de traitement d'image qui combine quatre images d'apprentissage en une seule de manière Ă  encourager les modèles de dĂ©tection d'objets Ă  mieux gĂ©rer les 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 de formation.

    copier-coller

  • Transformations affines alĂ©atoires: Cela comprend la rotation, la mise Ă  l'Ă©chelle, la translation et le cisaillement alĂ©atoires 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.

    mélange

  • Albumentations: Une bibliothèque puissante pour l'augmentation des images qui prend en charge une grande variĂ©tĂ© de techniques d'augmentation.

  • 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 les images horizontalement de façon alĂ©atoire.

    retournement horizontal

3. Stratégies de formation

YOLOv5 applique plusieurs stratégies de formation sophistiquées pour améliorer les performances du modèle. Elles comprennent :

  • Formation multi-Ă©chelle: Les images d'entrĂ©e sont redimensionnĂ©es de façon alĂ©atoire dans une fourchette de 0,5 Ă  1,5 fois leur taille d'origine au cours du processus d'apprentissage.
  • AutoAnchor: Cette stratĂ©gie optimise les boĂ®tes d'ancrage prĂ©alables pour qu'elles correspondent aux caractĂ©ristiques statistiques des boĂ®tes de vĂ©ritĂ© terrain de tes donnĂ©es personnalisĂ©es.
  • Programmation de l'Ă©chauffement et du cosinus LR: Une mĂ©thode pour 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 passĂ©es pour stabiliser le processus de formation et rĂ©duire l'erreur de gĂ©nĂ©ralisation.
  • EntraĂ®nement Ă  la prĂ©cision mixte: MĂ©thode permettant d'effectuer des opĂ©rations en demi-prĂ©cision, ce qui permet de rĂ©duire l'utilisation de la mĂ©moire et d'amĂ©liorer la vitesse de calcul.
  • Évolution des hyperparamètres: Une stratĂ©gie pour ajuster automatiquement les hyperparamètres afin d'obtenir des performances optimales.

4. Caractéristiques supplémentaires

4.1 Calculer les pertes

La perte sur YOLOv5 est calculée comme une combinaison de trois éléments de perte individuels :

  • Perte de classes (perte BCE): La perte d'entropie croisĂ©e binaire, 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 de dĂ©tection de la prĂ©sence ou non d'un objet dans une cellule particulière de la grille.
  • Perte de localisation (perte CIoU): La perte de CIoU complète, mesure l'erreur de localisation de l'objet Ă  l'intĂ©rieur de la cellule de la grille.

La fonction de perte globale est représentée par :

perte

4.2 Pertes d'Ă©quilibre

Les pertes d'objectivité des trois couches de prédiction (P3, P4, P5) sont pondérés différemment. Les poids d'équilibre sont [4.0, 1.0, 0.4] respectivement. Cette approche permet de s'assurer que les prédictions à différentes échelles contribuent de manière appropriée à la perte totale.

obj_loss

4.3 Éliminer la sensibilité à la grille

L'architecture YOLOv5 apporte des changements importants à 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 directement prédites à l'aide de l'activation de la dernière couche.

b_x b_y b_w b_h

YOLOv5 calcul de la grille

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 de délimitation prédite sont les suivantes :

bx par bw bh

Compare le décalage du point central avant et après la mise à l'échelle. La plage de décalage du point central est réglée de (0, 1) à (-0,5, 1,5). Par conséquent, le décalage peut facilement atteindre 0 ou 1.

YOLOv5 mise Ă  l'Ă©chelle de la grille

Compare le rapport d'échelle de la hauteur et de la largeur (par rapport à l'ancre) avant et après l'ajustement. Les équations originales de la boîte yolo/darknet présentent un grave défaut. La largeur et la hauteur ne sont absolument pas limité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 .

YOLOv5 échelle illimitée

4.4 Objectifs de construction

Le processus de construction de la cible dans YOLOv5 est essentiel pour l'efficacité de la formation et la précision du modèle. Il consiste à attribuer des cases de vérité terrain aux mailles appropriées de la carte de sortie et à les faire correspondre aux cases 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 les dimensions de chaque modèle d'ancrage.

rw

rh

rwmax

rhmax

rmax

correspondre

YOLOv5 Calcul de l'IoU

  • Si le rapport calculĂ© est infĂ©rieur au seuil, fais correspondre la boĂ®te de la vĂ©ritĂ© terrain avec l'ancre correspondante.

YOLOv5 chevauchement des grilles

  • Affecte l'ancre correspondante aux cellules appropriĂ©es, en gardant Ă  l'esprit qu'en raison de la rĂ©vision du dĂ©calage du point central, une case de vĂ©ritĂ© terrain peut ĂŞtre affectĂ©e Ă  plus d'une ancre. Parce 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 assignĂ©e Ă  plus d'ancres. La boĂ®te GT peut ĂŞtre assignĂ©e Ă  plus d'ancres.

YOLOv5 sélection de l'ancre

De cette façon, le processus de construction des cibles garantit que chaque objet de la vérité terrain est correctement assigné et apparié pendant le processus de formation, 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 incorporant diverses nouvelles fonctions, améliorations et stratégies de formation, il surpasse les versions précédentes de la famille YOLO en termes de performance et d'efficacité.

Les principales améliorations apportées à YOLOv5 comprennent l'utilisation d'une architecture dynamique, une gamme étendue de techniques d'augmentation des données, des stratégies d'entraînement innovantes, ainsi que des ajustements importants au niveau des pertes de calcul 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 grande rapidité, ce qui est la marque de fabrique des modèles YOLO .



Created 2023-11-12, Updated 2024-06-19
Authors: ambitious-octopus (1), glenn-jocher (9), sergiuwaxmann (1)

Commentaires