Deformable Convolutional Networks
论文:http://xxx.itp.ac.cn/abs/1703.06211
1 简介
计算机视觉中的一个关键挑战是如何适应目标的几何变换,如尺度、姿态、视角和部分形变。一般来说,有两种解决方法,第一个是构建包含了想学习的形变的足够大的训练数据集,这样的数据集可以通过对现有数据集进行增广(如进行仿射变换)得到,从包含了形变的数据集中可以学习到鲁棒的特征表示,但是代价是大量的训练数据和复杂的模型结构。第二种方法是,使用对形变鲁棒的特征和算法,如SIFT(尺度不变的特征变换)和滑动窗。但是这两种方法都存在两个缺点,一是对数据增广的前提是形变是已知且固定的,那么对一种新的形变,基于已知形变训练的模型的泛化能力可能并不好;二是手工设计的特征和算法可能对特别复杂的形变效果不好。
CNN近年来快速发展,在图像分类、目标检测和分割领域取得了重大的进展。但是,仍然存在了两个缺点,CNN模型的几何形变拟合能力主要来自于大量的数据增广、大的模型容量和一些简单的手工设计的网络层(如最大池化对于小范围的平移具有平移不变性)。
CNN天然无法对大的未知形变进行建模,这主要是因为CNN中使用的固定的几何结构:卷积是在输入feature map的固定位置进行采样,池化层按照固定的比例降低空间分辨率;ROI池化层将一个ROI区域池化成固定大小的输出。总而言之,CNN内部缺乏能够处理几何变换的内部机制。这会引起很多问题,如CNN中同一层的各神经元具有相同大小的感受野,但输入图像的不用位置可能包含的是不同尺寸和变形的目标, 如果要想实现精细的目标定位,就需要同一层网络中的不同神经元自适应地决定对应的感受野的尺寸。对于目标检测任务,有可能存在很多非规则化的目标,全部使用原始的bounding box不可能取得特别理想的效果。
本文提出两个新的模块加强CNN对于几何形变的建模能力,第一个是可变形卷积,它是在标准卷积的网格化的采样位置上添加2维偏移实现的。如图1所示,它允许采样网格使用任何形式的形变。偏移量是从前面的feature map中通过额外的卷积层学习到的。
第二个新模块是可变形的ROI池化操作,是对原始的ROI池化的输出bin的位置添加偏移,同样偏移量也是从前面的feature map中学习得到的。
新添加的模块的参数量和计算量都很小,可以用其来代替原始的卷积和ROI池化操作,端到端的进行训练。使用了可变形卷积和ROI池化的网络称之为可变形CNN。
2 可变形CNN
CNN中的feature map和卷积操作都是3D的,但是可变形卷积和ROI池化都是在2D空间进行处理的,也就是说对输入feature map的各通道进行相同的处理。
2.1 可变形卷积
2D卷积的计算包括两个过程:首先是在输入x上使用正则化的网格R进行采样,其次是用权重矩阵对采样块求加权和。采样网格R定义了感受野的大小和膨胀值,如
表示膨胀值为1的尺寸为3 * 3 的卷积核。
对于输出feature map y上的任一位置
p
0
p_0
p0,有:
对于可变形卷积,规则化的网格R增加了偏移量
{
Δ
p
n
∣
n
=
1
,
2
,
⋯
,
N
}
,
N
=
∣
R
∣
\{\Delta p_n|n=1,2,\cdots,N\},N = |R|
{Δpn∣n=1,2,⋯,N},N=∣R∣,公式1就变成了:
采样的网格就变成了非规则化的网格,偏移值也变成了
p
n
+
Δ
p
n
p_n + \Delta p_n
pn+Δpn。由于
Δ
p
n
\Delta p_n
Δpn往往是小数,公式2可以通过双线性差值进行实现:
上式中,p表示任意的位置(
p
=
p
0
+
p
n
+
Δ
p
n
p = p_0 + p_n + \Delta p_n
p=p0+pn+Δpn,可能为小数),q列举了输入feature map x中的所有整数位置,G表示二维双线性插值的核函数,可以表示成两个一维的核函数:
g
(
a
,
b
)
=
m
a
x
(
0
,
1
−
∣
a
−
b
∣
)
g(a,b) = max(0,1-|a - b|)
g(a,b)=max(0,1−∣a−b∣)。因为
G
(
q
,
p
)
G(q,p)
G(q,p)中只有一部分的q对应的是非0值,所以公式3的计算速度很快。
如图2所示,可变形卷积的偏移量也是通过卷积层学习得到的。在网络训练过程中,卷积核的系数和卷积的偏移量都是基于同样的输入学习得到的。
2.2 可变形的ROI池化
所有基于proposal进行目标检测的算法中都用到了ROI池化,它将任意大小的矩形输入图像块转换成固定尺寸的特征。
ROI池化:给定输入feature map x、大小为
w
×
h
w \times h
w×h的ROI区域,该ROI的左上角坐标为
p
0
p_0
p0,ROI池化是将该ROI分成
k
×
k
k \times k
k×k个bin,输出一个大小为
k
×
k
k \times k
k×k的feature map。对于第(i,j)
0
≤
i
,
j
<
k
0 \leq i,j < k
0≤i,j<k个bin,有:
n
i
j
n_{ij}
nij是一个bin中的像素数量。第
(
i
,
j
)
(i,j)
(i,j)个bin覆盖的输入区域为:
⌊
i
w
k
⌋
≤
p
x
<
⌊
(
i
+
1
)
w
k
⌋
\lfloor i\frac{w}{k} \rfloor \leq p_x < \lfloor (i+1)\frac{w}{k} \rfloor
⌊ikw⌋≤px<⌊(i+1)kw⌋,
⌊
j
h
k
⌋
≤
p
y
<
⌊
(
j
+
1
)
h
k
⌋
\lfloor j\frac{h}{k} \rfloor \leq p_y < \lfloor (j+1)\frac{h}{k} \rfloor
⌊jkh⌋≤py<⌊(j+1)kh⌋。
类似于公式2,可变形的ROI池化是在ROI池化的基础上增加偏移量
{
Δ
p
i
j
∣
0
≤
i
,
j
<
k
}
\{\Delta p_{ij}|0 \leq i,j < k\}
{Δpij∣0≤i,j<k},池化公式变为:
Δ
p
i
j
\Delta p_{ij}
Δpij一般为小数。公式6也是通过公式3和4进行实现的。
图3给出了如何获取偏移值。首先通过ROI池化生成池化后的feature map,然后经过一个全连接层生成归一化的偏移量
Δ
p
i
j
^
\Delta \hat {p_{ij}}
Δpij^,然后通过
γ
\gamma
γ是一个预定义的系数,一般设置为0.1。对偏移量进行归一化操作可以让其不受ROI尺寸的影响。
位置敏感的ROI池化:
位置敏感的ROI池化和ROI池化不同,它是一个全卷积网络,通过卷积层,所有的输入feature map首先对每一类转换为
k
2
k^2
k2个score map,因此共有
k
2
(
C
+
1
)
k^2(C+1)
k2(C+1)个score map。该score map可以表示成
x
i
,
j
x_{i,j}
xi,j,
(
i
,
j
)
(i,j)
(i,j)枚举了所有的bin。在score map上进行池化操作,就是对第(i,j)bin对应的score map进行求和操作。位置敏感的ROI池化与普通ROI池化的区别就在于公式5中的feature map x被换成了位置敏感的score map
x
i
,
j
x_{i,j}
xi,j。
那么可变形的位置敏感ROI池化也是把公式6中的x换成 x i , j x_{i,j} xi,j,但是偏移量是通过卷积层学习得到的,同样学习得到的是 Δ p ^ i j \Delta \hat p_{ij} Δp^ij,和ROI池化一样,对其进行变换得到 Δ p i j \Delta p_{ij} Δpij。
2.3 可变形卷积网络
将普通卷积网络中的卷积和ROI池化换成可变形版本,即可以得到可变形卷积网络。训练时,新添加的卷积层和全连接层初始化为0,其学习率为其他层的 β \beta β倍(默认情况下, β \beta β = 1,但Faster R-CNN中的fc层,其 β \beta β=0.01)。
3 理解可变形CNN
可变形CNN即对原始卷积和ROI池化的采样位置增加偏移,并且偏移量是通过网络训练得到的。多个可变形层堆砌之后,形成的网络具有可变形的感受野,可以根据关注的目标的尺度和形状进行对应的变化,如下图所示:
可变形的ROI池化层也具有相似的效果,能够针对非规则化的目标进行更加准确的定位。
可变形卷积和STN的区别:
STN是通过深度网络从数据中学习空间变换系数,然后对feature map进行透视变换,其主要缺点是计算量大且参数学习过程比较困难。STN在小规模的图像分类任务上取得了成功。反向STN(Inverse compositional spatial transformer networks)将大计算量的特征映射工作变成了高效的变换参数映射。
可变形卷积中的偏移量学习可以认为是STN中一个高效的轻量型空间变换器。但是,可变形网络不需要对feature map进行全局的透视变换,而是对feature map进行局部的密集采样。
可变形卷积可以轻松的集成到CNN结构中,很容易进行训练。对于比较复杂的计算机视觉任务(目标检测和分割)很高效,但这些任务对于STN而言则比较困难。
Deformable convnets v2:More deformable, better results
文章:http://xxx.itp.ac.cn/abs/1811.11168
1 对DCN进行分析
可变形卷积网络(Deformable ConvNet)因为使用了可变形的卷积和可变形ROI池化层,可以更好的定位不规则的目标。但是作者发现,DCNV1有一些缺点,作者在coco数据集上通过对DCNV1的网络节点的有效感受野、有效采样位置和显著性区域的错误边界进行可视化分析来分析DCNV1的缺点。
有效感受野:一个网络结点的感受野内的像素点对输出的贡献并非完全相同,这些像素点贡献的不同可以通过有效感受野进行展示。有效感受野的值是对每一个输入值进行扰动时输出的梯度大小得到的。使用有效感受野可以判断一个输出节点的感受野内各输入特征点对输出的影响程度。
有效采样位置:通过计算输出对采样位置的梯度,得到每一个采样点位置对输出的共享程度。
错误边界显著性区域:最近关于图像显著性区域的研究表明,移除和某输出节点不相干的图像块不会影响该节点的输出。所以,我们可以决定某个输出节点的支持区域为全图中能够给出只有很小响应误差的最小区域,称之为错误边界显著性区域。
上图是利用三项指标对普通卷积网络、DCN和DCNV2的分析结果。从图上可以看出:
- 普通CNN具有一定的处理形变的能力,证据就是图像变了之后三项指标也在跟着变化。作者认为这主要是来自于深度卷积网络的强大的表达能力,网络权重具备一定的应对目标形变的能力;
- 通过引入DCN,网络应对形变的能力得到了加强。三项指标更加关注图像内容,前景区域的特征点更加关注目标,背景区域的特征点关注了更大的背景区域;
- 作者使用的这三项指标很有说服力,能够看到普通的卷积网络是通过权重系数来调节感受野的,而DCN是通过权重系数和偏移值联合来调节感受野的。
从图上可以看出,DCN相比于传统卷积网络,改善了网络对形变的处理能力,但也看出了DCN的感受区域超出了目标的真实区域,这些被包含进来的非真实区域影响了处理效果。
2 DCNV2核心思想
2.1 使用更多的变形卷积层
DCN相比于普通卷积,已经给出了变形卷积层对于最终效果的提升,所以作者使用了更多的可变形卷积层以进一步提升效果。DCNV2主要是在coco数据集上分析,比DCN使用的voc数据集难度更大,因此作者使用了12个可变形卷积层。
2.2 调整可变形模块
在基于DCN学习偏移位置的基础上,作者进一步使用DCN来学习每一个采样点处的权重系数,让网络自己决定每一个采样位置对输出的贡献程度。
可变形卷积变成:
Δ
p
k
和
Δ
m
k
\Delta p_k和\Delta m_k
Δpk和Δmk分别表示学习到的针对第k个位置的偏移量和权重系数。偏移量仍然可以是小数,通过双线性差值作用到输入feature map上,权重系数介于0到1之间。网络设计上,依然是从输入feature map上应用一个单独的卷积层,输出3K个channel,前面2K个值表示K个位置的偏移量,后面的K个值表示K个位置的权重系数。
可变形ROI池化层变成:
是对每一个bin乘以一个学习到的系数
Δ
m
k
\Delta m_k
Δmk。具体的实现是在输入feature map上增加一个单独的全连接层组成的分支,前面两个全连接层神经元数量为1024,最后一个全连接层的输出神经元数量是3K,前面2K个表示的是K个bin的偏移量,最后K个表示的是K个bin的加权系数。同样加权系数介于0到1之间,因此最后的K个值经过了一个sigmoid函数。
2.3 利用R-CNN进行特征蒸馏
从Fig 2中可以看出,DCN和常规的卷积网络的错误边界显著性区域都超出了目标的实际位置,作者认为超出了实际目标的区域会对目标的检测产生负面影响。
在Faster R-CNN中,R-CNN是基于目标的ROI区域进行分类的,将Faster R-CNN和R-CNN进行结合有助于减少多余的context区域以改善检测效果。使用DCN V2时,如果真实目标之外的context区域的权重系数设置为0,就可以实现对于多余context区域的屏蔽,但是作者发现这样做的效果并不好,怀疑是因为faster r-cnn的损失函数不支持取学习这样的表示,因此需要额外的监督信号去控制训练过程。
作者的做法是采用知识蒸馏的思路,因为R-CNN专注于从裁剪的图像子块中进行特征提取,因此希望R-CNN教给可变形Faster R-CNN如何更加专注于特征提取。但是从图2中可以看出,针对背景区域,需要更多的context区域以减少误检,因此作者只针对前景目标应用知识蒸馏。
具体知识蒸馏的网络结构如下图所示。在Faster R-CNN的基础上增加了一个R-CNN分支进行知识蒸馏。具体的做法是将RPN预测到的ROI区域随机采样32个组成ROI集合,将对应的图像块缩放成224 * 224,将其送入R-CNN分支中,训练过程中Faster R-CNN和R-CNN共享网络参数,计算的损失除了Faster R-CNN自身的分类和回归损失外,添加了R-CNN的分类损失和两者之间的特征差异损失,特征差异损失为1减去两个特征间的余弦相似度。
新添加的两项损失相比于原始Faster R-CNN各项损失的系数为0.1倍。知识蒸馏的目的是为了强迫Faster R-CNN在学习目标检测的过程中还受到R-CNN的影响更加专注于从给定的ROI中进行特征提取,从而使得学习的卷积核的感受野更加聚焦于目标的实际位置。
在推理过程中,只需要使用Faster R-CNN进行预测。
3 实验
使用更多的可变形层提升了效果。
只针对前景区域进行知识蒸馏的效果最佳。
总体检测效果,DCNV2 > DCNV1 > 常规CNN。