Skip to content

Conseils pour obtenir les meilleurs résultats lors de l'entraînement YOLOv5

📚 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 l'ensemble de données soit suffisamment important et bien étiqueté. Si, dans un premier temps, vous n'obtenez pas de bons résultats, il est possible de prendre des mesures pour les 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 vous avez des questions sur les résultats de votre formation nous vous recommandons de fournir le maximum d'informations possible si vous attendez une réponse utile, y compris les courbes de résultats (pertes de train, pertes de val, P, R, mAP), la courbe PR, matrice de confusionles mosaïques d'entraînement, les résultats des tests et les images statistiques de l'ensemble de données, telles que labels.png. Tous ces éléments se trouvent dans votre project/name généralement dans le répertoire yolov5/runs/train/exp.

Nous avons élaboré un guide complet pour les utilisateurs qui souhaitent obtenir les meilleurs résultats lors de leurs formations sur 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ée.
  • Variété d'images. Elle doit être représentative de l'environnement déployé. Pour les cas d'utilisation réels, 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 (récupérées en ligne, collectées localement, à l'aide de 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 être dépourvu d'étiquette.
  • Vérification de l'étiquette. Voir train_batch*.jpg au démarrage du train pour vérifier que vos étiquettes sont 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 compte 1 000 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

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 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. Consultez notre tableau README pour une comparaison complète de tous les modèles.

YOLOv5 Modèles

  • Démarrer à partir des poids pré-entraînés. Recommandé pour les ensembles de données de petite ou moyenne taille (c'est-à-dire COV, VisDrone, GlobalWheat). Passez le nom du modèle à la fonction --weights argument. Les modèles sont téléchargés automatiquement à partir du site 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 (i.e. COCO, Objets365, OIv6). Passez le modèle d'architecture YAML qui vous intéresse, ainsi qu'un fichier --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 de formation

Avant de modifier quoi que ce soit, commencez par vous entraîner avec les paramètres par défaut afin d'établir une base de performance. Une liste complète des paramètres de train.py peut être trouvée dans l'analyseur d'argents de train.py.

  • Époques. Commencez avec 300 époques. Si l'adaptation excessive se produit rapidement, vous pouvez réduire le nombre d'époques. Si le surajustement ne se produit pas après 300 époques, entraînez 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 bénéficier d'un entraînement à 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 à une résolution plus élevée. Les meilleurs résultats d'inférence sont obtenus à la même résolution. --img que la formation a été effectuée, c'est-à-dire que 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 le permet. Les lots de petite taille produisent des normalisation des lots et doit être évitée. Vous pouvez utiliser --batch-size -1 pour sélectionner automatiquement la taille de lot optimale pour votre GPU.
  • Taux d'apprentissage. Le programme de taux d'apprentissage par défaut fonctionne bien dans la plupart des cas. Pour une convergence plus rapide, vous pouvez essayer d'utiliser l'option --cos-lr pour activer la programmation du taux d'apprentissage en cosinus, qui réduit progressivement le taux d'apprentissage en suivant une courbe en cosinus au fil des époques.
  • Augmentation des 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 la mosaïque, qui peut aider à stabiliser la formation.
  • 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 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 de la composante de perte comme hyp['obj'] permettra de réduire l'overfitting 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.
  • Entraînement de précision mixte. Permettre une formation mixte de précision avec --amp pour accélérer la formation et réduire l'utilisation de la mémoire sans sacrifier la précision du modèle.
  • Formation GPU . Si vous avez plusieurs GPU, utilisez --device 0,1,2,3 de répartir la formation entre eux, ce qui peut réduire considérablement le temps de formation.
  • Arrêt précoce. Utilisation --patience 50 pour arrêter la formation si les mesures de validation ne s'améliorent pas pendant 50 époques, ce qui permet de gagner du temps et d'éviter le surajustement.

Techniques d'optimisation avancées

  • Apprentissage par transfert. Pour les ensembles de données spécialisés, commencez par des poids pré-entraînés et dégeler progressivement les couches au cours de la formation afin d'adapter le modèle à votre tâche spécifique.
  • Élagage du modèle. Après la formation, 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, former plusieurs modèles avec différentes configurations et combiner leurs prédictions pour améliorer la précision.
  • Augmentation de la durée des tests. Activer le TTA pendant l'inférence avec --augment pour améliorer la précision de la prédiction en faisant la moyenne des résultats des versions augmentées de l'image d'entrée.

Pour en savoir plus

Si vous souhaitez en savoir plus, vous pouvez commencer par consulter le livre de Karpathy intitulé "Recipe for Training Neural Networks" (Recette pour la formation des réseaux neuronaux), qui contient d'excellentes idées en matière de formation, applicables à tous les domaines de ML : https://karpathy.github.io/2019/04/25/recipe/

Pour obtenir des informations plus détaillées sur les paramètres et les configurations de formation, consultez la documentation sur les paramètres de formation d'Ultralytics , qui fournit des explications complètes sur tous les paramètres disponibles.

Bonne chance 🍀 et n'hésitez pas à nous faire part de vos questions !

FAQ

Comment savoir si mon modèle est surajouté ?

Votre modèle peut être surajusté si la perte d'apprentissage continue à diminuer alors que la perte de validation commence à augmenter. Surveillez le mAP de validation - s'il atteint un plateau ou diminue alors que la perte d'apprentissage continue de s'améliorer, c'est un signe de surajustement. Les solutions comprennent l'ajout de données d'entraînement, l'augmentation des données ou la mise en œuvre de techniques de régularisation.

Quelle est la taille optimale d'un lot pour la formation à YOLOv5?

La taille optimale des lots dépend de la mémoire de votre GPU . Les lots de plus grande taille permettent généralement d'obtenir de meilleures statistiques de normalisation des lots et une meilleure stabilité de l'apprentissage. Utilisez la plus grande taille de lot 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 installation.

Comment puis-je accélérer l'entraînement YOLOv5 ?

Pour accélérer la formation, essayez : d'activer la formation de précision mixte avec --ampL'utilisation de plusieurs GPU avec --device 0,1,2,3, en mettant en cache votre jeu de données avec --cacheet en optimisant la taille de vos lots. Envisagez également d'utiliser une variante de modèle plus petit comme YOLOv5s si la précision absolue n'est pas essentielle.

📅C réé il y a 1 an ✏️ Mis à jour il y a 8 jours

Commentaires