Conseils pour obtenir les meilleurs résultats en matière 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 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.
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.
- 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
yolov5m.pt
yolov5l.pt
yolov5x.pt
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
yolov5m.yaml
yolov5l.yaml
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 640
Cependant, 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 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 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.
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/
Bonne chance 🍀 et n'hésitez pas à nous faire part de vos questions !