卷积神经网络CNN-卷积层

卷积(convolution)

CNN实际上就是一个不断提取特征,进行特征选择,然后进行分类的过程,卷积在CNN里,作用就是充当前排步兵,首先对原始图像进行特征提取。卷积实际上可以充当一个对原图像进行二次转化,提取feature 的作用,相当于信号处理的滤波器。

卷积公式:

物理意义:系统在某一时刻的输出是由多个输入共同作用(叠加)的结果。

For Example(实例):一个人不停地吃东西,用f(t)表示t时刻他进食的多少,不止要吃东西还要消化,但是消化的速率和他吃的东西是没有关系的,所以用g(t)表示从进食到t时刻剩余食物比。假设某人12点吃了一碗米饭,我想知道两个小时后这个人肚子还剩多少食物,就是f(12)g(14-12)。用坐标轴表示:

假设在t时刻他刚刚吃下食物还未被消化,此时f(t)与g(t)对应的点如图所示:

同理,越早吃某食物则某食物被消化的越多,对应点连线如图:

所以,把所有的值加起来,就是之前提问的结果。于是就得到了相加积分公式:

因为现在考虑的是时间问题,是有具体的物理意义的,所以不能是正负都无穷。假如考虑的是一个距离问题,那就完全可以从负无穷到正无穷。

图像卷积操作(Image convolution operation)

图像卷积操作实际上就是一个3x3的点阵和图像进行操作,这个3x3的点阵叫做卷积核。

操作过程:把卷积核扣在图像的矩阵上,然后对应的两个格子相乘,3x3的矩阵有9个数相乘,最后还要把这9个相乘的结果相加(卷积核扣在图像中做相乘再相加的操作我们叫做点积),这就相当于得到了一个新的像素点。

如果把3x3的卷积核看成一个9维向量,那么什么情况下点积的输出最大?是两个向量的方向一致的时候输出最大。也就是说图像中如果有与卷积核一样的Pattern时输出就最大。而卷积核是可以训练的,这个训练过程就是改变卷积核去找到图像中最重要的Pattern,找到这些最有效的Pattern做图像分类或其它。3x3的区域太小,只能“看到”很小的范围,解决的方式是用多层卷积层,每一层有Pooling,这样后面的层“看到”的区域就会越来越大,从而解决整张图片的识别问题。

接下来只需要用卷积核将整个图像扫一遍,就得到卷积操作后的新图像了,当然,这样处理后的图像总是少一圈,解决办法是在在处理之前给图像外面加一圈都是0的像素,最后就能得到一个同样大小的图片了,如下图所示。

到此,提问哪个是f(t),哪个是g(t)?

我们知道,图像的卷积操作就是拿图片和卷积核先相乘再相加,在计算卷积的时候也是这样做的,所以可以确定,图像和卷积核一个是f一个是g。

平滑卷积操作

有这样一个卷积核,找一个像素点,把像素点周围的像素点全部加起来然后求平均,效果是让图像变得更平滑更朦胧,所以叫做平滑卷积操作。效果图如下图所示。

我们可以看到平滑卷积核实际上做的就是让周围的像素点和自己相差不要太大,这样我们就可以很容易理解卷积核了,它其实就是规定了周围的像素点是如何对当前像素点产生影响的。3x3卷积核就是计算周围一圈像素点对当前像素点产生的影响,同理5x5就是两圈,7x7就是三圈,一圈能解决就绝对不会考虑两圈三圈的问题。

在图像分析里,f(x) 可以理解为原始像素点(source pixel),所有的原始像素点叠加起来,就是原始图。g(x)可以理解为作用点,所有作用点合起来称为卷积核(Convolution kernel)。卷积核上所有作用点依次作用于原始像素点后(即乘起来),线性叠加的输出结果,就是最终卷积的输出。

提取某个特征,经过不同卷积核卷积后的效果是不一样的(这是个重点,CNN里面卷积核的大小是有讲究的)。例如:同样是锐化,5x5卷积核要比3x3卷积核的效果细腻(边缘细节更突出)。

总结:

(1)原始图像通过与卷积核的数学运算,可以提取出图像的某些指定特征(features)。

(2)不同卷积核,提取的特征是不一样的。

(3)提取的特征一样,不同的卷积核,效果也不一样。

卷积层(convolutional layer)

到此,我们知道卷积层是做什么的,卷积层就是从像素数值组中提取最基本的特征。如何提取的呢,就是上文中的图像卷积操作,Input Image * Kernel = Feature Map。

CNN中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通反向传播算法佳化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条、角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。

一般卷积操作的四个参数:

1、卷积核大小(Kernel Size):感受视野中的权重矩阵,大小一般用户来确定,而权重矩阵的值就是CNN的参数,通常随机生成初值,通过训练来找到合适的值。卷积核定义了卷积的大小范围,二维卷积核最常见的就是 3x3 的卷积核,也可以根据网络设计5x5或者7x7,甚至1x1等不同size的卷积核,来提取不同尺度的特征。

在CNN中,卷积核代表感受野的大小,一般情况下,卷积核越大,感受野(receptive field)越大,看到的图片信息越多,所获得的全局特征越好。虽说如此,但是大的卷积核会导致计算量的暴增,不利于模型深度的增加,计算性能也会降低。

2、步长(Stride):卷积核的步长代表提取的精度, 步长定义了当卷积核在图像上进行卷积操作时,每次卷积跨越的长度。默认情况下,步长通常为 1,但也可以采用步长为2 的采样过程,类似于 MaxPooling 操作。

对于size为3的卷积核,如果step为1,那么相邻步感受野之间就会有重复区域;如果step为2,那么相邻感受野不会重复,也不会有覆盖不到的地方;如果step为3,那么相邻步感受野之间会有一道大小为1个像素的缝隙,从某种程度来说,这样就遗漏了原图的信息。

3、填充(Padding):卷积核与图像尺寸不匹配,就要填充图像的缺失区域,假设,原始图片尺寸为5x5,卷积核大小为3x3,若不进行填充,步长为1的话,当卷积核沿着图片滑动后只能滑动出一个3x3的图像出来,这就造成了卷积后的图片和卷积前的图片尺寸不一致,所以为了避免这种情况,需要先对原始图片做边界填充处理,通常补0。

4、输入和输出通道数(Input & Output Channels):卷积核的输入通道数(in depth)由输入矩阵的通道数所决定;输出矩阵的通道数(out depth)由卷积核的输出通道数所决定。每一层卷积有多少channel数,以及一共有多少层卷积,这些暂时没有理论支撑,一般都是靠感觉去设置几组候选值,然后通过实验挑选出最佳值。这也是现在深度卷积神经网络虽效果拔群,但一直为人诟病的原因之一。

通过卷积核扫描生成的下一层神经元矩阵被称为特征映射图(Feature Map),若使用 3 个不同的卷积核,则可以输出3个特征映射图。其中,值越大表示对应位置和feature的匹配越完整,而值越小的表示对应位置没有任何匹配或者没有什么关联。

For Example:

out11=1*1+1*0+1*1+0*1+1*1+1*0+0*1+0*0+1*1=4

out12=3;out13=4;out21=2;out22=4;out23=3;out31=2;out32=3;out33=4;

总结

卷积层是CNN最重要的部分,在CNN中负责特征提取(卷积核可以用来提取特征)。CNN相较于其他的神经网络而言,新增加了卷积层(convolutional layer)和池化层(pooling layer)。

CNN的layers的连接顺序:Convolution-ReLU-Pooling,靠近输出的层中使用了Affine - ReLU组合。最后的输出层中使用了Affine -Softmax组合,都是一般的CNN中比较常见的结构。

卷积层可以保持数据形状不变,不像全连接层那样忽视数据的三维形状。当输入数据是图像时,卷积层会以3维数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。因此在CNN中,可以正确理解图像等具有形状的数据。

常见的卷积

1、一般卷积

2、扩张卷积

3、转置卷积

4、可分离卷积

猜你喜欢

转载自blog.csdn.net/weixin_58420524/article/details/128741540
今日推荐