这篇文章介绍了一种可针对空间不变性的卷积方法,不同于常规的卷积网络种卷积核和待提取feature map是相同的(假设dilation=1),可变形卷积(Deformable Convolution Networks)的待提取feature map可能是任意变形之后的一个个采样点。DCN的提出使得网络不再对经过变换之后的输入敏感,即增加了空间不变性。
Note:
参考目录:
①深度学习可形变卷积
②源码
③深度学习之 DCN(Deformable Convolution)-可变形卷积
④卷积神经网络结构变化——可变形卷积网络deformable convolutional networks
传统的CNN网络因为用固定的卷积核大小去提取同样固定采样窗口的特征,使得CNN的表现力受限于输入空间变换带来的影响。
Deformable Convolution Network
,他们都可以使得网络具有空间不变性。Note:
这一节开始正式介绍可变形卷积。
可变形卷积总的来说就是在传统CNN的基础上,在输入feature map(或输入图像)上的采样格点上增加一个位置偏移,如下图所示:
但是滤波器的大小还是不变( ∀ d i l a t i o n \forall \;dilation ∀dilation),然后我们拿着这个卷积核的每一个格点去提取对应每一个新位置的特征点,这种方式对于卷积核来说就相当于无视你的变形,用通俗点的话来讲,就算你特征点逃到(变形)到天涯海角(feature map上的新位置),还是可以把你抓回来(卷积核特征提取);这种无视变形的方式就等同于传统的CNN对未变形图像提取特征一样。这一点其实是DCN和STN最大的不同,因为STN无视变形是通过反向采样的思想实现的!
所以DCN的关键就是这个可学习的偏移量 Δ \Delta Δ,这个offset是通过一次卷积得到的,而这个额外的卷积层可以通过最后的Loss经过梯度反传参数更新来学习出 Δ \Delta Δ。
接下来我们进一步了解2D-DCN是怎么实现的,3D可变形卷积可以直接通过2D迁移延申得到。
经典的CNN包括2个步骤:
Note:
在DCN中,就是在上述式(1)中添加了一个位置偏移项 Δ p n \Delta p_n Δpn,其中 n = { 1 , 2 , ⋯ , N = ∣ R ∣ } n=\{1,2, \cdots, N=|\mathcal{R}|\} n={1,2,⋯,N=∣R∣},具体公式如下:
Y ( p 0 ) = ∑ p n ∈ R W ( p n ) ⋅ X ( p 0 + p n + Δ p n ) + b ( p n ) = ∑ p n ∈ R W ( p n ) ⋅ X ( p ) + b ( p n ) , p = p 0 + p n + Δ p n . (2) Y(p_0) = \sum_{p_n\in\mathcal{R}}W(p_n)\cdot X(p_0 + p_n + {\color{yellowgreen}\Delta p_n}) + b(p_n) = \sum_{p_n\in\mathcal{R}}W(p_n)\cdot X(p) + b(p_n),\\ p=p_0 + p_n + \Delta p_n.\tag{2} Y(p0)=pn∈R∑W(pn)⋅X(p0+pn+Δpn)+b(pn)=pn∈R∑W(pn)⋅X(p)+b(pn),p=p0+pn+Δpn.(2)
Note:
其中偏移量 Δ p n \Delta p_n Δpn就是通过学习得到,其值通常是个浮点数,这样会使得最终在输入feature map上的格点 p p p也是个小数,因此接下来和STN中的Differentiable sampling
环节一模一样,是个重采样过程:我们对 X ( p ) X(p) X(p)进行双线性插值,来获取这个在输入feature map上的非整数坐标位置的像素值:
X ( p ) = ∑ q G ( q , p ) ⋅ X ( q ) . (3) X(p) = \sum_q G(q, p)\cdot X(q).\tag{3} X(p)=q∑G(q,p)⋅X(q).(3)其中 q q q为 X X X上的整数坐标,p为 X X X上浮点坐标, G ( ⋅ , ⋅ ) G(\cdot,\cdot) G(⋅,⋅)为双线性插值函数。
本文中的 G G G和STN中的双线性插值函数是一样的,使用可导的 m a x max max函数:
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∣),所以公式(3)可以转变成:
X ( p ) = ∑ q X ( q ) ⋅ m a x ( 0 , 1 − ∣ q x − p x ∣ ) ⋅ m a x ( 0 , 1 − ∣ q y − p y ∣ ) . (4) X(p) = \sum_q X(q) \cdot max(0, 1-|q_x-p_x|) \cdot max(0, 1-|q_y-p_y|).\tag{4} X(p)=q∑X(q)⋅max(0,1−∣qx−px∣)⋅max(0,1−∣qy−py∣).(4)这个公式怎么理解呢?其实和我们理解的双线性插值的思想是一样的,如下图所示:
P P P为亚像素,其坐标为浮点坐标,我们遍历所有整数坐标 Q Q Q。如果 Q 、 P Q、P Q、P的距离大于1,这样的整数坐标 Q Q Q我们就不要,给他赋予0的权重;相反,如果 Q 、 P Q、P Q、P的横轴和纵轴距离均小于1,如上图的 Q 11 、 Q 12 、 Q 21 、 Q 22 Q_{11}、Q_{12}、Q_{21}、Q_{22} Q11、Q12、Q21、Q22所示,那我们就选用他们这4格点,这里 m a x max max函数力之所以写了"1",就是要保持 Q Q Q是离 P P P最近的4个格点。更进一步,如下图所示:
这4个点里面,离 P P P最近的点被赋予最大的权重,即 Q 12 Q_{12} Q12,它的权值就相当于是对角绿色快的面积, Q 21 Q_{21} Q21离 P P P最远,所以其权重是其对角的米黄色块面积, Q 11 、 Q 22 Q_{11}、Q_{22} Q11、Q22也是同理。
到这DCN的流程就走完了,接下来我们看下DCN总体结构和一些细节的介绍。
整个DCN网络包括2个卷积过程:①可变形卷积,卷积核为 3 × 3 3\times 3 3×3,但是采样点 p p p被偏移量变成了不规则的形状,此外卷积核和现在的一般卷积核是一模一样的。②经典的卷积过程,输入是和可变形卷积一样的输入feature map,offset输出feature map和输入具有一样的高和宽。
Offset输出feature map的深度为 2 N , N = ∣ R ∣ 2N,N=|\mathcal{R}| 2N,N=∣R∣,这里的“2”指的是每个位置有 x 、 y x、y x、y轴两个方向;这里的"N"指的是卷积核的所有参数 F H × H W FH\times HW FH×HW。具体解释如下:论文中Figure 2表达不够清晰, 2 N 2N 2N个offset feature map应该是一张输入feature map产生,也就是说,对于通道数为 C C C的输入feature map,产生的所有offset输出feature map一共有对应的 C ∗ 2 N C*2N C∗2N张!接下来我们分析下上图所示1张输入feature map情况下,产生的offset输出feature map上每一个像素点 ( 1 , 2 N , 1 , 1 ) (1, 2N, 1, 1) (1,2N,1,1)通过Pixel Shuffle之后就产生了 2 2 2张 ( N × N ) (\sqrt{N}\times \sqrt{N}) (N×N)大小的偏移量 Δ p n x 、 Δ p n y \Delta p_n^x、\Delta p_n^y Δpnx、Δpny,分别表示 x 、 y x、y x、y轴方向的偏移量,接着两者均与原输入feature map的位置相加,即与输入feature map上的采样位置相结合得到新的采样位置(上图蓝色小框),然后根据式(2)就可以获得 Y ( p 0 ) Y(p_0) Y(p0)了。
DCN滤波器 W W W的训练和offset中滤波器 w w w的训练是同时进行的: ∂ Y ( p 0 ) ∂ W ( p n ) = ∑ p n ∈ R X ( p 0 + p n + Δ p n ) ∂ Y ( p 0 ) ∂ w ( p n ) = ∂ Y ( p 0 ) ∂ X ( p ) ⋅ ∂ X ( p ) ∂ p ⋅ ∂ p ∂ Δ p n ⋅ ∂ Δ p n ∂ w ( p n ) \frac{\partial{Y(p_0)}}{\partial{W(p_n)}} = \sum_{p_n\in\mathcal{R}}X(p_0 + p_n + \Delta p_n)\\ \frac{\partial{Y(p_0)}}{\partial{w(p_n)}}=\frac{\partial{Y(p_0)}}{\partial{X(p)}}\cdot\frac{\partial{X(p)}}{\partial{p}}\cdot\frac{\partial{p}}{\partial{\Delta p_n}}\cdot\frac{\partial{\Delta p_n}}{\partial{w(p_n)}} ∂W(pn)∂Y(p0)=pn∈R∑X(p0+pn+Δpn)∂w(pn)∂Y(p0)=∂X(p)∂Y(p0)⋅∂p∂X(p)⋅∂Δpn∂p⋅∂w(pn)∂Δpn其中 ∂ X ( p ) ∂ p \frac{\partial{X(p)}}{\partial{p}} ∂p∂X(p)通过双线性插值式(4)使用次梯度下降获得。DCN之所以是可导的,或者说STN为何是可导的,是因为如果没有双线性插值的话,我们上述的所有操作不是对feature map操作的,而是对离散的feature position(位置坐标)操作的,这显然无法通过深度网络来训练学习的,而增加了双线性插值之后,除了解决亚像素值的问题以外,最重要的就是使得整个网络变得可导了,使得两个卷积网络的参数都可以通过梯度反传更新学习!
轻量级网络
。