Techniques de prétraitement des données annotées pour la vision par ordinateur#
Le prétraitement des données transforme les images brutes annotées en entrées propres et cohérentes dont un modèle de vision par ordinateur a besoin pour bien s’entraîner. Avec Ultralytics YOLO26, les principales opérations sur les pixels — conversion RGB, mise à l’échelle vers [0, 1] et redimensionnement — sont exécutées automatiquement dans le pipeline d’entraînement ; il te reste donc à diviser correctement ton jeu de données, à équilibrer les classes et à choisir les augmentations. Ce guide présente ces techniques essentielles : redimensionnement, normalisation, division du jeu de données, augmentation des données et analyse exploratoire des données (EDA).
Regarder : Comment utiliser le prétraitement et l’augmentation des données pour améliorer la précision des modèles dans des situations réelles 🚀
Cette étape intervient après avoir défini les objectifs de ton projet et collecté et annoté tes données, et se situe au début du flux de travail d’un projet de vision par ordinateur.
Pourquoi le prétraitement est important#
Le prétraitement met tes données dans un format qui réduit la charge de calcul et améliore les performances du modèle. Il répond à trois problèmes courants des données brutes :
- Bruit : variations non pertinentes ou aléatoires dans les données.
- Incohérence : variations de taille, de format et de qualité des images.
- Déséquilibre : répartition inégale des classes ou des catégories dans le jeu de données.
Techniques de prétraitement#
Les principales techniques sont le redimensionnement, la normalisation, la division du jeu de données et l’augmentation. Avec YOLO26, les deux premières sont automatiques ; tes choix ont surtout de l’importance pour la division et l’augmentation.
Redimensionner les images#
De nombreux modèles nécessitent une taille d’entrée cohérente ; le redimensionnement uniformise donc les images et réduit la complexité des calculs. Voici deux méthodes d’interpolation courantes :
- Interpolation bilinéaire : lisse les valeurs des pixels en calculant une moyenne pondérée des quatre pixels les plus proches.
- Plus proche voisin : copie la valeur du pixel le plus proche sans calculer de moyenne — c’est plus rapide, mais l’image paraît plus pixellisée.
Des bibliothèques comme OpenCV et PIL (Pillow) proposent ces fonctions, mais avec YOLO26, tu n’as généralement pas besoin de redimensionner les images manuellement. L’argument imgsz s’en charge. Dans le parcours à taille fixe et au format carré, la validation et l’inférence appliquent un letterboxing aux images pour les adapter à une entrée imgsz × imgsz, par exemple 640 × 640, tout en préservant le rapport hauteur/largeur et en ajoutant des marges grises (valeur 114). Les grandes images sont réduites pour tenir dans le cadre, tandis que les petites ne sont pas agrandies lorsque la mise à l’échelle est désactivée. Dans le parcours d’entraînement par défaut, mosaic=1.0 assemble plutôt quatre images sur une toile plus grande, puis recadre le résultat à imgsz ; une fois que close_mosaic désactive la mosaïque pour les dernières époques, les images sont soumises au letterboxing, puis toujours transformées aléatoirement au lieu d’être utilisées telles quelles. Les lots rectangulaires (rect=True) et multi_scale utilisent des formes d’entrée différentes.
Normaliser les valeurs des pixels#
La normalisation ramène les valeurs des pixels à une plage standard, ce qui aide le modèle à converger plus rapidement pendant l’entraînement. Voici deux techniques courantes :
- Mise à l’échelle min-max : ramène les valeurs des pixels à une plage comprise entre 0 et 1.
- Normalisation par score z : met les valeurs des pixels à l’échelle en fonction de leur moyenne et de leur écart type.
YOLO26 gère automatiquement la normalisation dans son pipeline de prétraitement : il convertit les images en RGB et ramène les valeurs des pixels à la plage [0, 1] en les divisant par 255 (mise à l’échelle min-max). Par défaut, YOLO n’applique pas la normalisation par moyenne et écart type de type ImageNet (score z) ; aucune étape de normalisation manuelle n’est donc nécessaire.
Diviser le jeu de données#
La division des données en ensembles d’entraînement, de validation et de test te permet d’évaluer le modèle sur des données inédites et de mesurer sa capacité de généralisation. Une répartition courante consiste à affecter 70 % des données à l’entraînement, 20 % à la validation et 10 % aux tests. Des outils comme scikit-learn ou TensorFlow facilitent cette opération.
Garde ces éléments à l’esprit lorsque tu divises les données :
- Maintenir la répartition des classes : veille à ce que chaque classe soit représentée proportionnellement dans les ensembles d’entraînement, de validation et de test.
- Équilibrer les classes : si les jeux de données sont déséquilibrés, envisage de suréchantillonner la classe minoritaire ou de sous-échantillonner la classe majoritaire — uniquement dans l’ensemble d’entraînement.
Divise le jeu de données avant d’appliquer toute augmentation ou autre opération de prétraitement, et applique ces transformations uniquement à l’ensemble d’entraînement. Augmenter les données avant la division permet aux informations des images de validation ou de test d’influencer l’entraînement, ce qui produit des scores artificiellement élevés qui s’effondrent sur des données réelles.
Augmenter le jeu de données#
L’augmentation des données accroît artificiellement la taille d’un jeu de données en créant des versions modifiées des images existantes. Elle aide à réduire le surapprentissage et améliore la généralisation, avec plusieurs avantages :
- Des modèles plus robustes : les variations d’éclairage, d’orientation et d’échelle rendent le modèle plus résistant aux distorsions du monde réel.
- Rentable : tu enrichis l’ensemble d’entraînement sans collecter ni annoter de nouvelles données.
- Meilleure exploitation des données : chaque image annotée produit plusieurs variantes d’entraînement.
Avec YOLO26, l’intensité de l’augmentation est contrôlée par les arguments d’entraînement transmis à model.train() ou par les indicateurs CLI équivalents, et non en modifiant le fichier YAML du jeu de données, qui définit des métadonnées telles que les chemins, les noms de classes et les divisions. La seule exception est flip_idx : les jeux de données de pose le déclarent dans le fichier YAML du jeu de données pour associer les paires de points clés gauche/droite, et YOLO désactive entièrement fliplr et flipud si cette valeur est absente. Les augmentations intégrées comprennent :
- Mosaic, MixUp et CutMix (
mosaic,mixup,cutmix) : combinent plusieurs images en un seul échantillon d’entraînement. - Retournements (
fliplr,flipud) : retournent les images horizontalement ou verticalement. - Transformations géométriques (
degrees,translate,scale,shear,perspective) : font pivoter, décalent, zooment et déforment les images. - Variation des couleurs HSV (
hsv_h,hsv_s,hsv_v) : fait varier la teinte, la saturation et la luminosité. - Copier-coller (
copy_paste) : ajoute des copies supplémentaires d’objets segmentés, retournées par défaut dans la même image ou prélevées dans une autre image aveccopy_paste_mode=mixup. - Permutation des canaux (
bgr) : inverse l’ordre des canaux RGB pour obtenir BGR. - Transformations de classification (
auto_augment,erasing) : appliquent une stratégie d’augmentation automatisée et un effacement aléatoire lors de l’entraînement d’un classificateur.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# L’augmentation se configure avec les arguments d’entraînement, pas avec le fichier YAML du jeu de données
model.train(data="coco8.yaml", epochs=10, hsv_h=0.015, fliplr=0.5, mosaic=1.0, degrees=10.0)Pour consulter la liste complète des arguments d’augmentation et leurs valeurs par défaut, reporte-toi à la référence des paramètres d’augmentation et au guide consacré à l’augmentation des données YOLO. Si le paquet albumentations est installé, YOLO active aussi automatiquement ses augmentations intégrées basées sur Albumentations.
Étude de cas : prétraitement pour la détection de véhicules#
Prenons l’exemple d’un projet de détection et de classification de véhicules dans des images de circulation avec YOLO26, à partir d’images annotées avec des boîtes englobantes et des étiquettes. Voici à quoi correspondent les choix de prétraitement :
- Redimensionnement : aucune intervention manuelle — YOLO26 redimensionne les images à
imgszpendant l’entraînement. - Normalisation : aucune intervention manuelle — YOLO26 ramène automatiquement les valeurs des pixels à
[0, 1]. - Division : répartis le jeu de données entre entraînement (70 %), validation (20 %) et test (10 %), en conservant une répartition cohérente des classes dans chaque ensemble.
- Augmentation : définis des arguments d’entraînement adaptés aux scènes de circulation — par exemple
fliplrpour l’invariance à la direction,hsv_vpour les variations d’éclairage jour/nuit etmosaicpour les densités d’objets variables.
Une fois ces choix effectués, le jeu de données est prêt pour l’analyse exploratoire des données (EDA).
Analyse exploratoire des données (EDA)#
L’EDA s’appuie sur des statistiques et des visualisations pour révéler les tendances et les distributions présentes dans tes données, ce qui t’aide à repérer des problèmes comme le déséquilibre des classes ou les valeurs aberrantes avant l’entraînement.
Techniques statistiques d’EDA#
L’EDA statistique commence par des indicateurs de base — moyenne, médiane, écart type et étendue — calculés à partir de propriétés telles que la distribution de l’intensité des pixels. Ils donnent un aperçu rapide de la qualité de ton jeu de données et permettent de déceler tôt les irrégularités.
Techniques d’EDA visuelle#
Les visualisations révèlent des tendances que les statistiques récapitulatives ne montrent pas, comme le déséquilibre des classes et les valeurs aberrantes. Parmi les outils courants, on trouve :
- Histogrammes et diagrammes en boîte : montrent la distribution des valeurs des pixels et signalent les valeurs aberrantes dans les distributions d’intensité ou de caractéristiques.
- Diagrammes à barres : révèlent le déséquilibre des classes en comparant le nombre d’exemples de chaque classe.
- Nuages de points : permettent d’explorer les relations entre les caractéristiques des images ou les annotations.
- Cartes thermiques : représentent la distribution de l’intensité des pixels ou la répartition spatiale des annotations dans les images.
Ultralytics Platform pour l’EDA#
Pour réaliser une EDA sans code, importe ton jeu de données dans Ultralytics Platform. L’onglet Charts du jeu de données génère automatiquement des visualisations clés pour l’EDA : répartition des ensembles, nombre des classes les plus fréquentes, histogrammes de la largeur et de la hauteur des images, et cartes thermiques 2D des positions des annotations et des dimensions des images. L’onglet Images te permet de parcourir tes données sous forme de grille, en mode compact ou en tableau, avec les annotations superposées ; tu peux ainsi repérer facilement les exemples mal étiquetés ou les classes déséquilibrées sans écrire de code.
Conclusion#
Des données correctement divisées, normalisées et augmentées réduisent le bruit et améliorent la généralisation, transformant un ensemble brut d’images en un jeu d’entraînement fiable. Une fois ton jeu de données prétraité, l’étape suivante consiste à entraîner ton modèle. Si tu as des questions en cours de route, adresse-toi à la communauté sur le dépôt GitHub d’Ultralytics ou le serveur Discord d’Ultralytics.
FAQ#
Le prétraitement garantit que tes données sont propres, cohérentes et dans un format optimisé pour l’entraînement. En traitant le bruit, les incohérences et le déséquilibre des classes dans les données brutes, des étapes comme le redimensionnement, la normalisation, l’augmentation et la division du jeu de données réduisent la charge de calcul et améliorent les performances du modèle. Consulte les étapes d’un projet de vision par ordinateur pour voir comment cette étape s’intègre au flux de travail global.
Configure l’augmentation à l’aide des arguments d’entraînement plutôt que du fichier YAML du jeu de données. Transmets des arguments tels que
fliplr,mosaic,hsv_hetdegreesàmodel.train()(ou utilise les indicateurs CLI équivalents) pour définir la probabilité et l’intensité de chaque transformation. Ces paramètres sont définis dans la référence des paramètres d’augmentation et expliqués dans le guide sur l’augmentation des données YOLO. Les jeux de données de pose font exception : leur correspondance des points clésflip_idxfigure dans le fichier YAML du jeu de données, et les retournements sont désactivés si elle est absente.Les deux techniques les plus courantes sont la mise à l’échelle min-max (qui ramène les pixels à une plage comprise entre 0 et 1) et la normalisation par score z (qui met les valeurs à l’échelle en fonction de la moyenne et de l’écart type). YOLO26 applique automatiquement la mise à l’échelle min-max — il convertit les images en RGB et divise les valeurs des pixels par 255 — ; tu n’as donc pas besoin d’effectuer une normalisation manuelle. Par défaut, il n’applique pas la normalisation par score z.
Une répartition courante consiste à affecter 70 % des données à l’entraînement, 20 % à la validation et 10 % aux tests. Maintiens la répartition des classes dans les trois ensembles et évite les fuites de données en appliquant l’augmentation uniquement à l’ensemble d’entraînement, après la division. Des outils comme scikit-learn ou TensorFlow effectuent efficacement cette division. Consulte le guide de collecte et d’annotation des données pour la préparation du jeu de données en amont.
Oui. L’argument
imgszdéfinit la taille d’entrée cible sans intervention manuelle. Dans le parcours à taille fixe et au format carré, la validation et l’inférence appliquent un letterboxing aux images pour les adapter à la forme spécifiée tout en préservant le rapport hauteur/largeur ; les grandes images sont réduites pour tenir dans le cadre, tandis que les petites ne sont pas agrandies lorsque la mise à l’échelle est désactivée. Pendant l’entraînement, l’augmentation par mosaïque par défaut atteint la taille cible en assemblant quatre images puis en recadrant le résultat. Les lots rectangulaires (rect=True) etmulti_scaleutilisent des formes d’entrée différentes. Consulte la documentation sur l’entraînement des modèles pour en savoir plus.