Deformable Convolutional Networks
Deformable Conv
论文链接: https://arxiv.org/abs/1703.06211
一、 Problem Statement
传统CNN对geometric transformations variations不敏感。也就是说, 由于不同的位置可能对应于具有不同尺度或变形的对象,因此自适应确定尺度或感受野大小对于具有精细定位的视觉识别任务是有益的。
二、 Direction
提出了两个模块:
- deformable convolution
- deformable RoI(PS RoI) pooling
三、 Method
1. deformable convolution
先来看一下它的结构:
deformable convolution基于标准卷积,添加了2D offsets,来调整卷积核采样的位置。这个2D offsets是通过卷积对前面的特征图来学习。因此,这种deformable是基于输入特征图,以局部、密集和自适应的方式进行调整。
详细来说,标准卷积为以下操作:
y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n ) y(p_0) = \sum_{p_n \in \R} w(p_n) \cdot x(p_0 + p_n) y(p0)=pn∈R∑w(pn)⋅x(p0+pn)
其中, p n p_n pn遍历的位置。
而deformable convolution基于以上的标准卷积,添加多了一个offsets项:
y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n + Δ p n ) y(p_0) = \sum_{p_n \in \R} w(p_n) \cdot x(p_0 + p_n + \Delta p_n) y(p0)=pn∈R∑w(pn)⋅x(p0+pn+Δpn)
所以,sampling这个操作是不规则的且是带有偏差的。因为通常offset
Δ
p
n
\Delta p_n
Δpn 是小数,所以上面的式子是通过bilinear interpolation实现的。
x
(
p
)
=
∑
q
G
(
q
,
p
)
⋅
x
(
q
)
x(p) = \sum_q G(q, p)\cdot x(q)
x(p)=q∑G(q,p)⋅x(q)
其中,
p
=
p
0
+
p
n
+
Δ
p
n
p = p_0 + p_n + \Delta p_n
p=p0+pn+Δpn 代表着任意的小数位置,而
q
q
q代表遍历特征图
x
x
x所有整数的空间位置。
G
(
⋅
,
⋅
)
G(\cdot, \cdot)
G(⋅,⋅)是双线性插值核函数,是二维的。它可以被拆分成两个一维的卷积核:
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∣)。 最后的效果如下图所示:
根据上面所知,偏差offsets是通过对输入特征图使用卷积操作来获得的。那卷积核的大小和当前卷积层的空间分辨率相同。也就是说,输出的offset区域和输入特征图的空间分辨率是一样的。通道维度为 2 N 2N 2N代表着 N N N个 2 D 2D 2D offsets。
2. deformable RoI pooling
先来看一下它的结构:
RoI pooling 是用来將每一个region proposal 变成同一大小的特征图。作者提出了两种RoI pooling的变形:
-
deformable RoI pooling
先来看一下它的网络结构:
给定输入特征图 x x x,大小为 w × h w \times h w×h的RoI,和左上角顶点 p 0 p_0 p0,RoI pooling 会把RoI 分成 k × k k \times k k×k bins, 然后输入 k × k k \times k k×k的 feature map y y y。对于 ( i , j ) (i, j) (i,j)-th bin, 我们有:
y ( i , j ) = ∑ p ∈ b i n ( i , j ) x ( p 0 + p ) / n i j y(i,j) = \sum_{p \in bin(i, j)}x(p_0+p)/n_{ij} y(i,j)=p∈bin(i,j)∑x(p0+p)/nij
其中 n i j n_{ij} nij是每个bin中,像素的个数。和上面的一样,deformable RoI pooling,多添加了一个offset { Δ p i j ∣ 0 ≤ i , j ≤ j } \{\Delta p_{ij} | 0 \leq i, j \leq j\} {Δpij∣0≤i,j≤j},如下所示:
y ( i , j ) = ∑ p ∈ b i n ( i , j ) x ( p 0 + p + Δ p i j ) / n i j y(i,j) = \sum_{p \in bin(i, j)}x(p_0+p+\Delta p_{ij})/n_{ij} y(i,j)=p∈bin(i,j)∑x(p0+p+Δpij)/nij
同样, Δ p i j \Delta p_{ij} Δpij通常是小数,上面式子也使用bilinear interpolation。通过上图可以知道,RoI pooling会产生pooled feature maps。从pooled feature maps中,使用全连接层生成normalized offsets Δ p ^ i j \Delta \hat{p}_{ij} Δp^ij,这个之后会通过与RoI的长度和宽度进行element-wise product,转换成offsets Δ p i j \Delta p_{ij} Δpij,如 Δ p i j = γ Δ p ^ i j ∘ ( w , h ) \Delta p_{ij} = \gamma \Delta \hat{p}_{ij} \circ(w, h) Δpij=γΔp^ij∘(w,h),这里的 γ \gamma γ是一个预设值(0.1),来控制offset的大小。offset normalization可以使得偏移量学习对RoI大小保持不变
-
deformable PS RoI pooling
先来看一下它的网络结构:
它与RoI pooling不一样,它是全卷积网络。input feature maps通过卷积层生成了大小为 k × k k \times k k×k的score maps,通道数为 C + 1 C + 1 C+1对应于 C C C个目标种类,1为背景。这里的 k × k k \times k k×k是bin的数量。然后基于该score maps,通过PS RoI pooling 得到输出维度为 [ b a t c h , 2 × ( C + 1 ) , k , k ] [batch, 2 \times (C+1),k ,k] [batch,2×(C+1),k,k]的offsets。
下面那个分支,通过卷积核数量为 k × k × ( C + 1 ) k \times k \times (C+1) k×k×(C+1)的卷积层获得输入特征图,然后基于上面的offsets进行调整,执行deformable PS RoI pooling的操作。deformable PS RoI pooling可以看作是先插值,后进行, PS RoI pooling。
四、 Conclusion
通常deformable convolution放在backbone的最后几个卷积层。deformable convolution可以增强卷积空间采样的位置。通常感知域和采样位置在标准卷积上面是固定的,而在可变形卷积上,这是可以根据目标的大小和形状进行调整,因此目标的定位能力提升了,特别是对于不规则的目标。