-
论文标题:Deformable Convolutional Networks
-
论文链接:https://arxiv.org/abs/1703.06211
所要解决的问题
视觉识别的关键挑战是如何在对象比例、姿势等形变问题上适应几何变化或对几何转换建模。一般情况下有以下两种方法:
-
1、通常是对数据集进行仿射变换。如角度变化、剪切等以此来扩充数据集,增加算法的鲁棒性。
-
2、使用变换不变的特征和算法。如SIFT和基于滑动窗口的对象检测。
这两种方法都有很大的局限性:几何形变被假设是固定和已知的,这是一种先验信息,用这些已知的形变去处理未知的形变是不合理的;手工设计的特征或算法无法应对过度复杂的形变,即使该形变是已知的。
所以本文作者提出了两种模块可以大大提高CNN对目标几何变换的鲁棒性。
简介
本文提出了两种模块:
-
Deformable convolution:它将2D偏移量添加到标准卷积中的常规网格采样位置,可以使采样网格*变形。如下图所示。这些
offset
是通过附加的卷积层从前面的特征图中学习的。因此,变形以局部,密集和自适应的方式取决于输入特征。
(a)是常见的3x3卷积核的采样方式,(b)是采样可变形卷积,加上偏移量之后的采样点的变化,其中(c)(d)是可变形卷积的特殊形式
-
Deformable ROI polling:它为ROI Pooling的常规bin分区的每个位置添加了一个
offset
。offset
也是从先前的特征图和ROI polling中学习,从而可以对具有不同形状的对象进行自适应定位。
这两个模块都是轻量级的,它们为offset learning
添加少量参数和计算,可以很稳定的替换CNN中的常规卷积。并可以通过反向传播进行端到端的训练。
Deformable Convolution Networks
Deformable convolution
在可变形卷积中,可变形卷积操作和池化操作都是2维的,都是在同一channel上进行的,常规的卷积操作主要可以分为两部分:
(1)在输入的feature map上使用规则网格R进行采样;
(2)进行加权运算,R定义了感受野的大小和扩张。
常规卷积对于在输出的feature map上的每个位置P0,通过下列式子进行计算:
其中,Pn是对R中所列位置的枚举。
可变形卷积的操作是不同的,在可变形网络的操作中,常规的规则网格R通过增加一个偏移量进行扩张,同样的位置P0变为:
现在,采样的位置变成了不规则位置,由于偏移量△Pn通常是小数,因此我们通过双线性插值法进行实现,公式为:
如下图所示,大体流程为,在输入的feature map中,原始的通过sliding window得到的是绿框,引入可变形卷积后,我们把原来的卷积网路分为两路,共享input feature map,其中上面的一路用一个额外的conv层来学习offset,得到HW2N的输出offset,其中,2N的意思是有x,y两个方向的偏移,得到这个之后,我们对原始卷积的每一个窗口,都不再是原来规整的sliding window(input feature map中的绿框)而是经过平移后的window(input feature map中的篮框),取得数据后计算过程和常规卷积一样,即input feature map和offset共同作为deformable conv层的输入。
Deformable ROI Polling
ROI Pooling模块是two-stage中常见的池化方法,基于目标检测方法中所有的region proposal。将任意输入大小的矩形调整为固定尺寸大小的feature。给定input feature map x 和一个大小为w * h,位于左上角的区域P0,ROI Pooling将会把这个ROI划分为k*k个bins,同时输出一个size为k * k的feature map y,可以用如下公式表示:
其中,nij是bin中像素的数量 有了这个基础,我们再来看可变形池化,公式如下:
相比普通ROI Pooling,同样增加了一个offset,下图为其网络结构:具体操作为,首先,通过普通的ROI Pooling得到一个feature map,如下图中的绿色块,通过得到的这个feature map,加上一个全连接层,生成每一个位置的offset,然后按照上面的公式得到△Pij,为了让offset的数据和ROI 的尺寸匹配,需要对offset进行微调。全连接层的参数可以通过反向传播进行学习。
把可变形卷积用在SOTA网络结构上
可变形过滤器的三个级别采样位置
可变形ROI Polling的offset阐述
可变形卷积应用在RCNN、Faster-RCNN等SOTA网络架构
由上述表可以得到:把Deformable ConvNet应用到RCNN、Faster—RCNN上,性能都得到了不错的提升,说明可变形网络可行且有效。
结论
本文提出了可变形的ConvNets,它是一种简单,高效,深入且端到端的解决方案,用于对密集的空间变换进行建模。结果表明,对于复杂的视觉任务,比如目标检测和语义分割,可变形卷积都可以大幅度提高各项性能。
简单的代码实现
https://github.com/4uiiurz1/pytorch-deform-conv-v2