ICCV 2017的一篇文章。论文地址:https://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Networks_ICCV_2017_paper.pdf
文章创新点(贡献)
本文提出了两个新模块:可变形卷积和可变形RoI池化
新模块可以很容易地取代现有CNN中的普通模块,并且可以通过标准反向传播轻松地进行端到端训练。
DCN目前也出到了v2,值得一提的是,DCN的思维也算一种自适应模块,跟注意力机制模块BAM的思路有点像。
一、可变形卷积(DCN/DConv)
(a)是普通的卷积操作
(b)、(c)、(d)是可变形卷积(deformable convolution,DConv)
可变形卷积实际是指标准卷积操作中采样位置增加了一个偏移量offset,这样卷积核就能在训练过程中扩展到很大的范围。(c)(d)是(b)的特例,表明可变形卷积推广了尺度、长宽比和旋转的各种变换。
为什么要用DConv?
卷积单元对输入的特征图在固定的位置进行采样;池化层不断减小着特征图的尺寸;RoI池化层产生空间位置受限的RoI这会产生显著的问题,例如,同一CNN层的激活单元的感受野尺寸都相同,这对于编码位置信息的深层卷积神经网络并不可取,因为不同的位置可能对应有不同尺度或者不同形变的物体,这些层需要能够自动调整尺度或者感受野的方法。再比如,目标检测虽然效果很好但是都依赖于基于特征提取的边界框,这并不是最优的方法,尤其是对于非网格状的物体而言。
左图a是正常卷积,b是可变形卷积。
最上面的图像是在大小不同的物体上的激活单元。
中间层是为了得到顶层激活单元所进行的采样过程,左图是标准的3x3方阵采样,右图是非标准形状的采样,但是采样的点依然是3x3.
最下面一层是为了得到中间层进行的采样区域。明显发现,可变形卷积在采样时可以更贴近物体的形状和尺寸,而标准卷积无法做到这一点。
可变形卷积怎么实现?
如上图所示,偏差通过一个卷积层conv获得,输入特征图,输出偏差。生成通道维度是2N,其中的2分别对应X和Y这2个2D偏移,N是通道数。两个卷积核通过双线性插值后向传播算法同时学习。相当于比正常的卷积多输出了偏移特征。
简单来说就像下图,DConv多了灰色框里的东西。
DCN的操作流程(全过程)
总的来说,Dconv具体操作流程是:
① 我们一开始,和正常的卷积神经网络一样,根据输入的图像,利用传统的卷积核提取特征图。
②我们把得到的特征图作为输入,对特征图再施加一个卷积层,这么做的目的是为了得到可变形卷积的变形的偏移量。(重点)
③偏移层是2N,因为我们在平面上做平移,需要改变x值和y值两个方向。
④在训练的时候,用于生成输出特征的卷积核和用于生成偏移量的卷积核是同步学习的。其中偏移量的学习是利用插值算法,通过反向传播进行学习。
实现中的两个问题Q&A
Q:
1、如何将它变成单独的一个层,而不影响别的层;
2、在前向传播实现可变性卷积中,如何能有效地进行反向传播。
A:
1、在实际操作时,并不是真正地把卷积核进行扩展,而是对卷积前图片的像素重新整合,变相地实现卷积核的扩张。也就是说,实际上变的是每次进行卷积后得到的带偏移值的坐标值,根据这些坐标取像素点,然后双线性差值,得到新feature map,然后作为输出并成为下一层的新输入。
2、在图片像素整合时,需要对像素进行偏移操作,偏移量的生成会产生浮点数类型,而偏移量又必须转换为整形,直接对偏移量取整的话无法进行反向传播,这时采用双线性差值的方式来得到对应的像素。
二、可变形RoI池化
跟可变形卷积的区别就是输入是经过普通RoI池化后的feature map,进入一个全连接层(不是卷积层),得到一个偏移。注意这里的偏移量要归一化,为了匹配RoI的尺寸。
可变形RoI池化用的不多,暂时先简单了解。
版权归原作者 Jumbo星 所有, 如有侵权,请联系我们删除。