Deformable Convolutional Networks

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)=pnRw(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)=pnRw(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)=qG(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,1ab)。 最后的效果如下图所示:

根据上面所知,偏差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)=pbin(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\} {Δpij0i,jj},如下所示:
    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)=pbin(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可以增强卷积空间采样的位置。通常感知域和采样位置在标准卷积上面是固定的,而在可变形卷积上,这是可以根据目标的大小和形状进行调整,因此目标的定位能力提升了,特别是对于不规则的目标。

Reference

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值