Unsupervised Domain Adaptation (UDA)
Unüberwachtes Domain Adaptation passt ein Modell, das mit gekennzeichneten Quelldaten trainiert wurde, an eine neue Zieldomäne mit ausschließlich nicht gekennzeichneten Daten an und verringert so die Domänenlücke.
Unüberwachte Domänenanpassung (UDA) passt ein Modell, das mit beschrifteten Daten aus einer Umgebung – der Quelldomäne – trainiert wurde, so an, dass es in einer anderen Umgebung – der Zieldomäne – funktioniert, für die nur unbeschriftete Daten verfügbar sind. Beide Domänen haben dieselbe Aufgabe und dieselben Klassen, aber ihre Eingaben sehen unterschiedlich aus: synthetische Darstellungen im Vergleich zu echten Fotos, Scanner eines Krankenhauses im Vergleich zu denen eines anderen, Straßen bei Tag im Vergleich zu Straßen bei Nacht oder ein Kameramodell im Vergleich zu einem anderen. Modelle, die ausschließlich mit der Quelldomäne trainiert wurden, verlieren in der Zieldomäne oft einen großen Teil ihrer Genauigkeit. UDA stellt diese Genauigkeit wieder her, ohne dass in der neuen Domäne eine Datenannotation nötig ist. UDA ist ein Teilgebiet des Transferlernens, und „unüberwacht“ bezieht sich nur auf die fehlenden Beschriftungen der Zieldomäne.
Warum Domänenverschiebungen die Leistung beeinträchtigen#
Shai Ben-David und seine Kolleginnen und Kollegen entwickelten 2010 die maßgebliche Theorie zu diesem Problem. Der Fehler eines Klassifikators in der Zieldomäne wird durch drei Terme begrenzt: seinen Fehler in der Quelldomäne, ein Maß dafür, wie unterschiedlich die beiden Domänen für die jeweilige Klassifikatorfamilie aussehen, und den Fehler des besten einzelnen Klassifikators für beide Domänen. Der erste Term sinkt durch gewöhnliches Training mit Beschriftungen aus der Quelldomäne. Die meisten UDA-Verfahren setzen beim zweiten Term an und lernen Merkmale, unter denen Eingaben aus Quell- und Zieldomäne ähnlich aussehen. Der dritte Term erinnert daran, dass die Anpassung scheitert, wenn sich die Beziehung zwischen Eingaben und Beschriftungen zwischen den Domänen selbst ändert.
Zentrale Ansätze#
- Statistischer Abgleich: Gleicht einfache Statistiken der Merkmale aus Quell- und Zieldomäne ab. Maximum Mean Discrepancy und CORAL, das die Kovarianzen der Merkmale abgleicht, ergänzen die Trainingsverlustfunktion um einen Strafterm. AdaBN, 2016 von Yanghao Li und seinen Kolleginnen und Kollegen vorgestellt, berechnet einfach Mittelwert und Varianz jeder Batch-Normalisierungsschicht anhand der Daten der Zieldomäne neu.
- Adversariale Ausrichtung: Domänenadversariale neuronale Netze (DANN), 2015 von Yaroslav Ganin und Victor Lempitsky vorgestellt, trainieren einen Domänenklassifikator darauf, Merkmale aus Quell- und Zieldomäne zu unterscheiden. Eine Gradient-Reversal-Schicht bringt den Merkmalsextraktor dazu, den Klassifikator zu täuschen.
- Bildübertragung: Generative Modelle wie CycleGAN verändern den Stil von Bildern aus der Quelldomäne, sodass sie wie Bilder aus der Zieldomäne aussehen. Dadurch ähneln die beschrifteten Trainingsbilder bereits den Bildern im späteren Einsatz, wie bei CyCADA für Fahrszenen.
- Selbsttraining: Das Modell aus der Quelldomäne beschriftet Bilder aus der Zieldomäne. Seine sicheren Vorhersagen werden zu Pseudobeschriftungen, mit denen das Modell erneut trainiert wird. Häufig kommt dabei ein langsam aktualisiertes Lehrermodell zum Einsatz, das die Beschriftungen stabil hält.
- Anpassung ohne Quelldaten und zur Testzeit: SHOT passt ein trainiertes Modell an, ohne auf Quelldaten zuzugreifen. TENT aktualisiert bei der Inferenz ausschließlich die Parameter der Batch-Normalisierung, indem die Vorhersagen für Teststapel sicherer gemacht werden.
AdaBN zeigt, wie viel von einer Domänenlücke in der Statistik der Batch-Normalisierung-Schichten liegen kann. Dieses PyTorch-Beispiel trainiert ein kleines Netzwerk mit 1.000 handgeschriebenen Ziffern und testet es mit den übrigen Ziffern, die so verändert wurden, wie sie eine ausgewaschene Kamera aufnehmen würde: mit geringerem Kontrast und höherer Helligkeit:
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}")Die Genauigkeit bei den veränderten Ziffern steigt von 0,290 auf 0,940, ohne dass auch nur eine Beschriftung aus der Zieldomäne verwendet wird. Damit liegt sie nahe bei den 94 %, die dasselbe Modell für diese Ziffern vor der Veränderung erreicht. Der große Zugewinn kommt daher, dass eine Änderung von Kontrast und Helligkeit nach der ersten linearen Schicht zu einer Verschiebung und Skalierung pro Merkmal wird – genau das, was die Renormalisierung entfernt. Verschiebungen bei Form oder Inhalt erfordern die weiter oben beschriebenen stärkeren Verfahren.
Benchmarks und Anwendungen#
Office-31, 2010 von Kate Saenko und ihren Kolleginnen und Kollegen veröffentlicht, enthält 4.110 Bilder von 31 Bürogegenständen aus drei Domänen: Produktfotos von Amazon, Webcam-Aufnahmen und DSLR-Fotos. Bei VisDA-2017 sollen Modelle, die mit synthetischen 3D-Darstellungen von zwölf Objektkategorien trainiert wurden, reale Fotos klassifizieren. GTA5-to-Cityscapes trainiert die semantische Segmentierung mit 24.966 Bildern aus einem Videospiel und testet sie auf echten Stadtstraßen.
Dasselbe Muster liegt praktischen Anwendungen zugrunde. Autonome Fahrzeuge ergänzen echte Fahraufnahmen durch synthetische Daten und Simulationen. Modelle zur medizinischen Bildanalyse müssen mit Geräten verschiedener Scannerhersteller und in unterschiedlichen Krankenhäusern funktionieren. Landwirtschaftliche Modelle müssen sich an neue Felder, Pflanzensorten und Jahreszeiten anpassen. Detektoren werden häufig durch Selbsttraining angepasst: Die Funktion auto_annotate im Ultralytics-Python-Paket führt einen YOLO26-Detektor über einen Ordner mit unbeschrifteten Bildern aus, fragt Metas Segment Anything Model (SAM) anhand jeder erkannten Box ab und schreibt Segmentierungsbeschriftungen im YOLO-Format. So kann ein Detektor, der mit der Quelldomäne trainiert wurde, Bilder aus der Zieldomäne mit Pseudobeschriftungen versehen, die anschließend überprüft und zum Fine-Tuning verwendet werden.
UDA im Vergleich zu verwandten Ansätzen#
Überwachtes Fine-Tuning benötigt Beschriftungen aus der Zieldomäne, während halbüberwachtes Lernen voraussetzt, dass beschriftete und unbeschriftete Daten derselben Verteilung entstammen. Bei der Domänengeneralisierung gibt es überhaupt keine Daten aus der Zieldomäne. Stattdessen wird das Modell mit Datenerweiterung und Domänenrandomisierung auf Robustheit gegenüber unbekannten Domänen trainiert. Verteilungsrobuste Optimierung bereitet auf eine ganze Reihe möglicher Verschiebungen vor, während UDA das Modell an eine Zieldomäne anpasst, deren Bilder es bereits gesehen hat. Die Überwachung auf Datenverschiebungen zeigt, wann ein eingesetztes Modell in eine neue Domäne gelangt ist und angepasst werden sollte.










