Unsupervised Domain Adaptation (UDA)
Адаптация домена без учителя адаптирует модель, обученную на размеченных данных исходного домена, к новому целевому домену, в котором есть только неразмеченные данные, сокращая разрыв между доменами.
Обучение без учителя с адаптацией к домену (UDA) адаптирует модель, обученную на размеченных данных в одной среде — исходном домене, — чтобы она работала в другой среде — целевом домене, — для которой доступны только неразмеченные данные. В обоих доменах совпадают задачи и классы, но входные данные выглядят по-разному: синтетические изображения и реальные фотографии, сканеры одной больницы и другой, улицы днём и ночью или одна модель камеры и другая. Модели, обученные только на исходном домене, часто значительно теряют точность на целевом, а UDA восстанавливает её без затрат на разметку данных в новом домене. Это направление трансферного обучения, а слово «без учителя» относится только к отсутствию меток для целевого домена.
Почему сдвиг домена снижает качество#
Шай Бен-Давид и его коллеги сформулировали стандартную теорию этой проблемы в 2010 году. Ошибка классификатора на целевом домене ограничена тремя слагаемыми: его ошибкой на исходном домене, мерой того, насколько различаются два домена с точки зрения семейства классификаторов, и ошибкой лучшего единого классификатора для обоих доменов. Первое слагаемое уменьшается при обычном обучении на метках исходного домена. Большинство методов UDA борется со вторым слагаемым, обучая признаки, при которых входные данные из исходного и целевого доменов выглядят одинаково. Третье слагаемое напоминает, что адаптация не поможет, если между доменами изменилось само соответствие меток.
Основные подходы#
- Сопоставление статистик: Согласует простые статистические характеристики признаков исходного и целевого доменов. Максимальное среднее расхождение и CORAL, сопоставляющий ковариационные матрицы признаков, добавляют штраф к функции потерь при обучении, а AdaBN, предложенный Янхао Ли и его коллегами в 2016 году, просто заново вычисляет средние значения и дисперсии каждого слоя пакетной нормализации на данных целевого домена.
- Состязательное выравнивание: Состязательные по домену нейронные сети (DANN), представленные Ярославом Ганиным и Виктором Лемпицким в 2015 году, обучают классификатор домена отличать признаки исходного домена от признаков целевого, а слой обращения градиента заставляет экстрактор признаков его обманывать.
- Преобразование изображений: Генеративные модели, например CycleGAN, меняют стиль изображений исходного домена, чтобы они выглядели как изображения целевого домена. Благодаря этому размеченные обучающие изображения уже похожи на данные, с которыми модель столкнётся при развёртывании, как в CyCADA для дорожных сцен.
- Самообучение: Модель исходного домена размечает изображения целевого домена, её уверенные предсказания становятся псевдометками, а модель дообучается на них. Часто используется медленно обновляемая модель-учитель, которая помогает стабилизировать метки.
- Адаптация без доступа к исходному домену и во время тестирования: SHOT адаптирует обученную модель без доступа к данным исходного домена, а TENT во время инференса обновляет только параметры пакетной нормализации, делая предсказания для тестовых пакетов более уверенными.
AdaBN показывает, насколько значительная часть разрыва между доменами может быть связана со статистиками слоёв пакетной нормализации. В этом примере на PyTorch небольшая сеть обучается на 1 000 рукописных цифр, а затем проверяется на остальных цифрах, преобразованных так, как их сняла бы камера с выцветшим изображением: с пониженной контрастностью и повышенной яркостью.
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}")Точность на цифрах со сдвинутым распределением повышается с 0,290 до 0,940 без единой метки целевого домена — почти до 94%, которых та же модель достигает на этих цифрах до сдвига. Такой большой прирост объясняется тем, что изменение контрастности и яркости после первого линейного слоя превращается в сдвиг и масштабирование каждого признака — именно это устраняет перенормировка. Для сдвигов формы или содержимого нужны более мощные методы, описанные выше.
Бенчмарки и применения#
Набор Office-31, опубликованный Кейт Саенко и её коллегами в 2010 году, содержит 4 110 изображений 31 офисного предмета из трёх доменов: фотографий товаров с Amazon, снимков с веб-камер и фотографий с DSLR. В VisDA-2017 модели, обученные на синтетических трёхмерных изображениях 12 категорий предметов, должны классифицировать реальные фотографии, а для GTA5-to-Cityscapes модель семантической сегментации обучается на 24 966 кадрах из видеоигры и тестируется на реальных городских улицах.
Та же закономерность проявляется и в практических задачах. Для автономных транспортных средств реальные записи поездок дополняют синтетическими данными и изображениями из симуляторов; модели анализа медицинских изображений должны работать с оборудованием разных производителей и в разных больницах, а модели для сельского хозяйства сталкиваются с новыми полями, сортами культур и сезонами. Детекторы часто адаптируют с помощью самообучения: функция auto_annotate в пакете Ultralytics для Python запускает детектор YOLO26 на папке с неразмеченными изображениями, подаёт каждую обнаруженную рамку на вход модели Meta Segment Anything (SAM) и записывает метки сегментации в формате YOLO. Так детектор, обученный на исходном домене, может создавать псевдометки для проверки и дообучения на изображениях целевого домена.
UDA и связанные режимы#
Для контролируемого дообучения нужны метки целевого домена, а полуобучение предполагает, что размеченные и неразмеченные данные получены из одного распределения. Обобщение по доменам вообще не использует данные целевого домена, а вместо этого обучает устойчивость к неизвестным доменам с помощью аугментации данных и рандомизации домена. Распределённо-робастная оптимизация готовит модель к целому набору возможных сдвигов, а UDA адаптируется к одному целевому домену, изображения которого модель уже видела. Мониторинг сдвига данных показывает, когда развёрнутая модель попала в новый домен и нуждается в адаптации.










