Conseils pour obtenir les meilleurs résultats d'entraînement YOLOv5
📚 Ce guide explique comment produire les meilleurs résultats mAP et d'entraînement avec YOLOv5 🚀.
La plupart du temps, de bons résultats peuvent être obtenus sans modification des modèles ou des paramètres d'entraînement, à condition que votre ensemble de données soit suffisamment volumineux et bien étiqueté. Si vous n'obtenez pas de bons résultats au début, vous pouvez prendre des mesures pour vous améliorer, mais nous recommandons toujours aux utilisateurs de s'entraîner d'abord avec tous les paramètres par défaut avant d'envisager des modifications. Cela permet d'établir une base de référence des performances et de repérer les points à améliorer.
Si vous avez des questions sur vos résultats d'entraînement nous vous recommandons de fournir le maximum d'informations possible si vous vous attendez à une réponse utile, incluant des graphiques de résultats (pertes d'entraînement, pertes de validation, P, R, mAP), une courbe PR, matrice de confusion, les mosaïques d’entraînement, les résultats des tests et les images de statistiques de l’ensemble de données telles que labels.png. Tous ces éléments se trouvent dans votre project/name
répertoire, généralement yolov5/runs/train/exp
.
Nous avons préparé un guide complet pour les utilisateurs qui cherchent à obtenir les meilleurs résultats sur leurs entraînements YOLOv5 ci-dessous.
Ensemble 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é d'images. Doit être représentatif de l'environnement de déploiement. Pour les cas d'utilisation réels, nous recommandons des images prises à différents moments de la journée, à différentes saisons, avec différentes conditions météorologiques, différents éclairages, différents angles, différentes sources (récupérées en ligne, collectées localement, différentes caméras), etc.
- Cohérence des étiquettes. Toutes les instances de toutes les classes dans toutes les images doivent être étiquetées. L’étiquetage partiel ne fonctionnera pas.
- Exactitude de l’étiquette. Les étiquettes doivent enfermer étroitement chaque objet. Il ne doit pas y avoir d’espace entre un objet et sa boîte englobante. Aucun objet ne doit être manquant d’une étiquette.
- Vérification de l'étiquette. Afficher
train_batch*.jpg
au démarrage de l'entraînement, pour vérifier que vos étiquettes apparaissent correctement, c'est-à-dire, voir example mosaïque. - Images d'arrière-plan. Les images d'arrière-plan sont des images sans objets qui sont ajoutées à un ensemble 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 a 1 000 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 de 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 mobiles, nous recommandons YOLOv5s/m, pour les déploiements cloud, nous recommandons YOLOv5l/x. Consultez notre tableau README pour une comparaison complète de tous les modèles.
-
Partir de poids pré-entraînés. Recommandé pour les ensembles de données de petite à moyenne taille (c'est-à-dire VOC, VisDrone, GlobalWheat). Passez le nom du modèle au
--weights
argument. Les modèles sont téléchargés automatiquement depuis le dernière version de YOLOv5.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
-
Partir de zéro. Recommandé pour les grands ensembles de données (c'est-à-dire COCO, Objects365, OIv6). Passez le YAML de l'architecture du modèle qui vous intéresse, ainsi qu'un
--weights ''
argument :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, entrainez d'abord avec les paramètres par défaut pour établir une base de référence de performance. Une liste complète des paramètres de train.py se trouve dans l'analyseur d'arguments train.py.
- Epochs. Commencez avec 300 epochs. Si cela surajuste tôt, vous pouvez réduire le nombre d'epochs. Si le surapprentissage ne se produit pas après 300 epochs, entraînez-vous plus longtemps, c'est-à-dire 600, 1200, etc. epochs.
- Taille de l'image. COCO s'entraîne à la résolution native de
--img 640
, bien qu’en raison de la grande quantité de petits objets dans l’ensemble de données, il puisse être avantageux de s’entraîner à des résolutions plus élevées telles que--img 1280
. S'il y a beaucoup de petits objets, les ensembles de données 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--img
comme l'entraînement a été exécuté, c'est-à-dire si vous vous entraînez à--img 1280
vous devez également tester et détecter à--img 1280
. - Taille du lot. Utiliser le plus grand
--batch-size
que votre matériel permet. Les petites tailles de lots produisent de mauvais normalisation par lots statistiques et doivent être évitées. Vous pouvez utiliser--batch-size -1
pour sélectionner automatiquement la taille de lot optimale pour votre GPU. - Taux d'apprentissage. Le calendrier d'apprentissage par défaut fonctionne bien dans la plupart des cas. Pour une convergence plus rapide, vous pouvez essayer d'utiliser le
--cos-lr
flag pour activer la planification du taux d'apprentissage cosinus, qui réduit progressivement le taux d'apprentissage en suivant une courbe cosinus au fil des epochs. - Augmentation de données. YOLOv5 comprend diverses techniques d'augmentation comme la mosaïque, qui combine plusieurs images d'entraînement. Pour les dernières époques, envisagez d'utiliser
--close-mosaic 10
pour désactiver l'augmentation de mosaïque, ce qui peut aider à stabiliser l'apprentissage. - Hyperparamètres. Les hyperparamètres par défaut se trouvent dans hyp.scratch-low.yaml. Nous vous recommandons de vous entraîner d'abord avec les hyperparamètres par défaut avant de penser à en modifier. En général, l'augmentation des hyperparamètres d'augmentation réduira et retardera le surapprentissage, ce qui permettra des entraînements plus longs et un mAP final plus élevé. La réduction des hyperparamètres de gain de composante 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, consultez notre Tutoriel sur l'évolution des hyperparamètres. - Entraînement en précision mixte. Activer la formation en précision mixte avec
--amp
pour accélérer l'entraînement et réduire l'utilisation de la mémoire sans sacrifier la précision du modèle. - Entraînement multi-GPU. Si vous avez plusieurs GPU, utilisez
--device 0,1,2,3
pour répartir l'apprentissage entre eux, ce qui peut réduire considérablement le temps d'apprentissage. - Arrêt précoce. Utilisez
--patience 50
to stop training if validation metrics don't improve for 50 epochs, saving time and preventing overfitting.
Techniques d'optimisation avancées
- Apprentissage par transfert. Pour les ensembles de données spécialisés, commencez avec des poids pré-entraînés et dégelez progressivement les couches pendant l'entraînement pour adapter le modèle à votre tâche spécifique.
- Élagage de modèle. Après l'entraînement, envisagez d'élaguer votre modèle pour supprimer les poids redondants et réduire la taille du modèle sans perte de performance significative.
- Ensemble de modèles. Pour les applications critiques, entraînez plusieurs modèles avec différentes configurations et combinez leurs prédictions pour une précision améliorée.
- Augmentation au moment du test. Activer TTA pendant l'inférence avec
--augment
pour améliorer la précision des prédictions en faisant la moyenne des résultats des versions augmentées de l'image d'entrée.
Lectures complémentaires
Si vous souhaitez en savoir plus, un bon point de départ est le document 'Recipe for Training Neural Networks' de Karpathy, qui contient d'excellentes idées pour l'entraînement qui s'appliquent largement à 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, consultez la documentation des paramètres d'entraînement Ultralytics, qui fournit des explications complètes de tous les paramètres disponibles.
Bonne chance 🍀 et n'hésitez pas à nous contacter si vous avez d'autres questions !
FAQ
Comment puis-je savoir si mon modèle est en surapprentissage ?
Votre modèle peut être en surapprentissage si la perte d'entraînement continue de diminuer alors que la perte de validation commence à augmenter. Surveillez la mAP de validation - si elle se stabilise 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.
Quelle est la taille de batch optimale pour l'entraînement de YOLOv5 ?
La taille de batch optimale dépend de la mémoire de votre GPU. Des tailles de batch plus importantes fournissent généralement de meilleures statistiques de normalisation de batch et une meilleure stabilité de l'entraînement. Utilisez la plus grande taille de batch que votre matériel peut gérer sans manquer de mémoire. Vous pouvez utiliser --batch-size -1
pour déterminer automatiquement la taille de lot optimale pour votre configuration.
Comment puis-je accélérer l'entraînement de YOLOv5 ?
Pour accélérer l'entraînement, essayez d'activer l'entraînement en précision mixte avec --amp
, en utilisant plusieurs GPU avec --device 0,1,2,3
, en mettant en cache votre ensemble de données avec --cache
, et en optimisant la taille de votre lot. Pensez également à utiliser une variante de modèle plus petite comme YOLOv5s si la précision absolue n'est pas essentielle.