通过扔一个诱饵进行无源无监督域适应
摘要
无监督域适应(UDA)旨在转移一个标签源域中学到的信息到一个无标记的目标域。现有的UDA方法要求适应中接触源数据,在实际应用中可能不可行。本文中,我们解决了无源无监督域适应问题(SFUDA),其中仅源模型在适应中是可用的。我们提出了一个方法叫BAIT来解决SFUDA。具体地,仅给源模型,源分类器头固定,引入了一个新的可学习分类器。当适应到目标域时,新添加分类器的类代表将作为一个bait。它们会首先接近由于域偏移而偏离源分类器原型的目标特征。然后,那些目标特征会被拉向对应的源分类器的原型,因此实现了与源分类器的特征对齐在无源数据的情况下。
1. 引言
如图1,我们的方法,在得到源模型后,首先提出在整个适应过程中冻结源模型的分类器头。然后我们加入一个额外的分类器(bait分类器),它是从源分类器(anchor分类器)初始化而来。新添加的bait分类器的类原型(分类器的权重)将移向目标特征,作为一个额外的目标特征的估计原型。之后特征提取器将让目标特征向anchor分类器的原型走。经过这一过程,所有的目标特征都期望聚簇在anchor分类器的对应类原型的周围,因此实现了适应。在适应中,我们的方法叫BAIT,比其它都好。
主要贡献:
(1)我们的方法不用伪标签,也不用图像生成;
(2)通过使用一个额外的分类器来将目标特征与源分类器的对应类原型对齐,从而防止需要源数据;
图1:上面:带源数据的无监督域适应。
图2:下面。使用了bait原型(来自新添加的bait分类器)来让目标特征簇在源原型周围,因此减小了域偏移。
3. 进行无源域适应的BAIT
将有nsn_sns个带标签的源域数据记为Ds={(xis,yis)}i=1nsD_s=\{(x_i^s,y_i^s)\}_{i=1}^{n_s}Ds={(xis,yis)}i=1ns,其中yisy_i^syis是xisx_i^sxis的对应标签,并且有ntn_tnt个样本的无标签目标域数据记为Dt={xjt}j=1ntD_t=\{x_j^t\}_{j=1}^{n_t}Dt={xjt}j=1nt,类的数量为K。通常UDA方法通过对齐源域和目标域之间的特征分布来减小域偏移。
3.1 源分类器的原型作为anchor
我们将神经网络降为两个部分:一个特征提取器fff和一个仅包含一个全连接层(权重正则化)的分类器头C1C_1C1。我们首先在标记源数据DsD_sDs上训练基础模型,用标准交叉熵损失:
Lce=−1ns∑i=1ns∑k=1KI[k=yis]logpk(xis)L_{ce}=-\frac{1}{n_s}\sum_{i=1}^{n_s}\sum_{k=1}^KI_{[k=y_i^s]}logp_k(x_i^s) Lce=−ns1i=1∑nsk=1∑KI[k=yis]logpk(xis)
其中pkp_kpk是softmax输出的第k个元素,I[z]I_{[z]}I[z]是指示方程如果z是真的值为1,否则为0.
仔细看UDA方法的训练过程显示:特征提取器旨在学习一个判别表示,分类器试图区分各种类的表示。UDA方法通过对齐源域和目标域的特征分布(来自特征提取器)来解决域偏移。一个成功的特征对齐意味着来自两个域的特征 提取器f产生的特征将被分类器头正确分类。
由于第k个类预测是由pk(x)=σ(∣∣WkT∣∣f(x))p_k(x)=\sigma(||W_k^T||f(x))pk(x)=σ(∣∣WkT∣∣f(x))计算得来,其中∣∣Wk∣∣||W_k||∣∣Wk∣∣是分类器的L2正则化权重,我们可以直接将分类器中每个类的正则化权重视作一个类原型,如图2上面所示。
由于域偏移,源训练特征提取器产生的目标特征簇将远离源类原型。所以从类原型的角度来看,域适应后一个好的模型应该让所有源特征和目标特征聚集在它们对应的类原型附近。
我们冻结源训练分类器C1C_1C1,这允许我们***存储来自源域的相关信息***,即***特征空间中固定的源类原型,而不用真正接触源数据***。将***源类原型在特征空间中固定为一个anchor,目标特征应当聚簇在对应原型的周围***。由于***源分类器一直都被固定,并且来自目标域的特征期望聚集在那些类原型附近***,我们将分类器C1C_1C1作为anchor分类器,并且它的类原型作为anchor原型。
3.2 第二个分类器的原型作为bait
为了固定的anchor分类器在无源域适应中成功,我们要解决两个问题。
首先,部分目标数据将不会很好的对齐(有不确定的预测)由于域偏移,并且这个数据需要被鉴别。第二,我们必须以一种方式适应特征提取器,以致于这个数据之后能被anchor分类器正确分类。因此,我们提出BAIT方法一个两步的算法,恰好解决这两个问题。我们的方法如图2下面。在***源数据上训练模型后,我们得到一个特征提取器f,和一个anchor分类器C1C_1C1***、我们在之后的训练周期中固定C1C_1C1,并用它来初始化一个额外的分类器C2C_2C2。额外分类器C2C_2C2的原型被优化来接近没有被分类器C1C_1C1准确分类的目标特征。接着,那些目标特征将被拉向源类原型。之后,我们将分类器C2C_2C2记为bait分类器,它的类原型为bait原型。
为了训练想要的C2C_2C2,提出了两部训练方法,可以迭代训练bait分类器C2C_2C2和特征提取器f。
步骤1:扔诱饵
步骤1中,仅训练bait分类器C2C_2C2,并冻结特征提取器f。由于域偏移,一些目标特征将不会定位在源原型周围,被认为是错误对齐。为了将目标特征拉向anchor原型,即将***目标特征与源分类器对齐***,我们***用bait原型来寻找那些远离anchor原型的特征***。也就是说,bait分类器旨在估计那些anchor分类器有不确定预测的目标特征的质心。因此在适应前,我们将数据的现在batch的特征分为两个集合:不确定的U和确定的C,如图2,根据它们的预测熵:
U={x∣x∈Dt,H(p(1)(x))>τ},C={x∣x∈Dt,H(p(1)(x))<=τ}\mathcal{U}=\{x|x\in D_t,H(p^{(1)}(x))>\tau\},C=\{x|x\in D_t,H(p^{(1)}(x))<=\tau\} U={x∣x∈Dt,H(p(1)(x))>τ},C={x∣x∈Dt,H(p(1)(x))<=τ}
其中p(1)(x)=σ(C1(f(x))p^{(1)}(x)=\sigma(C_1(f(x))p(1)(x)=σ(C1(f(x))是一个anchor分类器的预测,并且H(p(x))=−∑i=1KpilogpiH(p(x))=-\sum_{i=1}^Kp_ilogp_iH(p(x))=−∑i=1Kpilogpi。阈值τ\tauτ被估计为τ\tauτ中p1(x)p_1(x)p1(x)的熵的百分比,设为50%。
然后,我们让bait原型移向那些较高的熵特征,但仍保持在较低熵的目标特征附近。我们通过增加C1和C2C_1和C_2C1和C2中U上的预测之间的对称KL散度,同时将其在C上减少来实现:
Lcast(C2)=∑x∈CDSKL(p(1)(x),p(2)(x))−∑x∈UDSKL(p(1)(x),p(2)(x))L_{cast}(C_2)=\sum_{x\in C}D_{SKL}(p^{(1)}(x),p^{(2)}(x))-\sum_{x\in U}D_{SKL}(p^{(1)}(x),p^{(2)}(x)) Lcast(C2)=x∈C∑DSKL(p(1)(x),p(2)(x))−x∈U∑DSKL(p(1)(x),p(2)(x))
其中DSKLD_{SKL}DSKL是对称KL散度:DSKL(a,b)=1/2(DKL(a∣b)+DKL(b∣a))D_{SKL}(a,b)=1/2(D_{KL}(a|b)+D_{KL}(b|a))DSKL(a,b)=1/2(DKL(a∣b)+DKL(b∣a))
如图2,考虑到C2C_2C2是从C1C_1C1中初始化而来,增加两分类器间不确定集合上的KL散度将驱使C2C_2C2原型向着更高熵的特征。在确定集合上减少它将促使两分类器对这些特征有相似的预测。浙江保证bait原型不会走的太远。
步骤2:咬诱饵
这一阶段,我们仅训练特征提取器f,将***目标特征拉向anchor原型***。尽管直接让所有目标特征到正确的anchor原型是困难的,我们想让目标特征在anchor和bait原型附近都聚簇。
具体来说,我们更新特征提取器f来将目标特征移向bait和anchor原型,通过最小化提出的bite loss:公式4
Lbite(f)=∑i=1nt∑k=1K[−pi,k(2)logpi,k(1)−pi,k(1)logpi,k(2)]L_{bite}(f)=\sum_{i=1}^{n_t}\sum_{k=1}^{K}[-p_{i,k}^{(2)}logp_{i,k}^{(1)}-p_{i,k}^{(1)}logp_{i,k}^{(2)}] Lbite(f)=i=1∑ntk=1∑K[−pi,k(2)logpi,k(1)−pi,k(1)logpi,k(2)]
通过最小化这个loss,bait分类器的预测分布应该与anchor分类器的类似,反之亦然,这意味着目标特征期望与bait和anchor原型都更近。
直观的,如图2b,最小化bite lossLbiteL_{bite}Lbite将会将目标特征推向两个分类器的原型。 比喻上,在这个阶段目标特征bait(原型)并会被推向anchor(原型),意味着他们在bait和anchor周围形成簇。
此外,为了防止退化解决方案7,即把所有不确定特征拨向一些anchor类原型,我们采用了类平衡loss(CB loss)LbL_bLb来正则化特征提取器:公式5
Lb(f)=∑k=1K[KL(p‾k(1)(x))∣∣qk)+KL(p‾k(2)(x))∣∣qk)]L_b(f)=\sum_{k=1}^K[KL(\overline{p}_k^{(1)}(x))||q_k)+KL(\overline{p}_k^{(2)}(x))||q_k)] Lb(f)=k=1∑K[KL(pk(1)(x))∣∣qk)+KL(pk(2)(x))∣∣qk)]
其中p‾k=1nt∑x∈Dtpk(x)\overline{p}_k=\frac{1}{n_t}\sum_{x\in D_t}p_k(x)pk=nt1∑x∈Dtpk(x)是经验标签分布,q是正态分布qk=1/K,∑k=1Kqk=1q_k=1/K,\sum_{k=1}^Kq_k=1qk=1/K,∑k=1Kqk=1。用类平衡损失LbL_bLb,模型期望能有更近平衡的预测。
这个两步的训练在适应过程中的每个mini-batch迭代中都会出现。
通过扔一个诱饵进行无源无监督域适应相关推荐
- 无监督域适应、人体解析、视频异常检测和水果成熟度分类,推荐本周那些有意思的CV综述...
关注公众号,发现CV技术之美 今天向大家推荐四篇近期发布的文献综述,包含无监督域适应.人体解析.视频异常检测和水果成熟度分类. ▌Source-Free Unsupervised Domain Ada ...
- 直播 | ICML 2021论文解读:满足隐私保护要求的去中心化无监督域迁移范式
「AI Drive」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和 ...
- 最新综述:视频数据的无监督域适应
©作者 | 许悦聪 单位 | 新加坡科技研究局 研究方向 | 视频迁移学习.领域自适应 深度学习随着大数据的不断产生在日常生活生产中发挥着愈来愈重要的作用.针对视频分析的深度学习方法更是随着各类大型数 ...
- 无监督域对抗算法:ICCV2019论文解析
无监督域对抗算法:ICCV2019论文解析 Drop to Adapt: Learning Discriminative Features for Unsupervised Domain Adapta ...
- 超越最新无监督域自适应方法,研究人员提轻量CNN新架构OSNet
作者 | Kaiyang Zhou, Xiatian Zhu, Yongxin Yang, Andrea Cavallaro, and Tao Xiang 译者 | TroyChang 编辑 | Ja ...
- *基于类平衡自我训练的无监督域自适应用于语义分割
基于类平衡自我训练的无监督域自适应用于语义分割 摘要:最近的深度网络实现了最先进的性能在各种语义分割任务中.尽管有这样的进步,但是这些模型在现实世界中面临挑战,它们存在很大的差别在已标签训练/源文件和 ...
- 2022TGRS/云检测:用于遥感图像云检测的无监督域不变特征学习Unsupervised Domain-Invariant Feature Learning for Cloud Detection
2022TGRS/云检测:Unsupervised Domain-Invariant Feature Learning for Cloud Detection of Remote Sensing Im ...
- 【论文笔记】SIFA——基于GAN的双向跨模态无监督域适应框架
本文是论文<Unsupervised Bidirectional Cross-Modality Adaptation via Deeply Synergistic Image and Featu ...
- 干货!MetaCorrection:解决无监督域适应的domain gap问题
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 无监督域适应(UDA)旨在把知识从有标签源域数据迁移到无标签目标域数据上.现有的基于自训练(self-training)的UDA方法为目 ...
最新文章
- 『ExtJS』01 001. ExtJS 4 类的定义
- 理解VMware虚拟网络
- 【MySQL】可重复读模式下 unique key失效案例
- P2766 最长不下降子序列问题(网络流)
- 数据结构-栈2-链式存储
- (转)@Autowire注解与自动装配
- ble l2cap 工作过程_BLE 链路层报文详解
- ES6解构赋值原理详解
- 玻尔兹曼机(Boltzmann机)和深度置信网络基本概念
- 工厂如何引入ERP生产管理系统
- 高通apq8096连接外网
- Draftsharks回顾周末梦幻足球
- 线程main java中的异常怎么解决_线程“ main”中的异常java.lang.NoClassDefFoundError:...
- 虚拟机Ubuntu不能识别外接U盘
- 如何计算阻力系数与升力系数【翻译】
- 海信75E5K怎么样 海信75E5K和75E5H区别 哪个好
- 文件服务器同步,文件服务器同步
- 如何选择适合你的兴趣爱好(三十二),养花
- 闰年的判断(python)
- Hive分析、窗口函数