论文地址 :Deformable Convolutional Networks
工程地址:github 链接
0. 摘要
卷积神经网络对位置变化的建模存在天然缺陷,这是由于网络固定的位置结构。该论文提出两个新的模块来增强CNNs的这种建模能力,称为deformable convolution and deformable RoI pooling,两个模块的基本思想采样时增加额外的参数offets并学习这种偏移,新模块可以直接替换现有CNNs中的对应方法并且可以通过后向传播算法端到端训练,由此产生deformable convolutional networks。实验表明这两个模块对于目标检测任务和语义分割任务的精度都有一定的提升。
1. 介绍
视觉任务的一大挑战在于如何在变形物体上有效泛化或者说在物体层面对各种变形进行建模,一般有两种方法,一是建立包含各种变形的数据集,而是使用具有平移不变性的特征和算法。然而这两种方法存在两个问题:
- 变形有固定的方向而且可知
- 手工设计的具有不变性的特征和算法对于具有复杂变形的物体,可能无法描述或这描述过于困难。
尽管CNNs在各种计算机视觉任务上都取得了非常好的效果但是也无法完全解决上述两个问题,各种方法对物体变形的建模能力无非来自数据增广,大模型和简单设计的模块{比如最大池化在轻微的变形上的效果}
简而言之,由于内部模块的结构,CNNs对大的未知的变换的建模能力天然不足:卷积单元对输入的特征图在固定的位置进行采样;池化层不断减小着特征图的尺寸;RoI池化层产生空间位置受限的RoI。网络内部缺乏能够解决这个问题的模块,这会产生显著的问题,例如,同一CNN层的激活单元的感受也尺寸都相同,这对于编码位置信息的浅层神经网络并不可取,因为不同的位置可能对应有不同尺度或者不同形变的物体,这些层需要能够自动调整尺度或者感受也的方法。再比如,目标检测虽然效果很好但是都依赖于基于特征提取的边界框,这并不是最优的方法,尤其是对于非网格状的物体而言。
该论文介绍了两个新型的模块极大地增强了CNNs对于变形目标的建模能力,1) Deformable convolution: 在常规的网格状空间采样中加入2D偏移如下图所示; 2) Deformable RoI pooling: 在常规RoI池化的bin位置加入偏移。
两个模块都是轻量的,通过增加较少的参数和计算用于offsets的学习,替换标准CNNs中对应的方法简单快捷形成的网络称为:Deformable ConvNets。
论文中提出的方法与空间变换网络和可变形模型共享浅层特征,二者都有变换相关的参数并且从数据中学习,不同在于论文提出的方法能够以较为简单有效的方式处理较为复杂的变形。
2. Deformable Convolutional Networks
需要注意的是为了更好的形式化,下面的可变形卷积和RoI池化都不是在特征图的3D维度进行说明的,而是2D。
2.1 Deformable Convolution
2D卷积包含两个步骤:1)使用常规的grid R R R在输入特征图x上进行采样;2)将这些采样结果以一个权重w进行归并。grid R R R定义了感受也尺寸和空洞,比如说 R = [ ( − 1 , − 1 ) , ( − 1 , 0 ) , . . . , ( 0 , 1 ) , ( 1 , 1 ) ] R=[(-1,-1),(-1,0),...,(0,1),(1,1)] R=[(−1,−1),(−1,0),...,(0,1),(1,1)]就定义了一个空洞率为1的 3 × 3 3\times 3 3×3的核。
对于输出特征图 y y y中的每一个位置 p 0 p_0 p0,有:
(1) 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) \tag{1} y(p0)=pn∈R∑w(pn)⋅x(p0+pn)(1)
其中 p n p_n pn是 R R R中位置的枚举。
在可变形卷积中常规网格 R R R是经过偏移{ δ p n = n = 1 , . . . , N \delta p_n=n=1,...,N δpn=n=1,...,N},其中 N = ∣ R ∣ N=|R| N=∣R∣,公式1就变为下面的形式:
(2) 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)\tag{2} y(p0)=pn∈R∑w(pn)⋅x(p0+pn+δpn)(2)
这样一来,采样就在不规则且有偏移的位置 p n + δ p n p_n+\delta p_n pn+δpn上进行,因为偏差 δ p n \delta p_n δpn比较所以通过双线性差值实现:
(3) x ( p ) = ∑ q G ( q , p ) ⋅ x ( q ) x(p)=\sum_q G(q,p) \cdot x(q)\tag{3} x(p)=q∑G(q,p)⋅x(q)(3)
其中p表示任意的位置(公式2中 p = p 0 + p n + δ p n p=p_0+p_n+\delta p_n p=p0+pn+δpn),q从特征图x的所有位置中选择, G ( ⋅ , ⋅ ) G(\cdot,\cdot) G(⋅,⋅)是双线性插值的核函数,是二维的所以可以分成两个以为的核:
(4) 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)\tag{4} G(q,p)=g(qx,px)⋅g(qy,py)(4)
其中 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的计算是非常快的因为 G ( q , p ) G(q,p) G(q,p)除了少数的qs其他位置都是0。
如上图所示,偏差是通过一个卷几层来获得的,其卷积核与普通的卷积层无异。输出的偏差域和输入特征图的尺寸相同,通道维度的2N对应N 二维偏移。生成偏移和输出特征的卷积核同时训练,为了学习偏移,梯度通过双线性操作后向传播。
2.2 Deformable RoI Pooling
普通的RoI将输入的任意尺寸的矩形区域转化为固定大小的特征,给定输入特征图x,和一个尺寸为 w × h w \times h w×h的RoI和左上角坐标点 p 0 p_0 p0,RoI池化层将RoI分为 k × k k \times k k×k个容器并且输出一个 k × k k\times k k×k的特征图y,对于第(i,j)个容器的( 0 ≤ i , j ≤ k 0 \leq i,j \leq k 0≤i,j≤k),有:
(5) 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}\tag{5} y(i,j)=p∈bin(i,j)∑x(p0+p)/nij(5)
其中 n i j n_{ij} nij是容器中像素点的数量,且对于第(i,j)个容器有: [ i w k ] ≤ p x < [ ( i + 1 ) w k ] 且 [ j w k ] ≤ p y < [ ( j + 1 ) w k ] [i\frac{w}{k}] \leq p_x <[(i+1)\frac{w}{k}]且[j\frac{w}{k}] \leq p_y <[(j+1)\frac{w}{k}] [ikw]≤px<[(i+1)kw]且[jkw]≤py<[(j+1)kw]。
与公式2相同,在可变形RoI池化中,偏移{ δ p i j ∣ 0 ≤ i , j < k \delta p_{ij}|0 \leq i,j<k δpij∣0≤i,j<k}加到容器中,公式5变为:
(5) 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}\tag{5} y(i,j)=p∈bin(i,j)∑x(p0+p+δpij)/nij(5)
如下图所示,首先RoI池化层(公式5)生成池化特征图,之后应用一个全连接层生成正则化的偏移 δ p ^ i j \delta \hat p_{ij} δp^ij,然后通过逐元素的乘法 δ 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)转化为偏移 δ p i j \delta p_{ij} δpij,其中 γ \gamma γ是预先设定好的缩放因子用于调整偏移的量级,取经验值0.1。
之后就是实验和与当时SOTA方法的结合以及相关工作部分{第一次见到这个部分放在后面~孤陋寡闻了}
欢迎扫描二维码关注微信公众号 深度学习与数学 [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]