卷积网络(CNN)的采样问题
卷积神经网络(CNN)是一种强大的非结构化数据抽象特征抽取模型,其最基本的结构卷积层为一个权值共享矩阵,但是在不考虑池化(pooling)层的情况下,单纯的卷积操作对图像的仿射变换(平移、缩放、剪切、旋转)缺乏不变性。这种缺陷与CNN默认的采样方法(矩阵采样)有很大的关系。所以,为了使网络获得对仿射变换的不变性,通常采用了改变采样方式的做法(如采用pooling方式的采样使网络获得了一定的平移、缩放、剪切不变性和较小的旋转不变性)。
在以往的卷积网络中,采样方式通常以强先验的方式直接给出(如基于hough变换的位置修正),但是显然强先验的方式通用性较差,我们看到基于矩阵的pooling只能通过数据增强的方式获得对旋转的识别能力。很容易联想到,基于学习的启发式采样,可能是一种更通用的采样方式。本文将介绍两篇启发式采样方面的相关工作:空间变换网络(STN)和可变形卷积网络(DCN)。
空间变换网络(Spatial Transform Network)
《Spatial Transformer Networks》是一篇2015年deepmind的研究。这篇文章提出了一种以启发式仿射变换矩阵为基础的结构来为网络提供一定的空间不变性。
1.仿射变换与双线性插值
有点懒,待补充
2.空间变换结构
正如前文所说,通过仿射矩阵可以求得特征矩阵上的点在经过特定仿射变换后对应输出的位置,通过双线性插值,我们可以得到一个新的特征矩阵。我们可以通过学习来设定仿射矩阵的参数,从而通过仿射矩阵对特征矩阵进行有效归一,我们称其为空间变换器(Spatial Transformers)。来论文的第一部分,只介绍了单变换器(即对一个feature map只有一个仿射矩阵)。
空间变换结构包含三个部分:
Localisation Network:以的feature map作为输入,以变换矩阵的元素作为输出的网络结构,变换矩阵可以为任意形式,对于仿射变换矩阵而言,为一个6参数矩阵。
网络可以是以回归层为终止的多种网络结构,可以采用全连接结构也可以采用卷积结构。-
Parameterised Sampling Grid:根据Localisation Network的参数,我们对一个一般的feature map产生一个特定的变换后的grid(通过逆变换)。通过仿射变换:
同时将输入的横纵坐标范围和输出的横纵左边范围归一化为[-1,+1]。由此对图像进行裁剪、平移、旋转、拉伸及扭曲形成输出的feture map。
-
Differentiable Image Sampling:在获得相应的grid和变换矩阵后,需要对原featrue map进行采样从而得到新的feature map。
通过变换矩阵相关的采样核:
将原feature map映射到新feature map中,如双线性插值:
该变换可以求梯度:
(变换矩阵反向传播?)
通过以上三个结构,就形成了了一个空间变换器。该结构可以背放在卷积网络的任意位置,通过训练学习如何得到最有效的变换方式。
STN的基本原理大致就是这样,文章之后还讨论了multiple spatial transformers、 半监督的co-localisation、higher dimensional transformers等应用形式。
STN网络确实是一个好的想法,但是比较怀疑这种针对全局的变换在比较复杂的任务(如分类较多时)中是否依然有效。
可变形卷积网络(Deformable Convolutional Networks)
《Deformable Convolutional Networks》是一篇2017年Microsoft Research Asia的研究。基本思想也是卷积核的采样方式是可以通过学习得到的。作者提出了两种新的op:deformable convolution和deformable roi pooling,主要是通过给传统卷积采样点加offsets的方式来获得新的采样点。
1.Deformable Convolution
在传统的卷积中采样的grid为一个矩形,如对于一个3*3的卷积核来说,其grid为 :
在每一个输出feature map位置上做卷积操作:
在可变形卷积中,给每一个grid位置上的pn加上offset,即:
用于加上offset后,位置可能会出现非整数的情况,故需要采用插值的方式(如二次线性插值)确定非整位置下对应的值:
在实际应用中,对于一个的输入,若使用3*3的卷积核,则先通过卷积,生成一个新的channel数为2*3*3的feature map(大小不变),分别代表不同方向上x,y的offset值。
在训练过程中,offset通过二次线性插值进行反向传播(见STN)。
2.Deformable RoI Pooling
Roi Pooling是detection中的一种方法,目的是将一个任意大小的feature map映射到特定大小的feature map上。在传统的Roi Pooling中:
如同Deformable Convolution中,我们给每一个位置加入偏置:
同样的,offset可能为非整数,使用插值的方式获取非整数位置对应的值。
在实际使用中,若pooling的目标为一个3*3的featrue map,那么我们需要233个偏置对应每一个bin,首先将输入的featrue map进行roi pooling为3*3大小的feature,然后通过全连接,输出为每一个bin对应的offset。同时为了保证采样大小,需要对offset进行normalization。
Deformable ConvNets
Deformable Convolution和Deformable RoI Pooling两种结构都可以直接应用到conv网络中去,同时直接端到端训练达到启发式采样的目的。
总结
STN和DCN两篇文章都提出了启发式的CNN采样方法。bilinear interpolation确实是个好方法,即解决了采样问题也解决了反向问题,实际实验里也确实work了。但是为什么会work,还是不明白。
两篇文章都是端到端的方法,非常有启发性,但是也都没有完全逃离传统采样,期待以后的工作。