Joint Disentangling and Adaptation for Cross-Domain Person Re-Identification
我以为我懂了,看了模型图发现还是高估了自己。
论文快速理解
论文地址: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问题上,这些差异表现在:季节、背景、视角、光照等。所以需要对齐两类数据的分布,从而提高模型复用效果。
以往的常用方法主要可以分为两大类:
- 在input level层面的,比如使用GAN进行风格转换。
- 在feature level层面的,比如self-training和distribution distance minimization等。
主要还是减少不同域的数据集的差异。
但是作者认为现有的方法都存在一个问题,就是在同时包含了id相关性和id相关的特征空间上完成adaptation,这个混杂的特征空间反而会削弱最终的效果。
所以作者提出解耦特征空间分成id相关和id不相关的部分,然后在id相关的部分进行适应。两个部分的效果是可以相互促进激励的。
论文主要包括以下三个贡献:
- 用于无监督跨域学习的联合框架,并且能对特征进行解耦。
- 引入跨域的cycle-consistency来实现目标的解耦效果。
- 解耦过程和适应过程是co-designed的。
DG-Net++结成了DG-Net中的两个appearance encoder和structure encoder,但是解决的是不同的问题:
- DG-Net++解决的是无监督跨域问题。
- DG-Net++在无监督情况下进行了对id相关和非相关特征的解耦。
- DG-Net++的解耦过程和适应过程连结在一起,彼此受益。
作者将自己提出的框架分为两个模块,一个是Disentangling Module,主要作用是分离出id相关的特征。在该部分使用了一个cycle-consistency generation的结构,来自两个域的图生成的新的图可以还原为各自的原始图像。Adaptation module则专注于id相关的特征来完成adaptation。两个模块通过共享的appearance encoder组合在一起。
Disentangling Moduel
给定一个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 encoder。 E a p p : x → v E_{app}:x \rightarrow v Eapp:x→v
- 一个用于source domain图像的structure encoder。 E s t r s : x s ( i ) → τ s ( i ) E^s_{str}:x_{s(i)} \rightarrow \tau_{s(i)} Estrs:xs(i)→τs(i)
- 一个用于target domain图像的structure encoder。 E s t r t : x t ( j ) → τ t ( j ) E^t_{str}:x_{t(j)} \rightarrow \tau_{t(j)} Estrt:xt(j)→τt(j)
- 一个用于source domain的decoder。 G s : ( v t ( j ) , τ s ( i ) ) → x s ( i ) t ( j ) G^s:(v_{t(j)},\tau_{s(i)}) \rightarrow x^{t(j)}_{s(i)} Gs:(vt(j),τs(i))→xs(i)t(j)
- 一个用于target domain的decoder。 G t : ( v s ( i ) , τ t ( j ) ) → x t ( j ) s ( i ) G^t:(v_{s(i)},\tau_{t(j)}) \rightarrow x^{s(i)}_{t(j)} Gt:(vs(i),τt(j))→xt(j)s(i)
- 一个用于判断真实图像和生成图像的判别器 D i m g D_{img} Dimg。
- 一个用于判断图像来自哪个域的判别器 D d o m D_{dom} Ddom。
真实图像都只有一个表明域和编号的下标,而生成图像则既有表示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特征。
Adaptation Module
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同时学习域不变性特征和判别得特征。
Optimization
对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。