Ultralytics YOLOv5 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 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
YOLOv5L'architecture de l'application 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 l'outil
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 à la tête. Sur YOLOv5,
SPPF
etNew 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 introduit quelques changements mineurs par rapport à ses prédécesseurs :
- Le
Focus
que l'on trouvait dans les versions précédentes, est remplacée par une structure6x6 Conv2d
structure. Ce changement renforce l'efficacité #4825. - Le
SPP
est remplacée parSPPF
. Cette modification fait plus que doubler la vitesse de traitement.
Pour tester la vitesse de SPP
et SPPF
Le 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()
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 l'adaptation excessive. Ces techniques sont les suivantes :
-
Augmentation de la mosaïque: Technique de traitement d'images 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.
-
Augmentation par copier-coller: Il s'agit d'une méthode innovante d'augmentation des données qui consiste à copier des parties aléatoires d'une image et à les coller sur une autre image choisie au hasard, ce qui permet de générer un nouvel échantillon d'apprentissage.
-
Transformations affines aléatoires: Il s'agit d'une rotation, d'une mise à l'échelle, d'une translation et d'un 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 bibliothèque puissante pour l'augmentation d'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.
-
Retournement horizontal aléatoire: Une méthode d'augmentation qui retourne les images horizontalement de manière aléatoire.
3. Stratégies de formation
YOLOv5 applique plusieurs stratégies de formation sophistiquées pour améliorer les performances du modèle. Il s'agit notamment de
- Apprentissage multi-échelle: Les images d'entrée sont redimensionnées de manière 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 la vérité terrain dans vos données personnalisées.
- Planificateur LR pour l'échauffement et le cosinus: Une méthode pour ajuster le taux d'apprentissage afin d'améliorer la performance 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 de formation et réduire l'erreur de généralisation.
- Formation à laprécision mixte: Méthode permettant d'effectuer des opérations en demi-précision, ce qui réduit l'utilisation de la mémoire et améliore 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 Calcul des pertes
La perte sur le site 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 :
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 garantit que les prévisions à 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 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.
Toutefois, sur le site YOLOv5, la formule de prévision des coordonnées de la boîte a été mise à jour afin de réduire la sensibilité de la grille et d'empêcher le modèle de prévoir des dimensions de boîte non bornées.
Les formules révisées pour le calcul de la boîte de délimitation prédite sont les suivantes :
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 atteindre 0 ou 1.
Comparez 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 borné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, en fin de compte, une perte totale de l'apprentissage .
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 à assigner les cases de la vérité au sol 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 :
- Calculer le rapport entre les dimensions de la boîte de vérité au sol et les dimensions de chaque gabarit d'ancrage.
- Si le rapport calculé est inférieur au seuil, la boîte de la vérité au sol correspond à l'ancre correspondante.
- Assignez l'ancrage correspondant 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é au sol peut être assignée à plus d'un ancrage. La plage de décalage du point central étant 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 de points d'ancrage.
De cette manière, le processus de construction des cibles garantit que chaque objet de la vérité terrain est correctement attribué et apparié au cours du 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 intégrant diverses nouvelles fonctionnalités, améliorations et stratégies de formation, il surpasse les versions précédentes de la famille YOLO en termes de performances 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 .