Deformable ConvNet 论文学习笔记

原论文:《J. Dai et al., Deformable Convolutional Networks[C]. 2017 IEEE International Conference on Computer Vision (ICCV), Venice, 2017, pp. 764-773.》
代码https://github.com/msracver/Deformable-ConvNets

论文将固定形状的卷积过程改造成了 能适应物体形状 的可变的卷积过程,从而提升了特征提取模块对物体形变的适应能力。

它对感受野上的每一个点加一个偏移量,而调整后的感受野不再是个正方形,而是与物体的实际形状相匹配。通过这种方式,无论物体怎么形变,卷积的区域始终都会覆盖在物体形状的周围

论文中主要介绍了两个模块:可形变卷积(Deformable Convolution) 与 可形变RoI池化(Deformable RoI Pooling)。

1. Deformable卷积

1.1 结构图

在这里插入图片描述

使用一个卷积神经网络提取特征图上每个像素点的 偏移量,然后根据偏移量对特征图上每个像素点的位置坐标进行 调整,再将调整之后的结果进行 加权
对于 W × H × N W \times H \times N W×H×N 的特征图,这个卷积结构得到的特征为: W × H × 2 N W \times H \times 2N W×H×2N。其中,2 代表在宽与高两个方向上的偏移。

1.2 计算公式

y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ^ ( p 0 + p n + Δ p n ) = ∑ p n ∈ R w ( p n ) ⋅ ∑ q G ( q , p 0 + p n + Δ p n ) ⋅ x ( q ) \begin{aligned}\\ y(\pmb{p}_0)&=\sum_{\pmb{p}_n\in \mathcal{R}}\pmb{w}(\pmb{p}_n)\cdot \pmb{\hat{x}}(\pmb{p}_0+\pmb{p}_n+\Delta\pmb{p}_n)\\ &=\sum_{\pmb{p}_n\in \mathcal{R}}\pmb{w}(\pmb{p}_n)\cdot \sum_{\pmb{q}}G(\pmb{q},\pmb{p}_0+\pmb{p}_n+\Delta\pmb{p}_n)\cdot \pmb{x}(\pmb{q})\\ \end{aligned} y(ppp0)=pppnRwww(pppn)x^x^x^(ppp0+pppn+Δpppn)=pppnRwww(pppn)qqqG(qqq,ppp0+pppn+Δpppn)xxx(qqq)
其中, p \pmb{p} ppp q \pmb{q} qqq 是特征图上像素点的坐标; Δ p n \Delta \pmb{p}_n Δpppn p n \pmb{p}_n pppn 的偏移量; w ( p n ) \pmb{w}(\pmb{p}_n) www(pppn) p n \pmb{p}_n pppn 对应的权重; G ( q , p ) G(\pmb{q},\pmb{p}) G(qqq,ppp) 是双线性差值公式:
G ( q , p ) = g ( q x , p x ) ⋅ g ( q y , q y ) = m a x ( 0 , 1 − ∣ q x , p x ∣ ) ⋅ m a x ( 0 , 1 − ∣ q y , p y ∣ ) \begin{aligned}\\ G(\pmb{q},\pmb{p})&=g(q_x,p_x) \cdot g(q_y,q_y)\\ &=max(0,1-|q_x,p_x|) \cdot max(0,1-|q_y,p_y|)\\ \end{aligned} G(qqq,ppp)=g(qx,px)g(qy,qy)=max(0,1qx,px)max(0,1qy,py)

2. Deformable RoI池化

RoI 池化用于将任意尺寸的矩形区域转换为一个固定尺寸的区域。
对于一个特征图 x \pmb{x} xxx,记其左上角位置为 p 0 \pmb{p}_0 ppp0,经过 RoI 池化后将得到一个 k × k k \times k k×k 的特征图 y \pmb{y} yyy
y ( i , j ) = ∑ p ∈ b i n ( i , j ) x ( p 0 + p ) / n i j y(i,j)=\sum_{\pmb{p}\in bin(i,j)}\pmb{x}(\pmb{p}_0+\pmb{p})/n_{ij} y(i,j)=pppbin(i,j)xxx(ppp0+ppp)/nij

此式表明:RoI 需要将 x \pmb{x} xxx 划分为 k × k k\times k k×k 个 bin,再在每个 bin 上取均值。 n i j n_{ij} nij 表示每个bin上的像素点的数量。

2.1 结构图

在这里插入图片描述

  1. 利用一般的 RoI 对一个特征层进行池化;
  2. 使用全连接网络对上面的结果进行处理,得到归一化的偏移量 Δ p ^ i j \Delta \hat{\pmb{p}}_{ij} Δppp^ij
  3. 在每个元素上进行计算: Δ p = 0.1 Δ p ^ i j ∘ ( w , h ) \Delta \pmb{p}=0.1\Delta \hat{\pmb{p}}_{ij}\circ(w,h) Δppp=0.1Δppp^ij(w,h)(其实就是将归一化的量在实际尺寸上进行放缩);
  4. 根据得到的 p \pmb{p} ppp 对特征层进行调整。

2.2 计算公式

y ( i , j ) = ∑ p ∈ b i n ( i , j ) x ^ ( p 0 + p + Δ p i j ) / n i j = ∑ p ∈ b i n ( i , j ) ∑ q G ( q , p 0 + p n + Δ p n ) ⋅ x ( q ) / n i j \begin{aligned}\\ y(i,j)&=\sum_{\pmb{p}\in bin(i,j)}\pmb{\hat{x}}(\pmb{p}_0+\pmb{p}+\Delta \pmb{p}_{ij})/n_{ij}\\ &=\sum_{\pmb{p}\in bin(i,j)}\sum_{q} G(\pmb{q},\pmb{p}_0+\pmb{p}_n+\Delta\pmb{p}_n) \cdot \pmb{x}(\pmb{q})/n_{ij}\\ \end{aligned} y(i,j)=pppbin(i,j)x^x^x^(ppp0+ppp+Δpppij)/nij=pppbin(i,j)qG(qqq,ppp0+pppn+Δpppn)xxx(qqq)/nij

3. 使用方法

直接替换候选骨干网络中某个卷积层及 RoI 池化层。


参考材料

猜你喜欢

转载自blog.csdn.net/qq_29695701/article/details/105471609