Unsupervised Domain Adaptation (UDA)
L’adaptation de domaine non supervisée adapte un modèle entraîné sur des données sources étiquetées à un nouveau domaine cible qui ne contient que des données non étiquetées, afin de réduire l’écart entre les domaines.
L’adaptation de domaine non supervisée (UDA) adapte un modèle entraîné sur des données étiquetées dans un contexte, le domaine source, afin qu’il fonctionne dans un autre contexte, le domaine cible, pour lequel seules des données non étiquetées sont disponibles. Les deux domaines partagent la même tâche et les mêmes classes, mais leurs entrées diffèrent : rendus synthétiques contre photos réelles, scanners d’un hôpital contre ceux d’un autre, rues de jour contre rues de nuit, ou modèles de caméra différents. Les modèles entraînés uniquement sur la source perdent souvent une grande partie de leur précision sur la cible ; l’UDA la rétablit sans le coût de l’annotation des données dans le nouveau domaine. C’est une branche de l’apprentissage par transfert, et « non supervisée » signifie uniquement que les étiquettes de la cible sont absentes.
Pourquoi le décalage de domaine nuit aux performances#
Shai Ben-David et ses collègues ont formulé la théorie de référence du problème en 2010. L’erreur d’un classifieur sur le domaine cible est bornée par trois termes : son erreur sur la source, une mesure de la différence entre les deux domaines pour la famille de classifieurs, et l’erreur du meilleur classifieur unique pour les deux domaines. L’entraînement classique à partir des étiquettes de la source réduit le premier terme. La plupart des méthodes UDA s’attaquent au deuxième en apprenant des caractéristiques qui rendent les entrées source et cible semblables, tandis que le troisième rappelle que l’adaptation échoue si la relation entre les étiquettes change elle-même d’un domaine à l’autre.
Principales approches#
- Alignement des statistiques : Aligne les statistiques simples des caractéristiques source et cible. L’écart moyen maximal et CORAL, qui aligne les covariances des caractéristiques, ajoutent une pénalité à la fonction de perte d’entraînement ; AdaBN, proposée par Yanghao Li et ses collègues en 2016, recalcule simplement la moyenne et la variance de chaque couche de normalisation par lots à partir des données cibles.
- Alignement adversarial : Les réseaux neuronaux adversariaux de domaine (DANN), présentés par Yaroslav Ganin et Victor Lempitsky en 2015, entraînent un classifieur de domaine à distinguer les caractéristiques source des caractéristiques cible ; une couche d’inversion du gradient pousse l’extracteur de caractéristiques à le tromper.
- Traduction d’images : Des modèles génératifs comme CycleGAN modifient le style des images source pour les rendre semblables à celles de la cible ; les images d’entraînement étiquetées ressemblent ainsi déjà à celles du déploiement, comme avec CyCADA pour les scènes de conduite.
- Auto-entraînement : Le modèle source étiquette les images cibles, ses prédictions les plus fiables deviennent des pseudo-étiquettes, puis le modèle est réentraîné sur celles-ci, souvent avec un modèle enseignant mis à jour lentement pour stabiliser les étiquettes.
- Adaptation sans source et à l’inférence : SHOT adapte un modèle entraîné sans accès aux données source, tandis que TENT met à jour uniquement les paramètres de normalisation par lots pendant l’inférence, en rendant les prédictions sur les lots de test plus fiables.
AdaBN montre à quel point l’écart entre domaines peut résider dans les statistiques des couches de normalisation par lots. Cet exemple PyTorch entraîne un petit réseau sur 1 000 chiffres manuscrits et le teste sur les chiffres restants, rendus comme les capturerait une caméra délavée, avec moins de contraste et plus de luminosité :
import torch
from sklearn.datasets import load_digits
from torch import nn
torch.manual_seed(0)
X, y = load_digits(return_X_y=True)
X, y = torch.tensor(X / 16, dtype=torch.float32), torch.tensor(y)
target_x = 0.3 * X[1000:] + 0.6 # target domain: the last 797 digits as a washed-out camera would capture them
# Train on the labeled source domain, the first 1,000 digits
model = nn.Sequential(nn.Linear(64, 64), nn.BatchNorm1d(64), nn.ReLU(), nn.Linear(64, 10))
optimizer = torch.optim.Adam(model.parameters(), lr=1e-2)
for _ in range(200):
optimizer.zero_grad()
nn.functional.cross_entropy(model(X[:1000]), y[:1000]).backward()
optimizer.step()
model.eval()
print(f"Target accuracy before adaptation: {(model(target_x).argmax(1) == y[1000:]).float().mean():.3f}")
# AdaBN: replace the source BatchNorm statistics with those of the unlabeled target images
model[1].reset_running_stats()
model[1].momentum = None # use a plain average over the target batch
model.train()
with torch.no_grad():
model(target_x)
model.eval()
print(f"Target accuracy after adaptation: {(model(target_x).argmax(1) == y[1000:]).float().mean():.3f}")La précision sur les chiffres décalés passe de 0,290 à 0,940 sans aucune étiquette cible, soit un résultat proche des 94 % obtenus par le même modèle sur ces chiffres avant le décalage. Le gain est si important parce qu’une variation de contraste et de luminosité devient un décalage et une mise à l’échelle par caractéristique après la première couche linéaire, exactement ce que la renormalisation élimine ; les variations de forme ou de contenu nécessitent les méthodes plus robustes décrites plus haut.
Benchmarks et applications#
Office-31, publié par Kate Saenko et ses collègues en 2010, contient 4 110 images de 31 objets de bureau provenant de trois domaines : photos de produits Amazon, prises de vue par webcam et photos DSLR. VisDA-2017 demande aux modèles entraînés sur des rendus 3D synthétiques de 12 catégories d’objets de classer des photos réelles ; GTA5-to-Cityscapes entraîne la segmentation sémantique sur 24 966 images d’un jeu vidéo et la teste sur de vraies rues urbaines.
Le même principe guide les applications concrètes. Les véhicules autonomes complètent les séquences de conduite réelles avec des données synthétiques et des rendus de simulateur ; les modèles d’analyse d’images médicales doivent fonctionner avec différents fabricants de scanners et différents hôpitaux ; les modèles agricoles doivent s’adapter à de nouveaux champs, variétés de cultures et saisons. Les détecteurs sont souvent adaptés par auto-entraînement : la fonction auto_annotate du package Python Ultralytics exécute un détecteur YOLO26 sur un dossier d’images non étiquetées, invite le Segment Anything Model (SAM) de Meta à traiter chaque boîte détectée et écrit des étiquettes de segmentation au format YOLO ; un détecteur entraîné sur le domaine source peut ainsi générer des pseudo-étiquettes pour les images cibles, qui seront ensuite vérifiées et utilisées pour l’ajustement fin.
UDA et contextes apparentés#
L’ajustement fin supervisé nécessite des étiquettes du domaine cible, et l’apprentissage semi-supervisé suppose que les données étiquetées et non étiquetées proviennent de la même distribution. La généralisation de domaine ne dispose d’aucune donnée cible et vise plutôt la robustesse à des domaines inconnus grâce à l’augmentation de données et à la randomisation de domaine. L’optimisation robuste aux distributions prépare le modèle à tout un ensemble de décalages possibles, tandis que l’UDA l’adapte à un seul domaine cible dont il a déjà vu les images ; la surveillance de la dérive des données indique quand un modèle déployé est entré dans un nouveau domaine qui nécessite une adaptation.










