论文地址:Deformable Convolutional Networks
对于视觉识别任务中一个重要的关键就是如何根据物体的尺度、位置、视角和部分形变来调整模型的几何变化。传统的方式有两种,第一种就是对于训练数据集需要有足够的需要的变化,通常需要使用数据增强等方式来实现,但是会带来计算量增大和更多的模型参数等问题。第二种就是使用transformation-invariant的特征和算法,比如SIFT(scale invariant feature transform)特征和基于目标识别的滑窗法
在本文中提出两种新的模型用来增强cnn的模型几何变化。第一种就是deformable convolution,对于传统的网格采样位置加入2D的偏移(offsets),如下图所示,offsets通过上一层的特征图通过额外的卷积层进行学习
第二种就是deformable RoI pooling,对于普通的部分上一层RoI pooling加入offset。类似上面的,offsets通过上一层的特征图和RoIs进行学习,能够对于不同形状的目标都调整部分位置
两种模型都是light weight,只增加了少量的参数和计算量来进行offset的学习,能够轻易取代原本CNN中的任何一部分,并且可以end to end训练
Deformable Convolution
对于传统的卷积,我们可以这样定义,分为两个步骤,第一个步骤是对于输入的future map X选取网格R,第二个步骤是使用对应的权重W进行计算。网格R决定了感受野和空洞,例如3*3的卷积的R如下等式
对于输出feature map Y中的每个位置P0,我们有
Pn代表了在R中的各个位置
对于deformable convolution,网格R被offset增强,其中,等式(1)变为
我们使用双线性插值定义为
其中,q枚举了在feature map x中的所有特征位置,G为双线性插值核函数,G为二维的,我们使用两个一维的核函数来定义
其中
如上图所示,offset用同样的input feature map作为输入的一个额外卷积来获得,卷积核采用和当前卷积层相同的大小,输出的offset field和input feature map一样大小,通道数为2N对应N个2D offsets,在训练过程中用来生成output feature和offset field的同时训练,使用反向梯度进行
具体来说,对于使用3*3(N=9)卷积对input feature map进行操作,就是使用卷积学习到一个18(2n=18)个channel和input feature map一样大小的特征图F_offset(包含了每个3*3卷积中的x、y方向的offset,也就是3*3*2=18个channel),然后进行deformable conv的时候,对每个点进行卷积的时候,就找到对应的F_offset上的3*3卷积的x、y方向的offset,然后使用双线性插值进行采样
Deformable RoI Poolingdeformable RoI pooling使用一个FC层进行offsets的学习
Position-Sensitive (PS) RoI Pooling使用全卷积结构,也就是用卷积层进行offsets的学习
将input feature map划分为k*k个bins,C为类别数,