Unsupervised Domain Adaptation (UDA)
A adaptação não supervisionada de domínio adapta um modelo treinado com dados de origem rotulados a um novo domínio de destino que contém apenas dados não rotulados, reduzindo a diferença entre os domínios.
A adaptação não supervisionada de domínio (UDA) adapta um modelo treinado com dados rotulados em uma configuração, o domínio de origem, para funcionar em outra configuração, o domínio de destino, da qual só há dados não rotulados. Os dois domínios compartilham a mesma tarefa e as mesmas classes, mas as entradas têm aparências diferentes: imagens sintéticas e fotos reais, os scanners de um hospital e os de outro, ruas diurnas e noturnas, ou um modelo de câmera e outro. Os modelos treinados apenas na origem costumam perder grande parte da precisão no domínio de destino, e a UDA recupera essa precisão sem o custo da anotação de dados no novo domínio. É um ramo do aprendizado por transferência, e o termo «não supervisionada» refere-se apenas à ausência de rótulos no domínio de destino.
Por que a mudança de domínio prejudica o desempenho#
Shai Ben-David e colegas formularam a teoria padrão do problema em 2010. O erro de um classificador no domínio de destino é limitado por três termos: o erro no domínio de origem, uma medida de quanto os dois domínios diferem para a família de classificadores e o erro do melhor classificador único para ambos os domínios. O treinamento convencional com rótulos da origem reduz o primeiro termo. A maioria dos métodos UDA atua sobre o segundo, aprendendo características que fazem as entradas dos domínios de origem e destino parecer semelhantes; o terceiro termo lembra que a adaptação falha quando a relação entre os rótulos muda entre os domínios.
Principais abordagens#
- Correspondência de estatísticas: Alinha estatísticas simples das características dos domínios de origem e destino. A discrepância média máxima e o CORAL, que alinha as covariâncias das características, acrescentam uma penalização à função de perda do treinamento. Já o AdaBN, proposto por Yanghao Li e colegas em 2016, simplesmente recalcula a média e a variância de cada camada de normalização em lote com dados do domínio de destino.
- Alinhamento adversarial: As redes neurais adversariais de domínio (DANN), apresentadas por Yaroslav Ganin e Victor Lempitsky em 2015, treinam um classificador de domínio para distinguir as características da origem das do destino, enquanto uma camada de reversão de gradiente induz o extrator de características a enganá-lo.
- Tradução de imagens: Modelos generativos como o CycleGAN alteram o estilo das imagens de origem para que se pareçam com as do domínio de destino. Assim, as imagens de treinamento rotuladas já se parecem com as de implantação, como no CyCADA para cenas de condução.
- Autotreinamento: O modelo de origem rotula imagens do domínio de destino, suas previsões confiáveis tornam-se pseudorrótulos e o modelo é treinado novamente com esses rótulos, muitas vezes com um modelo professor atualizado lentamente para manter os rótulos estáveis.
- Adaptação sem acesso à origem e adaptação no momento do teste: O SHOT adapta um modelo treinado sem acesso aos dados de origem, enquanto o TENT atualiza apenas os parâmetros de normalização em lote durante a inferência, aumentando a confiança nas previsões feitas em lotes de teste.
O AdaBN mostra quanto da diferença entre domínios pode estar nas estatísticas das camadas de normalização em lote. Este exemplo de PyTorch treina uma rede pequena com 1.000 dígitos manuscritos e a testa com os dígitos restantes, renderizados como seriam capturados por uma câmera com imagem desbotada, menor contraste e maior brilho:
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}")A precisão nos dígitos com mudança de domínio aumenta de 0.290 para 0.940 sem usar um único rótulo do domínio de destino, aproximando-se dos 94% que o mesmo modelo alcança nesses dígitos antes da mudança. O ganho é tão grande porque uma alteração de contraste e brilho se converte em deslocamento e escala por característica após a primeira camada linear — exatamente o que a renormalização remove. Mudanças de forma ou conteúdo exigem os métodos mais robustos acima.
Benchmarks e aplicações#
O Office-31, publicado por Kate Saenko e colegas em 2010, contém 4.110 imagens de 31 objetos de escritório de três domínios: fotos de produtos da Amazon, imagens de webcam e fotos de DSLR. O VisDA-2017 pede que modelos treinados com renderizações sintéticas em 3D de 12 categorias de objetos classifiquem fotos reais; já o GTA5-to-Cityscapes treina a segmentação semântica com 24.966 quadros de um videogame e testa o modelo em ruas urbanas reais.
O mesmo padrão viabiliza aplicações práticas. Os veículos autônomos complementam filmagens reais de condução com dados sintéticos e renderizações de simuladores; os modelos de análise de imagens médicas precisam funcionar com scanners de diferentes fabricantes e hospitais; e os modelos agrícolas precisam lidar com novos campos, variedades de culturas e estações do ano. Os detectores costumam ser adaptados por autotreinamento: a função auto_annotate do pacote Python Ultralytics executa um detector YOLO26 em uma pasta de imagens não rotuladas, fornece cada caixa detectada como entrada ao Segment Anything Model (SAM) da Meta e grava rótulos de segmentação no formato YOLO. Assim, um detector treinado no domínio de origem pode gerar pseudorrótulos para imagens do domínio de destino, que depois são revisadas e usadas no ajuste fino.
UDA e configurações relacionadas#
O ajuste fino supervisionado precisa de rótulos do domínio de destino, e o aprendizado semissupervisionado pressupõe que os dados rotulados e não rotulados vêm da mesma distribuição. A generalização de domínio não usa dados do domínio de destino e, em vez disso, treina o modelo para ser robusto a domínios não vistos usando aumento de dados e aleatorização de domínio. A otimização robusta a distribuições prepara o modelo para um conjunto de possíveis mudanças, enquanto a UDA se adapta a um único domínio de destino cujas imagens já viu. Por sua vez, a monitorização de deriva de dados indica quando um modelo implantado entrou em um novo domínio que exige adaptação.










