卷积神经网络在图像识别上的应用介绍(一)

1. 简介

CNN是一个多层的网络,通过卷积核对输入图像进行层层变换,学习分层特征表示,将输入映射成输出(标签或预测值)

U-net包括收缩路径和与之对称的扩张路径,构成U型识别网络,网络中对称的卷积层和反卷积层存在跳跃连接以传递信息

图像语义分割本质上是像素级的分类任务

使用预训练的模型,本质上是利用了从相关任务上学习到的先验知识来服务待求解的问题

语义分割的问题的难点是如何将像素级的预测和上下文的推断结合起来

本文采用的图像分割算法基于FCN模型。从发展历程上看,深度卷积神经网络先是在全图分类任务上取得成功,进而用于区域检测,目标定位等任务,需求也逐渐从整体预测到稠密预测变化。从整体到局部,很自然地,研究者的注意力又从局部移到像素级的识别上,提出了FCN语义分割算法。从应用上看,CNN用于图像级/区域级的分类,侧重总体的语义,图像上小目标通常认为是噪声;FCN用于像素级的语义标注,对小目标等细节变化敏感。

主要创新点体现在根据多任务学习方法,通过提升分类模型CNN的性能间接地改善了分割模型FCN的性能

2. 图像识别相关技术

特征的设计依据不同对象的特征,视觉特征设计主要是计算机视觉领域的研究内容。分类器设计则是机器学习领域的研究内容。而卷积神经网络方法则融合了特征提取和分类器设计,是一个端到端的识别系统。

2.1 视觉模式识别

一个模式系统通常包含特征提取和分类器设计两大部分。提高系统识别率也是从上述两个方面进行。优秀的特征描述子能从不同的输入上提取有效信息,即具有不变形,如旋转不变性、平移不变性等。常用的特征描述方法可以分为纹理特征(如LBP、SIFT、SUFR),形状特征(如HOG)及颜色特征(如颜色直方图)等。优秀的分类器具有良好的分类性能和泛化性能。常见的分类器有softmax、SVM、AdaBoost等。

一个标准的CNN以多层卷积与池化为特征提取器,以softmax为分类器,可以认为是一个端到端的识别系统。

2.1.1 特征描述与不变性

特征提取器从图像上提取的特征也叫做特征描述子。特征不变性指的是从不同的图像上提取的描述子是一致的。

CNN使用softmax分类算法较为简单,分类能力依赖良好的特征表示。CNN的卷积层和全连接层是可训练的,通过softmax的反馈,使用BP算法进行梯度更新,最终训练过的CNN模型的高层特征具有不变性。

CNN中的池化层能保证一定程度的平移和旋转不变性

2.1.2 模型选择与泛化性能

采用了不同结构、不同参数的模型都可以认为是不同的模型,模型选择就是要从中选取较好的模型。较好的标准就是泛化性能。提高泛化性能的一个准则是结构风险最小化。通过交叉验证选择模型,目的也是提高泛化性能。

  1. 结构风险最小化

监督学习的基本模型可以分为预测连续目标的回归模型和预测离散目标的分类模型,后者的模型都叫做分类器(classifer)

一般来说,我们在进行机器学习任务时,使用的每一个算法都有一个目标函数,算法便是对这个目标函数进行优化。目标函数是用来评价模型的预测值Y与真实值Y`的不一致程度,这种差异叫做误差。

相比其他机器学习理论,统计学习有更严格的数学证明。统计学习有两大核心,即VC维和结构风险最小化,核心思想是模型的泛化能力最大化。

模型训练的直接结果是最小化训练集Ntrain的误差。将模型f(x)关于训练集的平均损失称为经验风险

理想的模型是对所有样本都有很好的预测能力,也就是期望风险最小化。但实际上,联合分布不可知,求期望风险就退化为求经验风险。在训练集足够大时经验风险逼近期望风险。但实际上,训练集和全集相比,往往小很多。但是如果只考虑经验风险,会有过拟合的风险,便提出了结构风险作为折中。

其中J(f)是惩罚项,约束模型的复杂度,符合奥卡姆剃刀原则

结构风险最小化SRM实际上就是一种正则化方法。结构风险小需要同时保证经验风险小和模型复杂度小。实践中,结构风险最小化在一定程度上保证训练误差小的同时,测试误差不会太大,也就是提高模型的泛化能力。

  1. 交叉验证

用结构风险最小化去控制模型的复杂度,本质上是一种模型选择方法。交叉验证是另一种模型选择方法。

严格的验证方案中,数据集被分为训练集、验证集和测试集。训练集用于模型训练,验证集用于模型选择,测试集用于模型评估。很多时候,我们并没有如此富余的数据可供使用。

交叉验证的思想是重复利用数据。应用最广的是S折交叉验证(S-fold cross validation)。在此方法中,数据被分为S个子集,每次取S-1个子集训练模型,用余下的一个子集测试模型。重复S次,综合结果选择模型。

2.2 卷积神经网络

机器学习五大流派
卷积神经网络在图像识别上的应用介绍(一)

2.2.1 神经网络简介

神经网络分为两种,生物神经网络和人工神经网络。前者研究的是神经元细胞,以及这些细胞组成的网络如何产生意识,指导生物进行行动与思考。信息学中的神经网络是人工神经网络的简称,是一种应用网络结构进行信息处理的数学模型。

神经网络发展的三个阶段
卷积神经网络在图像识别上的应用介绍(一)
BP算法: 解决感知机不能拟合非线性模型的难题并不困难。多层感知机(preceptrons,MLP)就能实现非线性运算。之所以当时的学者不能打破非线性诅咒,原因是多层感知机的无法训练。86年,Rumelhart and Hinton等人发明了适用于多层感知机的误差反向传播(BP)算法,成功地解决了非线性分类问题,并在学习算法上给出了严格的理论推导。该方法引起了神经网络史上的第二次热潮。

万能逼近定理:89年Robert Hecht-Nielsen证明了MLP的万能逼近定理(Universal Approximation Property)。该定理表明,使用含有隐含层的神经网络能逼近任何闭空间内的一个连续函数。
卷积神经网络在图像识别上的应用介绍(一)
网络深度的必要性:万能逼近定理显示了浅层神经网络具有强大的表示能力,代价是足够多的节点。很自然的,如何在节点数受限的情况下获得足够表示能力是下一步的研究目标。追求深层网络是很自然的,因为1)人类神经系统是深层的;2)人脑对概念的表示是多层的。

sigmoid函数在输入值很大时发生饱和,函数变化率几乎为零,也就是梯度几乎为零。这就导致梯度从较深的层无法反向传播,学习算法失效。从此,神经网络的热潮逐渐地冷却下去。神经网络自身的理论性不足,存在梯度消失问题,受限于当时的数据和计算能力,再加上统计学习的兴起,吸引了学术界大部分的注意力,神经网络迎来了第二次寒冬。

10年ReLU**函数被提出,代替Sigmoid函数,能有效地解决梯度消失问题

典型的**函数
卷积神经网络在图像识别上的应用介绍(一)

2.2.2 卷积神经网络发展

原始的神经网络主要是全连接层,卷积神经网络与之最大的不同是卷积层。卷积层的设计模拟了视神经细胞感受野的概念,这种稀疏的连接和权值共享方式不仅减少了参数量,也有利于从大量数据中概括出规律,而且更符合图像信号的特点。

CNN的发明主要受人类视觉皮层的启发。视觉皮层中的一些细胞只能感知一定区域内的信号,这个区域称为感受野。还存在一些细胞对位置不敏感,感受野却更大。在后续的研究中,人们逐渐地对大脑视觉系统的信息处理机制有了更深入的了解,对大脑不同区域的联系和功能有了更清晰的认识。

LeNet-5作为最早的CNN模型,它的设计模式基本确定此后CNN模型的框架。它的特点能够总结为如下几点:

  1. 一个组合包含一层卷积层与一层池化层
  2. 使用卷积提取空间特征,卷积核权值共享,减少大量参数
  3. 使用映射到空间均值下采样
  4. 多层神经网络(MLP)作为最后的分类器

ResNet的残差结构通过在输出和输入之间引入一个快捷连接(shortcut connection)解决网络加深时出现梯度消失的问题,从而可以把网络做的很深

深度学习取得成功地关键是模型的深度,深层架构赋予了深度学习方法解决更复杂的任务的可能性。

2.2.3 卷积神经网络的计算

卷积神经网络的基本算法

在CNN的计算过程中,无论是数据层还是参数层都以张量(tensor)形式存储。张量是矢量概念的推广。计算框架Tensorflow就是以此命名

数据层的数据统称为特征图,其中输入层特征图一般是图像的像素组成的张量。也有研究使用算法处理过的图像或者提取的特征图作为CNN的输入。由于一般的信号处理算法都有信息损失,像素可以理解为最原始的无损特征。在CNN的理论中,更倾向于通过标签监督学习,避免人为设计导致信息损失,因此最常见的输入是像素。

特征图通常是四维张量(B,C,H,W),其中B代表batch_size,代表模型一次对一批图像进行处理,C代表特征图的通道数。

一般地,在CNN中,第L个参数层作用是对来自第L-1个数据层的输入X(l-1)进行线性组合得到Z(l-1),通过非线性映射f得到输出Xl,交给第L个数据层。非线性映射是多层神经网络具有逼近任意函数的前提。

正向传播阶段

  1. 卷积层
  2. 池化层
  3. 全连接层
  4. **函数
  5. softmax层:输出总和为1
  6. 损失函数:单标签问题,采用交叉熵为误差函数

反向传播阶段

每一层的误差敏感项可以由后一层的误差敏感项通过链式法则求得。

  1. softmax层:采用交叉熵,误差敏感项具有简洁的表达式

  2. 全连接层:误差敏感项传播到所有节点

  3. 下采样层:误差敏感项传播到max pooling对应位置

  4. 卷积层:和全连接相比,卷积的连接是稀疏的。BP时要找出所有与该权值有关的连接,将有关的误差敏感项擦传播到对应位置

卷积神经网络的计算框架

当前流行的算法框架大多基于CUDA,数学计算的核心由cuBLAS、cuDNN库提供

2.3 迁移学习与多任务学习

2.3.1 迁移学习

CNN一般需要较多的数据进行充分训练,模型的初始化也是影响性能的一个因素。从参数初始化的角度,采用迁移学习的策略,也可以理解为利用既有模型参数,为新的模型参数指定一个较好的初始化。

迁移学习和微调并不是同一个概念。迁移学习是一套完整的算法体系,是将模型从一个数据集应用到另一个数据集的方法。微调是一个处理手段,不仅仅用于迁移学习,也是神经网络模型训练中的重要一步。迁移学习的目的是利用旧的知识服务新的任务,这里的知识包括数据和模型两大部分,而微调仅仅是对模型参数的微调

2.3.2 多任务学习

多任务学习方法是一种同时学习多个任务的机器学习算法。多任务学习是一种归纳迁移机制,基本目标是提高泛化能力,利用共享表示,采用并行训练的方法学习多个任务。多任务学习的基本思想是在相关的学习任务之间迁移通用的知识,从而取得比单独学习更好的效果。迁移学习和多任务学习都利用了任务间的相关信息。不同之处是,迁移学习侧重对目标任务的优化,而多任务学习是多任务具有同等地位。

多任务学习起源于对机器学习中归纳偏置(inductivebias)问题的研究。机器学习是从数据中学习,归纳出模型的过程。一个学习问题可能有多个解,求解过程是基于某些假设下的最优解。这些假设的集合就称为归纳偏置。常见的假设如最近邻、最小交叉验证误差、最大边界、最小描述长度(奥卡姆剃刀)等。常见的学习算法,如支持向量机、神经网络等其实都基于不同的归纳偏置。这些偏置的选择是人为的。

多任务学习的一个思想是通过利用相关任务的信息自动选择更佳的归纳偏置。方法上可以总结为两类:共享参数和挖掘任务之间隐藏的共有数据特征。

在神经网络的训练中,加入随机噪声是提高泛化性能的一个手段。从多任务学习的角度分析,加入不同噪声其实是创造不同但是相关的任务。利用多任务学习方法,学习到更加共性的特征。而这里任务之间的共性其实就是数据中排除噪声部分,因此学习到的特征对噪声更加不敏感,更鲁棒。