这篇文章介绍了一种可针对空间不变性的卷积方法,不同于常规的卷积网络种卷积核和待提取feature map是相同的(假设dilation=1),可变形卷积(Deformable Convolution Networks)的待提取feature map可能是任意变形之后的一个个采样点。DCN的提出使得网络不再对经过变换之后的输入敏感,即增加了空间不变性。
Note:
- 本文只介绍论文中的可变形卷积部分,而没有介绍论文中的可变形ROI池化部分。
参考目录:
①深度学习可形变卷积
②源码
③深度学习之 DCN(Deformable Convolution)-可变形卷积
④卷积神经网络结构变化——可变形卷积网络deformable convolutional networks
Deformable Convolutional Networks
1. Abstract
传统的CNN网络因为用固定的卷积核大小去提取同样固定采样窗口的特征,使得CNN的表现力受限于输入空间变换带来的影响。
- 在本论文中,作者提出了一种和STN网络高度相似的新模型——
Deformable Convolution Network
,他们都可以使得网络具有空间不变性。 - 作者介绍2种空间不变性结构:可变形卷积和可变形ROI池化。
- DCN的核心思想就是在不增加额外的监督学习上,增加输入feature map在采样格点位置(location)上的位置偏移(offset),这个偏移和滤波器的参数 W 、 b W、b W、b一起通过梯度下降参数更新得到。
- 本文提出的DCN可以直接取代我们平时使用的普通CNN结构来增加原本CNN不具备的空间不变性!
Note:
- 空间不变性:当你输入feature map发生变换时,空间不变性网络会对抗这种变换,使得最后的输出结果就和没有发生变换之前的输入feature map产生类似的结果。常见的变换如仿射变换(包括平移、旋转、缩放、裁剪)、投影变换等warp方法。
- 在经典视频超分VESPCN中,也提出了一种STN变体的运动补偿方法,其本质也是个空间变换网络。
- 本文提出的DCN是一个轻量级的网络!
2. DCN
这一节开始正式介绍可变形卷积。
可变形卷积总的来说就是在传统CNN的基础上,在输入feature map(或输入图像)上的采样格点上增加一个位置偏移,如下图所示:
但是滤波器的大小还是不变(
∀
d
i
l
a
t
i
o
n
\forall \;dilation
∀dilation),然后我们拿着这个卷积核的每一个格点去提取对应每一个新位置的特征点,这种方式对于卷积核来说就相当于无视你的变形,用通俗点的话来讲,就算你特征点逃到(变形)到天涯海角(feature map上的新位置),还是可以把你抓回来(卷积核特征提取);这种无视变形的方式就等同于传统的CNN对未变形图像提取特征一样。这一点其实是DCN和STN最大的不同,因为STN无视变形是通过反向采样的思想实现的!
所以DCN的关键就是这个可学习的偏移量 Δ \Delta Δ,这个offset是通过一次卷积得到的,而这个额外的卷积层可以通过最后的Loss经过梯度反传参数更新来学习出 Δ \Delta Δ。
接下来我们进一步了解2D-DCN是怎么实现的,3D可变形卷积可以直接通过2D迁移延申得到。
2.1. Classical convolution networks
经典的CNN包括2个步骤:
- 在输入feature map
X
X
X上使用固定形状的卷积核进行采样,我们设
3
×
3
3\times 3
3×3格点坐标
R
=
{
(
−
1
,
−
1
)
,
(
−
1
,
0
)
,
⋯
,
(
0
,
1
)
,
(
1
,
1
)
}
\mathcal{R}=\{(-1,-1), (-1,0), \cdots, (0, 1), (1,1)\}
R={(−1,−1),(−1,0),⋯,(0,1),(1,1)},如下图所示(dilation=1):
- 将输入特征和滤波器参数 W 、 b W、b W、b做乘加运算得到输出feature map Y Y Y。具体的,对于输出feature map上每一个格点位置 p 0 p_0 p0,遍历卷积核中每一个格点 p n ∈ R p_n\in\mathcal{R} pn∈R,乘加运算为: Y ( p 0 ) = ∑ p n ∈ R W ( p n ) ⋅ X ( p 0 + p n ) + b ( p n ) . (1) Y(p_0) = \sum_{p_n\in\mathcal{R}} W(p_n)\cdot X(p_0 + p_n) + b(p_n) \tag{1}. Y(p0)=pn∈R∑W(pn)⋅X(p0+pn)+b(pn).(1)
Note:
- 输出feature map上的点 p 0 p_0 p0就相当于对应到给输入feature map做采样的卷积核窗口中位置 ( 0 , 0 ) (0,0) (0,0)。
2.2. Proposed convolution networks
在DCN中,就是在上述式(1)中添加了一个位置偏移项
Δ
p
n
\Delta p_n
Δpn,其中
n
=
{
1
,
2
,
⋯
,
N
=
∣
R
∣
}
n=\{1,2, \cdots, N=|\mathcal{R}|\}
n={1,2,⋯,N=∣R∣},具体公式如下:
Y
(
p
0
)
=
∑
p
n
∈
R
W
(
p
n
)
⋅
X
(
p
0
+
p
n
+
Δ
p
n
)
+
b
(
p
n
)
=
∑
p
n
∈
R
W
(
p
n
)
⋅
X
(
p
)
+
b
(
p
n
)
,
p
=
p
0
+
p
n
+
Δ
p
n
.
(2)
Y(p_0) = \sum_{p_n\in\mathcal{R}}W(p_n)\cdot X(p_0 + p_n + {\color{yellowgreen}\Delta p_n}) + b(p_n) = \sum_{p_n\in\mathcal{R}}W(p_n)\cdot X(p) + b(p_n),\\ p=p_0 + p_n + \Delta p_n.\tag{2}
Y(p0)=pn∈R∑W(pn)⋅X(p0+pn+Δpn)+b(pn)=pn∈R∑W(pn)⋅X(p)+b(pn),p=p0+pn+Δpn.(2)
Note:
- DCN中卷积核仍然是保持和经典CNN一样的,比如 3 × 3 3\times 3 3×3一样的形状,DCN变的只是输入feature map上的采样点形状,而不是形变kernel!
- 这里的 W 、 b W、b W、b是可变形卷积参数,而不是学习偏移量的经典卷积参数,那个参数是额外的。
其中偏移量
Δ
p
n
\Delta p_n
Δpn就是通过学习得到,其值通常是个浮点数,这样会使得最终在输入feature map上的格点
p
p
p也是个小数,因此接下来和STN中的Differentiable sampling
环节一模一样,是个重采样过程:我们对
X
(
p
)
X(p)
X(p)进行双线性插值,来获取这个在输入feature map上的非整数坐标位置的像素值:
X
(
p
)
=
∑
q
G
(
q
,
p
)
⋅
X
(
q
)
.
(3)
X(p) = \sum_q G(q, p)\cdot X(q).\tag{3}
X(p)=q∑G(q,p)⋅X(q).(3)其中
q
q
q为
X
X
X上的整数坐标,p为
X
X
X上浮点坐标,
G
(
⋅
,
⋅
)
G(\cdot,\cdot)
G(⋅,⋅)为双线性插值函数。
本文中的
G
G
G和STN中的双线性插值函数是一样的,使用可导的
m
a
x
max
max函数:
G
(
q
,
p
)
=
g
(
q
x
,
p
x
)
⋅
g
(
q
y
,
p
y
)
.
G(q,p) = g(q_x, p_x)\cdot g(q_y, p_y).
G(q,p)=g(qx,px)⋅g(qy,py).其中,
g
(
a
,
b
)
=
m
a
x
(
0
,
1
−
∣
a
−
b
∣
)
g(a,b) = max(0, 1-|a-b|)
g(a,b)=max(0,1−∣a−b∣),所以公式(3)可以转变成:
X
(
p
)
=
∑
q
X
(
q
)
⋅
m
a
x
(
0
,
1
−
∣
q
x
−
p
x
∣
)
⋅
m
a
x
(
0
,
1
−
∣
q
y
−
p
y
∣
)
.
(4)
X(p) = \sum_q X(q) \cdot max(0, 1-|q_x-p_x|) \cdot max(0, 1-|q_y-p_y|).\tag{4}
X(p)=q∑X(q)⋅max(0,1−∣qx−px∣)⋅max(0,1−∣qy−py∣).(4)这个公式怎么理解呢?其实和我们理解的双线性插值的思想是一样的,如下图所示:
P
P
P为亚像素,其坐标为浮点坐标,我们遍历所有整数坐标
Q
Q
Q。如果
Q
、
P
Q、P
Q、P的距离大于1,这样的整数坐标
Q
Q
Q我们就不要,给他赋予0的权重;相反,如果
Q
、
P
Q、P
Q、P的横轴和纵轴距离均小于1,如上图的
Q
11
、
Q
12
、
Q
21
、
Q
22
Q_{11}、Q_{12}、Q_{21}、Q_{22}
Q11、Q12、Q21、Q22所示,那我们就选用他们这4格点,这里
m
a
x
max
max函数力之所以写了"1",就是要保持
Q
Q
Q是离
P
P
P最近的4个格点。更进一步,如下图所示:
这4个点里面,离
P
P
P最近的点被赋予最大的权重,即
Q
12
Q_{12}
Q12,它的权值就相当于是对角绿色快的面积,
Q
21
Q_{21}
Q21离
P
P
P最远,所以其权重是其对角的米黄色块面积,
Q
11
、
Q
22
Q_{11}、Q_{22}
Q11、Q22也是同理。
到这DCN的流程就走完了,接下来我们看下DCN总体结构和一些细节的介绍。
如上图所示就是DCN网络的总体结构:
-
整个DCN网络包括2个卷积过程:①可变形卷积,卷积核为 3 × 3 3\times 3 3×3,但是采样点 p p p被偏移量变成了不规则的形状,此外卷积核和现在的一般卷积核是一模一样的。②经典的卷积过程,输入是和可变形卷积一样的输入feature map,offset输出feature map和输入具有一样的高和宽。
-
Offset输出feature map的深度为 2 N , N = ∣ R ∣ 2N,N=|\mathcal{R}| 2N,N=∣R∣,这里的“2”指的是每个位置有 x 、 y x、y x、y轴两个方向;这里的"N"指的是卷积核的所有参数 F H × H W FH\times HW FH×HW。具体解释如下:论文中Figure 2表达不够清晰, 2 N 2N 2N个offset feature map应该是一张输入feature map产生,也就是说,对于通道数为 C C C的输入feature map,产生的所有offset输出feature map一共有对应的 C ∗ 2 N C*2N C∗2N张!接下来我们分析下上图所示1张输入feature map情况下,产生的offset输出feature map上每一个像素点 ( 1 , 2 N , 1 , 1 ) (1, 2N, 1, 1) (1,2N,1,1)通过Pixel Shuffle之后就产生了 2 2 2张 ( N × N ) (\sqrt{N}\times \sqrt{N}) (N×N)大小的偏移量 Δ p n x 、 Δ p n y \Delta p_n^x、\Delta p_n^y Δpnx、Δpny,分别表示 x 、 y x、y x、y轴方向的偏移量,接着两者均与原输入feature map的位置相加,即与输入feature map上的采样位置相结合得到新的采样位置(上图蓝色小框),然后根据式(2)就可以获得 Y ( p 0 ) Y(p_0) Y(p0)了。
-
DCN滤波器 W W W的训练和offset中滤波器 w w w的训练是同时进行的: ∂ Y ( p 0 ) ∂ W ( p n ) = ∑ p n ∈ R X ( p 0 + p n + Δ p n ) ∂ Y ( p 0 ) ∂ w ( p n ) = ∂ Y ( p 0 ) ∂ X ( p ) ⋅ ∂ X ( p ) ∂ p ⋅ ∂ p ∂ Δ p n ⋅ ∂ Δ p n ∂ w ( p n ) \frac{\partial{Y(p_0)}}{\partial{W(p_n)}} = \sum_{p_n\in\mathcal{R}}X(p_0 + p_n + \Delta p_n)\\ \frac{\partial{Y(p_0)}}{\partial{w(p_n)}}=\frac{\partial{Y(p_0)}}{\partial{X(p)}}\cdot\frac{\partial{X(p)}}{\partial{p}}\cdot\frac{\partial{p}}{\partial{\Delta p_n}}\cdot\frac{\partial{\Delta p_n}}{\partial{w(p_n)}} ∂W(pn)∂Y(p0)=pn∈R∑X(p0+pn+Δpn)∂w(pn)∂Y(p0)=∂X(p)∂Y(p0)⋅∂p∂X(p)⋅∂Δpn∂p⋅∂w(pn)∂Δpn其中 ∂ X ( p ) ∂ p \frac{\partial{X(p)}}{\partial{p}} ∂p∂X(p)通过双线性插值式(4)使用次梯度下降获得。DCN之所以是可导的,或者说STN为何是可导的,是因为如果没有双线性插值的话,我们上述的所有操作不是对feature map操作的,而是对离散的feature position(位置坐标)操作的,这显然无法通过深度网络来训练学习的,而增加了双线性插值之后,除了解决亚像素值的问题以外,最重要的就是使得整个网络变得可导了,使得两个卷积网络的参数都可以通过梯度反传更新学习!
3. Conclusion
- 本文主要介绍了2D可变形卷积的原理,DCN通过学习一个offset位置偏移网络,使得学习到的位置偏移可以直接和输入feature map相结合,从而当标准的卷积核进行采样的时候,可以采样到变形之后的特征信息,这就相当于使用标准的卷积核对未变形之前的特征信息进行提取,从而使得网络具有空间不变性。
- 需要注意的是,可变形卷积中变形的是输入feature map,而不是kernel!
- DCN和STN核心思想高度雷同,都是为了解决传统CNN网络在处理变换输入条件下性能下降的问题。
- DCN中的重采样环节使得整个DCN变得可导,从而让DCN成为一个可学习得
轻量级网络
。