【深度学习实战(40)】可变形卷积

=

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

在这里插入图片描述
(a)是普通的卷积操作

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

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

为什么要用DConv?

卷积单元(卷积核)对输入的特征图在固定的位置进行采样;池化层不断减小着特征图的尺寸;RoI池化层产生空间位置受限的RoI。然而,这样做会产生一些问题,比如,卷积核权重的固定导致同一CNN在处理一张图的不同位置区域的时候感受野尺寸都相同,这对于编码位置信息的深层卷积神经网络是不合理的。因为不同的位置可能对应有不同尺度或者不同形变的物体,这些层需要能够自动调整尺度或者感受野的方法。再比如,目标检测的效果很大程度上依赖于基于特征提取的边界框,这并不是最优的方法,尤其是对于非网格状的物体而言。
在这里插入图片描述
左图a是正常卷积,b是可变形卷积。
最上面的图像是在大小不同的物体上的激活单元。
中间层是为了得到顶层激活单元所进行的采样过程(可以看作是一个卷积操作,33卷积核对应九个点九个数最后得到上面一个点即一个数值),左图是标准的3x3方阵采样,右图是非标准形状的采样,但是采样的点依然是3x3,符合33卷积的广义定义。
最下面一层是为了得到中间层进行的采样区域,同理。
明显发现,可变形卷积在采样时可以更贴近物体的形状和尺寸,更具有鲁棒性,而标准卷积无法做到这一点。

可变形卷积怎么实现?

在这里插入图片描述

如上图所示,偏差offset通过一个卷积层conv获得,输入特征图,输出偏差。生成通道维度是2N,其中的2分别对应X和Y这2个2D偏移,N具体是靠卷积核大小计算得到,比如常见的3*3卷积,9个参数那么N=9。
一共有两种卷积核:卷积核和卷积核学习offset对应的卷积层内的卷积核,这两种卷积核通过双线性插值反向传播同时进行参数更新。
这种实现方式相当于于比正常的卷积操作多学习了卷积核的偏移offset。
总的来说整个流程如下图所示,DCN(也有的地方称为DConv)多了右边灰色框里的东西。
在这里插入图片描述

总结:DCN的操作流程(全过程)
总的来说,DConv具体操作流程是:
① 我们一开始,和正常的卷积神经网络一样,根据输入的图像,利用传统的卷积核提取特征图。
我们把得到的特征图作为输入,对特征图再施加一个卷积层,这么做的目的是为了得到可变形卷积的变形的偏移量。(重点)其中,偏移层是2N,因为我们在平面上做平移,需要改变x值和y值两个方向。
③在训练的时候,用于生成输出特征的卷积核和用于生成偏移量的卷积核是同步学习的。其中偏移量的学习是利用插值算法,通过反向传播进行学习。
在这里插入图片描述

实现DCN中的两个问题Q&A

Q:
1、如何将可变形卷积变成单独的一个层,而不影响别的层;
2、在前向传播实现可变性卷积中,如何能有效地进行反向传播。
A:
1、在实际操作时,并不是真正地把卷积核进行扩展,而是对卷积前图片的像素重新整合,变相地实现卷积核的扩张。也就是说,实际上变的是每次进行卷积后得到的带偏移值的坐标值,根据这些坐标取像素点,然后双线性差值,得到新feature map,然后作为输出并成为下一层的新输入。
2、在图片像素整合时,需要对像素进行偏移操作,偏移量的生成会产生浮点数类型,而偏移量又必须转换为整形,直接对偏移量取整的话无法进行反向传播,这时采用双线性差值的方式来得到对应的像素。

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BILLY BILLY

你的奖励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值