Ultralytics YOLOv5 L'architecture
YOLOv5 (v6.0/6.1) is a powerful object detection algorithm developed by Ultralytics. This article dives deep into the YOLOv5 architecture, data augmentation strategies, training methodologies, and loss computation techniques. This comprehensive understanding will help improve your practical application of object detection in various fields, including surveillance, autonomous vehicles, and image recognition.
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
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 employs various data augmentation techniques to improve the model's ability to generalize and reduce overfitting. These techniques include:
-
Mosaic Augmentation: An image processing technique that combines four training images into one in ways that encourage object detection models to better handle various object scales and translations.
-
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.
-
Transformations affines aléatoires: Cela comprend 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 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.
-
Retournement horizontal aléatoire: Une méthode d'augmentation qui retourne les images horizontalement de façon aléatoire.
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.
- Warmup and Cosine LR Scheduler: A method to adjust the learning rate to enhance model performance.
- 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.
- Mixed Precision Training: A method to perform operations in half-precision format, reducing memory usage and enhancing computational speed.
- É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.
The overall loss function is depicted by:
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.
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.
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.
The revised formulas for calculating the predicted bounding box are as follows:
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.
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 .
4.4 Objectifs de construction
The build target process in YOLOv5 is critical for training efficiency and model accuracy. It involves assigning ground truth boxes to the appropriate grid cells in the output map and matching them with the appropriate anchor boxes.
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.
- Si le rapport calculé est inférieur au seuil, fais correspondre la boîte de la vérité terrain avec l'ancre correspondante.
- 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.
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 .