本文转载自:http://blog.csdn.net/yaoqi_isee/article/details/65963253
另外可以参考的材料:https://www.zhihu.com/question/57493889
原文链接:https://arxiv.org/pdf/1703.06211.pdf
-----------------------------------我是转载的分割线------------------------------------------
arxiv 3/17/2017
文章一开始就说到:卷积神经网络因为卷积核的几何形状是固定的,对几何变换的模拟能力受限。因此,本文中作者引入了两个新的module,来增强网络对于几何变换的建模能力,分别是deformable convolution和deformable roipooling. 基本的思想就是用带偏移的采样代替原来的固定位置采样,而且这个偏移量是可以通过学习得到,并不需要额外的监督。因为是对网络内部结构进行了改进。因此新的module可以应用在很多vision tasks上,本文拿segmentation和detection进行举例。
在识别领域的一个很大的挑战是如何来model一些几何的变换,包括尺度,位姿、角度以及part deformation。通常来说,我们可以用几何变换增强数据集,或者设计一些transformation invariant的描述子。这些方法都是建立在我们已经知道数据集里面存在哪些几何变换的基础上,对于未知的变换无法适应。另外,也很难去model一些复杂的几何变换。虽然近几年来CNN发展的很快,但是因为卷积的时候总是在feature map上固定位置进行采样,因此CNN对于model大的未知的几何变换还是有困难,例如,同一层的激活单元的感受野是一样大的,这对于目标检测来说就是不太合理的,因为不同位置对应的目标大小是不一样的。如果能够使得感受野在不同位置的大小进行自适应调整,那么对于目标检测语义分割等等任务的帮助必然很大。
为此,作者引入了两个模块:deformable convolution和deformable roipooling来增强网络model变换的能力。本质都是在原来regular sampling grid的基础上加上了2D offset。其中这个offset是可以学习得到的。如下图所示:
可以看到,通过改变原来固定位置的采样策略,加上offset,使得卷积层能够model一些基本的几何变换
以一个正常的3*3卷积为例,我们可以把卷积核对应的grid定义为R:
那么对于输出的feature map y上的每个点p0,有
deformable convolution在此基础上,增加了每一个pn对应的offset。所以deformable convolution的结果是
因为offset通常不是整数,因此我们需要用双线性插值的方法确定偏移之后的采样点的值。具体的实现示例如下图:
对于输入的一张feature map,假设原来的卷积操作是3*3的,那么为了学习offset,我们定义另外一个3*3的卷积层,输出的offset field其实就是原来feature map大小,channel数等于2*3*3=18(分别表示后面feature map上某点对应前一张feature map上9个采样点的x,y方向的偏移)。这样的话,有了输入的feature map,有了和feature map一样大小的offset field,我们就可以进行deformable卷积运算。所有的参数都可以通过反向传播学习得到。
假设ROI的大小为w*h,pooling之后的大小是k*k,那么正常的roi pooing可以定义为
其中(0<= i,j < k)
类似的,deformable roi pooling可以改写成
表示对于每一个bin,定义一个整体的偏移量,具体实现示例如下图所示:
假设对于一个ROI,需要pooling成spatial size为3*3大小。为了获得3*3个bin对应的offset,首先正常roi pooling一下,然后接上一个全连接层学习这9个offset,然后再reshape。所有的参数也是可以学习得到的。
将上面讲的两个deformable module整合到CNN中,就得到deformable convnet。作者指出,deformable convolution通过改变采样点的位置并学习采样点的偏置,使得采样点位置能够随着image content变化而变化。ROI Pooling也是这个道理,加了deformation之后,定位的能力增强了,特别是对于non-rigid的物体。
相对标准的卷积,deformable convolution的receptive field能够随着image content变化而变化。
在不同的图片位置,能够根据图片的内容,改变感受野,这样可以很好地model 几何变换
3 * 3的deformable roi pooling则更多地将bin集中在物体上面。
作者主要在segmentation和detection两个task上面验证了deformable module的有效性和效率。
使用3个deformable convolution的单元,能够提高分割和检测的精度
加上deformable roi pooling之后,检测的精度进一步提高
另一方面,参数并没有增大很多。保持了原有框架的效率。
更多实验结果参考原论文。
最后膜一下参与这篇论文的我腿