CNN中常用的四种卷积详解

【CNN中常用的四种卷积详解】卷积现在可能是深度学习中最重要的概念 。正是靠着卷积和卷积神经网络,深度学习才超越了几乎其他所有的机器学习手段 。这期我们一起学习下深度学习中常见的卷积有哪些?
1. 一般卷积卷积在数学上用通俗的话来说就是输入矩阵与卷积核(卷积核也是矩阵)进行对应元素相乘并求和,所以一次卷积的结果的输出是一个数,最后对整个输入输入矩阵进行遍历,最终得到一个结果矩阵,说白了就是一个卷积核在图像上滑动,并求取对应元素相乘求和的过程,如下图:

CNN中常用的四种卷积详解

文章插图
 
卷积核为3*3,步长为2和填充的2D卷积
首先,一般情况下卷积层的作用都是用来自动提取图像的一些视觉特征,代替传统的手动方法提取特征不精确,不全面等缺点 。常见的一般卷积操作都包括以下四个参数:
  • 卷积核大小(Kernel Size):卷积核定义了卷积的大小范围,在网络中代表感受野的大小,二维卷积核最常见的就是 3*3 的卷积核,也可以根据网络设计5*5或者7*7,甚至1*1等不同size的卷积核,来提取不同尺度的特征 。在卷积神经网络中,一般情况下,卷积核越大,感受野(receptive field)越大,看到的图片信息越多,所获得的全局特征越好 。虽说如此,但是大的卷积核会导致计算量的暴增,不利于模型深度的增加,计算性能也会降低 。如上图中卷积核的size为3*3.
  • 步长(Stride):卷积核的步长度代表提取的精度, 步长定义了当卷积核在图像上面进行卷积操作的时候,每次卷积跨越的长度 。在默认情况下,步长通常为 1,但我们也可以采用步长是 2 的下采样过程,类似于 MaxPooling 操作 。对于size为3的卷积核,如果step为1,那么相邻步感受野之间就会有重复区域;如果step为2,那么相邻感受野不会重复,也不会有覆盖不到的地方;如果step为3,那么相邻步感受野之间会有一道大小为1颗像素的缝隙,从某种程度来说,这样就遗漏了原图的信息 。
  • 填充(Padding):卷积核与图像尺寸不匹配,往往填充图像缺失区域,如上图,原始图片尺寸为5*5,卷积核的大小为3*3,如果不进行填充,步长为1的话,当卷积核沿着图片滑动后只能滑动出一个3*3的图片出来,这就造成了卷积后的图片和卷积前的图片尺寸不一致,这显然不是我们想要的结果,所以为了避免这种情况,需要先对原始图片做边界填充处理 。
  • 输入和输出通道数(Input & Output Channels):卷积核的输入通道数(in depth)由输入矩阵的通道数所决定;输出矩阵的通道数(out depth)由卷积核的输出通道数所决定 。每一层卷积有多少channel数,以及一共有多少层卷积,这些暂时没有理论支撑,一般都是靠感觉去设置几组候选值,然后通过实验挑选出其中的最佳值 。这也是现在深度卷积神经网络虽然效果拔群,但是一直为人诟病的原因之一 。
2. 扩张卷积
CNN中常用的四种卷积详解

文章插图
 
使用3内核进行2D卷积,扩展率为2且无填充
扩张卷积(Dilated Convolution)也被称为空洞卷积或者膨胀卷积,是在标准的卷积核中注入空洞,以此来增加模型的感受野(reception field) 。相比原来的正常卷积操作,除了卷积核大小,步长和填充外,扩张卷积多了一个参数:dilation rate,指的是卷积核的点的间隔数量,比如常规的卷积操作dilatation rate为1 。扩张的卷积为卷积层引入另一个参数,称为扩张率 。这定义了卷积核中值之间的间距 。扩张率为2的3x3内核与5x5内核具有相同的视野,而仅使用9个参数 。想象一下,获取一个5x5内核并删除每一个第二列和第二行(间隔删除) 。如之前的一篇文章:为什么要用空洞卷积?
如下图,正常卷积核空洞卷积对比:
CNN中常用的四种卷积详解

文章插图
 
上图左侧为对0-9共10颗像素的正常3x3卷积,padding为same,stride=1的情况下,我们知道其卷积后共得到10个特征,每个特征的感受野均为3x3,如左侧红色的那个特征覆盖3,4,5三颗像素(想象二维情况下应该是3x3) 。上图右侧为对0-9共10颗像素的空洞3x3卷积,这里的3x3是指有效区域,在padding为same,stride=1的情况下,也得到了10个特征,但是每个特征的感受野为5x5,如右侧蓝色的那个特征覆盖2,3,4,5,6五颗像素(想象二维情况下应该是5x5) 。
这就在不丢失特征分辨率的情况下扩大了感受野,进而对检测大物体有比较好的效果 。所以总的来说,空洞卷积主要作用:不丢失分辨率的情况下扩大感受野;调整扩张率获得多尺度信息 。但是对于一些很小的物体,本身就不要那么大的感受野来说,这就不那么友好了 。


推荐阅读