Deformable Convolutional Networks
文章目录
1. 什么是可变形卷积?
Deformable Convolutional Networks 中提出了一种可以变形的卷积核和池化核,也就是不使用原来的正方形卷积核,而且一个多边形。这样可以让卷积核更多地聚集在目标的轮廓上。
下面对比两种图片:
卷积核聚集在人的身上:

卷积核聚集在羊的身上:

所以论文中的核心思想就是:将固定形状的卷积过程改造成了能适应物体形状的可变的卷积过程,从而使结构适应物体形变的能力更强
2. 可形变卷积解决了什么问题?
传统的CNN只能靠一些简单的方法(比如max pooling)来适应物体的形变,如果形变的太厉害就无能为力了。为了改变这种情况专家们想了很多方法,最常见的有两种:
- 使用大量的数据进行训练。 比如用ImageNet数据集,再在其基础上做翻转等变化来扩展数据集,通俗地说就是通过穷举的方法使模型能够适应各种形状的物体,这种方法收敛较慢而且要设计复杂的网络结构才能达到理想的结果,但是,如果用训练中没有遇到过的新形状物体(但同属于一类)来做测试,由于新形状没有训练过,会造成测试不准确,而且靠数据集来适应形变的训练过程太耗时,网络结构也必须设计的很复杂
- 设计一些特殊的算法来适应形变。 比如SIFT,目标检测时用滑动窗口法来适应目标在不同位置上的分类也属于这类;但是,如果物体的形状极其复杂,要设计出能适应这种复杂结构的算法就更困难了。
传统的方法都不行,那要怎么办呢?
思路很清晰就是:我预定为正方形的感知野,但是感受野上的每一个点加一个偏移量,偏移的大小是通过学习得来的,偏移后感受野不再是个正方形,而是和物体的实际形状相匹配。这么做的好处就是无论物体怎么形变,卷积的区域始终覆盖在物体形状的周围。
下面用论文中的一个图来演示一下变化过程:

3. 可变形卷积的具体实现细节
在说明具体实现细节之前我现在这样说明一下双线性插值的概念
3.1 双线性插值
想要理解双线性查找,那我们想来说一下什么是线性插值。
线性插值的概念非常简单粗暴,就是两个点A,B,要在AB中间插入一个点C(点C坐标在AB连线上),就直接让C的值落在AB的值的连线上就可以了。
如A点坐标(0,0),值为3,B点坐标(0,2),值为5,那要对坐标为(0,1)的点C进行插值,就让C落在AB线上,值为4就可以了。当然前提是C在AB的连线上,如果C不在AB的连线上要怎么办呢,很简单分别沿x轴和y轴进行线性插值,然后给他加起来就ok啦,这个过程就叫做双线性插值。
举个栗子:
如图,已知Q12,Q22,Q11,Q21,但是要插值的点为P点,这就要用双线性插值了,首先在x轴方向上,对R1和R2两个点进行插值,这个很简单,然后根据R1和R2对P点进行插值。

有兴趣的可以去维基百科看看推导的公式
说了那么多这个公式究竟是用来干什么的呢?在cv中主要是用来改变图像的大小,但是在这里并不是这个用法。你需要知道双线性插值是更加坐标系中已知量的值去得到一个未知坐标的值。下面的公式就会对其进行一个运用
3.2 可变形卷积 Deformable Convolution
传统的卷积结构可以定义成如下公式:
y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n + Δ p n ) \mathbf{y}\left(\mathbf{p}_{0}\right)=\sum_{\mathbf{p}_{n} \in \mathcal{R}} \mathbf{w}\left(\mathbf{p}_{n}\right) \cdot \mathbf{x}\left(\mathbf{p}_{0}+\mathbf{p}_{n}+\Delta \mathbf{p}_{n}\right) y(p0)=pn∈R∑w(pn)⋅x(p0+pn+Δpn)
pn是卷积输出每一个点相对感受野上的每一个点的偏移量,取整数。
采用全新的可变形卷积后要在公式1基础上给每个点再增加一个偏移量Δpn,这个新的偏移量是由另一个卷积得出,所以一般是小数
y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n + Δ p n )

本文深入探讨了可变形卷积网络(Deformable Convolutional Networks)的原理与应用,详细介绍了可变形卷积如何通过引入偏移量增强模型对物体形状变化的适应能力,以及其在卷积神经网络中的具体实现细节。
最低0.47元/天 解锁文章
760

被折叠的 条评论
为什么被折叠?



