Domain Adaption Without Source Data论文阅读笔记
总的来说:
源模型经过一个特征提取器和一个分类器后得到一个标签ysy_s
可训练的目标模型输入目标样本,经过特征提取器后,分类器Cs2tC_{s2t}用源伪标签训练,分类器CtC_t用目标伪标签yty_t训练。
其中的yty_t是由APM得到的。APM中,一旦得到伪标签,就移除不可靠样本(集合到集合基于距离的置信度)。用目标伪标签以自学习方式,源伪标签作为正则化器将目标模型适应到目标域。
APM
目标模型两种loss,Cs2tC_{s2t}利用的伪标签(预训练源模型后推断的目标样本得到的),不会改变。对所有目标样本利用APM分配伪标签,包括对每个类的可靠目标样本(多样本)。
伪标签
给定目标样本到特征提取器产生嵌入特征ftf_t,技术嵌入特征和所有APM中样本的相似度分数,APM中每个类可有不同数量的类代表样本。最后选择最相似的类得到伪标签。
Cs2tC_{s2t}得到的loss是LsourceL_{source},CtC_t的loss是LselfL_{self}用到了w,如果最相似小于次相似w是1否则是0。
一、引言
这篇文章中提出了一个新颖的方法,可以解耦直接用源数据的域适应过程,通过利用预训练源模型。关键思想:使用一个预训练源模型和 reliable 目标样本以自训练的方式更新目标模型。产生问题:怎样从预训练源模型中挑选可靠的目标样本。
在域适应中,源域目标域在协变量偏移下紧密相关。预测不准确性课通过自熵量化,H(x)=−∑p(x)log(p(x))H(x)=-\sum p(x)log(p(x)),这里小的熵意味着更自信的预测。基于此,猜想在无标签的目标样本中,通过预训练源模型衡量的熵低的样本足够可靠。
为验证,我们衡量被喂入一个预训练源模型的目标样本的自熵,然后分析准确性和样本分布。
如图1,将熵值低于0.2的样本作“可靠样本”,占了总样本的30%左右。从结果看,我们可以总结:一个目标模型可以用可靠的目标样本通过自熵准则训练,但致命的是样本很少。

为了解决可靠但很少目标样本的问题,提出一个新的两部分组成的框架。一个是来自源域的预训练模型,所有权重都被冻结,另一个是从预训练模型初始化来的目标模型,但是通过两个losses逐渐发展。第一个损失使用来自预训练源模型的所有目标样本的 source-oriented pseudo labels ,这防止目标模型产生由第二个自学习损失产生的自偏差问题。第二个损失利用从可训练目标网络得到的目标样本的 target-oriented pseudo labels 优化目标模型。
更准确的,我们周期性的存储每个类的低熵可靠样本作为 prototypes ,在一个记忆库中训练过程中。然后,我们基于嵌入样本和存储类prototypes直接的相似度为一个目标样本分配 target-oriented pseudo labels 。然而,伪标签可能不总是准确的,所以我们提出一个基于置信度的样本过滤,通过测量集合-集合的距离。训练中,逐渐增加第二个损失的影响,允许我们的目标模型以渐进方式适应到目标域。
我们工作的主要贡献:1)解决存在数据隐私问题的环境下的域适应,这是第一个训练时没有任何源数据的工作。2)为了从源数据中结构域适应,提出新颖的逐渐发展的框架:基于可靠的目标样本,来自源域细腻些的正则化。3)尽管不用任何源样本训练我们的目标模型,比传统用带标签源数据的模型更好效果。
二、方法
1. 问题
与UDA相比,训练过程中没有用到任何带标签的源样本。
UDA 目标是最小化一个带标签源域和一个不带标签目标域之间的差异,前提是源和目标样本取自不同但相关的概率分布。
SFDA 假设无法得到源域样本,利用源域的预训练模型。目的在于通过预训练源模型的参数和不带标签的目标域实现无监督域适应。

2. SFDA框架
主要包括两种模型:预训练源模型和一个可训练的目标模型。
源模型包括:一个特征提取器FsF_s和一个分类器CsC_s,在源域预训练后这些模块的参数都是固定的。
可训练的目标模型包括:一个特征提取器FtF_t(有多分支分类器Cs2tC_{s2t}和CtC_t),每个模块的参数都是用预训练源模型的参数初始化来的(θFs,θCs\theta_{F_s},\theta_{C_s})。
当目标样本作为输入送入FtF_t时,上分支(Cs2tC_{s2t})用source−orientedsource-oriented伪标签ys\hat{y_s}进行训练(伪标签在预训练分类器CsC_s中得到)。下分支(CtC_t)用target−orientedtarget-oriented伪标签yt\hat{y_t}进行训练(由提出的APM得到的)。一旦从APM中得到了伪标签yt^\hat{y_t},我们就通过集合到集合的基于距离的置信度移除不可靠样本。
总的来说,以一种自学习方式利用伪标签yt\hat{y_t}将目标模型适应到目标域,用预训练源模型的得到的源知识ys\hat{y_s}作为正则化器。
-Adaptive prototype memory
目标模型更新参数以两种类型的loss函数:第一种loss方程(Cs2tC_{s2t}中)旨在保持源域的信息。Cs2tC_{s2t}利用预训练源模型干扰目标样本后获得的伪标签(FsF_s和CsC_s)。
注意:每个目标样本的Cs2tC_{s2t}损失在训练过程中不变。
为了训练中也能改进目标模型,通过APM为所有目标样本分配伪标签。这个APM包括每个类的可靠目标样本(叫做multi−prototypesmulti-prototypes。
第一步:计算出目标样本的归一化自熵H(xt)=−1logNc∑l(xt)log(l(xt))H(x_t)=-\frac{1}{logN_c}\sum l(x_t)log(l(x_t)),这里的l(xt)l(x_t)代表分类器CtC_t得到的预测概率,NcN_c代表总类数。然后建立一个class−wiseclass-wise熵集Hc=H(xt)∣xt∈XcH_c={H(x_t)|x_t\in X_c},这里XcX_c将CtC_t预测得到的样本集记作类cc。
下一步:选择可靠样本,即multi−prototypesmulti-prototypes,可表示每个类。方法:选择每个类中自熵较低的固定数量的样本。但可能某些类本身熵值就较低,所以解决方法:对每个类不同数量prototypes。
首先找到每个类的最低熵,然后设置其中的最大值作为阈值来挑选prototypes,即η=max{min(Hc)∣c∈C},C=1...Nc\eta=max{\min(H_c)|c\in C},C={1...N_c}是类集合。利用这个可变的阈值,得到每个类的multi−prototypesmulti-prototypes:
Mc=Ft(xt)∣xt∈Xc,H(xt)<=η M_c={F_t(x_t)|x_t\in X_c,H(x_t)<=\eta}
这里每个prototype包括一个嵌入特征Ft(xt)F_t(x_t),并且这些多prototypes之后还要用于伪标签化和基于置信度过滤的过程,所以我们将所有prototypes存储进APM中。更新AMP花销大,所以周期性更新,经验上,每100步更新一次APM。
-伪标签化
基于APM中的multi-prototypes,我们可以为未标记的目标样本分配伪标签。给定一个目标样本xt∈RIx_t\in RI,将其喂入特征提取器Ft:RI−>REF_t:RI->R^E,产生一个嵌入特征ft∈REf_t\in R^E,这里的I,EI,E代表输入空间和嵌入空间的维度。然后计算出嵌入特征和所有APM中prototypes间的相似度分数:
sc(xt)=1∣Mc∣∑pc∈McpcTft∣∣pc∣∣2∣∣ft∣∣2 s_c(x_t)=\frac{1}{|M_c|}\sum_{p_c\in M_c} \frac{p_c^Tf_t}{||p_c||_2||f_t||_2}
这里pc∈REp_c\in R^E代表类别c中的一个多prototypes。
最后,通过选择最相似的类得到伪标签,即yt^=argmaxcsc(xt),∀c∈C\hat{y_t}=argmax_cs_c(x_t),\forall c\in C。
-基于置信度的过滤
一旦通过APM得到伪标签,我们就可以用传统的交叉熵训练FtF_t和CtC_t。然后,由于我们没有用任何groundtruthgroundtruth标签,会存在不确定性和错误传播问题。为获得更多可靠伪标签,提出一个基于样本置信度的过滤机制。思想:用集合-集合距离估计一个伪标签的置信度,考虑两个集合间的corner情况很有效???
第一个集合是一个单独的元素集(包括一个目标样本),另一个集合可以是每个类的多prototypes。准确地,对每个目标样本得到最相似类Mt1M_{t1}和次相似类Mt2M_{t2}的多prototypes。然后衡量单独集合Q=ftQ={f_t}和Mt1M_{t1}间的距离(Hausdorff距离)。
dH(Q,Mt1)=maxp∈Mt1d(ft,p) d_H(Q,M_{t1})=max_{p\in M_{t1}}d(f_t,p)
dH∗(Q,Mt2)=minp∈Mt2d(ft,p) d_H^*(Q,M_{t2})=min_{p\in M_{t2}}d(f_t,p)
仅当最相似类比次相似类更近时,定义一个可靠样本。最后为每个目标样本分配一个置信度分数:
w(xt)={1ifdH(Q,Mt1)<dH∗(Q,Mt2)0otherwisew(x_t)=
-优化
目标模型由两个可训练分类器Cs2t,CtC_{s2t},C_t。预训练源模型得到的伪标签y^s\hat y_s用于训练Cs2tC_{s2t}:
Lsource(Dt)=−Ext∼Dt∑c=1Nc1[c=y^s]log(σ(Cs2t(Ft(xt)))) L_{source}(D_t)=-E_{x_t\sim D_t}\sum_{c=1}^{N_c}1_{[c=\hat y_s]}log(\sigma(C_{s2t}(F_t(x_t)))),这里11是一个指示函数。上面公式帮助保持源域知识同时作为一个正则化器。
APM获得的伪标签yt^\hat{y_t}用于训练CtC_t作为补充监督:
Lself(Dt)=−Ext∼Dt∑c=1Ncw(xt)1[c=y^t]log(σ(Ct(Ft(xt)))) L_{self}(D_t)=-E_{x_t\sim D_t}\sum_{c=1}^{N_c}w(x_t)1_{[c=\hat y_t]}log(\sigma(C_{t}(F_t(x_t))))
使用置信分数w(⋅)w(\cdot)仅对自信的样本计算损失,总损失函数为:
Ltotal(Dt)=(1−α)Lsource(Dt)+αLself(Dt) L_{total}(D_t)=(1-\alpha)L_{source}(D_t)+\alpha L_{self}(D_t)
这里的α\alpha用于平衡源正则化损失Lsource(Dt)L_{source}(D_t)和自学习损失Lself(Dt)L_{self}(D_t)。
先前阶段,伪标签y^t\hat y_t是很稳定的,所以我们逐渐增加α\alpha从0到1。测试阶段,我们使用分类器CtC_t的分类概率,最重要的超参数是更新周期。
三、实验
遵循之前的研究,我们使用在ImageNet上预训练的ResNet-50或ResNet-101作为一个基础特征提取器,使用相同的网络架构做固定的源模型和可训练的目标模型。对Office-31设定最大迭代步数5000.
我们的实验中,训练图像重设为256 256,并随机用一个随机水平翻转裁剪到224 224。SGD作为优化器,权重衰减为0.0005,Momentum为0.9。基础学习率设为10-3,在一个预训练特征提取器中的所有微调层都以学习率10-4进行优化。
学习率应用lrp=lr0(1+α⋅p)−βl_{r_p}=l_{r_0}(1+\alpha \cdot p)^{-\beta},这里lr0l_{r_0}是基础学习率,p是一个相对步数在训练过程中从0变为1,α=10,β=0.75\alpha =10,\beta =0.75。
我们方法中最重要的超参数是APM的更新周期。每100迭代更新一个APM模块。
3.3实验分析
基于置信度的过滤 有效解决了不完美伪标签的不确定性。为进一步验证我们的过滤机制,我们测量了有效训练样本的百分比,。可以看到目标样本的一小部分用来在开始时训练,但随着训练继续有效样本的数量逐渐增加。
特征可视化 为视觉上验证方法有效性,比较了我们SFDA在Office-31的A-W和来自ResNet-50的t-SNE嵌入特征。我们的方法更好的对齐了源和目标数据。结果说明有可能在不接触源数据情况下减小两个不同域间的差距。
可靠样本的统计数据 将小于0.2熵值的样本作为“可靠样本”,占据整个样本的30%。注意在训练过程中这些数据随着我们SFDA的发展会改变。因此,我们进一步分析了训练过程中这些数据的改变。图4(a)发现可靠样本的百分比逐渐增加最终超过总样本的50%。更重要的,可靠样本伪标签的准确率也增加。
APM更新周期 周期性更新APM来反映目标域的数据,使用我们逐渐增进的目标模型。图4(b)显示了不同APM更新周期我们方法的性能。更新周期越短,准确率更好,但训练过程要求更多计算。相反,增加更新周期会降低性能,因为目标模型不能完全利用它的自学习机制。经验熵,对所有数据集将更新周期设为100.
权衡参数α\alpha分析了源正则化损失和自学习损失的权衡参数。实验中,调查了两种策略,静止α\alpha和动态α\alpha。对于静止α\alpha,将值从0变为1.仅使用源正则化损失即α=0\alpha =0 ,不利用更新目标模型的优势,所以性能低于其它设定。
另一方面,仅依赖自学习损失α=1\alpha =1,可能由于自偏差陷入局部最小。在SFDA中,设置动态α\alpha用α=2(1+exp(−10⋅iter/max_iter))−1−0.5)\alpha = 2(1+exp(-10\cdot iter/max_iter))^{-1}-0.5),从而目标模型逐渐从源模型进行更新。从实验课观察到动态α\alpha 比所有静止α\alpha的设定都更好,验证了我们动态规划的有效性。
