基于深度残差网络的图像识别技术研究
2020-07-17叶宇光
叶宇光
(泉州师范学院 数学与计算机科学学院,福建 泉州 362000)
关键字:深度卷积;梯度消失;残差网络;跳跃连接
深度卷积神经网络是当前人工智能的研究热点,在图像分类领域已经取得了一系列突破[1-3].卷积神经网络(CNN)的设计受到大脑神经学中的简单细胞和感受野发现的启发[4],其网络主要由具有卷积滤波器的分层结构组成,卷积神经网络通过将滤波器与输入图像进行卷积生成下一层的特征向量,并利用共享参数实现数据的训练,网络中的上层代表了低水平的如边缘和色彩对比度等局部特征信息,而更深层次的网络则进一步捕获更复杂的特征[5].
当前研究大都通过深化网络来丰富卷积滤波器的多样性,从而有效提高CNN 的分类性能[6].尽管在大多数情况下可在深化网络层次结构后实现更好的识别效果,但也会加深训练复杂度,同时在训练过程中容易发生一些问题:一是消失或爆炸梯度,有时神经元会在训练过程中死亡并永久失效,降低了识别精度,针对该问题一般使用初始化技术来解决,初始化技术利用活动的神经元结合损失函数对其进行优化;二是当模型引入太多参数时,复杂度会快速增长,导致训练网络变得更加困难,而且参数过多会导致出现梯度消失问题,甚至导致训练错误[7].深度CNN 也具有训练难度过大的劣势,He K 提出残差网络(ResNets:Residual Networks)解决了该问题,其主要思想是在网络中增加了直连通道,允许保留之前网络层的部分输出,简化网络结构[8].残差网络和深度卷积神经网络的主要区别在于它们具有与其正常卷积层平行的快捷连接,利用这些快捷连接的方式有利于反向传播从而加快训练速度.残差网络和普通的卷积神经网络之间另一大区别是在某一层的线性模块和非线性模块之间增加了前面一层的输出,为梯度提供一个清晰的路径以使其反向传播到网络的上层,通过这种“跳跃式”的连接避免了梯度的消失,同时加快了训练过程.He K 提出的模型在18、34、50、101 和152 层的残差网络进行配置,可以将多个彼此连接的块串联起来完成残差网络模型的构建.残差网络中的基本块(BB:Basic Block)的输入和输出大小相等,快捷方式连接通常是一个单位矩阵,同时可以使用平均池和零填充来调整矩阵大小[8].
残差网络中快速连接的不同基本块也可以进行下采样,下采样的方式通常是stride 的卷积或是池化.张珂针对非受限条件下人脸图像年龄分类准确度较低的问题,提出了一种基于深度残差网络和大数据集微调的非受限条件下人脸年龄分类方法,在选用深度残差网络作为基础卷积神经网络模型处理人脸年龄分类问题并在ImageNet 数据集上对深度残差网络预训练并结合更深层残差网络和大数据集微调后,能有效提高人脸图像年龄分类准确度[9].ResNet 主要是通过利用快捷短连接或长连接的方式降低了模型的复杂度.笔者在前人研究基础上,同时使用长和短连接获得更小的损耗或更理想的精度,提升了模型的性能.
1 算法的设计与实现
1.1 ResNets 模型
残差网络是由一系列残差块组成的.一个残差块可以表示为:
公式(1)将残差块分成两部分,即直接映射部分和残差部分,其中xl是直接映射,Wl是卷积操作,F(xl,Wl)是残差部分,残差部分一般由两个或者3 个卷积操作构成.在卷积网络中,xl可能和xl+1的特征映射数量不一样,这时候就需要使用卷积进行升维或者降维,于是公式(1)转换为:
其中h(xl)=Wlx.一个典型的ResNet 模型流程见图1.
广义残差网络体系结构的模块化单元是由残差流R 的并行状态组成的广义残差块,它包含标识快捷连接,其结构类似于原始残差网络中具有单个卷积层的残差块的结构(见图1).每个残差块中另外两组卷积过滤器也在网络流之间传输信息,残差网络在相同流和跨流激活的总和中采用批量归一化和ReLU 非线性模块来获得输出状态.残差流R 的功能类似于卷积神经网络的初始化结构,每个处理单元之间都有快捷连接,而瞬态流T 增加了处理非线性中任一流信息的能力,瞬态流T 无需快捷连接的方式,因此可以丢弃较早状态的信息.广义残差块可以充当标准CNN 层(通过学习将残差流清零)或单层残差网络块(通过学习将瞬态流清零).通过多次重复广义残差块,网络体系结构可以学习介于两者之间的任何内容,包括标准的2 层残差网络块.笔者采用广义残差块替换原始残差网络中的每个卷积层,实现了一种深度残差网络.
1.2 数据增强
从ImageNet 数据集中选出一个子集来进行训练和测试,称其为小型ImageNet 数据集.在小型ImageNet 数据集中,每个类只有500 张图像.如果在此训练集上训练深层神经网络,会使得小型ImageNet 数据量过少导致过拟合.为了克服过拟合,采用数据增强的方法来提高数据集的大小,数据增强的常规方法是将每个图像的一些裁剪版本及其水平翻转的图像添加到数据集中.但图像处理过程中可用的内存空间有限,无法将新的数据集中所有图像都加载到内存中,因此笔者采用随机的方式进行数据增强,即每当有新批次数据到达时,都会从随机转换单元传递该批次中的所有图像.该单元首先以0.5 的概率水平翻转图像,然后以概率p 随机将图像裁剪为56×56 图像,然后将其重新缩放为原始尺寸64×64.
1.3 网络结构设计
为了进一步降低计算成本,在传统残差网络的基础上进行改进,针对ImageNet 中的图像,将输入修改为64×64 的微型ImageNet 图像并将它们分类为200 个类.为了减少过拟合,在基本块中的两个卷积层之间添加参数为0.5 的dropout 层,同时引入了长短跳跃连接,通过混合长短跳跃连接的方式更高效地更新所有网络层,从而引入了图2 的新架构.
图1 典型残差网络模型流程图
在此基础上,将ReLU 用于所有神经元的非线性单位.图3 显示了图像识别任务设计的最终版深度残差网络.在小型ImageNet 的验证集上,该模型的Top-1 分类准确性达到95.3%.
图2 加入长短跳跃连接的架构图
图3 本文设计的图像识别残差网络
2 实验结果
2.1 数据集描述
在该项目中,对数据集ImageNet 的子集展开研究,该数据集包含来自200 个不同类别的对象的20 000张图像,其中有10 000 张图像的训练数据和10 000 张图像的测试集.笔者使用的小型ImageNet 中所有图像均为64×64,比原始ImageNet 数据集中大小为256×256 的图像小16 倍.图4 显示了不同类别的小型Imagenet 数据集的一些示例图像.
本文算法利用TensorFlow 进行编程实现[11-12].TensorFlow 是Google 开发的开源计算框架,能很好地支持神经网络实现,同时充分考虑到GPU 的并行计算能力.本文项目使用该框架研发并训练不同的残差网络和卷积神经模型.
梯度消失问题对于深度神经网络来说是一个难题,但在浅层卷积神经网络中却不会发生.笔者比较了两个浅层网络,分别具有7 层和9 层.图5 和图6 显示了在数据集CIFAR-10 上这两个网络的训练损失和识别准确度[13].
图4 ImageNet 数据集
图5 残差网络和CNN 训练准确率对比
图6 训练损失对比
对于浅层次的网络如7 层网络,深度残差网络的性能比普通卷积神经网络更差(见图5、图6).进一步提升网络深度至9 层,深度残差网络和卷积神经网络具有相似的性能,该现象的主要原因是将卷积层的输出与其输入相加的效果基本等同于将训练后的数据与原始数据进行平均,因此影响了训练结果.如果加入其它优化措施(例如提高网络的深度)还可以进一步提高准确性.接着继续训练从15 到21 层不等的多个深度残差网络和CNN,并查看哪一个在小型Imagenet 数据集上表现更好,结果见表1.
表1 深层次网络训练结果对比
所有模型都针对相同EPOCH 进行了训练.性能最高的网络(层数为21 层的残差网络)训练准确度为93%.进一步比较这两个网络(残差网络和等效的CNN)的训练损失可以清楚地看到,残差网络的准确性比普通的CNN 更高的同时损失函数更小.在此残差网络中,准确度比CNN 高出5.5%,训练损失减小9.13%.
4 结语
传统的卷积网络或者全连接网络在信息传递的时候或多或少会存在信息丢失,损耗等问题,同时还有导致梯度消失或者梯度爆炸,导致对深层次的神经网络进行训练时性能恶化.为了解决该问题,采用改进的深度残差网络来进行图像识别,并添加简单的快捷连接提高图像分类任务的准确性,并使训练过程更快.在实验部分,通过在ImageNet 的子集和CIFAR-10 上执行图像识别任务,然后将训练好的深度残差网络模型与其等效的卷积神经网络的性能进行比较.通过实验结果可以看出,改进的残差网络在浅层次的网络上和卷积神经网络有相似的性能,而随着网络深度的适当增加,在小型数据集上性能比卷积神经网络更好.总体来说,本文改进的残差网络的准确性更高,能有效避免过度拟合问题,基本满足图像识别要求的准确性和鲁棒性要求.