【论文学习】:deformable convolutional networks

这篇文章也惊艳到我,故总结如下:

主要参考于:

https://www.cnblogs.com/daihengchen/p/6880774.html和一个公众号

论文:https://arxiv.org/abs/1703.06211

另外关于这篇文章,来自地平线的ALAN Huang同学在知乎上给出了一个很精辟的回答​​​​​​​。

conv,pooling这种操作,其实可以分成三阶段: indexing(im2col) ,reduce(sum), reindexing(col2im). 在每一阶段都可以做一些事情。 用data driven的方式去学每一阶段的参数,也是近些年的主流方向。

个人认为,其实可以更细分为四个阶段,每个阶段其实都值得深入思考:

  1. Indexing (im2col):这也就是本篇文章关注的部分。

  2. Computation (gemm):在im2col之后,conv就被转化为了一个dense matrix multiplication的问题。本质上,conv还是一个线性模型就是因为在这一步还是一个线性变化。有若干工作试图增强计算步骤的表示能力。从最开始的Network In Network到后来的Neural Decision Forest,再到最近我们的Factorized Bilinear Layer,都是在这一步试图做出一些变化。

  3. Reduce (sum):最简单的reduce操作就是求和,但是这个步骤还是有大量变化的余地。例如,是否可以通过类似于attention一样的机制做加权求和?是否可以通过random projection引入随机性?

  4. Reindex (col2im):这步骤是第一步的逆操作。

摘要

由于构造卷积神经网络 (CNN) 所用的模块中几何结构是固定的,其几何变换建模的能力本质上是有限的。在我们的工作中,我们引入了两种新的模块来提高卷积神经网络 (CNN) 对变换的建模能力,即可变形卷积 (deformable convolution) 和可变形兴趣区域池化 (deformable ROI pooling)。它们都是基于在模块中对空间采样的位置信息作进一步位移调整的想法,该位移可在目标任务中学习得到,并不需要额外的监督信号。新的模块可以很方便在现有的卷积神经网络 (CNN) 中取代它们的一般版本,并能很容易进行标准反向传播端到端的训练,从而得到可变形卷积网络 (deformable convolutional network)。大量的实验验证了我们的方法在目标检测和语义分割这些复杂视觉任务上的有效性。代码:https://github.com/ msracver/Deformable-ConvNets.。

引言:(选取部分)

视觉识别的一个关键挑战是如何适应物体尺度、姿态、视点和部分变形中的几何变化或模型几何变换。一般来说,有两种方法。第一种方法是建立具有足够期望变化的训练数据集。这通常是通过增强现有的数据样本来实现的,例如,通过仿射变换。鲁棒表示可以从数据中学习,但通常代价是昂贵的训练和复杂的模型参数。二是使用变换不变的特征和算法.这一类别包含了许多众所周知的技术,例如SIFT(尺度不变特征变换)[42]和基于滑动窗口的对象检测范式。俩都难。CNN比他俩好

Their capability of modeling geometric transformations mostly comes from the extensive data augmentation, the large model capacity, and some simple hand-crafted modules (e.g., max-pooling [1] for small translation-invariance)

In short, CNNs are inherently limited to model large,unknown transformations. The limitation originates from the fixed geometric structures of CNN modules: a convolution unit samples the input feature map at fixed locations; a pooling layer reduces the spatial resolution at a fixed ratio; a RoI (region-of-interest) pooling layer separates a RoI into fixed spatial bins, etc. There lacks internal mechanisms to handle the geometric transformations.

简而言之,CNN本质上仅限于模拟大的、未知的转换。限制源于CNN模块的固定几何结构:卷积单元在固定位置对输入特征图进行采样;池层以固定的比率降低空间分辨率;ROI(感兴趣区域)池层将ROI分离成固定的空间回收箱等。缺乏处理几何变换的内部机制。尽管最近目标检测取得了显著而迅速的进展,但所有的方法仍然依赖于基于原始bbox的特征提取。这显然是次优,特别是对非刚性对象(non-rigid objects.)。

They can readily replace their plain counterparts in deep CNNs and can be easily trained end-to-end with standard backpropagation.
提一下end to end 的好处:通过缩减人工预处理和后续处理,尽可能使模型从原始输入到最终输出,给模型更多可以根据数据自动调节的空间,增加模型的整体契合度。

简单讲就是,Input--->系统(这里指神经网络)--->Output(直接给出输入,NN神经网络就给出结果,一气呵成!!!)

【论文学习】:deformable convolutional networks_第1张图片

Figure 1 展示了卷积核大小为 3x3 的正常卷积和可变形卷积的采样方式,(a) 所示的正常卷积规律的采样 9 个点(绿点),(b)(c)(d) 为可变形卷积,在正常的采样坐标上加上一个位移量(蓝色箭头),其中 (c)(d) 作为 (b) 的特殊情况,展示了可变形卷积可以作为尺度变换,比例变换和旋转变换的特殊情况 

【论文学习】:deformable convolutional networks_第2张图片

Figure 2 展示了可变形卷积框架,首先通过一个小卷积层(绿色)的输出得到可变形卷积所需要的位移量,然后将其作用在卷积核(蓝色)上,达到可变形卷积的效果。

上图的offset field就是变形卷积外加的待训练参数,大小和输入层图片大小一样(input feature map),卷积窗口在offset field上滑动就呈现了卷积像素偏移的效果,达到采样点优化的效果。

对于传统的卷积窗口偏移向量是这样的:

典型的9点的方格,中间向8个方向偏移8个点。传统的卷积输出是这样获得的:

卷积窗口中的每个像素点pn有权重w,p0是代表窗口输出的每个像素点 
。x是输入层像素点集合。如对方格变形偏移,只需加上Δpn:

注意到Δpn只是影响x输入层像素的抽样,并不影响窗口像素权重w。

所以总结我们有两组参数需要训练:w 和 Δpn。

【论文学习】:deformable convolutional networks_第3张图片

对于可变形的ROI感兴趣区域池化,也是同样的变形方式。

传统ROI,把任意大小的区域转化成固定大小bin的特征图:

p0是ROI左上角的点,nij (i 行,j 列)是固定大小bin里的总像素数。如对ROI进行可变形操作:

Δpij小数,故y(i,j)的值也是由(3)(4)双线性插值得来。依然是对每个输出像素加一个偏移量Δpij,也就是下图中多加入的的fc 层:

--------------------- 这几个式子来自:https://blog.csdn.net/AMDS123/article/details/72082318?utm_source=copy

【论文学习】:deformable convolutional networks_第4张图片

Figure 3 展示了可变形兴趣区域池化框架。首先通过标准的兴趣区域池化(绿色)获得兴趣区域对应的特征,该特征通过一个全连接层得到兴趣区域每个部位的位移量。用该位移作用在可变形兴趣区域池化(蓝色)上,以获得不局限于兴趣区域固定网格的特征

首先我想先说一个很重要的误区,很多人以为deformable conv学习的是个deformabe 的kernel,比方说本来是一个3*3相互连接的kernel,最后变成了一个每个位置都有一个offset的kernel。实际情况并不是这样的,作者并没有对kernel学习offset,而是对feature的每个位置学习一个offset,一步一步的解释就是:首先有一个原始的feature map F,在上面做channel为18的3*3的卷积,得到channel=18的feature map F_offset,然后再对F做deformable conv并且传入offset的值F_offset,在新得到的结果上,每个值对应原来的feature map F上是从一个3*3的kernel上计算得到的,每个值对应的F上的3*3的区域上的每个值都有x、y方向上的两个offset,这3*3*2=18的值就由刚才传入的F_offset决定。。。。貌似说的有点绕,其实理清楚关键的一点就是:学习出来的offset是channel=18并且和原feature map一样大小的,对应的是main branch上做deformable conv时候每位置上的kernel的每个位置的offset。

【论文学习】:deformable convolutional networks_第5张图片

Figure 4 展示了两层结构,拥有标准固定感受野的卷积层 (a) 与拥有自适应感受野的可变性卷积层。最上方是两个在不同大小的物体上的激活单元,中间是该单元所需的采样位置,最下方是中间的采样点分别所需的采样位置

【论文学习】:deformable convolutional networks_第6张图片

Figure 5 对可变形卷积的效果进行了可视化,其中左中右分别展示了激活单元(绿点)倒推三层可变形卷积层以后在背景/小物体/大物体上的所采样的点

【论文学习】:deformable convolutional networks_第7张图片

Figure 6 对可变形兴趣区域池化的效果进行可视化,使用了 R-FCN,兴趣区域网格大小为 3x3,可以发现现在池化区域基本覆盖在物体上。

【论文学习】:deformable convolutional networks_第8张图片

【论文学习】:deformable convolutional networks_第9张图片Table 1 在各种方法和各种数据集上,使用不同层数的可变形卷积对结果带来的影响,其中 DeepLab 在 VOC2012 与 Cityscapes 的训练集上进行训练,在验证集上进行测试,class-aware RPN, Faster R-CNN 与 R-FCN 在 VOC2007 与 VOC2012 的训练验证集上进行训练,在 VOC2007 的测试集上进行测试。【论文学习】:deformable convolutional networks_第10张图片

Table 2 在使用可变形卷积与可变形兴趣区域池化以后,class-aware RPN,Faster RCNN,R-FCN 在 COCO 数据集上的结果,训练使用 trainval 数据集,测试使用 test-dev 数据集,其中 M 表示多尺度训练,B 表示迭代边界框平均。

你可能感兴趣的:(论文学习)