原论文:《J. Dai et al., Deformable Convolutional Networks[C]. 2017 IEEE International Conference on Computer Vision (ICCV), Venice, 2017, pp. 764-773.》
代码:https://github.com/msracver/Deformable-ConvNets
论文将固定形状的卷积过程改造成了 能适应物体形状 的可变的卷积过程,从而提升了特征提取模块对物体形变的适应能力。
它对感受野上的每一个点加一个偏移量,而调整后的感受野不再是个正方形,而是与物体的实际形状相匹配。通过这种方式,无论物体怎么形变,卷积的区域始终都会覆盖在物体形状的周围。
论文中主要介绍了两个模块:可形变卷积(Deformable Convolution) 与 可形变RoI池化(Deformable RoI Pooling)。
1. 可形变卷积
1.1 结构图

使用一个卷积神经网络提取特征图上每个像素点的 偏移量,然后根据偏移量对特征图上每个像素点的位置坐标进行 调整,再将调整之后的结果进行 加权。
对于 W×H×N 的特征图,这个卷积结构得到的特征为:W×H×2N。其中,2 代表在宽与高两个方向上的偏移。
1.2 计算公式
y(ppp0)=pppn∈R∑www(pppn)⋅x^x^x^(ppp0+pppn+Δpppn)=pppn∈R∑www(pppn)⋅qqq∑G(qqq,ppp0+pppn+Δpppn)⋅xxx(qqq)
其中,ppp 与 qqq 是特征图上像素点的坐标;Δpppn 是 pppn 的偏移量;www(pppn) 是 pppn 对应的权重;G(qqq,ppp) 是双线性差值公式:
G(qqq,ppp)=g(qx,px)⋅g(qy,qy)=max(0,1−∣qx,px∣)⋅max(0,1−∣qy,py∣)
2. 可形变RoI池化
RoI 池化用于将任意尺寸的矩形区域转换为一个固定尺寸的区域。
对于一个特征图 xxx,记其左上角位置为 ppp0,经过 RoI 池化后将得到一个 k×k 的特征图 yyy:
y(i,j)=ppp∈bin(i,j)∑xxx(ppp0+ppp)/nij
此式表明:RoI 需要将 xxx 划分为 k×k 个 bin,再在每个 bin 上取均值。nij 表示每个bin上的像素点的数量。
2.1 结构图

- 利用一般的 RoI 对一个特征层进行池化;
- 使用全连接网络对上面的结果进行处理,得到归一化的偏移量 Δppp^ij;
- 在每个元素上进行计算:Δppp=0.1Δppp^ij∘(w,h)(其实就是将归一化的量在实际尺寸上进行放缩);
- 根据得到的 ppp 对特征层进行调整。
2.2 计算公式
y(i,j)=ppp∈bin(i,j)∑x^x^x^(ppp0+ppp+Δpppij)/nij=ppp∈bin(i,j)∑q∑G(qqq,ppp0+pppn+Δpppn)⋅xxx(qqq)/nij
3. 使用方法
直接替换候选骨干网络中某个卷积层及 RoI 池化层。
参考材料