Conseils pour obtenir les meilleurs résultats d'entraînement avec YOLOv5#
📚 Ce guide explique comment obtenir les meilleurs mAP et résultats d'entraînement avec YOLOv5 🚀.
La plupart du temps, de bons résultats peuvent être obtenus sans modifier les modèles ou les paramètres d'entraînement, à condition que ton jeu de données soit suffisamment vaste et bien étiqueté. Si tu n'obtiens pas de bons résultats au début, il existe des étapes que tu peux suivre pour t'améliorer, mais nous recommandons toujours aux utilisateurs de commencer par s'entraîner avec tous les paramètres par défaut avant d'envisager des changements. Cela aide à établir une base de référence pour les performances et à identifier les domaines à améliorer.
Si tu as des questions sur tes résultats d'entraînement, nous te recommandons de fournir un maximum d'informations possible si tu espères une réponse utile, notamment les graphiques de résultats (pertes d'entraînement, pertes de validation, P, R, mAP), la courbe PR, la confusion matrix, les mosaïques d'entraînement, les résultats de test et les images de statistiques du dataset telles que labels.png. Tout cela se trouve dans ton répertoire project/name, généralement yolov5/runs/train/exp.
Nous avons rassemblé un guide complet ci-dessous pour les utilisateurs cherchant à obtenir les meilleurs résultats lors de leurs entraînements YOLOv5.
Jeu de données#
- Images par classe. ≥ 1500 images par classe recommandées
- Instances par classe. ≥ 10000 instances (objets étiquetés) par classe recommandées
- Variété des images. Elle doit être représentative de l'environnement de déploiement. Pour les cas d'utilisation réels, nous recommandons des images provenant de différents moments de la journée, différentes saisons, différentes conditions météorologiques, différents éclairages, différents angles, différentes sources (extraites en ligne, collectées localement, différents appareils photo), etc.
- Cohérence des étiquettes. Toutes les instances de toutes les classes dans toutes les images doivent être étiquetées. Un étiquetage partiel ne fonctionnera pas.
- Accuracy des labels. Les labels doivent entourer étroitement chaque objet. Aucun espace ne doit exister entre un objet et sa bounding box. Aucun objet ne doit manquer de label.
- Discipline de répartition train/val. Assure-toi que les images de validation et de test n'apparaissent jamais dans le jeu d'entraînement pour éviter des métriques trop optimistes. Maintiens des distributions de classes similaires entre les répartitions.
- Vérification des labels. Affiche
train_batch*.jpgau début de l'entraînement pour vérifier que tes labels semblent corrects, c'est-à-dire voir la mosaïque d'example. - Images d'arrière-plan. Les images d'arrière-plan sont des images sans objet ajoutées à un jeu de données pour réduire les faux positifs (FP). Nous recommandons environ 0 à 10 % d'images d'arrière-plan pour aider à réduire les FP (COCO contient 1000 images d'arrière-plan pour référence, soit 1 % du total). Aucune étiquette n'est requise pour les images d'arrière-plan.
Sélection du modèle#
Les modèles plus grands comme YOLOv5x et YOLOv5x6 produiront de meilleurs résultats dans presque tous les cas, mais ont plus de paramètres, nécessitent plus de mémoire CUDA pour l'entraînement et sont plus lents à exécuter. Pour les déploiements sur mobile, nous recommandons YOLOv5s/m ; pour les déploiements sur cloud, nous recommandons YOLOv5l/x. Consulte le table de notre README pour une comparaison complète de tous les modèles.

-
Commence à partir de poids pré-entraînés. Recommandé pour les datasets de petite à moyenne taille (c'est-à-dire VOC, VisDrone, GlobalWheat). Passe le nom du modèle à l'argument
--weights. Les modèles se téléchargent automatiquement à partir de la latest YOLOv5 release.python train.py --data custom.yaml --weights yolov5s.pt python train.py --data custom.yaml --weights yolov5m.pt python train.py --data custom.yaml --weights yolov5l.pt python train.py --data custom.yaml --weights yolov5x.pt python train.py --data custom.yaml --weights custom_pretrained.pt -
Commence à partir de zéro. Recommandé pour les grands datasets (c'est-à-dire COCO, Objects365, OIv6). Passe l'architecture YAML du modèle qui t'intéresse, ainsi qu'un argument
--weights ''vide :python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml python train.py --data custom.yaml --weights '' --cfg yolov5m.yaml python train.py --data custom.yaml --weights '' --cfg yolov5l.yaml python train.py --data custom.yaml --weights '' --cfg yolov5x.yaml
Paramètres d'entraînement#
Avant de modifier quoi que ce soit, entraîne-toi d'abord avec les paramètres par défaut pour établir une référence de performance. Une liste complète des paramètres de train.py se trouve dans l'argparser de train.py.
- Epochs. Commence avec 300 époques. Si cela provoque un surapprentissage précoce, tu peux réduire le nombre d'époques. Si l'overfitting ne se produit pas après 300 époques, entraîne plus longtemps, par exemple 600, 1200 époques, etc.
- Taille d'image. COCO s'entraîne à la résolution native de
--img 640, bien qu'en raison de la grande quantité de petits objets dans le dataset, il puisse bénéficier d'un entraînement à des résolutions plus élevées telles que--img 1280. S'il y a de nombreux petits objets, les datasets personnalisés bénéficieront d'un entraînement à une résolution native ou supérieure. Les meilleurs résultats d'inférence sont obtenus à la même--imgque celle utilisée pour l'entraînement, c'est-à-dire que si tu t'entraînes à--img 1280, tu dois également tester et détecter à--img 1280. - Batch size. Utilise le plus grand
--batch-sizeque ton matériel permet. Les petites tailles de batch produisent de mauvaises statistiques de batch normalization et doivent être évitées. Tu peux utiliser--batch-size -1pour sélectionner automatiquement la taille de batch optimale pour ton GPU. - Learning rate. L'ordonnancement du taux d'apprentissage par défaut fonctionne bien dans la plupart des cas. Pour une convergence plus rapide, tu peux essayer d'utiliser le fanion
--cos-lrpour activer l'ordonnancement du taux d'apprentissage en cosinus, qui réduit progressivement le taux d'apprentissage en suivant une courbe en cosinus au fil des époques. - Data augmentation. YOLOv5 inclut diverses techniques d'augmentation comme la mosaïque, qui combine plusieurs images d'entraînement. Ajuste la force de l'augmentation via l'hyperparamètre
mosaicdans ton fichier--hyppour aider à stabiliser l'entraînement. - Hyperparamètres. Les hyperparamètres par défaut se trouvent dans hyp.scratch-low.yaml. Nous te recommandons de t'entraîner d'abord avec les hyperparamètres par défaut avant d'envisager d'en modifier un. En général, l'augmentation des hyperparamètres d'augmentation réduira et retardera le surapprentissage, permettant des entraînements plus longs et un mAP final plus élevé. La réduction des hyperparamètres de gain des composantes de perte comme
hyp['obj']aidera à réduire le surapprentissage dans ces composantes de perte spécifiques. Pour une méthode automatisée d'optimisation de ces hyperparamètres, consulte notre Hyperparameter Evolution Tutorial. - Entraînement avec mixed precision. YOLOv5 active automatiquement l'Automatic Mixed Precision (AMP) lorsqu'un GPU pris en charge est détecté, ce qui accélère l'entraînement et réduit l'utilisation de la mémoire sans sacrifier la précision du modèle.
- Entraînement multi-GPU. Si tu as plusieurs GPU, utilise
--device 0,1,2,3pour répartir l'entraînement entre eux, ce qui peut réduire considérablement le temps d'entraînement. - Arrêt précoce (Early stopping). Utilise
--patience 50pour arrêter l'entraînement si les métriques de validation ne s'améliorent pas pendant 50 époques, ce qui fait gagner du temps et prévient le surapprentissage.
Techniques d'optimisation avancées#
- Transfer learning. Pour les datasets spécialisés, commence par des poids pré-entraînés et décongèle progressivement les couches pendant l'entraînement pour adapter le modèle à ta tâche spécifique.
- Model pruning. Après l'entraînement, envisage deélaguer ton modèle pour supprimer les poids redondants et réduire la taille du modèle sans perte de performance significative.
- Model ensemble. Pour les applications critiques, entraîne plusieurs modèles avec des configurations différentes et combine leurs prédictions pour une précision améliorée.
- Test-time augmentation. Active TTA pendant l'inférence avec
--augmentpour améliorer la précision des prédictions en faisant la moyenne des résultats provenant de versions augmentées de l'image d'entrée.
Pour aller plus loin#
Si tu souhaites en savoir plus, un bon point de départ est la 'Recipe for Training Neural Networks' de Karpathy, qui contient d'excellentes idées d'entraînement applicables largement dans tous les domaines du ML : https://karpathy.github.io/2019/04/25/recipe/
Pour des informations plus détaillées sur les paramètres et configurations d'entraînement, réfère-toi à la Ultralytics train settings documentation, qui fournit des explications complètes de tous les paramètres disponibles.
Bonne chance 🍀 et fais-nous savoir si tu as d'autres questions !
FAQ#
La taille de batch optimale dépend de ta mémoire GPU. Des tailles de batch plus grandes fournissent généralement de meilleures statistiques de normalisation de batch et une plus grande stabilité d'entraînement. Utilise la plus grande taille de batch que ton matériel peut supporter sans manquer de mémoire. Tu peux utiliser
--batch-size -1pour déterminer automatiquement la taille de batch optimale pour ta configuration.Pour accélérer l'entraînement, essaie : d'utiliser plusieurs GPU avec
--device 0,1,2,3, de mettre en cache ton dataset avec--cache, et d'optimiser ta taille de batch (la précision mixte est activée automatiquement sur les GPU pris en charge). Envisage également d'utiliser une variante de modèle plus petite comme YOLOv5s si la précision absolue n'est pas critique.

Ton modèle peut être en surapprentissage si la perte d'entraînement continue de diminuer alors que la perte de validation commence à augmenter. Surveille le mAP de validation - s'il plafonne ou diminue alors que la perte d'entraînement continue de s'améliorer, c'est un signe de surapprentissage. Les solutions incluent l'ajout de plus de données d'entraînement, l'augmentation de l'augmentation des données ou la mise en œuvre de techniques de régularisation.