1.介绍
1.1. 提出DCN的原因
卷积神经网络(CNNs)由于其固定几何结构局限了模型几何变换。
1.2.本文核心贡献:提出了两种新模块 deformable convolution 和 deformable RoI pooling
第一种是可变形卷积。它将2D偏移添加到标准卷积中的规则网格采样位置。它使采样网格能够自由变形。偏移是通过附加的卷积层从前面的特征图中学习的。因此,变形以局部、密集和自适应的方式以输入特征为条件。
3×3标准和可变形卷积中的采样位置示意图(a) 标准卷积的规则采样网格(绿色点)。(b) 在可变形卷积中具有增强偏移(浅蓝色箭头)的变形采样位置(深蓝色点)。(c) (d)是(b)的特例,表明可变形卷积推广了尺度、(各向异性)纵横比和旋转的各种变换
第二种是可变形RoI池。它将偏移量添加到先前RoI池的常规bin分区中的每个bin位置。
2. Deformable Convolution
2.1 普通卷积
以2d为例,对于一个3*3卷积,以中心为(0,0)点,那么其他位置可以被表示为:
对于一个2D卷积操作,由两个步骤组成:1)在输入特征图x上使用规则网格R进行采样;2) 由w加权的采样值的总和。即输入位置,乘以对应权重的总和
2.2 可变形卷积 Deformable Convolution
在上面的基础上,可变形卷积只是采样位置可以通过模型学习偏移量来改变。
2.2.1 双线性插值
对于一个普通的双线性插值,就是对于目标图像上的每个像素,通过在原始图像上找到距离最近的四个像素,并按照距离的权重进行插值,来得到目标图像上的像素值。
图片来自一篇文章为你讲透双线性插值 - 知乎 (zhihu.com)
可以通过双线性插值将等式(2)转化为
G(·,·)是双线性插值核。注意G是二维的。它被分离为两个一维内核,即
【推导】分解双线性插值
2.2.2 pytorch代码实现
deform_conv.py - pytorch/vision - GitHub1s
3. Deformable RoI Pooling
在顶部分支中,conv层生成全空间分辨率偏移场。对于每个RoI(也针对每个类),在这些场上应用PS RoI池化,以获得归一化偏移,然后以与上述可变形RoI池中相同的方式将其转换为实际偏移