Data Preprocessing
Le prétraitement des données transforme les tableaux, textes et images bruts en entrées propres, mises à l’échelle et au format fixe qu’attend un modèle. Découvre les étapes courantes, les règles contre les fuites de données et le code.
Le prétraitement des données désigne l’ensemble des transformations qui convertissent les données brutes en entrées numériques propres et formatées de manière cohérente, comme l’attend un modèle d’apprentissage automatique (ML), en appliquant les mêmes opérations pendant l’entraînement et l’inférence. Pour les données tabulaires, il consiste à gérer les valeurs manquantes, à encoder les catégories sous forme de nombres et à mettre les caractéristiques à l’échelle. Pour les images, il consiste à décoder les fichiers, à les redimensionner aux dimensions d’entrée du réseau, à ordonner les canaux de couleur et à mettre les valeurs des pixels à l’échelle. Le prétraitement fait effectivement partie du modèle : un réseau entraîné sur des images RGB dont les valeurs sont ramenées entre 0 et 1 produit des prédictions peu fiables s’il reçoit des images BGR avec des valeurs allant de 0 à 255, même si ses poids n’ont pas changé.
Étapes courantes de prétraitement#
- Nettoyage des données : Suppression des doublons, des fichiers corrompus et des valeurs impossibles, et correction des étiquettes ou unités incohérentes.
- Imputation : Remplacement des valeurs manquantes par une statistique comme la médiane de la colonne, une estimation basée sur un modèle ou une catégorie « manquant » distincte, ou suppression des lignes comportant trop de lacunes.
- Encodage : Conversion des catégories en nombres, avec un encodage one-hot pour les catégories sans ordre, comme les couleurs, des codes ordinaux pour celles qui ont un ordre, comme les tailles, et des indices entiers pour les noms de classes.
- Mise à l’échelle et normalisation : La mise à l’échelle min-max ramène une caractéristique dans l’intervalle 0–1, et la standardisation soustrait la moyenne puis divise par l’écart-type. Ainsi, une caractéristique mesurée en millimètres ne prend pas le dessus sur une caractéristique mesurée en mètres dans les modèles fondés sur la distance, et la descente de gradient converge plus rapidement. De nombreux modèles préentraînés sur ImageNet dans torchvision attendent que chaque canal RGB soit standardisé avec les moyennes 0.485, 0.456 et 0.406, et les écarts-types 0.229, 0.224 et 0.225.
- Redimensionnement : Mise de chaque image aux dimensions d’entrée du réseau, par étirement, recadrage centré ou ajout de bordures, méthode qui redimensionne l’image pour l’adapter puis complète l’espace restant afin que les objets conservent leurs proportions.
- Tokenisation : Découpage du texte en jetons et attribution à chacun d’un identifiant entier issu d’un vocabulaire fixe.
Des étapes propres à chaque domaine viennent s’y ajouter. Les scanners CT appliquent une fenêtre qui associe une plage d’unités Hounsfield, par exemple celle qui fait ressortir le tissu pulmonaire, aux intensités d’affichage reçues par le modèle ; l’audio est rééchantillonné à une fréquence fixe et souvent converti en spectrogramme.
Ajuster sur les données d’entraînement, appliquer partout#
Les statistiques utilisées lors du prétraitement, comme les moyennes et les écarts-types des caractéristiques, les valeurs d’imputation et les vocabulaires de catégories, sont calculées uniquement sur le sous-ensemble d’entraînement, enregistrées, puis appliquées sans modification aux données de validation, de test et de production. Les calculer sur l’ensemble du jeu de données avant de le diviser permet aux informations de l’ensemble de test d’influencer les entrées d’entraînement : c’est une forme de fuite de données qui gonfle les scores d’évaluation. Un Pipeline scikit-learn impose cette règle en ajustant ses étapes de prétraitement uniquement sur les données transmises à fit. L’application d’un prétraitement différent au moment du service, par exemple une autre méthode de redimensionnement ou un autre décodeur d’images, entraîne un décalage entre entraînement et service : le modèle obtient de bons scores hors ligne, mais des résultats moins bons en production.
Prétraitement des images pour les modèles de vision#
Les modèles d’images nécessitent un format de tenseur fixe. OpenCV décode les images sous forme de tableaux hauteur × largeur × canaux contenant des entiers de 8 bits dans l’ordre BGR, tandis que les réseaux PyTorch attendent des lots de tenseurs à virgule flottante au format RGB, avec les canaux en première dimension. Dans Ultralytics, YOLO26 effectue automatiquement la prédiction en suivant ces étapes : il redimensionne chaque image pour que son côté le plus long corresponde à imgsz (640 pixels par défaut), sans la déformer, ajoute des pixels gris de valeur 114 pour obtenir un carré de 640 × 640 dans le cas des modèles exportés à forme fixe, ou complète seulement jusqu’au multiple suivant du pas de 32 pixels pour les modèles PyTorch, convertit l’ordre des canaux de BGR en RGB, réorganise le tableau pour placer les canaux en première position et divise les valeurs par 255. Le script ci-dessous, qui utilise OpenCV et NumPy, effectue manuellement le letterboxing carré :
import urllib.request
import cv2
import numpy as np
# Download a sample photo and read it as a BGR uint8 array of shape (height, width, 3)
urllib.request.urlretrieve("https://ultralytics.com/images/bus.jpg", "bus.jpg")
image = cv2.imread("bus.jpg")
# Resize so the longer side is 640 pixels, keeping the aspect ratio
scale = 640 / max(image.shape[:2])
resized = cv2.resize(image, None, fx=scale, fy=scale, interpolation=cv2.INTER_LINEAR)
# Letterbox: center the resized image on a 640x640 canvas of gray (114) padding
canvas = np.full((640, 640, 3), 114, dtype=np.uint8)
top, left = (640 - resized.shape[0]) // 2, (640 - resized.shape[1]) // 2
canvas[top : top + resized.shape[0], left : left + resized.shape[1]] = resized
# Reorder BGR to RGB and HWC to CHW, scale pixels to 0-1, and add a batch dimension
tensor = canvas[:, :, ::-1].transpose(2, 0, 1).astype(np.float32) / 255.0
batch = tensor[None]
print(f"{image.shape} uint8 -> {batch.shape} float32 in [{batch.min():.1f}, {batch.max():.1f}]")Le script affiche (1080, 810, 3) uint8 -> (1, 3, 640, 640) float32 in [0.0, 1.0] : la photo de 1080 × 810 devient un lot d’une seule image, dans la disposition et la plage de valeurs attendues par un détecteur PyTorch, avec des bandes grises qui remplissent les 80 pixels de chaque côté.
Prétraitement des données et notions apparentées#
- Étiquetage des données : Création des cibles de vérité terrain, comme les classes et les boîtes, que le prétraitement convertit ensuite au format numérique lu par l’entraînement.
- Ingénierie des caractéristiques : Création de nouvelles variables d’entrée à partir de connaissances du domaine, comme l’indice de masse corporelle calculé à partir des colonnes de taille et de poids.
- Normalisation par lots : Couche du réseau qui standardise les activations intermédiaires pendant l’entraînement et l’inférence. La normalisation des entrées lors du prétraitement ne s’effectue qu’une fois, avant que les données n’atteignent le réseau.
- Augmentation des données : Transformations aléatoires, comme les retournements, les changements de couleur et les mosaïques, appliquées uniquement pendant l’entraînement pour créer des variantes de chaque exemple. Le prétraitement est déterministe et identique à l’entraînement et à l’inférence.










