可变形卷积(DCN)

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

 源码地址:https://github.com/4uiiurz1/pytorch-deform-conv-v2/blob/master/deform_conv_v2.py

目录

文章创新点(贡献)

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

为什么要用DConv?

可变形卷积怎么实现?

 DCN的操作流程(全过程)

实现中的两个问题Q&A 

二、可变形RoI池化


文章创新点(贡献)

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

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

DCN目前也出到了v2,值得一提的是,DCN的思维也算一种可学习的自适应模块,跟注意力机制模块BAM/CBAM的思路有点像。

mmdetection里也有相关实现,可轻松移植进自己的项目,DCN对于大多数检测场景尤其是比赛都是有用的★

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

可变形卷积(DCN)

(a)是普通的卷积操作

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

可变形卷积实际是指标准卷积操作中采样位置增加了一个偏移量offset,这样卷积核就能在训练过程中扩展到很大的范围。(c)(d)是(b)的特例,表明可变形卷积推广了尺度、长宽比和旋转的各种变换。

为什么要用DConv?

卷积单元(卷积核)对输入的特征图在固定的位置进行采样;池化层不断减小着特征图的尺寸;RoI池化层产生空间位置受限的RoI。然而,这样做会产生一些问题,比如,卷积核权重的固定导致同一CNN在处理一张图的不同位置区域的时候感受野尺寸都相同,这对于编码位置信息的深层卷积神经网络是不合理的。因为不同的位置可能对应有不同尺度或者不同形变的物体,这些层需要能够自动调整尺度或者感受野的方法。再比如,目标检测的效果很大程度上依赖于基于特征提取的边界框,这并不是最优的方法,尤其是对于非网格状的物体而言。

可变形卷积(DCN)

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

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

中间层是为了得到顶层激活单元所进行的采样过程(可以看作是一个卷积操作,3*3卷积核对应九个点九个数最后得到上面一个点即一个数值),左图是标准的3×3方阵采样,右图是非标准形状的采样,但是采样的点依然是3×3,符合3*3卷积的广义定义。

最下面一层是为了得到中间层进行的采样区域,同理。

明显发现,可变形卷积在采样时可以更贴近物体的形状和尺寸,更具有鲁棒性,而标准卷积无法做到这一点。

可变形卷积怎么实现?

 可变形卷积(DCN)

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

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

可变形卷积(DCN)

 DCN的操作流程(全过程)

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

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

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

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

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

可变形卷积(DCN)

实现中的两个问题Q&A 

Q:

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

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

A:

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

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

二、可变形RoI池化

可变形卷积(DCN)

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

可变形RoI池化可用的场景也不多,也没有什么好借鉴的,因此就不作过多介绍,感兴趣的可以去看论文和源码对应部分深入了解。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年3月1日
下一篇 2023年3月1日

相关推荐