域适应目标检测:DA Faster R-CNN——Domain Adaptive Faster R-CNN for Object Detection in the Wild
综述
论文题目:《Domain Adaptive Faster R-CNN for Object Detection in the Wild》
会议时间:IEEE Conference on Computer Vision and Pattern Recognition 2018 (CVPR, 2018)
源码地址:https://github.com/yuhuayc/da-faster-rcnn(caffe)、https://github.com/krumo/Domain-Adaptive-Faster-RCNN-PyTorch(PyTorch)
针对领域:域适应目标检测
源码笔记:https://blog.csdn.net/qq_50001789/article/details/131364186
主要思想
现实世界中的目标检测容易面临来自视点、目标外观、背景、光照、图像质量等方面的巨大差异,可能会导致训练数据和测试数据之间相当大的领域偏移,下图选取了自动驾驶中几个常用的数据集图片,从中可以发现,不同的数据集之间因为城市的背景、天气情况以及车辆形状等因素会产生相当大的领域偏移问题,针对这一问题,作者开发了一种跨域目标检测算法,可以使模型适应视觉上不同于训练集数据领域的新领域,如利用晴天数据集训练的模型也可以很好地应用到雾天的目标检测。
作者设计了一种基于Faster R-CNN的领域自适应Faster R-CNN算法(Domain Adaptive Faster R-CNN),基于协变量偏移假设(covariate shift assumption),域偏移可能发生在图像级别水平(如图像尺度、图像风格等)以及实例级别水平(如物体出现的尺寸)。为了解决领域偏差问题,作者设计了图像级水平自适应组件和实例级水平自适应组件,并且将其嵌入到Faster R-CNN中,从而实现最小化两个领域之间的 H \mathcal H H散度的目的。在每个组件中,作者训练了一个领域分类器,使用对抗策略来学习领域不变的特征,并且进一步在不同层次的领域分类器之间引入一致性正则化,从而让Faster R-CNN学习到一个域不变的区域提议模块(RPN)。
本文的贡献可以总结为:
- 从概率的视觉对领域偏移问题做了一个分析;
- 设计了两个自适应组件来分别缓解图像和实例级别的领域差异所产生的问题;
- 设计了一致性正则化器来鼓励RPN网络具有领域不变性;
- 将提出的组件集成到Faster R-CNN中,并且以端到端的方式进行训练。
方法
预备内容
Faster R-CNN
本文中使用的基线检测模型为Faster R-CNN,该网络是一个二阶段检测器,主要由三个部件组成:特征提取网络(底层卷积层)、区域提议网络(RPN)、基于感兴趣区域的分类模块(ROI),网络结构如下图左侧所示。
首先输入的图片先经过特征提取网络提取特征,之后将得到的特征图传入RPN模块生成对应的物体提议,最后ROI模块利用感兴趣的区域进行物体类别预测,训练损失由RPN模块的损失和ROI模块的损失构成:
L
d
e
t
=
L
r
p
n
+
L
r
o
i
L_{det}=L_{rpn}+L_{roi}
Ldet=Lrpn+Lroi
其中RPN损失和ROI损失均由两部分构成:分类器预测的准确度、预测框的回归参数。
利用H散度的分布对齐
H
\mathcal H
H散度用于衡量两个样本分布之间的离散程度,假设一个特征向量表示为
x
x
x,源域的样本表示为
x
S
x_{\mathcal S}
xS,目标域的样本表示为
x
T
x_{\mathcal T}
xT,利用
h
:
x
→
0
,
1
h:x\rightarrow{0,1}
h:x→0,1表示域分类器,对于源域数据
x
S
x_{\mathcal S}
xS期望预测为0,对于目标域数据
x
T
x_{\mathcal T}
xT期望预测为1。假设
H
\mathcal H
H为所有可能的域分类器集合(即分类器
h
h
h的范围),则
H
\mathcal H
H散度可以表示为:
d
H
(
S
,
T
)
=
2
(
1
−
min
h
∈
H
(
e
r
r
S
(
h
(
x
)
)
+
e
r
r
T
(
h
(
x
)
)
)
)
d_{\mathcal H}(\mathcal S,\mathcal T)=2(1-\min_{h\in\mathcal H}(err_{\mathcal S}(h(x))+err_{\mathcal T}(h(x))))
dH(S,T)=2(1−h∈Hmin(errS(h(x))+errT(h(x))))
其中
e
r
r
S
err_{\mathcal S}
errS和
e
r
r
T
err_{\mathcal T}
errT分别表示
h
(
x
)
h(x)
h(x)在源域和目标域样本上的预测误差。从上式可以看出领域距离
d
H
(
S
,
T
)
d_{\mathcal H}(\mathcal S,\mathcal T)
dH(S,T)与域分类器
h
h
h错误率成反比,换句话说,对于最好的域分类器,如果他们领域分类的错误率很高,则此时散度就很小,说明特征彼此分布很近,即这两个领域的数据很难区分。
注:这也正是我们在域适应任务中所期望的,对齐两个领域之间的特征数据,使其难以区分,因此有两个任务:得到好的域分类器、并且让CNN产生上述域分类器难以鉴别领域归属的特征,需要以相反的方式优化域分类器和CNN,因此需要利用对抗训练策略。(注意理清逻辑关系)
深度神经网络中,特征向量
x
x
x通常表示为一层网络后的激活,假设产生向量
x
x
x的网络为
f
f
f,为了对齐两个领域的特征,需要强制网络
f
f
f输出最小化领域距离
d
H
(
S
,
T
)
d_{\mathcal H}(\mathcal S,\mathcal T)
dH(S,T)的特征向量,即:
min
f
d
H
(
S
,
T
)
⇔
max
f
min
h
∈
H
{
e
r
r
S
(
h
(
x
)
)
+
e
r
r
T
h
(
x
)
)
}
\min_fd_{\mathcal H}(\mathcal S,\mathcal T)\Leftrightarrow\max_f\min_{h\in\mathcal H}\{err_{\mathcal S}(h(x))+err_{\mathcal T}h(x))\}
fmindH(S,T)⇔fmaxh∈Hmin{errS(h(x))+errTh(x))}
这可以通过对抗的训练方式进行优化,最常用的方法就是将梯度反转层(gradient reverse layer, GRL)嵌入到CNN中,具体实现方法可见源码笔记。
举个例子来说,当利用晴天数据训练模型时,输入一张雾天数据,由于网络没有见过雾天的数据集,因此存在训练数据与测试数据之间的领域偏移,他会认为雾天的数据与晴天的数据内容完全不同(极端情况下),因此会产生一个与晴天数据完全不同的特征向量,限制了RPN和ROI的预测。但实际上雾天数据与晴天数据所蕴含的信息一样,待检测目标也一样,只是数据分布有所差异,因此我们期望网络能够平等对待两种数据,对于雾天数据能产生与晴天数据相同的特征分布,这样才便于后续对目标位置和类别的预测。
用于目标检测的域适应
遵循一般的域适应术语,将训练数据称为源域数据 S \mathcal S S,测试数据称为目标域数据 T \mathcal T T。训练过程中,对于源域数据有目标框坐标、物体类别、领域标签等信息,而对于目标域数据仅有领域标签。
概率视角
物体检测问题可以视为学习一个后验概率 P ( C , B ∣ I ) P(C,B|I) P(C,B∣I),其中 I I I表示图片表征(特征图), B B B表示物体坐标框, C ∈ { 1 , … , K } C\in\{1,\dots,K\} C∈{1,…,K}表示物体类别,其中 K K K为类别总数。
假设目标检测中训练样本的联合分布为 P ( C , B , I ) P(C,B,I) P(C,B,I),使用 P S ( C , B , I ) P_{\mathcal S}(C,B,I) PS(C,B,I)以及 P T ( C , B , I ) P_{\mathcal T}(C,B,I) PT(C,B,I)分别表示源域联合分布和目标域联合分布(目标域中 C , B C,B C,B未知)。当存在领域偏移时 P S ( C , B , I ) ≠ P T ( C , B , I ) P_{\mathcal S}(C,B,I)\neq P_{\mathcal T}(C,B,I) PS(C,B,I)=PT(C,B,I)。
图像级别的领域适应:使用贝叶斯公式,联合分布可以表示为:
P
(
C
,
B
,
I
)
=
P
(
C
,
B
∣
I
)
P
(
I
)
P(C,B,I)=P(C,B|I)P(I)
P(C,B,I)=P(C,B∣I)P(I)
类似于分类问题,对目标检测做协变量偏移假设(covariate shift assumption),例如:两个域的条件概率
P
(
C
,
B
∣
I
)
P(C,B|I)
P(C,B∣I)相同,领域分布偏移由不同的边缘分布
P
(
I
)
P(I)
P(I)引起。换句话说,检测器在两个领域之间是一致的,给定一张图片,无论它属于哪个领域,检测器都应该返回相同的检测结果(位置与类别相同)。在Faster R-CNN中,图片表征
I
I
I可以表示基础卷积层输出的特征图,因此为了解决领域偏移问题,应该强制两个领域的图片表征分布相同,即
P
S
(
I
)
=
P
T
(
I
)
P_{\mathcal S}(I)=P_{\mathcal T}(I)
PS(I)=PT(I),这里称为图像级别的自适应。
实例级别的自适应:另一方面,联合分布也可以分解为:
P
(
C
,
B
,
I
)
=
P
(
C
∣
B
,
I
)
P
(
B
,
I
)
P(C,B,I)=P(C|B,I)P(B,I)
P(C,B,I)=P(C∣B,I)P(B,I)
利用协变量偏移假设,两个领域条件概率
P
(
C
∣
B
,
I
)
P(C|B,I)
P(C∣B,I)是相同的,假设领域的偏移由边缘分布
P
(
B
,
I
)
P(B,I)
P(B,I)的不同引起。直观地说,两个领域之间的语义信息应保持一致性,即给定包含对象的相同图像区域,无论他属于哪个哪个域,他们的类别标签应该相同。因此我们可以强制来自两个域的实例表征分布相同,即
P
S
(
B
,
I
)
=
P
T
(
B
,
I
)
P_{\mathcal S}(B,I)=P_{\mathcal T}(B,I)
PS(B,I)=PT(B,I),这里称为实例级别的自适应。
这里,实例表征
(
B
,
I
)
(B,I)
(B,I)是指从每个实例的地面真实边界框中图像区域提取的特征。虽然目标域中没有真实边界框标签,但是可以通过如下公式来获得:
P
(
B
,
I
)
=
P
(
B
∣
I
)
P
(
I
)
P(B,I)=P(B|I)P(I)
P(B,I)=P(B∣I)P(I)
其中
P
(
B
∣
I
)
P(B|I)
P(B∣I)表示预测的边界框(例如Faster R-CNN中RPN模块的输出),这仅在
P
(
B
∣
I
)
P(B|I)
P(B∣I)领域不变的情况下成立。
联合自适应:理想情况下,可以实现图像级别和实例级别的领域对齐,考虑到
P
(
B
,
I
)
=
P
(
B
∣
I
)
P
(
I
)
P(B,I)=P(B|I)P(I)
P(B,I)=P(B∣I)P(I),并且两个域的条件分布
P
(
B
∣
I
)
P(B|I)
P(B∣I)假设相同且非零,有如下公式成立:
P
S
(
I
)
=
P
T
(
I
)
⇔
P
S
(
B
,
I
)
=
P
T
(
B
,
I
)
P_{\mathcal S}(I)=P_{\mathcal T}(I)\Leftrightarrow P_{\mathcal S}(B,I)=P_{\mathcal T}(B,I)
PS(I)=PT(I)⇔PS(B,I)=PT(B,I)
P S ( I ) = P S ( I ) ⇔ P S ( B , I ) = P T ( B , I ) P_{\mathcal S}(I)=P_{\mathcal S}(I)\Leftrightarrow P_{\mathcal S}(B,I)=P_{\mathcal T}(B,I) PS(I)=PS(I)⇔PS(B,I)=PT(B,I)
换句话说,如果图像级表征的分布在两个域之间相同,则实例级表征也在两个域之间相同。然而,完美地估计条件分布 P ( B ∣ I ) P(B|I) P(B∣I)是不太现实的,即RPN模块不能完美地预测边界框,原因如下:①实践中,可能很难完美地对齐边界分布 P ( I ) P(I) P(I),因此用于估计的 P ( B ∣ I ) P(B|I) P(B∣I)在某种程度上是存在偏差的;②物体边界框信息仅在源域数据可用,因此 P ( B ∣ I ) P(B|I) P(B∣I)仅能使用源域数据来学习,很容易让其偏向源域数据。
因此,作者建议同时在图像级和实例级水平上实行领域分布对齐,并且应用一致性正则化器来减轻估计 P ( B ∣ I ) P(B|I) P(B∣I)的偏差。为了对齐两个域的分布,需要训练一个域分类器 h ( x ) h(x) h(x)。在目标检测中, x x x可以是图像级别的表征 I I I,也可以是实例级别的表征 ( B , I ) (B,I) (B,I)。从概率的角度来看, h ( x ) h(x) h(x)可以看作是估计样本 x x x属于目标域的概率。
因此,通过将域标签表示为
D
D
D,图像级域分类器可以被视为估计
P
(
D
∣
I
)
P(D|I)
P(D∣I),实例级域分类器可以被视为估计
P
(
D
∣
B
,
I
)
P(D|B,I)
P(D∣B,I),通过贝叶斯定理,可以得到:
P
(
D
∣
B
,
I
)
P
(
B
∣
I
)
=
P
(
B
∣
D
,
I
)
P
(
D
∣
I
)
P(D|B,I)P(B|I)=P(B|D,I)P(D|I)
P(D∣B,I)P(B∣I)=P(B∣D,I)P(D∣I)
其中,
P
(
B
∣
I
)
P(B|I)
P(B∣I)是一个不依赖于领域的目标框预测器,
P
(
B
∣
D
,
I
)
P(B|D,I)
P(B∣D,I)为依赖于领域的目标框预测器。由于在实践中因为没有目标域的边界框注释,因此只能学到依赖于领域的目标框预测期
P
(
B
∣
D
,
I
)
P(B|D,I)
P(B∣D,I)。从上述公式可以发现,通过加强两个领域分类器之间的一致性,即使
P
(
D
∣
B
,
I
)
=
P
(
D
∣
I
)
P(D|B,I)=P(D|I)
P(D∣B,I)=P(D∣I),可以使
P
(
B
∣
D
,
I
)
P(B|D,I)
P(B∣D,I)来接近
P
(
B
∣
I
)
P(B|I)
P(B∣I)。
域适应组件
两个域适应组件如下图右侧所示
图像级别的自适应:在Faster R-CNN模型中,图像级别的表示是指基本卷积层的特征输出(如上图中的绿色四边形)。为了消除图像级别的域分布不匹配,我们使用一个基于补丁(patch)的域分类器,如上图右下方所示。
特别的,我们从特征图的每个激活值训练域分类器,因为每个激活值的感受野对应于输入图像的一个图片补丁 I i I_i Ii,因此域分类器实际上预测每个图像补丁的域标签,具体实现方法可见源码笔记。
图像级自适应的构建有如下两个好处:①对齐图像级表征有利于减少由全局图像差异引起的领域偏移(如图像风格、图像比例、照明等等);②由于使用高分辨率输入,因此目标检测网络的训练过程中,batch size设置的通常很小,这种基于补丁的设计有助于增加训练领域分类器的训练样本数量。
假设第
i
i
i个训练图片的域标签表示为
D
i
D_i
Di,对于源域图片
D
i
=
0
D_i=0
Di=0,对于目标域图片
D
i
=
1
D_i=1
Di=1。第
i
i
i张图得到的特征图的激活表示为
ϕ
(
I
i
)
\phi(I_i)
ϕ(Ii),并且特征图上位于
(
u
,
v
)
(u,v)
(u,v)上的激活表示为
ϕ
u
,
v
(
I
i
)
\phi_{u,v}(I_i)
ϕu,v(Ii),将域分类器的输出表示为
p
i
(
u
,
v
)
p_i^{(u,v)}
pi(u,v),并且分类损失利用交叉熵损失,即图像级自适应损失可以表示为:
L
i
m
g
=
−
∑
i
,
u
,
v
[
D
i
l
o
g
p
i
(
u
,
v
)
+
(
1
−
D
i
)
l
o
g
(
1
−
p
i
(
u
,
v
)
)
]
\mathcal L_{img}=-\sum_{i,u,v}[D_ilogp_i^{(u,v)}+(1-D_i)log(1-p_i^{(u,v)})]
Limg=−i,u,v∑[Dilogpi(u,v)+(1−Di)log(1−pi(u,v))]
优化域分类器的参数来最小化上述损失,同时优化基层特征提取网络的参数来最大化上述损失,实施阶段使用梯度反转层来实现,即普通的梯度下降用于训练域分类器,当梯度通过梯度反转层时梯度符号反转,以优化基础网络参数。
实例级别的自适应:实例级水平表征是指在输入最终类别分类器之前的基于感兴趣区域的特征向量,以Faster R-CNN为例,即ROI Pooling之后的特征,如上图中,FC层后面的矩形。对齐实例级特征表示有利于降低局部实例的差异,如对象外观、大小、视点等等。假设第
i
i
i张图像中第
j
j
j个区域的实例级域分类器输出为
p
i
,
j
p_{i,j}
pi,j,实例级自适应损失可以表示为:
L
i
n
s
=
−
∑
i
,
j
[
D
i
l
o
g
p
i
,
j
+
(
1
−
D
i
)
l
o
g
(
1
−
p
i
,
j
)
]
\mathcal L_{ins}=-\sum_{i,j}[D_ilogp_{i,j}+(1-D_i)log(1-p_{i,j})]
Lins=−i,j∑[Dilogpi,j+(1−Di)log(1−pi,j)]
与图像级域分类器的训练一样,同样在实例级域分类器训练的过程中添加梯度反转模层。
一致性正则化器:如上文分析的,强制两个在不同水平上的域分类器具有一致性可以帮助边界框预测器学习跨域鲁棒性(如Faster R-CNN中的RPN模块),因此作者进一步构建了一致性正则化器来约束网络。因为图像级水平域分类器为图像级水平表征
I
I
I的每个激活点都提供一个输出,即输出一张领域对齐图,因此作者将图像中所有位置的预测概率求一个平均值作为图像级预测概率,一致性正则化器可以表示为:
L
c
s
t
=
∑
i
,
j
∥
1
∣
I
∣
∑
u
,
v
p
i
(
u
,
v
)
−
p
i
,
j
∥
2
L_{cst}=\sum_{i,j}\left \| \frac1{|I|}\sum_{u,v}p_i^{(u,v)}-p_{i,j} \right \|_2
Lcst=i,j∑
∣I∣1u,v∑pi(u,v)−pi,j
2
其中,
∣
I
∣
|I|
∣I∣表示为特征图中激活值的总数,
∣
∣
⋅
∣
∣
||·||
∣∣⋅∣∣表示为
l
2
l_2
l2距离。
网络损失
网络结构如上图所示,作者使用了领域自适应模块来扩充Faster R-CNN,在原有的网络结构上新引进了三个网络组件。图像级水平领域分类器被添加到最后一层卷积之后,实例级水平领域分类器被添加到感兴趣的区域特征之后(ROI Pooling之后),两个分类器通过一致性损失联系在一起,从而鼓励RPN具有领域不变性,网络最终的损失如下:
L
=
L
d
e
t
+
λ
(
L
i
m
g
+
L
i
n
s
+
L
c
s
t
)
L=L_{det}+\lambda(L_{img}+L_{ins}+L_{cst})
L=Ldet+λ(Limg+Lins+Lcst)
其中,
λ
\lambda
λ是一个权衡参数,用于平衡原始的损失和新加组件的损失。测试过程中可以删去域适应组件,只需使用原始的Faster R-CNN架构预测图片。
mAP对比
Cityscape → \rightarrow → FoggyCityscape
总结
本文提出了一种有效解决跨域目标检测问题的域适应Faster R-CNN算法,可以实现在不使用任何附加标记数据的情况下获得新领域鲁棒性的检测器。作者在对跨域目标检测理论分析的基础上,提出了一个图像级自适应组件和实例级自适应组件来缓解由域偏移引起的模型性能下降的问题,两个组件的训练都是基于 H \mathcal H H散度的对抗性训练的,并且作者还设计了一个一致性正则化器,用于进一步学习一个域不变的RPN组件。
注:以上内容仅是笔者的个人见解,若有问题或者不清楚的地方,欢迎沟通交流