Unsupervised Domain Adaptation (UDA)
비지도 도메인 적응은 레이블이 있는 소스 데이터로 학습한 모델을 레이블이 없는 데이터만 보유한 새로운 타깃 도메인에 적응시켜 도메인 격차를 줄입니다.
비지도 도메인 적응(UDA)은 레이블이 있는 데이터로 한 환경인 소스 도메인에서 학습한 모델을 레이블이 없는 데이터만 사용할 수 있는 다른 환경인 타깃 도메인에서도 작동하도록 적응시키는 방법입니다. 두 도메인은 동일한 작업과 클래스를 공유하지만 입력은 다르게 보입니다. 예를 들어 합성 렌더링과 실제 사진, 병원마다 다른 스캐너, 낮과 밤의 도로, 서로 다른 카메라 모델 등이 있습니다. 소스 데이터만으로 학습한 모델은 타깃 도메인에서 정확도가 크게 떨어지는 경우가 많으며, UDA는 새 도메인의 데이터 어노테이션 비용 없이 이를 회복합니다. UDA는 전이 학습의 한 분야이며, 여기서 “비지도”는 타깃 레이블이 없다는 점만을 가리킵니다.
도메인 시프트가 성능을 저하시키는 이유#
Shai Ben-David와 동료들은 2010년에 이 문제의 표준 이론을 제시했습니다. 분류기의 타깃 도메인 오류는 세 가지 항으로 상한이 정해집니다. 소스 도메인 오류, 분류기 계열이 두 도메인을 얼마나 다르게 보는지를 나타내는 척도, 그리고 두 도메인 모두에 가장 적합한 단일 분류기의 오류입니다. 첫 번째 항은 소스 레이블을 사용한 일반적인 학습으로 줄일 수 있습니다. 대부분의 UDA 방법은 두 번째 항에 대응하여 소스와 타깃 입력이 비슷하게 보이도록 특징을 학습합니다. 세 번째 항은 도메인 사이에서 레이블 관계 자체가 바뀌면 적응에 실패한다는 점을 상기시킵니다.
주요 접근 방식#
- 통계 매칭: 소스와 타깃 특징의 간단한 통계를 정렬합니다. 특징 공분산을 매칭하는 최대 평균 불일치와 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}")시프트된 숫자의 정확도는 타깃 레이블을 하나도 사용하지 않고 0.290에서 0.940으로 상승합니다. 이는 시프트가 발생하기 전 동일한 모델이 해당 숫자에서 기록한 94%에 가깝습니다. 첫 번째 선형 레이어를 통과하면 대비와 밝기의 변화가 특징별 시프트와 스케일 변화로 나타나며, 재정규화가 바로 이를 제거하기 때문에 큰 폭의 성능 향상이 가능합니다. 형태나 콘텐츠가 바뀌는 경우에는 앞서 설명한 더 강력한 방법이 필요합니다.
벤치마크 및 응용 분야#
Kate Saenko와 동료들이 2010년에 공개한 Office-31에는 세 도메인의 사무용품 31종 이미지 4,110개가 포함됩니다. 도메인은 Amazon 제품 사진, 웹캠 사진, DSLR 사진입니다. VisDA-2017은 12개 객체 범주의 합성 3D 렌더링으로 학습한 모델이 실제 사진을 분류하도록 합니다. GTA5-to-Cityscapes는 비디오 게임의 프레임 24,966개로 시맨틱 세그멘테이션을 학습하고 실제 도시 거리에서 테스트합니다.
같은 패턴이 실제 활용 분야에서도 나타납니다. 자율주행차는 실제 주행 영상에 합성 데이터와 시뮬레이터 렌더링을 추가로 사용합니다. 의료 영상 분석 모델은 스캐너 제조사와 병원에 상관없이 작동해야 하며, 농업 모델은 새로운 농경지, 작물 품종, 계절에 대응해야 합니다. 탐지기는 자기 학습으로 적응시키는 경우가 많습니다. Ultralytics Python 패키지의 auto_annotate 함수는 레이블이 없는 이미지 폴더에 YOLO26 탐지기를 실행하고, 탐지된 각 박스를 사용해 Meta의 Segment Anything Model(SAM)에 프롬프트를 제공한 다음 YOLO 형식의 세그멘테이션 레이블을 저장합니다. 이를 통해 소스 도메인으로 학습된 탐지기는 타깃 이미지를 의사 레이블링하여 검토와 파인튜닝에 사용할 수 있습니다.
UDA와 관련된 설정#
지도 파인튜닝에는 타깃 도메인의 레이블이 필요하며, 준지도 학습은 레이블이 있는 데이터와 없는 데이터가 동일한 분포에서 나왔다고 가정합니다. 도메인 일반화는 타깃 데이터가 전혀 없으며, 데이터 증강과 도메인 무작위화로 학습하여 보지 못한 도메인에서도 강건하게 작동하도록 합니다. 분포 강건 최적화는 가능한 여러 시프트에 대비하는 반면, UDA는 이미지를 확인한 단일 타깃 도메인에 적응합니다. 또한 데이터 드리프트 모니터링을 통해 배포된 모델이 적응이 필요한 새로운 도메인에 진입했는지 확인할 수 있습니다.










