Introduction
Deformable Convolutional Network 对卷积或池化的核的每个位置增加一个偏移量,与图片在非常规的滑动窗口中进行卷积或池化操作,以有效地对对象的空间形变进行建模。
Deformable Convolution
Deformable Convolution 首先通过一个卷积分支计算出卷积核的偏移量offsets。先对input feature map用传统的卷积得到一个channel数为2N的offset field,大小和feature map一样,N表示卷积核的元素的数量,2表示x和y方向上的offset。每个滑动窗体中的卷积核offset在offset field中对应的区域找。卷积核的每个位置按照offsets进行移动,然后与偏移后位置上的像素进行相乘。如果offset不是整数,offset位置的像素值用双线性插值的方法求。Deformable convolution的示意图如下
对卷积核进行变形可以使卷积模型适应任意的空间变形,如下图的c可以模拟放大变换,d可以模拟旋转变换。
Deformable RoI Pooling
与Deformable convolution相似,首先用RoI pooling得到一个feature map,然后接一个FC生成normalized offsets
Δ
p
^
i
j
\Delta \hat{p}_{ij}
Δp^ij。接着对
Δ
p
^
i
j
\Delta \hat{p}_{ij}
Δp^ij进行转换,
Δ
p
^
i
j
\Delta \hat{p}_{ij}
Δp^ij和RoI的宽高进行对应元素相乘,再乘以一个固定的尺度
γ
=
0.1
\gamma=0.1
γ=0.1,即
Δ
p
i
j
=
γ
⋅
Δ
p
^
i
j
∘
(
w
,
h
)
\Delta p_{ij} = \gamma \cdot \Delta \hat{p}_{ij} \circ (w, h)
Δpij=γ⋅Δp^ij∘(w,h)
对于第(i,j)个pooling bin,原来对应的pooling区域是
⌊
i
w
k
⌋
≤
p
x
<
⌈
(
i
+
1
)
w
k
⌉
\lfloor i\frac{w}{k} \rfloor \le p_x \lt \lceil (i+1)\frac{w}{k} \rceil
⌊ikw⌋≤px<⌈(i+1)kw⌉和
⌊
j
h
k
⌋
≤
p
y
<
⌈
(
j
+
1
)
h
k
⌉
\lfloor j\frac{h}{k} \rfloor \le p_y \lt \lceil (j+1) \frac{h}{k} \rceil
⌊jkh⌋≤py<⌈(j+1)kh⌉。k表示
k
×
k
k\times k
k×k个bins。根据偏移量
Δ
p
i
j
\Delta p_{ij}
Δpij偏移bin的区域,在新的区域中进行pooling。Deformable RoI Pooling的公式如下
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
0
p_0
p0表示RoI区域左上角的位置,
p
p
p表示
b
i
n
(
i
,
j
)
bin(i,j)
bin(i,j)中相对
p
0
p_0
p0的位置,
Δ
p
i
j
\Delta p_{ij}
Δpij表示
b
i
n
(
i
,
j
)
bin(i,j)
bin(i,j)区域的偏移量,
n
i
j
n_{ij}
nij表示
b
i
n
(
i
,
j
)
bin(i,j)
bin(i,j)区域的位置数,该公式使用average pooling。
Deformable RoI Pooling 的示意图如下
Position-Sensitive (PS) RoI Pooling
位置敏感的RoI pooling的重点在于不同的feature map重点关注一个位置上面的信息,在RoI pooling的时候,一个bin的pooling的区域是在其中几个feature map上,而不是所有的feature map上。把Deformable添加到Position-Sensitive RoI pooling上,就成了deformable PS RoI pooling,如下图所示
首先看下边的分支,通过卷积操作,生成
k
2
(
C
+
1
)
k^2(C+1)
k2(C+1)个feature map,注意到这些feature map分成了
C
+
1
C+1
C+1组,每组有一种颜色表示。一组feature map只关注部分位置的信息,而部分位置在方法中主要是指roi网格上的其中一个bin,比如蓝色的feature map主要关注RoI的左上角的bin。在pooling的时候,每个bin的pooling区域只在对应的一个feature map上的对应区域。比如,对于c类,蓝色的bin只在蓝色的feature map中对应c类的那张feature map的对应bin区域进行pooling。
上面的分支用来预测出每个bin的偏移量,从feature map上提取RoI每个bin偏移量的过程使用了PS roi pooling,过程和上面描述是一样的。有了每个bin的偏移量之后,图片下面的分支的pooling操作就在偏移之后的bin中进行。