Unsupervised Domain Adaptation (UDA)
教師なしドメイン適応では、ラベル付きのソースデータで学習したモデルを、ラベルのないデータしかない新しいターゲットドメインに適応させ、ドメインギャップを縮小します。
教師なしドメイン適応(UDA)は、ラベル付きデータで学習したモデルを、ソースドメインとは異なるターゲットドメインで動作するように適応させる手法です。ターゲットドメインで利用できるのはラベルなしデータだけです。両ドメインはタスクとクラスを共有しますが、入力の見た目は異なります。たとえば、合成レンダリングと実写、病院ごとのスキャナー、昼と夜の道路、異なるカメラモデルなどです。ソースドメインだけで学習したモデルは、ターゲットドメインで精度が大きく低下することが多く、UDAは新しいドメインでのデータアノテーションにかかるコストを抑えながら精度を回復します。UDAは転移学習の一分野であり、「教師なし」とはターゲットラベルがないことだけを指します。
ドメインシフトが問題になる理由#
Shai Ben-Davidらは2010年に、この問題の標準的な理論を示しました。分類器のターゲットドメインにおける誤差は、3つの項で上限が定められます。ソースドメインでの誤差、分類器ファミリーから見た2つのドメインの違いの尺度、そして両ドメインに共通する最良の分類器の誤差です。最初の項は、ソースラベルを使った通常の学習で低減できます。多くのUDA手法は2番目の項に取り組み、ソースとターゲットの入力が似て見える特徴を学習します。3番目の項は、ドメイン間でラベルの関係自体が変わると適応に失敗することを示しています。
主な手法#
- 統計量のマッチング:ソースとターゲットの特徴の単純な統計量を揃えます。特徴共分散を揃えるCORALや最大平均差は、学習損失にペナルティを加えます。Yanghao Liらが2016年に提案したAdaBNは、ターゲットデータを使って各バッチ正規化層の平均と分散を再計算するだけです。
- 敵対的アライメント:Yaroslav GaninとVictor Lempitskyが2015年に提案したドメイン敵対的ニューラルネットワーク(DANN)は、ソースの特徴とターゲットの特徴を見分けるドメイン分類器を学習します。勾配反転層は、特徴抽出器が分類器を欺くように学習を促します。
- 画像変換: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}")シフト後の数字に対する精度は、ターゲットラベルを1つも使わずに0.290から0.940に上がります。これは、シフト前に同じモデルがその数字で達成する94%に近い値です。コントラストと明るさの変化は、最初の線形層を通ると特徴ごとのシフトとスケールに変換され、まさに再正規化で除去できるため、これほど大きな改善が得られます。形状やコンテンツのシフトには、上記のより強力な手法が必要です。
ベンチマークと用途#
Kate Saenkoらが2010年に公開したOffice-31には、3つのドメインから集めたオフィス用品31カテゴリの画像が4,110枚含まれています。ドメインは、Amazonの商品写真、ウェブカメラの画像、デジタル一眼レフカメラの画像です。VisDA-2017では、12カテゴリの合成3Dレンダリング画像で学習したモデルに、実写画像の分類を求めます。GTA5-to-Cityscapesでは、ビデオゲームの24,966フレームでセマンティックセグメンテーションを学習し、実際の市街地でテストします。
同じ考え方は実用面でも役立ちます。自動運転車では実際の走行映像を合成データやシミュレーターのレンダリングで補い、医療画像解析モデルはスキャナーベンダーや病院をまたいで動作する必要があります。また、農業モデルは新しい圃場、作物品種、季節に対応します。検出器は自己学習で適応させることがよくあります。Ultralytics Pythonパッケージのauto_annotate関数は、ラベルなし画像のフォルダーに対してYOLO26検出器を実行し、検出した各ボックスを使ってMetaのSegment Anything Model(SAM)にプロンプトを与え、YOLO形式のセグメンテーションラベルを書き出します。これにより、ソースドメインで学習した検出器がターゲット画像に擬似ラベルを付け、レビューやファインチューニングに活用できます。
UDAと関連する設定#
教師ありファインチューニングにはターゲットドメインのラベルが必要です。半教師あり学習では、ラベル付きデータとラベルなしデータが同じ分布に由来すると仮定します。ドメイン汎化ではターゲットデータを一切使わず、データ拡張やドメインランダム化で未知のドメインに対する頑健性を学習します。分布ロバスト最適化は想定される複数のシフトに備えます。一方、UDAはすでに画像を確認した1つのターゲットドメインに適応します。データドリフトのモニタリングを行うと、デプロイ済みモデルが適応を必要とする新しいドメインに入ったことを把握できます。










