参考代码:SCDA
1. 概述
导读:在之前的Domain Adaption文章中主要是针对分类/分割场景任务,对于检测场景下的挖掘不够,这是由于分类/分割场景关注的是整个特征图范围上的表现,而检测却是具有局部性的,因而直接将分类/分割的域迁移方法引入是不合时宜的。对此文章按照监测网络的特性设计了一个检测网络下的domain adaption方案。首先寻找到特定的区域(也就是文中“where to look”,region mining的过程),得到这些区域之后便是对这些区域使用region align的方法进行特征对齐,所采用的方法也是基于GAN的(也就是文中的“how to align”,这部分与分割/分类中用的方法类似)。除此之外文章还设计了一个自适应的加权因子(通过weighting estimator实现),从而可以去调配region上的align,文章指出这样可以使得最后的结果更加鲁棒。文章的方法在normal-to-foggy(Cityscapes to Cityscapes-foggy)/synthetic-to-real(Sim10k to Cityscapes)/cross-camera (Kitti to Cityscapes)表现出了较好性能在mAp上提升了4%~6%。
由于现有的深度网络都是在已知的数据上学习,学习完成之后参数便固化,后期也没有自学习的pipe,因而对于在训练集中未统计到的数据本身鲁棒性不强,这就导致性能下降,如下图所示:
同样是街道场景,只是不同的天气情况就使得网络最后的结果差异较大。
2. 方法设计
2.1 整体pipline
文章的整体pipeline见下图所示:
pipeline的左端是Faster RCNN的结构,中间和右边部分就是这篇文章的核心了,主要包含了两个部分:
- 1)where to look(region mining):这部分解决的是对于区域的选取与归一化,文中将RPN的结果进行 K K K(聚类中心的数目)聚类,从而得到每个聚类上的特征表达 Θ \Theta Θ;
- 2)how to align(region align):这部分解决的是region的对齐过程,对于source和target的部分分别有一对生成器和判别器用于拉近两个域的分布。此外还通过weighting estimator去调配region上的align过程,使得结果更加鲁棒;
2.2 Region Mining
这篇文章使用的base model是Faster RCNN,其region产生的来源为RPN网络部分,但是RPN网络由于其运行原理,其产生的结果具有如下的问题:
- 1)由于有anchor的存在会生成不同大小的proposal,对于这个可以采集RoI Pooling之后的结果进行规避;
- 2)RPN的结果并不是最后的输出,其内部proposal的分布自然充满了噪声,对此可以采用聚类的方式排除一些无关的影响,但是却多引入了一些需要搜索的超参数;
对于target域中RPN结果的处理见下图的a/b图所示:
在上图中将RPN的结果进行了
K
=
4
K=4
K=4的聚类。在得到聚类结果之后就需要将对应区域的特征进行对齐(文中为featrue reassignment),得到整个的特征为
Θ
\Theta
Θ,则其中一个聚类中心的特征为
Θ
k
∈
R
m
k
∗
d
\Theta_k\in R^{m_k*d}
Θk∈Rmk∗d,其中
m
k
m_k
mk是聚类中proposal的数量(为一个超参数),是在聚类的结果中选择对应数量的proposal(排序之后的top-k),若是数量不满足通过copy的方式解决数量不足的问题。其中
d
d
d是RoI Pooling之后得到的特征维度(进行展开),可以对应参考图2的中间部分。
下表展示了文章中group时使用到的一些参数设置:
2.3 Region Alignment
region-level adversarial alignment:
source和target域中经过feature reassignment之后得到特征为
Θ
^
s
,
Θ
^
t
\hat{\Theta}_s,\hat{\Theta}_t
Θ^s,Θ^t,首先在每个域中都有生成器和判别器组成的对抗网络,其损失的形式描述为:
L
a
d
v
(
Θ
^
,
P
;
G
,
D
)
=
E
[
l
o
g
D
(
P
)
]
+
E
[
l
o
g
(
1
−
D
(
G
(
Θ
)
)
)
]
L_{adv}(\hat{\Theta},P;G,D)=E[logD(P)]+E[log(1-D(G(\Theta)))]
Ladv(Θ^,P;G,D)=E[logD(P)]+E[log(1−D(G(Θ)))]
其中,
P
P
P是对应聚类中心上真实图片区域。在source和target域中使用
D
s
,
S
t
D_s,S_t
Ds,St和
L
a
d
v
,
D
s
,
L
a
d
v
,
D
t
L_{adv,D_s},L_{adv,D_t}
Ladv,Ds,Ladv,Dt用以将真判定为真或假判定为假,使用
G
s
,
G
t
G_s,G_t
Gs,Gt和
L
a
d
v
,
G
s
,
L
a
d
v
,
G
t
L_{adv,G_s},L_{adv,G_t}
Ladv,Gs,Ladv,Gt用于将假判定为真,从而两个网络对抗训练。对于原本的检测网络
F
F
F,使用
L
a
d
v
,
F
s
L_{adv,F}^s
Ladv,Fs作为跨域的函数,将假的输入当作真,从而给适应的过程添加了约束,从而这部分的损失函数记为:
L
a
d
v
(
F
,
G
,
D
)
=
L
a
d
v
,
D
s
+
L
a
d
v
,
D
t
+
L
a
d
v
,
G
s
+
L
a
d
v
,
G
t
+
L
a
d
v
,
F
L_{adv}(F,G,D)=L_{adv,D_s}+L_{adv,D_t}+L_{adv,G_s}+L_{adv,G_t}+L_{adv,F}
Ladv(F,G,D)=Ladv,Ds+Ladv,Dt+Ladv,Gs+Ladv,Gt+Ladv,F
Weighting Estimator:
由于target域中的数据时没有标注的,因而RPN的区域很难求cover住真实的感兴趣区域,尤其是在训练的早期,为了强调target中的region真实与region-level align时候的相关,文章对source域中的box进行了重排序,从而可以对target域中聚焦提供指引。基于此文章使用一个网络
D
w
D_w
Dw衡量域source域中region的近似度,从而对target域中的region设置权值。对于这部分的训练文章将其抽象为交叉熵得形式:
L
w
(
Θ
s
^
,
Θ
t
^
;
D
w
)
=
E
[
l
o
g
(
D
w
(
Θ
s
^
)
)
]
+
E
[
l
o
g
(
1
−
D
w
(
Θ
t
)
)
]
L_w(\hat{\Theta_s},\hat{\Theta_t};D_w)=E[log(D_w(\hat{\Theta_s}))]+E[log(1-D_w(\Theta_t))]
Lw(Θs^,Θt^;Dw)=E[log(Dw(Θs^))]+E[log(1−Dw(Θt))]
其输出的维度是
R
K
∗
m
R^{K*m}
RK∗m,代表是的target与source在region上的match程度,在最后一个维度取均值,便可以得到在region上的加权系数
W
t
∈
R
K
W_t\in R^K
Wt∈RK,可以参考图3中的b/c图。则原来的损失函数可以描述为:
W
t
⋅
L
a
d
v
(
F
,
G
,
D
)
=
L
a
d
v
,
D
s
+
W
t
L
a
d
v
,
D
t
+
L
a
d
v
,
G
s
+
W
t
L
a
d
v
,
G
t
+
W
t
L
a
d
v
,
F
t
W_t\cdot L_{adv}(F,G,D)=L_{adv,D_s}+W_tL_{adv,D_t}+L_{adv,G_s}+W_tL_{adv,G_t}+W_tL_{adv,F}^t
Wt⋅Ladv(F,G,D)=Ladv,Ds+WtLadv,Dt+Ladv,Gs+WtLadv,Gt+WtLadv,Ft
则整个pipeline的损失函数描述为:
min
F
,
G
,
D
w
max
D
L
d
e
c
(
F
)
+
W
t
⋅
L
a
d
v
(
F
,
G
,
D
)
+
L
w
(
D
w
)
\min_{F,G,D_w}\max_{D}L_{dec}(F)+W_t\cdot L_{adv}(F,G,D)+L_w(D_w)
F,G,DwminDmaxLdec(F)+Wt⋅Ladv(F,G,D)+Lw(Dw)
其中损失的第一项是检测网络的分类和回归损失。
2.4 网络的优化过程
在上述的内容中讲到了整个pipline包含了较多的部分:检测模型 F F F,source域中的 G s , D s G_s,D_s Gs,Ds,target域中的 G t , D t G_t,D_t Gt,Dt,权重评估模块 D w D_w Dw。因而整体的优化过程被划分为4步:
- 1)更新 D s , D t D_s,D_t Ds,Dt,这部分用于判断真实的region feature还是生成器生成的region feature,损失函数为 L D = L a d v , D s + W t L a d v , D t L_D=L_{adv,D_s}+W_tL_{adv,D_t} LD=Ladv,Ds+WtLadv,Dt;
- 2)更新 D w D_w Dw,度量target域中不同region的贡献度;
- 3)更新 G s , G t G_s,G_t Gs,Gt,这部分用于生成符合真实region的生成器输出,损失函数为 L G = L a d v , G s + W t L a d v , G t L_G=L_{adv,G_s}+W_tL_{adv,G_t} LG=Ladv,Gs+WtLadv,Gt;
- 4)更新 F F F,这里完成的两部分工作,实现检测网络本身的任务,以及跨域的监督任务,损失函数为 L F = L d e c , F s + λ ( L a d v , F s + W t L a d v , F t ) L_F=L_{dec,F}^s+\lambda(L_{adv,F}^s+W_tL_{adv,F}^t) LF=Ldec,Fs+λ(Ladv,Fs+WtLadv,Ft);
不同分量对于网络性能的影响:
3. 实验结果
文中的超参数对性能的影响: