卷积神经网络由于固定的几何结构一直受限于对几何形变的建模,这篇工作引入了两个新模块——deformable convolution和deformable RoI pooling。deformable convolution 和deformable RoI pooling都是基于一个平行网络分支学习offset(偏移),使卷积核在input map的采样点发生偏移,集中于我们感兴趣的区域或目标。同时这个组件可以轻松地替代CNN中的普通卷积,并且很容易通过反向传播进行end-to-end的训练,而且效果不错。
在计算机视觉识别领域,一项重要挑战就是怎样对几何形变和模型几何变换(目标尺度、姿势、视点和形变)进行建模。一般来讲,有两种方法:第一种是就是通过仿射变换等手段做数据增广,扩充数据集,使得训练集中尽可能包含具有更多形变的样本;第二种就是使用形变不变性的特征或者算法(如SIFT和滑窗算法)。但上面的方法有两个缺点:
而作者引入的这两个模块都是轻量级的,他们添加了很少的参数和计算量来学习额外的offset,然后用这两个模块在模型的深层做替换,并且很容易通过反向传播进行end-to-end的训练,效果不错。
CNN中的feature map和卷积都是3D的,deformable conv和ROI pooling都是在一个2D的空间域上做的,所以下面都是以2D的操作来演示的,但这个泛化到3D是完全可以的。
2D卷积主要由两个steps组成:1)在输入feature map x采样,位置由R定义;2)采样到的输入和权重w做卷积。
R的定义为:
对于输出feature map y上的每一个点 p 0 p_{0} p0 ,标准的卷积操作为:
在deformable convolution中,卷积核在input feature map上的采样点会发生偏移,定义偏移量为 Δ p n ∣ n = 1 , . . . , N {\Delta p_{n}|n=1,...,N} Δpn∣n=1,...,N ,这里 N = ∣ R ∣ N=|R| N=∣R∣ ,上面的等式(1)变为:
但这里有一个问题, p 0 + p n + Δ p n p_{0}+p_{n}+\Delta p_{n} p0+pn+Δpn 是一个float类型的值,它在input feature map上的像素值怎么取?在这里等式(2)通过双线性插值法来取:
上面的 p = p 0 + p n + Δ p n p=p_{0}+p_{n}+\Delta p_{n} p=p0+pn+Δpn ,q是p最近邻的四个点,利用双线性插值计算时,x§的值是由和p最近邻的四个点计算得到的,这点可以从 g(a, b)的定义看出来,我们可以将 G(q, p)看作q点对应的加权值。
双线性插值的介绍可以参见:双线性插值的两种实现方法
总结一下,deformable convolution整体上可以分成2部分,第一部分是基于输入特征图生成offset,第二部分是基于输入特征图和offset通过deformable convolution生成输出特征图。
ROI pooling最早是在Fast R-CNN中第一次出现,用在RPN之后,对形状不一的ROI做统一处理得到相同尺度的ROIs。
ROI Pooling
给定输入feature map为x,尺寸为 w × h w\times h w×h ,左上角为 p 0 p_{0} p0,ROI pooling将特征图划分为 k × k k\times k k×k 个bins,输出是一个 k × k k\times k k×k 的feature map y。
对于普通的ROI Pooling,第(i, j)个bin( 0 ≤ i , j < k 0\leq i,j
和等式(2)相似,在deformable RoI Pooling中,offsets被添加到bins空间位置中,变为:
第一部分先通过常规的ROI Pooling得到ROI特征图,维度为[b, k, k ,c],展开成维度为 k ∗ k ∗ c k*k*c k∗k∗c 的向量后接 k ∗ k ∗ 2 k*k*2 k∗k∗2的FC层,再reshape成维度为 [b, k, k, 2]的offset;第二部分也是先基于offset执行双线性插值操作,然后再执行常规的ROI Pooling。
这里要注意的有两点:
这个概念最早出现在 R-RCN中,RoI Pooling Layer之前和之后都有卷积层,并且RoI Pooling Layer之后的卷积层不是共享计算的,它们是针对每个RoI进行特征提取的,影响了网络的速度。而PS RoI Pooling 的提出是为了在破坏全卷积网络的平移不变性,因为检测是位置敏感的任务,具体详解可见:详解R-FCN
Deformable position-sensitive(PS) ROI pooling,也是和前面一样分为两个部分,第一部分先通过卷积核数量为 2 k 2 ( c + 1 ) 2k^{2}(c+1) 2k2(c+1)的卷积层得到输出特征图,其中 k 2 k^{2} k2 表示bin的数量,c表示目标的类别数,1表示背景,然后基于该特征图通过PS RoI pooling操作得到输出维度为[batch_size, 2(c+1), k, k]的offset。第二部分先通过卷积核数量为 k 2 ( c + 1 ) k^{2}(c+1) k2(c+1) 的卷积层得到输出特征图,这是R-FCN算法中的常规操作,然后基于该特征图和第一部分输出的offset执行deformable PS RoI pooling操作,deformable PS RoI pooling也可以看作是先执行插值计算,然后执行PS RoI pooling。
deformable conv和RoI pooling与普通的卷积和RoI pooling具有相同的输入和输出,因此,可以直接用它们进行进行替换。在训练中,添加的卷积层和全连接层的权重初始化为0,学习率默认为1,FC层除外(为0.01)。然后使用反向传播进行梯度更新,对于deformable conv和deformable RoI pooling的反向传播梯度更新公式为:
论文说在网络的最后 3 层( kernel >1 的层)加 deformable conv 比较有效果。
Figure5是常规卷积和deformable convolution的差异示意图,其实也是这篇文章的出发点。图中以2个3×3卷积层为例,可以看出对于常规卷积层,卷积操作的位置都是固定的,而deformable convolution因为引入offset,所以卷积操作的位置会在监督信息的指导下进行选择,能够较好地适应输入目标的尺度、形状,因此提取到的特征更加丰富而且都能集中在目标上。
Figure6是Figure5示意图在实际图像上的效果,在Figure6的每张图像上都有绿色的和红色点,其中绿色点有1个,这个点表示conv5输出特征图上的1个位置,往前3个卷积层理论上就可以得到9^3=729个红色点,也就是卷积层计算的区域,当然这729个点有大部分是越界的,所以实际图中显示的红色点会少于729。可以看出当绿色点在目标上时,红色点所在的区域也集中在目标位置,而且基本能够覆盖不同尺寸的目标,因此deformable convolution不仅能够提取更加有效的特征,而且感受野也比常规的卷积层大。当绿色点在背景上时,红色点所在区域比较分散,应该是不断往外寻找并确认该区域是否是背景区域的过程。
Figure7是deformable PS RoI pooling在实际图像上的效果(deformable RoI pooling也是同理),每张图中都有1个RoI(黄色框)和3×3=9个bin(红色框),也就是k设置成了3,在常规的PS RoI pooling中这9个bin的位置应该是均匀划分的,但是在deformable PS RoI pooling中是集中在目标区域的,说明deformable结构确实是可以让网络的attention更集中于目标区域。
Deformable Convolution:Table 1评估了当使用ResNet-101作为特征提取网络时deformable convolution的影响。可以看出来当更多的deformable conv替换了传统标准卷积时,精度在稳步提升,尤其是对DeepLab和class-aware RPN,在DeepLab中使用了3个deformable layers,其余的使用了6个。在剩下的实验中,作者都是使用了3个deformable layers。
Table1是在PASCAL VOC数据集上做的对比实验,包括在多种图像任务和网络的不同阶段添加deformable层的差异。可以看到将res5的3个卷积层替换成deformable convolution就有明显的效果提升,而且基本饱和了。这部分其实主要是数据集(VOC)的原因导致替换更多的deformable结构没有明显提升,在v2中作者将数据集换成COCO做这个对比实验就实现了效果提升,因此有时候除了思考网络设计外,也应该多思考数据集是否成为效果提升的瓶颈。
Table2展示了 effective dilation values的统计特性(mean和std),它说明了:
起名什么的最烦啦:《Deformable Convolutional Networks》论文笔记
扬之水:目标检测论文阅读:Deformable Convolutional Networks
https://blog.csdn.net/u014380165/article/details/84894089
https://blog.csdn.net/scut_salmon/article/details/97050908