• 可变形卷积(DCN)


    ICCV 2017的一篇文章。论文地址:https://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Networks_ICCV_2017_paper.pdf


    目录

    文章创新点(贡献)

    一、可变形卷积(DCN/DConv)

    为什么要用DConv?

    可变形卷积怎么实现?

     DCN的操作流程(全过程)

    实现中的两个问题Q&A 

    二、可变形RoI池化


    文章创新点(贡献)

    本文提出了两个新模块:可变形卷积可变形RoI池化

    新模块可以很容易地取代现有CNN中的普通模块,并且可以通过标准反向传播轻松地进行端到端训练。

    一、可变形卷积(DCN/DConv)

    (a)是普通的卷积操作

    (b)、(c)、(d)是可变形卷积(deformable convolution,DConv)

    就是可变形卷积是指卷积核在每一个元素上额外增加了一个方向参数,这样卷积核就能在训练过程中扩展到很大的范围,卷积核可以变成任意的方向。(c)(d)是(b)的特例,表明可变形卷积推广了尺度、长宽比和旋转的各种变换。

    为什么要用DConv?

    卷积单元对输入的特征图在固定的位置进行采样;池化层不断减小着特征图的尺寸;RoI池化层产生空间位置受限的RoI这会产生显著的问题,例如,同一CNN层的激活单元的感受野尺寸都相同,这对于编码位置信息的浅层神经网络并不可取,因为不同的位置可能对应有不同尺度或者不同形变的物体,这些层需要能够自动调整尺度或者感受野的方法。再比如,目标检测虽然效果很好但是都依赖于基于特征提取的边界框,这并不是最优的方法,尤其是对于非网格状的物体而言。

    左图a是正常卷积,b是可变形卷积。

    最上面的图像是在大小不同的物体上的激活单元。

    中间层是为了得到顶层激活单元所进行的采样过程,左图是标准的3x3方阵采样,右图是非标准形状的采样,但是采样的点依然是3x3.

    最下面一层是为了得到中间层进行的采样区域。明显发现,可变形卷积在采样时可以更贴近物体的形状和尺寸,而标准卷积无法做到这一点。

    可变形卷积怎么实现?

     

    如上图所示,偏差通过一个卷积层conv获得,输入特征图,输出偏差。生成通道维度是2N,分别对应原始输出特征和偏移特征。这两个卷积核通过双线性插值后向传播算法同时学习。相当于比正常的卷积多输出了偏移特征。

    简单来说就像下图,DConv多了灰色框里的东西。

     DCN的操作流程(全过程)

    总的来说,Dconv具体操作流程是:

    ① 我们一开始,和正常的卷积神经网络一样,根据输入的图像,利用传统的卷积核提取特征图。

    ②我们把得到的特征图作为输入,对特征图再施加一个卷积层,这么做的目的是为了得到可变形卷积的变形的偏移量。(重点)

    ③偏移层是2N,因为我们在平面上做平移,需要改变x值和y值两个方向。

    ④在训练的时候,用于生成输出特征的卷积核和用于生成偏移量的卷积核是同步学习的。其中偏移量的学习是利用插值算法,通过反向传播进行学习。

    实现中的两个问题Q&A 

    Q:

    1、如何将它变成单独的一个层,而不影响别的层;

    2、在前向传播实现可变性卷积中,如何能有效地进行反向传播。

    A:

    1、在实际操作时,并不是真正地把卷积核进行扩展,而是对卷积前图片的像素重新整合,变相地实现卷积核的扩张。也就是说,实际上变的是每次进行卷积后得到的带偏移值的坐标值,根据这些坐标取像素点,然后双线性差值,得到新feature map,然后作为输出并成为下一层的新输入。

    2、在图片像素整合时,需要对像素进行偏移操作,偏移量的生成会产生浮点数类型,而偏移量又必须转换为整形,直接对偏移量取整的话无法进行反向传播,这时采用双线性差值的方式来得到对应的像素

    二、可变形RoI池化

    跟可变形卷积的区别就是输入是经过普通RoI池化后的feature map,进入一个全连接层(不是卷积层),得到一个偏移。注意这里的偏移量要归一化,为了匹配RoI的尺寸。

    可变形RoI池化用的不多,暂时先简单了解。

  • 相关阅读:
    【Vue入门】语法 —— 插值、指令、过滤器、计算属性、监听器
    Python中CAN通讯学习
    关于python内置数据类型的小练习
    第9集丨圣人们悟到了什么
    友情提示:lazarus的tsortgrid.autofillcolumns存在BUG
    【C++】异常 & 智能指针
    C语言入门(二)运算符和表达式
    【排序15:多数元素 II】
    GIF图像动态生成-JAVA后台生成
    nodejs中对es6语法规范讲解
  • 原文地址:https://blog.csdn.net/jiangqixing0728/article/details/126269423