卷积神经网络的工作流程与生物大脑的处理视觉信号的流程相似,即:将图像从基础像素到局部信息再到整体信息的转化。大脑在对图像进行分级处理时,图片由低级特征到高级特征进行逐级计算。
大脑处理视觉时,本质是先微分再积分的过程
在微积分中,无限细分的条件是,被细分的对象必须是连续的,例如直线可以无限细分为点、但是若干个点则无法进行细分。
将离散的对象进行细分的过程,称为离散微分,例如图7-3右,虚线段分成四个点的过程。
每个矩阵的值为0~255,用来代表像素点
①利用卷积操作对局部信息进行处理,生成低级特征。
②对低级特征进行多次卷积操作,生成中级特征,高级特征。
③将多个局部信息的高级特征组合在一起,生成最终的解释结果
对数据区域进行小规模的计算,使用更小的权重完成分类任务,改善难收敛的情况,提高泛化能力。
以全连接网络为例子,进行卷积神经网络的介绍:
卷积过程:
卷积核(又称滤波器),该卷积核有三个输入节点,一个输出节点。经过卷积操作做得到的节点称为特征图。每次移动一定的步长,其输出的全部结果即为卷积的结果。
1D/2D/3D卷积计算方式都是一样的,其中2D卷积应用范围最广。与全连接层相比,卷积层的主要优点是参数共享和稀疏连接,这使得卷积操作所需要学习的参数数量大大减少。
卷积计算方式如下:
n:原始图像尺寸 n ∗ n
p:即padding,原始图像边缘的填充像素列数
f:即 filter 的kernel 尺寸,这里需要强调下,因为原始图像只有一个通道,所以这个卷积filter 只用了一个kernel。
s:即stride,filter 在图像上每次的移动步长。
计算方式的推导过程:
卷积就是对相邻的一片数据进行加权求和得到一个数的一种“合并”操作,将此操作对输入张量进行滑动扫描以得到输出张量。循着这个过程,我们很容易推导出卷积输出尺寸的计算公式。
(1)padding指的是两边同时补零,所以补零后输入尺寸相当于变成了i+2p;
(2)用卷积核扫描的时候,想象一把尺子在桌子上从左移动到右,受到左右边框的界限,它的移动范围只有i+2p-f大小。
(3)如果每次移动的步长是s,实际上移动的步数就是 (i+2p-f)/s,但移动的步数必须是整数,因为不能出界,如果最后一步哪怕还差一点也不能算,所以必须要向下取整。
(4)即使一步不移动,也会在原位得到一个输出点,所以最后得到的输出尺寸是移动的总步数再加上1。
【input+2*padding】这个就是原来的图片,外面加了一圈padding,因为padding是一圈,所以左右、上下都有,所以是两倍的。
【input+2∗padding−kernel】是计算,这个要走多少步。
来举个例子就好理解了:
图中是input为7,然后kernel_size为3,podding是1的一个例子。
从下图中可以看出来,kernel总共要走6步
这个六步,就是input+2∗padding−kernel的含义,kernel要滑动的步数。
那么stride就是步长,如果是2的话,那么kernel移动就是这样的(如下图):
就变成3步了。那么为什么计算公式最后还要加上1呢?就是在kernel还没有迈出步子的时候,最开始的处于左上角的那个位置,也是一个点。
【总结:卷积输出尺寸计算的时候,前面的分式,就是计算卷积核可以走几步,然后再加上卷积核的初始位置,就是输出尺寸了】
来看个正经的例子:
【这个例子展示了,如果输入尺寸是一个偶数,卷积核是奇数的情况,如何计算——向下取整】
两个反卷积例题
输入尺寸input=2,kernel_size=3,stride=1,padding=2,计算反卷积的输出尺寸?
【答案:output=4】
输入尺寸input=3,kernel=3,stride=2,padding=1,计算反卷积的输出尺寸?
【答案:output=5】
计算方式
1、图中的输入的数据维度为8,过滤器的维度为5。与二维卷积类似,卷积后输出的数据维度为8−5+1=4。
2、如果过滤器数量仍为1,输入数据的channel数量变为16,即输入数据维度为8×16。这里channel的概念相当于自然语言处理中的embedding,而该输入数据代表8个单词,其中每个单词的词向量维度大小为16。在这种情况下,过滤器的维度由5变为5×16,最终输出的数据维度仍为4。
3、如果过滤器数量为n,那么输出的数据维度就变为4×n。
应用领域
一维卷积常用于序列模型,自然语言处理领域
计算方式
1、图中的输入的数据维度为14×14,过滤器大小为5×5,二者做卷积,输出的数据维度为10×10(14−5+1=10)。
2、上述内容没有引入channel的概念,也可以说channel的数量为1。如果将二维卷积中输入的channel的数量变为3,即输入的数据维度变为(14×14×3)。由于卷积操作中过滤器的channel数量必须与输入数据的channel数量相同,过滤器大小也变为5×5×3。在卷积的过程中,过滤器与数据在channel方向分别卷积,之后将卷积后的数值相加,即执行10×10次3个数值相加的操作,最终输出的数据维度为10×10。
3、以上都是在过滤器数量为1的情况下所进行的讨论。如果将过滤器的数量增加至16,即16个大小为10×10×3的过滤器,最终输出的数据维度就变为10×10×16。可以理解为分别执行每个过滤器的卷积操作,最后将每个卷积的输出在第三个维度(channel 维度)上进行拼接。
应用领域
二维卷积常用于计算机视觉、图像处理领域
计算方式
1、假设输入数据的大小为a1×a2×a3,channel数为c,过滤器大小为f×f×f×c(一般不写channel的维度),过滤器数量为n。
2、基于上述情况,三维卷积最终的输出为(a1−f+1)×(a2−f+1)×(a3−f+1)×n。
应用领域
三维卷积常用于医学领域(CT影响),视频处理领域(检测动作及人物行为)
Sobel算子是卷积操作中经典例子,利用手动配置好的卷积核对图片进行卷积操作,实现图片的边缘检测,生成只包括轮廓的图片。
Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率要高,但是边缘不如Canny检测的准确,但是很多实际应用的场合,sobel边缘却是首选,Sobel算子是高斯平滑与微分操作的结合体,所以其抗噪声能力很强,用途较多。尤其是效率要求较高,而对细纹理不太关心的时候。
假设要处理的图像为I,在两个方向求导:
水平变化: 将图像I与奇数大小的模版进行卷积,结果为Gx。比如,当模板大小为3时, Gx为:
垂直变化: 将图像I与奇数大小的模板进行卷积,结果为Gy。比如,当模板大小为3时, 则Gy为:
在图像的每一点,结合以上两个结果求出:
统计极大值所在的位置,就是图像的边缘。
注意:当内核大小为3时, 以上Sobel内核可能产生比较明显的误差, 为解决这一问题,我们使用Scharr函数,但该函数仅作用于大小为3的内核。该函数的运算与Sobel函数一样快,但结果却更加精确,其计算方法为:
Sobel算子计算过程图7-10左边的5×5浅色矩阵可以理解为原始图片。中间的3x3矩阵便是Sobe1算子。图7-10右边的5×5矩阵可以理解的轮廓图片。
1、在原始图片的外面补了一圈0,这个过程称为padding,填充操作目的是生同样大的矩阵。
2、将补0后矩阵中,左上角的3×3矩阵中的每个元素分别与Sobel算子矩阵中对应位置上的元素相乘,然后相加,所得到的值作为最右边的第一个元素。
3、把图7-10中左上角的3×3矩阵向右移动一个格,这可以理解为步长为1。
4、将矩阵中的每个元素分别与中间的3×3矩阵对应位置上的元素相乘,然后再将相乘的结果加在一起,算出的值填到图7-0右侧矩阵的第二个元素里。
5、一直重复这个操作将右边的值都填满。完成整个计算过程。
新生成的图片里面的每个像素值并不能保证在0~256。对于在区间外的像素点,会导致灰度图无法显示,因此还需要做一次归一化,然后每个元素都乘上256,将所有的值映射到0~256这个区间,注意归一化算法:x=(c-Mim)/Max-Mim)。其中,Max与Mi血为整体数据里的最大值和最小值,x是当前要转换的像素值。归一化可以使每个x都在[0,1]区间内。
如下图所示,该图片经过Sobel算子卷积后的数据本质上是该图片中相隔像素之间的差值而已。如果将这个像素差值数据用图片的方式显示出来,就变成了轮廓图片。
Sobel算子第二行权重值的原理与第1行相同,只不过将差值放大为2倍,这样做是为了增强的效果。
它的思想是:(1)对卷积核的3行像素差值再做加权处理;(2)以中间的第2行像素差值为中心;(3)按照离中心点越近,对结果影响越大的原理,对第2行像素差值进行加强(值设为2),使其在生成最终的结果中产生主要影响。
在深层网络中,有很多类似于Sobel算子的卷积核,与Sobel算子不同的是,他们的权重值是模型经过大量的样本训练之后算出来的。
在模型训练过程中,会根据最终的输出结果调节卷积核的权重,最终生成了若干个有特定功能的卷积核,有的可以计算出图片中的像素差值,从而提取背景纹理等。卷积后所生成的特征数据还可以被继续卷积处理。在深度神经网络中,这些卷积处理是通过多个卷积层来实现的。
深层卷积网络中的卷积核也不再是简单地处理轮廓、纹理等基础像素,而是对已有的能廓、纹理等特征更进一步地推理和叠加。被多次卷积后的特征数据会有更具象的局部表征,如可以识别出眼睛、耳朵和鼻子等信息。再配合其他结构的神经网络对局部信息的推理和叠加,最终完成对整个图片的识别。