Deformable Convolutional Network论文解读

卷积神经网络由于固定的几何结构一直受限于对几何形变的建模,这篇工作引入了两个新模块——deformable convolution和deformable RoI pooling。deformable convolution 和deformable RoI pooling都是基于一个平行网络分支学习offset(偏移),使卷积核在input map的采样点发生偏移,集中于我们感兴趣的区域或目标。同时这个组件可以轻松地替代CNN中的普通卷积,并且很容易通过反向传播进行end-to-end的训练,而且效果不错。
在这里插入图片描述

1. Introduction

在计算机视觉识别领域,一项重要挑战就是怎样对几何形变和模型几何变换(目标尺度、姿势、视点和形变)进行建模。一般来讲,有两种方法:第一种是就是通过仿射变换等手段做数据增广,扩充数据集,使得训练集中尽可能包含具有更多形变的样本;第二种就是使用形变不变性的特征或者算法(如SIFT和滑窗算法)。但上面的方法有两个缺点:

  • 几何形变被假设是固定和已知的,这是一种先验信息,用这些有限的、已知的形变来进行数据扩增或设计算法,可想而知,对于新的、未知的形变则无法处理。
  • 手工设计的特征或算法无法应对过度复杂的形变,即便该形变是已知的。

而作者引入的这两个模块都是轻量级的,他们添加了很少的参数和计算量来学习额外的offset,然后用这两个模块在模型的深层做替换,并且很容易通过反向传播进行end-to-end的训练,效果不错。

2. Deformable Convolutional Networks

CNN中的feature map和卷积都是3D的,deformable conv和ROI pooling都是在一个2D的空间域上做的,所以下面都是以2D的操作来演示的,但这个泛化到3D是完全可以的。

2.1 Deformable Convolution

2D卷积主要由两个steps组成:1)在输入feature map x采样,位置由R定义;2)采样到的输入和权重w做卷积。
R的定义为:
在这里插入图片描述
对于输出feature map y上的每一个点 p0p_{0} ,标准的卷积操作为:
在这里插入图片描述
在deformable convolution中,卷积核在input feature map上的采样点会发生偏移,定义偏移量为 Δpnn=1,...,N{\Delta p_{n}|n=1,...,N} ,这里 N=RN=|R| ,上面的等式(1)变为:
在这里插入图片描述
但这里有一个问题, p0+pn+Δpnp_{0}+p_{n}+\Delta p_{n} 是一个float类型的值,它在input feature map上的像素值怎么取?在这里等式(2)通过双线性插值法来取:
在这里插入图片描述
上面的 p=p0+pn+Δpnp=p_{0}+p_{n}+\Delta p_{n} ,q是p最近邻的四个点,利用双线性插值计算时,x§的值是由和p最近邻的四个点计算得到的,这点可以从 g(a, b)的定义看出来,我们可以将 G(q, p)看作q点对应的加权值。
双线性插值的介绍可以参见:双线性插值的两种实现方法
在这里插入图片描述
总结一下,deformable convolution整体上可以分成2部分,第一部分是基于输入特征图生成offset,第二部分是基于输入特征图和offset通过deformable convolution生成输出特征图。

  • 假定输入的维度为 [b, h, w, c],经过一次普通卷积,卷积填充为Same,即输入输出大小不变,对应的输出结果为 [b, h, w, 2N],这里N=k_size*k_size,输出的结果是指原输入中以每个点为中心做卷积时窗口内input feature map对应的 k_size * k_size个位置的x、y偏移量;
  • 对原输入中每个点的C个通道共用一组(x,y)偏移量得到9个新的position,且这些position要限定在图片大小以内,这些值都是float类型的,为了前向传播和反向传播的进行,必须使用双线性插值得到每个float座标实际对应的像素值,此时经过offset修正之后的输入特征图的维度应该为 [b, c, h, w, N];
  • 对上面得到的特征图进行reshape得到新的形状为 [b, h x k_size, w x k_size, c],使用普通卷积进行卷积运算,不过此时的 stride = k_size;

2.2 Deformable ROI Pooling

ROI pooling最早是在Fast R-CNN中第一次出现,用在RPN之后,对形状不一的ROI做统一处理得到相同尺度的ROIs。
ROI Pooling
给定输入feature map为x,尺寸为 w×hw\times h ,左上角为 p0p_{0},ROI pooling将特征图划分为 k×kk\times k 个bins,输出是一个 k×kk\times k 的feature map y。
对于普通的ROI Pooling,第(i, j)个bin( 0i,j<k0\leq i,j <k ),有:
在这里插入图片描述
和等式(2)相似,在deformable RoI Pooling中,offsets被添加到bins空间位置中,变为:
在这里插入图片描述
第一部分先通过常规的ROI Pooling得到ROI特征图,维度为[b, k, k ,c],展开成维度为 kkck*k*c 的向量后接 kk2k*k*2的FC层,再reshape成维度为 [b, k, k, 2]的offset;第二部分也是先基于offset执行双线性插值操作,然后再执行常规的ROI Pooling。
这里要注意的有两点:

  • feature map此处是用fc来学习的,而且也不是直接学习最终偏移量,而是学习 Δp^ij\Delta \hat{p}_{ij} ,这是为了让 offset 的学习不依赖于 ROI 的大小,然后通过下面的式子计算得到 Δpij\Delta p_{ij}
    在这里插入图片描述
  • 这个变量会和(w, h)做点乘,然后再乘以一个尺度因子,其中w,h是RoI的宽和高,而 γ\gamma 是一个0.1的常数因子……前者是为了让deformable能和RoI的尺度结合起来,更好地估计偏移位置;而后者是为了防止偏移量太大甚至超出RoI和整个图像……之前也看到有人认为,DNN网络最后几层经常会出现感受野不足的情况,所以空洞卷积才会效果比一般卷积好,如果不加约束,deformable的RoI可能无限制地扩大。
    在这里插入图片描述
    Position-Sensitive (PS) RoI Pooling
    在这里插入图片描述

这个概念最早出现在 R-RCN中,RoI Pooling Layer之前和之后都有卷积层,并且RoI Pooling Layer之后的卷积层不是共享计算的,它们是针对每个RoI进行特征提取的,影响了网络的速度。而PS RoI Pooling 的提出是为了在破坏全卷积网络的平移不变性,因为检测是位置敏感的任务,具体详解可见:详解R-FCN

Deformable position-sensitive(PS) ROI pooling,也是和前面一样分为两个部分,第一部分先通过卷积核数量为 2k2(c+1)2k^{2}(c+1)的卷积层得到输出特征图,其中 k2k^{2} 表示bin的数量,c表示目标的类别数,1表示背景,然后基于该特征图通过PS RoI pooling操作得到输出维度为[batch_size, 2(c+1), k, k]的offset。第二部分先通过卷积核数量为 k2(c+1)k^{2}(c+1) 的卷积层得到输出特征图,这是R-FCN算法中的常规操作,然后基于该特征图和第一部分输出的offset执行deformable PS RoI pooling操作,deformable PS RoI pooling也可以看作是先执行插值计算,然后执行PS RoI pooling。

2.3 Deformable ConvNets

deformable conv和RoI pooling与普通的卷积和RoI pooling具有相同的输入和输出,因此,可以直接用它们进行进行替换。在训练中,添加的卷积层和全连接层的权重初始化为0,学习率默认为1,FC层除外(为0.01)。然后使用反向传播进行梯度更新,对于deformable conv和deformable RoI pooling的反向传播梯度更新公式为:
在这里插入图片描述
在这里插入图片描述
论文说在网络的最后 3 层( kernel >1 的层)加 deformable conv 比较有效果。

3. Understanding Deformable ConvNets

Figure5是常规卷积和deformable convolution的差异示意图,其实也是这篇文章的出发点。图中以2个3×3卷积层为例,可以看出对于常规卷积层,卷积操作的位置都是固定的,而deformable convolution因为引入offset,所以卷积操作的位置会在监督信息的指导下进行选择,能够较好地适应输入目标的尺度、形状,因此提取到的特征更加丰富而且都能集中在目标上。
在这里插入图片描述
Figure6是Figure5示意图在实际图像上的效果,在Figure6的每张图像上都有绿色的和红色点,其中绿色点有1个,这个点表示conv5输出特征图上的1个位置,往前3个卷积层理论上就可以得到9^3=729个红色点,也就是卷积层计算的区域,当然这729个点有大部分是越界的,所以实际图中显示的红色点会少于729。可以看出当绿色点在目标上时,红色点所在的区域也集中在目标位置,而且基本能够覆盖不同尺寸的目标,因此deformable convolution不仅能够提取更加有效的特征,而且感受野也比常规的卷积层大。当绿色点在背景上时,红色点所在区域比较分散,应该是不断往外寻找并确认该区域是否是背景区域的过程。
在这里插入图片描述
Figure7是deformable PS RoI pooling在实际图像上的效果(deformable RoI pooling也是同理),每张图中都有1个RoI(黄色框)和3×3=9个bin(红色框),也就是k设置成了3,在常规的PS RoI pooling中这9个bin的位置应该是均匀划分的,但是在deformable PS RoI pooling中是集中在目标区域的,说明deformable结构确实是可以让网络的attention更集中于目标区域。
在这里插入图片描述

4. Experiments——消融研究

Deformable Convolution:Table 1评估了当使用ResNet-101作为特征提取网络时deformable convolution的影响。可以看出来当更多的deformable conv替换了传统标准卷积时,精度在稳步提升,尤其是对DeepLab和class-aware RPN,在DeepLab中使用了3个deformable layers,其余的使用了6个。在剩下的实验中,作者都是使用了3个deformable layers。

Table1是在PASCAL VOC数据集上做的对比实验,包括在多种图像任务和网络的不同阶段添加deformable层的差异。可以看到将res5的3个卷积层替换成deformable convolution就有明显的效果提升,而且基本饱和了。这部分其实主要是数据集(VOC)的原因导致替换更多的deformable结构没有明显提升,在v2中作者将数据集换成COCO做这个对比实验就实现了效果提升,因此有时候除了思考网络设计外,也应该多思考数据集是否成为效果提升的瓶颈。
在这里插入图片描述
Table2展示了 effective dilation values的统计特性(mean和std),它说明了:

  • deformable filters的感受野和目标尺寸相关,它是根据实际目标学习而来的;
  • 在背景区域的filter sizes在那些中等和大目标之间,这表明对于识别背景区域来说一个相当大的感受野是必要的;
    在这里插入图片描述
    Table3主要是和atrous convolution(也就是dilated convolution)作对比,因为atrous convolution也是增加了传统卷积操作的感受野,所以这个对比实验是在证明都增加感受野的同时,以固定方式扩大感受野和更加灵活地聚焦到目标区域的优劣.
    在这里插入图片描述
    模型复杂度和运行时间的对比如Table 4所示:
    在这里插入图片描述
    Table5是在COCO数据集上关于添加deformable结构的效果对比,提升还是比较明显的。
    在这里插入图片描述

参考文献:

起名什么的最烦啦:《Deformable Convolutional Networks》论文笔记

扬之水:目标检测论文阅读:Deformable Convolutional Networks

https://blog.csdn.net/u014380165/article/details/84894089

https://blog.csdn.net/scut_salmon/article/details/97050908

发布了85 篇原创文章 · 获赞 55 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章