1、定义
可变形卷积是指卷积核在每一个元素上额外增加了一个方向参数,这样卷积核就能在训练过程中扩展到很大的范围,卷积核可以变成任意方向。
图(a)是普通卷积
图(b)、©、(d)是可变形卷积,©(d)是(b)的特例
2、为什么要使用可变形卷积?
卷积核的目的是为了提取输入的特征。我们传统的卷积核通常是固定尺寸、固定大小的,这种卷积核存在的最大问题就是,对于未知的变化适应性差,泛化能力不强。
卷积单元对输入的特征图在固定的位置进行采样;池化层不断使特征图的尺寸减小;RoI池化层产生空间位置受限的RoI等,网络内部缺乏能够解决这个问题的模块,就会产生显著的问题。
图a是标准卷积的采样过程,图b是可变形卷积的采样过程。最上面的图像是在大小不同的物体上的激活单元;中间层是为了得到顶层激活单元所进行的采样过程,左图是标准的3x3方阵采样,右图是非标准形状的采样,但是采样的点依然是3x3;最下面一层是为了得到中间层进行的采样区域。明显发现,可变形卷积在采样时可以更贴近物体的形状和尺寸,而标准卷积无法做到这一点。
为了解决上述问题,最直观的想法就是卷积核可以根据实际情况调整本身的形状,更好的提取输入特征。
3、可变形卷积的实现
3.1 可变形卷积的学习过程
上图是可变形卷积的学习过程:输入特征图同时进行普通卷积和可变形卷积操作,可变形卷积中增加的偏差(偏移量)是通过另一个平行的普通卷积层计算获得。生成的通道维度是2N,分别对应原始输出特征和偏移特征。这两个卷积核通过双线性插值后向传播算法同时学习。加上该偏移量的学习之后,可变形卷积核的大小和位置可以根据当前需要识别的图像内容进行动态调整,其直观效果就是卷积核中不同位置的采样点会根据图像内容发生自适应的位置变化,从而适应不同物体的形状、大小等几何形变。然而,这样的操作引入了一个问题,即需要对不连续的位置变量求导。作者在这里借鉴了之前Spatial Transformer Network和若干Optical Flow中warp操作的想法,使用了双线性插值将任一个位置的输出,转换成对于feature map的插值操作。同理,类似的想法可以直接用于 (ROI) Pooling中改进。
3.2 可变形卷积网络和传统网络的区别
3.3 可变形卷积操作的全过程
- ①首先,和正常的卷积神经网络一样,利用传统的卷积核对输入图像提取特征图;
- ②把得到的特征图作为输入,对特征图再施加一个卷积层,这么做的目的是为了得到可变形卷积的变形的偏移量;
- ③偏移层是2N,是因为我们在平面上做平移,需要改变x值和y值两个方向。
- ④在训练的时候,用于生成输出特征的卷积核和用于生成偏移量的卷积核是同步学习的。其中偏移量的学习是利用双线性插值算法,通过反向传播进行学习。
3.4 注意事项
Q1:如何将它变成单独的一个层,而不影响别的层?
A1:在实际操作时,并不是真正地把卷积核进行扩展,而是对卷积前图片的像素重新整合,变相地实现卷积核的扩张。也就是说,实际上变的是每次进行卷积后得到的带偏移值的坐标值,根据这些坐标取像素点,然后双线性差值,得到新feature map,然后作为输出并成为下一层的新输入。
Q2:在前向传播实现可变性卷积中,如何能有效地进行反向传播?
A2:在图片像素整合时,需要对像素进行偏移操作,偏移量的生成会产生浮点数类型,而偏移量又必须转换为整形,直接对偏移量取整的话无法进行反向传播,这时采用双线性差值的方式来得到对应的像素
3.5 可变形卷积的计算思想
3.6 可变形ROI池化
跟可变形卷积的区别就是通过传统网络所提取到的特征图还要经过普通RoI池化,把RoI池化后的feature map作为输入,对输入的feature map施加一个全连接层(不是卷积层),得到一个偏移。注意这里的偏移量要归一化,为了匹配RoI的尺寸