Skip to content

Conseils pour obtenir les meilleurs résultats d'entraînement

📚 Ce guide explique comment produire les meilleurs résultats de mAP et d'entraînement avec YOLOv5 🚀.

La plupart du temps, il est possible d'obtenir de bons résultats sans modifier les modèles ou les paramètres d'entraînement, à condition que ton ensemble de données soit suffisamment grand et bien étiqueté. Si, au début, tu n'obtiens pas de bons résultats, il y a des mesures que tu peux prendre pour t'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 tout changement. Cela permet d'établir une base de performance et de repérer les points à améliorer.

Si tu as des questions sur les résultats de ton entraînement nous te recommandons de fournir le maximum d'informations possible si tu attends une réponse utile, y compris les graphiques de résultats (pertes de train, pertes de val, P, R, mAP), la courbe PR, la 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 ton project/name répertoire, généralement yolov5/runs/train/exp.

Nous avons rassemblé ci-dessous un guide complet pour les utilisateurs qui cherchent à obtenir les meilleurs résultats sur leurs formations YOLOv5 .

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ésentative de l'environnement déployé. Pour les cas d'utilisation dans le monde réel, nous recommandons des images prises à différents moments de la journée, à différentes saisons, par différents temps, sous différents éclairages, sous différents angles, à partir de différentes sources (scrapé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. Un étiquetage partiel ne fonctionnera pas.
  • Précision des étiquettes. Les étiquettes doivent entourer étroitement chaque objet. Il ne doit pas y avoir d'espace entre un objet et sa boîte de délimitation. Aucun objet ne doit manquer d'étiquette.
  • Vérification de l'étiquette. Voir train_batch*.jpg au départ du train pour vérifier que tes étiquettes semblent correctes, c'est-à-dire voir exemple mosaïque.
  • Images d'arrière-plan. Les images d'arrière-plan sont des images sans objet qui sont ajoutées à un ensemble de données pour réduire les faux positifs (FP). Nous recommandons d'ajouter entre 0 et 10 % d'images d'arrière-plan pour réduire le nombre de faux positifs (COCO contient 1000 images d'arrière-plan à titre de référence, soit 1 % du total). Aucune étiquette n'est requise pour les images d'arrière-plan.

Analyse COCO

Choix du modèle

Les modèles plus grands comme YOLOv5x et YOLOv5x6 produiront de meilleurs résultats dans presque tous les cas, mais ils ont plus de paramètres, nécessitent plus de mémoire CUDA pour s'entraîner et sont plus lents à exécuter. Pour les déploiements mobiles, nous recommandons YOLOv5s/m, pour les déploiements dans le nuage, nous recommandons YOLOv5l/x. Consulte notre tableau README pour une comparaison complète de tous les modèles.

YOLOv5 Modèles

  • Commence par les poids pré-entraînés. Recommandé pour les ensembles de données de taille petite à moyenne (c'est-à-dire COV, VisDrone, GlobalWheat). Passe le nom du modèle à la fonction --weights argument. Les modèles se téléchargent automatiquement à partir du site Dernière version de YOLOv5.
python train.py --data custom.yaml --weights yolov5s.pt
                                             yolov5m.pt
                                             yolov5l.pt
                                             yolov5x.pt
                                             custom_pretrained.pt
  • Pars de zéro. Recommandé pour les grands ensembles de données (c.-à-d. COCO, Objets365, OIv6). Passe le modèle d'architecture YAML qui t'intéresse, ainsi qu'un fichier vide --weights '' argument :
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
                                                      yolov5m.yaml
                                                      yolov5l.yaml
                                                      yolov5x.yaml

Paramètres de formation

Avant de modifier quoi que ce soit, entraîne-toi d'abord avec les paramètres par défaut pour établir une base de performance. Une liste complète des paramètres de train.py se trouve dans l'analyseur d'argents de train.py.

  • Époques. Commence avec 300 époques. Si l'adaptation est trop rapide, tu peux réduire le nombre d'époques. Si l'adaptation excessive ne se produit pas après 300 époques, entraîne-toi plus longtemps, c'est-à-dire 600, 1200, etc. époques.
  • Taille de l'image. COCO s'entraîne à une résolution native de --img 640Cependant, en raison du grand nombre de petits objets dans l'ensemble de données, il peut ê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'une formation à la résolution native ou supérieure. Les meilleurs résultats d'inférence sont obtenus à la même résolution. --img que l'entraînement, c'est-à-dire que si tu t'entraînes à --img 1280 tu dois aussi tester et détecter à --img 1280.
  • Taille du lot. Utilise le plus grand --batch-size que ton matériel le permet. Les lots de petite taille produisent de mauvaises statistiques sur la norme des lots et doivent être évités.
  • 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 de les modifier. En général, l'augmentation des hyperparamètres d'augmentation réduira et retardera le surajustement, ce qui permettra des entraînements plus longs et une mAP finale plus élevée. La réduction des hyperparamètres de gain des composantes de perte comme hyp['obj'] aidera à réduire le surajustement dans ces composantes de perte spécifiques. Pour une méthode automatisée d'optimisation de ces hyperparamètres, voir notre Tutoriel sur l'évolution des hyperparamètres.

Pour en savoir plus

Si tu veux en savoir plus, tu peux commencer par la "Recette pour la formation des réseaux neuronaux" de Karpathy, qui propose des idées géniales pour la formation qui s'appliquent largement à tous les domaines de la ML : https://karpathy.github.io/2019/04/25/recipe/.

Bonne chance 🍀 et fais-nous savoir si tu as d'autres questions !



Créé le 2023-11-12, Mis à jour le 2024-01-12
Auteurs : glenn-jocher (3)

Commentaires