Ultralytics YOLO27 : Inscris-toi sur la liste d’attente.
Get Started
Leçondébutant

Utiliser l’augmentation avec précaution

Teste chaque augmentation avec la caméra de déploiement, établis un profil justifié, entraîne le modèle avec ce profil et vérifie le résultat dans les lots d’entraînement.

Imagine une ligne de tri qui sépare des capsules rouges des capsules orange et qui a été entraînée avec le réglage de teinte par défaut. À chaque époque, le modèle voit des capsules rouges teintées en orange ; il apprend donc que la couleur n’a pas d’importance, alors que c’est justement ce qu’il devait apprendre. L’augmentation ne rend un modèle plus robuste que si chaque transformation correspond à ce que la caméra de déploiement pourrait réellement produire. Cette leçon te donne le test qui permet de décider quelles transformations conserver.

Résultat

Choisis un profil d’augmentation et justifie en une ligne chaque paramètre modifié par rapport au déploiement ; entraîne le modèle avec ce profil et vérifie-le dans train_batch0.jpg.

Parcours accéléré
Si tu connais déjà les bases, voici la version courte.
  1. Commence par entraîner le modèle avec l’augmentation par défaut et consigne les résultats de référence.

  2. Désactive les transformations que la caméra ne peut jamais produire, comme les changements de teinte lorsque la couleur définit une classe.

  3. Active les transformations qu’elle peut produire, comme flipud pour les vues en plongée.

  4. Ouvre train_batch0.jpg et vérifie que les boîtes restent bien ajustées et que les caractéristiques distinctives des classes sont préservées.

Pratique

Rôle de l’augmentation#

Transformations appliquées à une photo d’un ara : retournement horizontal, recadrage, flou médian, contraste, décalage de teinte-saturation-valeur et gamma

L’augmentation des données transforme les images d’entraînement à la volée : le modèle voit donc une version légèrement différente de chaque image à chaque époque. Bien réalisée, elle améliore la robustesse aux variations d’éclairage, d’échelle et d’orientation, et réduit le surapprentissage, car le modèle ne peut pas mémoriser des images qui changent constamment. Mal réalisée, elle lui apprend des scènes physiquement impossibles et masque des lacunes dans le jeu de données qu’il faudrait corriger.

Regarde le panneau de teinte ci-dessus : l’ara rouge devient jaune. C’est sans conséquence si tu distingues les « aras des autres oiseaux », mais cela pose problème si la couleur distingue deux de tes classes.

Les paramètres par défaut importants#

Voici les valeurs par défaut d’Ultralytics 8.4 ; la référence des paramètres d’augmentation répertorie tous les arguments :

ArgumentPar défautFonctionÀ modifier quand
hsv_h0.015Variation aléatoire de la teinteRégler sur 0 lorsque la couleur définit une classe
hsv_s / hsv_v0.7 / 0.4Variation aléatoire de la saturation et de la luminositéRéduire si l’éclairage est fixe et contrôlé
degrees0.0Rotation aléatoire (±degrés)Augmenter lorsque les objets apparaissent sous n’importe quel angle
translate / scale0.1 / 0.5Translation et zoomRéduire si les recadrages risquent de couper des parties qui définissent une classe
fliplr0.5Probabilité de retournement horizontalRégler sur 0 lorsque la gauche et la droite ont de l’importance, comme pour du texte
flipud0.0Probabilité de retournement verticalAugmenter pour les vues en plongée, aériennes ou au microscope
mosaic1.0Assemble quatre images en une seuleRarement ; voir close_mosaic
close_mosaic10Désactive le mosaïquage pendant les N dernières époquesRéduire pour les entraînements très courts
mixup / cutmix0.0 / 0.0Mélange deux images ou colle un fragment de l’une sur l’autreÀ essayer sur les petits jeux de données, après avoir établi une référence
copy_paste0.0Colle des instances d’objets d’une image à une autreJeux de données de segmentation, de segmentation sémantique et de BBox orientées contenant des classes rares

Les jeux de données de profondeur font exception : mosaic, mixup, cutmix et copy_paste produiraient des cartes de profondeur appariées non valides ; le chargeur de données de profondeur les règle donc automatiquement sur 0.

Le test de déploiement#

Chaque transformation activée doit répondre à une première question, puis à une seconde :

TransformationRéaliste ?Verdict
Luminosité ±30 % sur une caméra extérieureOui : selon l’heure de la journéeÀ conserver
Retournement horizontal sur une caméra de sécuritéOui : les personnes circulent dans les deux sensÀ conserver
Retournement vertical sur une caméra fixée au murNon : le sol reste en basDésactiver
Retournement vertical pour une caméra orientée vers le bas au-dessus d’un convoyeurOui : il n’y a pas de « haut » dans l’imageActiver
Rotation à 90° pour une caméra routière fixeNon : la caméra ne tourne jamaisDésactiver
Décalage de teinte lorsque les pièces rouges et vertes appartiennent à des classes différentesNon : cela détruit le signalDésactiver

Augmentation par rotation de 180 degrés : un ara à l’envers, une vue qu’une caméra fixe orientée vers le haut ne produit jamais

Un ara à l’envers est une bonne image d’entraînement pour un drone qui regarde directement vers le bas, mais une image gâchée pour une caméra fixée à un mur. Les transformations qui échouent à ce test produisent un signal d’entraînement négatif : le modèle apprend à reconnaître des images qu’il ne verra jamais, au détriment de sa capacité à reconnaître celles qu’il verra.

Un profil pratique#

Une caméra orientée vers le bas au-dessus d’un convoyeur trie des pièces dont les classes ne se distinguent que par leur couleur. Il faut supprimer la variation de teinte, tandis que les retournements verticaux et les petites rotations deviennent réalistes. Voici l’exécution telle qu’elle est présentée sur le jeu de démonstration COCO8 ; remplace le YAML de données par le tien et indique un nombre réel d’époques :

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco8.yaml",
    epochs=1,
    imgsz=320,
    hsv_h=0.0,  # la couleur est le signal de classe : conserve les teintes fidèles
    flipud=0.5,  # vue de dessus : aucun « haut » dans l’image
    degrees=10.0,  # les pièces sont orientées selon de petits angles quelconques
)

Ouvre train_batch0.jpg dans le dossier d’exécution et vérifie trois points : les boîtes restent précises après la transformation, les indices qui définissent les classes (couleur, forme, texte) sont préservés et rien ne paraît physiquement impossible. Réduis l’intensité de toute transformation qui ne respecte pas l’un de ces critères. Entraîne ton premier modèle présente l’entraînement lui-même.

Mosaic et close_mosaic#

L’augmentation Mosaic assemble quatre photos de perroquets en une seule image d’entraînement

Mosaic assemble quatre images en une seule et est activé par défaut. C’est l’augmentation la plus efficace pour la détection : chaque image d’entraînement regroupe plusieurs scènes, échelles et contextes d’objets. Le problème, c’est que les images Mosaic ne ressemblent pas aux images rencontrées en production ; close_mosaic=10 désactive donc cette augmentation pour les 10 dernières époques afin que le modèle termine son entraînement sur des entrées réalistes. La désactivation de Mosaic désactive aussi mixup, cutmix et copy_paste, tandis que les retournements, HSV et les transformations géométriques continuent de s’appliquer.

Les exécutions courtes n’utilisent jamais le mosaïquage

Lors des exécutions de close_mosaic époques ou moins, y compris le profil d’une époque ci-dessus, le mosaïquage est désactivé dès la première époque. Évalue le mosaïquage à partir de train_batch0.jpg d’une exécution complète, pas d’un test rapide.

Ce que l’augmentation ne peut pas corriger#

L’augmentation amplifie ce qui existe déjà. Si le jeu de données ne contient aucune image nocturne, aucun réglage ne peut créer la nuit : il ne fera que produire des versions plus claires ou plus sombres d’images prises de jour. Si une classe n’est utilisable qu’avec une augmentation agressive, tu n’as pas assez d’exemples de cette classe. Reprends la collecte de données de haute qualité et représentatives.

Pousser tous les paramètres à fond masque le vrai problème

Avec un petit jeu de données, utiliser chaque augmentation au maximum entraîne le modèle sur des images de plus en plus éloignées des conditions de déploiement, et le mAP de validation baisse souvent. Ne modifie qu’un paramètre à la fois, avec une raison précise, et compare au scénario de référence par défaut sur la même séparation.

Quand les recadrages effacent la classe

Si une classe est définie par une petite partie de l’objet, comme le symbole dans le coin d’une carte à jouer, mosaic, translate et scale peuvent supprimer cette partie lors du recadrage et créer une image d’entraînement qui ressemble exactement à une autre classe. Réduis ces valeurs pour ce jeu de données et vérifie que la correction fonctionne dans train_batch0.jpg.

Essayer

Indique pour chaque argument du tableau des valeurs par défaut s’il faut le conserver, le modifier ou le désactiver pour ton déploiement, avec une justification d’une ligne pour chaque modification. Lance un entraînement avec les valeurs par défaut et un autre avec ton profil, sur le même découpage, puis consigne le mAP50-95 de validation pour les deux. Livrables : le tableau annoté, les deux scores et un train_batch0.jpg de l’exécution personnalisée.

Terminé lorsque
Tu as terminé la leçon lorsque tous les éléments suivants sont réunis.
  • Chaque argument modifié est accompagné d’une justification d’une ligne liée au déploiement.

  • Les profils par défaut et personnalisé sont comparés sur le même découpage de validation.

  • Le train_batch0.jpg de l’exécution personnalisée montre des boîtes précises et des indices de classe préservés.

Afficher la solution

Un drone surveille un port à la verticale et détecte des navires avec des boîtes orientées. De ce point de vue, il n’y a pas de « haut », les navires pointent dans toutes les directions et la couleur ne définit pas la classe :

ArgumentChoixJustification
flipud0.5Une vue du dessus reste identique après un retournement vertical
degrees180Les navires apparaissent dans toutes les orientations
hsv_hpar défautLa couleur de la coque varie et ne permet pas de définir la classe
mosaicpar défautDe nombreux petits objets par image ; Mosaic est utile

Sur le jeu de démonstration aérien DOTA8 :

yolo obb train data=dota8.yaml model=yolo26n-obb.pt epochs=1 imgsz=320 flipud=0.5 degrees=180

Pour une caméra de rue fixe, ces deux mêmes modifications échoueraient au test de déploiement : les voitures ne sont jamais à l’envers dans un flux provenant d’une caméra fixée à un mur.

Et ensuite ?

Le jeu de données, les découpages et l’augmentation sont en place ; la prochaine leçon déterminera objectivement si le jeu de données est prêt pour l’entraînement.