我以为我懂了,看了模型图发现还是高估了自己。
论文快速理解
论文地址:https://arxiv.org/pdf/2007.10315.pdf
代码地址:https://github.com/NVlabs/DG-Net-PP
这篇论文是在DG-Net上面的扩展,主要解决的是跨域问题。用到了unsupervised domain adaptation无监督的域适应,同时使用了有监督的带标签的来自source domain和无监督的不带标签的target domain的数据。因此设计的核心思想是:align the feature distribution。本身来自不同域的数据可能在某些地方差距很大,具体到ReID问题上,这些差异表现在:季节、背景、视角、光照等。所以需要对齐两类数据的分布,从而提高模型复用效果。
以往的常用方法主要可以分为两大类:
主要还是减少不同域的数据集的差异。
但是作者认为现有的方法都存在一个问题,就是在同时包含了id相关性和id相关的特征空间上完成adaptation,这个混杂的特征空间反而会削弱最终的效果。
所以作者提出解耦特征空间分成id相关和id不相关的部分,然后在id相关的部分进行适应。两个部分的效果是可以相互促进激励的。
论文主要包括以下三个贡献:
DG-Net++结成了DG-Net中的两个appearance encoder和structure encoder,但是解决的是不同的问题:
作者将自己提出的框架分为两个模块,一个是Disentangling Module,主要作用是分离出id相关的特征。在该部分使用了一个cycle-consistency generation的结构,来自两个域的图生成的新的图可以还原为各自的原始图像。Adaptation module则专注于id相关的特征来完成adaptation。两个模块通过共享的appearance encoder组合在一起。
给定一个source domain中的图像 x s ( i ) x_{s(i)} xs(i)和一个target domain中的图像 x t ( j ) x_{t(j)} xt(j),交换它们的appearance code或structure code就可以生成一个新的图像。
disentangling 模块包括以下几个部件:
真实图像都只有一个表明域和编号的下标,而生成图像则既有表示appearance来源的上标,也有表示structure来源的下标。
Cross-domain generation
给定一组source图像和target图像,通过交换他们的appearance code和structure code可以生成新的图像。由于这里没有生成图像的ground-truth label作为监督,作者使用cycle-consistency self-supervision的方法来保证效果,从生成图像中提取出appearance和structure来还原输出图像。
L c y c = E [ ∣ ∣ x s ( i ) − G s ( E a p p ( x t ( j ) s ( i ) ) , E s t r s ( x s ( i ) t ( j ) ) ) ∣ ∣ 1 ] + E [ ∣ ∣ x t ( j ) − G t ( E a p p ( x s ( i ) t ( j ) ) , E s t r t ( x t ( j ) s ( i ) ) ) ∣ ∣ 1 ] L_{cyc}=E[||x_{s(i)}-G^s(E_{app}(x^{s(i)}_{t(j)}),E^s_{str}(x^{t(j)}_{s(i)}))||_1]+\\E[||x_{t(j)}-G^t(E_{app}(x^{t(j)}_{s(i)}),E^t_{str}(x^{s(i)}_{t(j)}))||_1] Lcyc=E[∣∣xs(i)−Gs(Eapp(xt(j)s(i)),Estrs(xs(i)t(j)))∣∣1]+E[∣∣xt(j)−Gt(Eapp(xs(i)t(j)),Estrt(xt(j)s(i)))∣∣1]
其中 x s ( i ) x_{s(i)} xs(i)为source domain的图像, x t ( j ) x_{t(j)} xt(j)为target domain的图像, x t ( j ) s ( i ) = G t ( v s ( i ) , τ t ( j ) ) x^{s(i)}_{t(j)}=G^t(v_{s(i)},\tau_{t(j)}) xt(j)s(i)=Gt(vs(i),τt(j))和 x s ( i ) t ( j ) = G s ( v t ( j ) , τ s ( i ) ) x^{t(j)}_{s(i)}=G^s(v_{t(j)},\tau_{s(i)}) xs(i)t(j)=Gs(vt(j),τs(i))为交换appearance和structure后的生成图像。
为了保证appearance encoder能精准提取出id相关的信息,作者还使用了identification loss:
L i d s 1 = E [ − l o g ( p ( y s ( i ) ∣ x s ( i ) ) ) ] L^{s_1}_{id}=E[-log(p(y_{s(i)}|x_{s(i)}))] Lids1=E[−log(p(ys(i)∣xs(i)))]
这部分的主要保证原始的来自source domain的图像(带label的)分类不出错。同时也要保证生成图像保留了id相关的特征(appearance code)信息。
L i d s 2 = E [ − l o g ( p ( y s ( i ) ∣ x t ( j ) s ( i ) ) ) ] L^{s_2}_{id}=E[-log(p(y_{s(i)}|x^{s(i)}_{t(j)}))] Lids2=E[−log(p(ys(i)∣xt(j)s(i)))]
可以理解成appearance code决定了人的类别,structure code代表图像来自哪个域。上面这个loss就是保证使用行人a的appearance生成的新图像,仍然是行人a。
为了保证生成效果,作者也使用了一个对抗损失来拟合真假图像。
L a d v i m g = E [ l o g D i m g ( x s ( i ) ) + l o g ( 1 − D i m g ( x t ( j ) s ( i ) ) ] + E [ l o g D i m g ( x t ( j ) ) + l o g ( 1 − D i m g ( x s ( i ) t ( j ) ) ] L^{img}_{adv}=E[logD_{img}(x_{s(i)})+log(1-D_{img}(x^{s(i)}_{t(j)})]+\\ E[logD_{img}(x_{t(j)})+log(1-D_{img}(x^{t(j)}_{s(i)})] Ladvimg=E[logDimg(xs(i))+log(1−Dimg(xt(j)s(i))]+E[logDimg(xt(j))+log(1−Dimg(xs(i)t(j))]
判断图像真假的判别器,不考虑图像来自哪个域。这样就可以间接性地引导appearance encoder去学习domain-invariant特征。
Adversarial alignment 虽然appearance encoder的部分是两个域共享的,但是仍然不能保证特征表达具有相似的分布。因此作者引入了domain判别器,对appearance encoder提取出的特征 v s ( i ) v_{s(i)} vs(i)和 v t ( j ) v_{t(j)} vt(j)进行区分。在对抗训练过程中appearance编码器会持续学习生成判别器 D d o m D_{dom} Ddom无法区分的特征,跨域的appearance特征分布之间的差距会逐渐减小。
domain appearance adversarial alignment loss:
L a d v d o m = E [ l o g D d o m ( v s ( i ) ) + l o g ( 1 − D d o m ( v t ( j ) ) ] + E [ l o g D d o m ( v t ( j ) ) + l o g ( 1 − D d o m ( v s ( i ) ) ] L^{dom}_{adv}=E[logD_{dom}(v_{s(i)})+log(1-D_{dom}(v_{t(j)})]+\\ E[logD_{dom}(v_{t(j)})+log(1-D_{dom}(v_{s(i)})] Ladvdom=E[logDdom(vs(i))+log(1−Ddom(vt(j))]+E[logDdom(vt(j))+log(1−Ddom(vs(i))]
Self-training作者在adaatation模块中包括了self-training的部分。它跨域减少跨域特征分布之间的差距,同时也鼓励了判别式得appearance特征的学习。
对于来自target domain的数据,迭代性的生成一组伪标签。并且使用这组伪标签改善网络。伪标签是通过对从appearance encoder提取出的target features进行聚类的道德,对于每个cluster中的样本都分配同一个标签。每两个epoch更新一次伪标签。
L i d t 1 = E [ − l o g ( p ( y ^ t ( j ) ∣ x t ( j ) ) ) ] L i d t 2 = E [ − l o g ( p ( y ^ t ( j ) ∣ x s ( i ) t ( j ) ) ) ] L^{t_1}_{id}=E[-log(p(\hat{y}_{t(j)}|x_{t(j)}))]\\ L^{t_2}_{id}=E[-log(p(\hat{y}_{t(j)}|x^{t(j)}_{s(i)}))] Lidt1=E[−log(p(y^t(j)∣xt(j)))]Lidt2=E[−log(p(y^t(j)∣xs(i)t(j)))]
在伪标签上也应有identification loss,保证分类正确和appearance encoder的提取效果。
带self-training的adaptation可以促进共享的appearance encoder同时学习域不变性特征和判别得特征。
对share appearance encoder、image discriminator、domain discriminator和source structure encoders,target structure encoders, source decoders, target decoders进行联合训练,来优化最终目标。
L t o t a l ( E a p p , D i m g , D d o m , E s t r s , E s t r t , G s , G t ) = λ c y c L c y c + L i d s 1 + L i d t 1 + λ i d L i d s 2 + λ i d L i d t 2 + L a d v i m g + L a d v d o m L_{total}(E_{app},D_{img},D_{dom},E^s_{str},E^t_{str},G^s,G^t)=\lambda_{cyc}L_{cyc}+L^{s1}_{id}+L^{t1}_{id}+\lambda_{id}L^{s2}_{id}+\lambda_{id}L^{t2}_{id}+L^{img}_{adv}+L^{dom}_{adv} Ltotal(Eapp,Dimg,Ddom,Estrs,Estrt,Gs,Gt)=λcycLcyc+Lids1+Lidt1+λidLids2+λidLidt2+Ladvimg+Ladvdom
作者使用的权重是 λ c y c = 2 , λ i d = 0.5 \lambda_{cyc}=2,\lambda_{id}=0.5 λcyc=2,λid=0.5。