一、计算机视觉
在运行神经网络对图像进行处理时,对于64*64大小的图像,图像就有12288个参数,而对于一张1000*1000大小的图像,参数更是多达300万个,假设隐藏层有1000个神经元,那么参数就是300万*1000个,300亿个参数,可想而知数据量过于庞大。
为解决此问题,我们需要采用卷积计算。
二、边缘检测
①用神经网络的前几层来检测图像边缘,然后用后面的层检测特征,可以完成对一个完整物体进行的检测。
②它还可以进行垂直的线和水平的线的检测。
一个6*6的图像,构造一个3*3的滤波器进行卷积运算,可以得到一幅4*4的图像。
图中,0表示图像暗色区域,10为图像亮色区域,用一个尺寸为3*3的滤波器对图像进行卷积后,即可得到的图像中间亮,两边暗,亮色区域对应的就是图像的边缘,从而可以得到图像的边缘。
同样,还有垂直滤波器和水平滤波器,如下。
三、Padding
假设输出图像大小为n*n与过滤器大小为f*f,输出图像大小则为(n−f+1)*(n−f+1)。(f一般为奇数)
缺点:①卷积运算后,输出图片尺寸缩小。②原始图片边缘信息对输出贡献得少,输出图片丢失边缘信息。
解决方法:即把原始图片尺寸进行扩展,扩展区域补零,用p来表示每个方向扩展的宽度。如果我们填充的数量是p,那么输出大小就变成了(n+2p-f+1)*(n+2p-f+1)。
两种形态:
1.没有padding操作(Valid convolutions),p=0。
2.有padding操作(Same convolutions),令(n+2p−f+1)*(n+2p−f+1)=n*n,则p=(f-1)/2。设置 f 为奇数有两个原因:
1.若f为偶数,则p不是一个整数,图像左右填充不对称。
2.若f为奇数,则会卷积核会有一个中心点,使图像处理过程比较方便。
四、卷积步长
卷积步长是指滤波器在原图片中水平方向和垂直方向每次的移动的距离,在之前的计算中我们默认步长(stride)为1。若stride=2,则表示滤波器每次移动距离为2。
图像大小:n*n,过滤器大小:f*f,步长:s,padding:p,则卷积后的图片尺寸为:
⌊⌋表示向下取整。
五、三维卷积
以上为单通道卷积(灰度图),对于3通道的RGB图片,其对应的滤波器算子同样也是3通道的。例如一个图片是6 x 6 x 3,分别表示图片的高度(height)、宽度(weight)和通道(channel)。
对于3通道图片的卷积运算过程是将每个单通道(R,G,B)与对应的卷积核(filter)进行卷积运算求和,然后再将3通道的和相加,得到输出图片的一个像素值。
六、单层卷积网络
比之前的卷积过程,CNN的单层结构多了激活函数ReLu和偏移量b。整个过程与标准的神经网络单层结构非常类似:
其中输入图像为a[l-1],w[1]表示滤波器,对图像进行线性变化并加入偏差得到矩阵z[1],a[l]是应用Relu激活后的结果。
每个滤波器组有3*3*3=27个参数和一个偏移量b,则每个滤波器组有27+1=28个参数,两个滤波器则有56个参数,由此可知,选定滤波器组后,参数数目与输入图片尺寸无关。所以,就不存在由于图片尺寸过大,造成参数过多的情况。在CNN中,参数数目只由滤波器组决定,数目相对来说要少得多,这是CNN的优势之一。
以下是CNN单层结构的所有标记符号,设层数为l。
七、池化层
最大池化(Max pooling):把n*n的图像分割成n个不同的区域,输出每个区域的最大值。
平均池化(average pooling):把n*n的图像分割成n个不同的区域,输出每个区域的平均值。
实际应用中,max pooling比average pooling更为常用。
八、卷积神经网络示例
以下是一个用于手写字识的完整的卷积神经网络。
整个网络各层的尺寸和参数如下表格所示:
九、为什么要使用卷积
相比标准神经网络,CNN的优势之一就是参数数目要少得多。参数数目少的原因为:
1.参数共享:一个特征检测器对图片所有区域都适用。
2.连接的稀疏性:因滤波器算子尺寸限制,每一层的每个输出只与输入部分区域内有关。
除此之外,因CNN参数数量少,则训练样本少,所以在一定程度上不会出现过拟合现象,而且,在CNN进行物体检测时,不太受物体所处图片位置的影响,增加检测的准确性和系统的健壮性。