Deformable Convolutional Networks(可变形卷积网络)
文章:https://arxiv.org/abs/1703.06211 link.
概述
这项工作中,作者引入了两个新模块来增强CNN的建模能力:deformable convolution (可变形卷积)和deformable RoI pooling(可变形ROI池化)。 两者均基于以下思路:在模块中增加具有额外偏移量的空间采样位置,并从目标任务中学习偏移量,而无需额外的监督。 新模块可以简单地替换现有CNN中的对应模块,并且可以通过反向传播进行端到端训练,从而产生可变形的卷积网络(由于非深度学习架构的层的存在,需要单独编译该模型)。深度CNN中学习密集的空间变换对于复杂的视觉任务(例如对象检测和语义分割)是有效的。使用该模块的卷积模型称为Deformable Convolutional Networks,文章都是以二维卷积和池化为例子,在通道维度上进行扩展就可以得到常规情况。
deformable convolution
以3×3卷积层为例说明:
(a)标准卷积的采样点(3×3网格)(绿点)。(b)可变形卷积中具有额外偏移量(浅蓝色箭头)的采样位置(深蓝色点)。(c)(d)是(b)的特例,即规则分布的采样点。
这说明可变形卷积包含了比例、(各向异性的)长宽比和旋转等变换。偏移量是通过其他卷积层从前面的特征图中得到。因此,可变形卷积的采样方式(局部、密集、自适应)取决于输入特征。
二维的卷积操作可以分为两步:在输入feature map的规则的网格
中进行采样;通过权重
计算加权和;如
定义了3×3的卷积核和1的膨胀范围。对于输出的feature map y的每个位置
有
对应于规则的采样点位置。但在可变形卷积中,规则的网格 采样点附加了一个偏移量 :
现在采样点的分布不规则了:
,上式通过双线性插值实现:
p表示任意(分数)位置(
);q穷举特征图x中的所有整数的空间位置,
是双线性插值,虽然是在二维上操作,但其可以分为x,y方向上的两个一维函数:
其中
,得益于
对于多数q是零值,所以能够快速完成
的计算。
偏移量是通过在同一张feature map上通过卷积得到;卷积核和当前卷积层的核尺寸相同。输出的偏移量具有与输入相同的空间分辨率;2N个通道对应于N个2D(X,Y方向)偏移。在训练期间,同时学习输出特征的卷积核和偏移量,通过双线性运算对梯度进行反向传播。
deformable RoI pooling
该池化层为前面RoI pooling的每个位置添加一个偏移量;偏移量从前面的feature maps 和RoIs中学习。目标检测中ROI pooling将任意大小的输入矩形区域转换为固定大小的feature。
RoI Pooling:
(https://blog.csdn.net/H_hei/article/details/89791176)
对于给定输入feature map X、ROI(w×h)和左上角点
,RoI Pooling将ROI区域划分为k×k个子区域bin,输出k×k的feature map y,对于每个子区域中的位置
有
是bin区域的元素数量,第
个bin跨度
、
,所以在deformable RoI pooling中增加对每个bin的偏移量
:
是分数形式。
上图说明了如何获得偏移量:首先,ROI pooling生成池化的特征图; fc层根据这些图生成归一化的偏移量
,和RoI的宽度w和高度h相乘得到上式的偏移量
,其中γ(0.1)是预定义的标量,用于调制偏移量。
Position-Sensitive (PS) RoI Pooling:
R-FCN中提出的池化方式PS RoI Pooling:
为了引入平移敏感性,R-FCN在全卷积网络的最后层之后添加了一个1×1卷积层输出position-sensitive score map,具有k×k×(C+1)的维度,其中C代表类别数(+1背景),k是之后的ROI Pooling中对ROI区域要划分的小格数,论文中k=3就是对ROI在长宽方向各三等分形成9个小区域,每张score map中存放的是所有目标的某一部位的特征图。
在后续的ROI pooling时,对RoI的k×k个区域(3×3 = 9)分别进行pooling,但不是对score map所有的维度进行pooling,每个小区域只会在对应的(C+1)个维度上作pooling,比如ROI左上角的区域就在前C+1个维度上pooling,左中位置的区域就在C+2到2C+2的区间维度上作pooling,依次类推得到C+1维的k×k特征图,对应于C+1类别的得分,对每个类别的得分进行求和(或者平均)作为每个类别的得分(上图中的vote过程),再经过softmax得分最大值类别输出。
在deformable PS RoI pooling中,仍然遵照下式,区别是
:
但是偏移量的学习是不同的,如上图所示。在上面的分支中,卷积层生成完整的空间偏移场。 然后对于每个RoI,都使用PS RoI pooling以获得归一化的偏移量∆pij,然后和deformable RoI pooling一样转换为实际偏移 。
Deformable ConvNets
Deformable Convolution for Feature Extraction:
文章使用ResNet-101和Inception-ResNet进行实验。去掉平均池化和全连接层,在最后添加随机初始化的1×1卷积,将通道数减小到1024。最后一个block块的有效步长从32减小到16(增加feature map分辨率)。
Segmentati on and Detection Networks:DeepLab、Category-Aware RPN、Faster R-CNN、R-FCN
在ResNet-101中常规卷积替换为可变形卷积的效果如下表所示:
将Deformable RoI Pooling应用到Faster RCNN 和R-FCN上,得到明显的效果提升,特别是[email protected]上:
模型复杂度和运行时间的比较:
对于原模型来说,只增加了少量的参数和运行时间(前传、包含预处理和后处理的完整运行时间)。
在COCO数据集上的效果比较如下,M表示多尺度测试,B表示迭代bbox平均值。
Understanding Deformable ConvNets
核心思路就是在卷积和RoI pooling中增加额外的偏移量,并从目标任务中学习偏移量,从而改变空间采样位置。
(a)、(b)分别表示了常规卷积中的感受野和可变形卷积中的自适应感受野。常规卷积中的感受野和采样位置在整个特征图(左)上都是固定的。可变形卷积根据对象的比例和形状进行自适应调整(右)。
上图展示了729个采样点,在同一张图分别考虑背景(左)、较小目标(中)、较大目标(右)的采样情况,可以看到采样点对目标的聚集效应。
deformable RoI pooling的效果类似,R-FCN 中使用deformable (PS)RoI pooling效果:
其中3×3的池化区域(红色框)和ROI(黄色)。