前言:
此时同学们对“图像检测算法原理”大体比较关注,同学们都想要剖析一些“图像检测算法原理”的相关内容。那么小编同时在网上汇集了一些关于“图像检测算法原理””的相关资讯,希望同学们能喜欢,你们快快来学习一下吧!1:卷积神经网络简介
卷积神经网络(Convolutional Neural Networks, CNN)于1998年由纽约大学的Yann LeCun[48]提出。原始CNN的性能并不好,在实际应用中的表现并不如SVM、Boosting等机器学习算法。直到2012年,在ILSVRC大赛中,Krizhevsky等人[49]提出的AlexNet采用新颖的深层结构并使用dropout方法防止过拟合,将错误率提升到15%,颠覆了图像识别领域,至此,深度学习引发广泛关注,进入蓬勃发展时期。近年来,基于卷积神经网络的框架模型层出不穷,在图像分割、图像分类等领域均取得了长足的进步。相比于传统全连接神经网络,卷积神经网络成功的原因在于其具有局部连接与权值共享这两个特征。
局部连接指卷积层的神经元仅与上一层的部分神经元相连接。相比于全连接网络中的神经元直接获取全局信息,卷积神经网络采取局部感知结构,仅学习局部特征,而后在更高层将局部信息汇聚成全局信息。在计算机视觉中,对于一幅图像而言,距离较近的像素具有强相关性,而距离较远则相关性就弱,由此可见,局部连接更符合生物视觉系统。局部连接的方式大幅减少了网络的参数数量。
权值共享指的是对于卷积层中的每一个卷积核会重复的作用于输入的每一个元素上,对输入进行卷积操作。这使得网络结构的参数量急剧下降,减少模型过拟合的风险。此外,为了解决单一卷积核带来的特征不够丰富这一问题,在每一个卷积层中使用多个卷积核,让每一个卷积核学习不同的特征。
2:卷积神经网络结构
卷积神经网络主要包含卷积层、激活层、池化层、全连接层以及常用于语义分割中的上采样层。如图2-1所示。本节将分别介绍其组成模块。
3:卷积层
卷积层是卷积神经网络中提取图像特征的核心模块,主要构件为卷积核。将卷积核视为权重矩阵的话,可以将卷积运算视为输入与权重矩阵加权求和的过程,如图2-2所示。通过水平与垂直的滑动,对输入重复应用相同的卷积核会产生一个称为特征图的输出,指示在输入(例如图像)中检测到的特征的位置和强度。由于每一个卷积核仅能提取一类特征,因此需要在卷积层中增加多个卷积核以提取多个图像特征,从而解决特征提取不充分问题。
卷积核可以手工制作,但是卷积神经网络的创新是在特定预测问题的背景下在训练期间学习卷积核的参数。然而在深度学习中,卷积核参数的初始化对算法的训练尤为关键,目前主流的参数初始化方法有:Xavier初始化[51]、均值分布初始化以及高斯分布初始化等。
4:激活层
上节所述的卷积运算是一种线性运算,然而自然中存在的关系大多是非线性的。为了使卷积神经网络具备拟合非线性关系的能力,研究人员在卷积运算后增加一个非线性的激活函数。激活函数类似于生物神经元机制,即所接收的信号大于阈值时,神经元才会被激活。
常见的激活函数有:Sigmoid、TanH以及ReLU等,其计算表达式分别如下所示:
Sigmoid函数的输出范围为(0,1),适合所需输出为概率的情况。然而,在深度神经网络中,该函数容易出现饱和情况,即输入值达到一定大小后,梯度值几乎为零,出现梯度消失情况,使得网络训练停滞。
此外,Sigmoid函数的输出范围并不是以零为中心的,可能会导致权重更新时出现z字型的下降。TanH函数解决了Sigmoid函数输出范围不以零为中心的问题,将输出范围调整至(-1,1),但是仍然存在梯度消失的情况。为了防止饱和,目前主流的做法会在激活函数前多做一步batch normalization,从而使每一层网络的输入具有均值较小的、零中心的分布。ReLU函数相对于前两者,对随机梯度下降的收敛有着巨大的加速作用,因为该函数的求导计算特别简单。ReLU函数有效解决了深度卷积神经网络中存在的梯度消失问题,但是可能会导致神经元的死亡。因此研究者更进一步开发出Leaky ReLU与PReLU,其计算公式如下所示:
Leaky ReLU的函数图像如图2-3所示。其中ε通常很小,比如0.01,使得输入值小于0时,其导数不为0,有效解决了神经元死亡的问题。更进一步的激活函数是PReLU,即将当ε做一个可训练参数,并通过梯度下降求解。
5:池化层
池化层又被称为下采样层,一般在卷积层之后使用,主要用于压缩神经网络参数的数量,减少深度网络过拟合的风险。目前池化主要有最大池化与平均池化两种方法。最大池化主要用于保存图像的纹理边缘特征,而平均池化则用于保存图像的背景特征信息。图2-4展示了最大池化的计算过程。
池化层具有平移不变性,这意味着当输入发生了微小的平移时,池化层输出的特征图基本保持不变。然而,Mehdi等人[52]指出,对于需要细微信号的任务,池化是不可取的,因为池化层会增强图像内容并抑制噪声类信号。因此在网络结构中可以采用步长为2的卷积进行下采样,从而代替池化层的作用。
6:全连接层
全连接层在卷积神经网络中的作用是分类器。通过上述卷积-激活-池化的循环操作,卷积神经网络将原始图像数据映射到隐藏特征空间。从输入图像中提取到足以识别图像的特征后,此时将最后生成的特征图展开成一维结构,通过数层全连接层对特征进行加权学习,映射到数据标记。
全连接层一般应用于分类任务中,可以有效的将特征整合表达并映射到数据标记空间。然而,全连接层的参数量一般较为庞大,容易导致算法过拟合且泛化性能较差。因此,目前已经有许多工作开始利用全局平均池化(Global average pooling,GAP)[53]代替全连接层。
7:上采样层
上采样层常出现于语义分割网络中,这是由于任务需要对图像进行像素级分割,而上述卷积-激活-池化的循环操作将使得特征图大小不断减小,因此需要使用上采样层将特征图的尺度增大到与输入图像一致。目前常见的上采样层主要采用双线性插值和转置卷积。
(1)双线性插值
线性插值是一种数学方法,有一阶、二阶和三阶之分,对应于单线性插值、双线性插值以及三线性插值。双线性插值的具体流程为先进行两次横向的单线性插值,再进行一次纵向的单线性插值,如图2-5所示。
已知图中周边四个红点的坐标,假设插值点的坐标为p(x,y)。
首先根据Q11、Q12计算出的像素值:R2(X1,Y1)的像素值:
其次根据Q11、Q12计算出的像素值:R2(X1,Y1)的像素值:
最后便可根据R1、R2得到插值点P的像素值:
双线性插值是通过数学方法,利用其周边像素计算插值像素,因此图像会比较平滑。此外,双线性插值中不需要学习任何参数,不能增加图像信息。
(2)转置卷积
转置卷积又被称为反卷积,主要通过卷积运算实现图像分辨率的还原,与卷积运算的区别在于,普通的卷积运算是为了提取特征,会导致特征图的不断变小,以提取更高级的特征,而转置卷积是为了在输入的像素间增加像素,从而达到增大特征图像分辨率的目的。转置卷积的具体计算过程如下:首先按照尺寸需求,通过补0来扩大输入图像的尺寸,接着进行卷积操作,通过卷积核水平与垂直的滑动,最终实现特征图尺寸的增加。
与卷积操作类似,转置卷积需要学习权重参数,因此相较于双线性插值,转置卷积可以通过学习的方式获得更高的精度表现。
8:神经网络优化算法
通过上文介绍的相关组件便可根据实际任务需要构建相应的卷积神经网络,之后需要对所设计的网络定义相应的损失函数,例如均方差损失、交叉熵损失等。通过损失函数计算预测值与真实值之间的差异,从而量化模型的性能。随后通过反向传播算法计算模型参数的梯度值,再使用优化算法对模型参数进行不断地更新,直至达到训练终止条件。目前常见的网络优化算法主要有梯度下降法[54]与自适应学习率算法。
根据计算使用的数据量的区别,可将梯度下降法分为:批量梯度下降法(BGD)、随机梯度下降法(SGD)和小批量梯度下降法。批量梯度下降法每次更新参数需要使用到全部数据。受限于内存与计算资源,为了加快模型的收敛速度,在实际应用中通常使用小批量的随机梯度下降法。通过抽取部分样本,计算其梯度均值以获得梯度的无偏估计。从训练集中随机选择m个样本,则SGD的计算过程如下所示:
其中,θt为初始参数,α表示学习率。SGD算法计算速度快,实现简单。然而,学习率的选择对其极为关键,学习率太小会导致模型收敛过于缓慢,学习率太大则会导致模型震荡。动量算法[55]的引入进一步提升了SGD的作用,该方法使得参数更新时参考之前更新的方向。因此,在参数迭代更新中,若梯度方向相同,则动量会加快模型的收敛速度;如果本次参数更新的方向与前一次梯度方向相反,那么动量会减缓参数的更新速度,从而抑制模型震荡。
梯度下降法的关键之处在于学习率的选择。针对这一问题,研究学者提出自适应学习率算法,主要有AdaGrad算法[56]、Adam算法[57]、RMSProp算法[58]等。AdaGrad算法通过累积梯度的平方和,并根据学习率与累计的平方和的比率对学习率进行自动调整。该算法在凸优化任务中表现良好,但是在神经网络模型的训练中可能导致学习率的过早降低。RMSProp算法将AdaGrad算法中的梯度累积改为指数加权的移动平均,使得算法在非凸问题上表现良好。Adam算法引入参数β1和参数β2`表示矩估计的指数衰减率,其他参数与AdaGrad算法一致,利用梯度的一阶矩估计和二阶矩估计调整学习率。通过偏置修正,Adam算法具有良好的鲁棒性。
本章小结
本章首先简单介绍了卷积神经网络的两大特征,即局部连接与权值共享。然后对卷积神经网络的常用组成模块进行了详细介绍,如卷积层、池化层、激活层和上采样层等。最后对梯度下降法和几种常用自适应学习率优化算法进行了介绍。
标签: #图像检测算法原理 #卷积神经网络的算法编程实验报告怎么写