返回随笔AI & Python
完成ENGINEERING NOTE

卷积神经网络

介绍卷积核、特征提取、池化与卷积神经网络的基本结构,并整理它们在图像识别和计算机视觉中的作用。

人工智能CNN

卷积神经网络(Convolutional Neural Network,CNN)是一种在计算机视觉领域取得了巨大成功的深度学习模型。它们的设计灵感来自于生物学中的视觉系统,旨在模拟人类视觉处理的方式。在过去的几年中,CNN已经在图像识别、目标检测、图像生成和许多其他领域取得了显著的进展,成为了计算机视觉和深度学习研究的重要组成部分。

一、什么是卷积

卷积操作是将一个可移动的数据窗口与图像进行逐元素相乘的过程,这个小窗口是一组固定值的权重,它被称作Filter(滤波器或卷积核),它的作用是与图像逐元素相乘后得到对应的权重,提取出图像的特征。通过与图像不同区域的卷积操作,卷积核能总结出图像哪些地方是重要的,哪些地方不重要,以及不同的重要区域有哪些特征。 下面是一个2卷积核,卷积核大小3*3*3,padding=1,stride=2的卷积操作过程: 卷积核在input图像上以step步长移动,每次移动做一次相乘,最终结果记录在output矩阵中。ouput矩阵即特征图。

二、卷积的作用

在传统神经网络中,计算机无法识别出一个特定的图像或形状。我们希望一个物体不管在画面左侧还是右侧,都会被识别为同一物体,这一特点就是不变性。为了实现平移不变性,卷积神经网络模型在卷积层中使用了卷积操作,这个操作可以捕捉到图像中的局部特征而不受其位置的影响。与传统神经网络相比,卷积神经网络拓展了数据的维度,降低了参数的复杂程度。它可以用来处理RGB彩色图像。通过卷积,可以很好地提取出图像的特征。

三、卷积的各项参数

  • 滑动窗口步长 stride 卷积核每次移动的距离,记为S
  • 卷积核尺寸 卷积核的大小和维度。卷积核的维度要和input输入图像的维度一致。卷积核宽度记为Fw,长度记为Fh
  • 边缘填充 padding 在原始输入图像外围填充0的层数。记为P
  • 卷积核个数 有多少个卷积核。有几个卷积核得到的特征图就有几层。 则卷积结果计算公式为:

$$ H_2 = \frac{H_1 - F_H + 2P} {S} +1 $$

$$ W_2 = \frac{W_1 - F_W + 2P} {S} +1 $$

其中H1、W1为输入图像的长度和宽度,H2、W2为输出图像的长度和宽度

四、边缘填充

在卷积操作中,图像内部的像素点被带入卷积计算的次数更多,而边缘地区很少。例如,在一个3*3input,2*2卷积核,stride=1的卷积操作中,图像中心点像素被计算了3次,而四角像素只被计算了一次。所以,我们选择在图像的外围添加一圈0,以减小计算密度不平均对特征值造成的影响。

五、池化

在多次卷积操作后,得到的特征图经常会很大,特征值非常多。在这些特征值中,很多是相似的或者无用的。池化操作就是对特征图进行压缩(或者叫做下采样downsapling),最终目的是提取其中最重要的特征值,忽略不重要的,达到不损失精度的情况下简化的目的。 池化有多种方法,最常用的是Max Pooling最大池化和Average Pooling平均池化。前者为取出每个下采样单位中最大的值,后者为对下采样单位中的每个值求平均数。经过学者论证,Max Pooling的效果普遍要比Average Pooling好。因为池化操作要保留每个单位中最明显的特征,平均操作会中和这个特征。 在这次实验中,我均采用2*2 Filters,Stride=2的池化操作,这将会把特征图大小减小为原有的四分之一。

六、Relu函数

Relu函数是一种人工神经网络中常用的激活函数,通常意义下,其指代数学中的斜坡函数,即:

$$ F(x) = max(0, x) $$

而在神经网络中,ReLU函数作为神经元的激活函数,为神经元在线性变换之后的非线性输出结果。换言之,对于进入神经元的来自上一层神经网络的输入向量x,使用ReLU函数的神经元会输出:

$$ max(0, w^Tx + b) $$

至下一层神经元或作为整个神经网络的输出(取决现神经元在网络结构中所处位置)。 在卷积层之后,通常会应用一个Relu函数,以引入非线性特性,增强模型的表达能力。

七、整体网络架构

  1. 输入层INPUT: 输入层接收原始图像数据。图像通常表示为三维量(高度、宽度、通道),例如彩色图像有三个通道(红、绿、蓝)。
  2. 卷积层CONV: 卷积层通过卷积操作提取图像的特征。卷积操作使用一组可学习的卷积核在输入图像上滑动,计算局部区域的加权和。每个卷积核生成一个特征图,表示输入图像在特定特征上的响应。
  3. 激活函数RELU: 在卷积层之后,应用Relu函数,增强模型的表达能力
  4. 池化层POOL: 池化层用于降低特征图的空间维度(高度和宽度),减少计算量,并增强模型的平移不变性。常见的池化操作包括最大池化和平均池化。
  5. 全连接层FC: 在经过多个卷积层和池化层之后,特征图被展平为一维向量,并输入到全连接层。全连接层中的每个神经元都与前一层的所有神经元相连,用于学习特征之间的复杂关系。
  6. 输出层OUTPUT: 输出层通常是一个全连接层,根据任务的不同,输出可以是分类任务的类别概率(如 Softmax 激活函数)或回归任务的连续值。 通常来说,一次卷积操作并不能完全提取图像中的特征,这时就要考虑多次卷积操作。

八、经典网络VGG

VGG网络是2014年提出的深度卷积神经网络,其主要特点是使用多个小尺寸(3x3)的卷积核堆叠来替代大尺寸的卷积核,从而增加网络的深度。VGG网络有多个版本,其中最著名的是VGG16和VGG19,分别包含16层和19层卷积层。这些网络在2014年的ImageNet挑战赛中表现出色,尤其在图像分类任务中取得了优异的成绩,成为深度学习领域的重要里程碑。 在后续的实验中,人们发现VGG的19层layer已经是极限了,再增加layer数量,errer率不升反降,且训练时间成倍增长。原因是增加的layer不能保证一定是优秀的、有作用的,很多layer反而无法提取特征,拉高了errer率。于是人们提出了残差网络Resnet。

九、残差网络Resnet

残差网络是由微软研究院的何凯明等人提出的一种深度卷积神经网络架构,旨在解决深度神经网络训练中的梯度消失和梯度爆炸问题。其核心创新在于引入了“残差块”(Residual Block),通过跳跃连接(skip connection)将输入直接添加到网络的输出中,使得网络可以学习输入与输出之间的残差,而不是直接学习输出。这种设计使得网络能够更深,同时保持训练的稳定性,从而在图像分类、目标检测等任务中取得了显著的性能提升。ResNet在2015年的ImageNet挑战赛中大放异彩,标志着深度学习网络架构设计的一个重要突破。