舒军,杨露,陈义红,杨莉,邓芳
(1 湖北工业大学 太阳能高效利用湖北省协同创新中心,武汉430068;2 武汉新特光电技术有限公司,武汉430205;3 湖北第二师范学院 计算机学院,武汉430025)
近年来,在计算机视觉领域中,图像特征的提取及分类是极为重要的一个研究方向.卷积神经网络(CNN)不需要对数据进行任何处理就可将其直接输入至网络模型中,根据图像特征自动学习,具有很强的鲁棒性.因此,CNN逐渐成为医学[1]、人脸[2]、工业应用[3]、行人[4]等图像识别领域中重要的方法之一,其中LeNet、AlexNet、VggNet和ResNet是近年应用广泛的几种模型.
1998年卷积网络专家YANN Lecun发表了第一个模型LeNet[5],是CNN发展史上一个重大的里程碑.该模型将卷积的概念融入神经网络中,提出卷积-池化-全连接框架,为CNN发展奠定了基础.
2012年在ImageNet比赛上ALEX Krizhevsky等人使用AlexNet[6]分类模型打败了SVM[7]并取得了第一名,让CNN成为主流的分类方法.该模型延续了LeNet模型的框架,加入GTX 580 GPU来加速模型训练,提出Dropout的方法解决过拟合问题.继AlexNet之后,对CNN研究主要分为两类,一类研究CNN模型的深度,另一类研究CNN模型的结构.
2014年牛津大学计算机视觉组和DeepMind公司发表了一种以模型深度闻名的VggNet[8],对网络深度与准确率的关系做了详细的研究.该模型通过堆叠3*3卷积的方法不断地加深网络,根据模型的深度可分为Vgg11,Vgg16,Vgg19等.实验验证加深模型的深度对提高分类准确率有一定的影响.
2015年HE Kaiming 等人为解决模型加深难以训练的问题提出了ResNet[9].该模型采用名为残差的新型结构,根据输入和输出的差别来学习训练网络,有效的解决了在卷积网络信息传递过程中信息丢失和模型训练的问题.
目前图像领域开源的数据集主要包括MNIST[5],Fashion-MNIST[10],ImageNet[11],VisualQA[12]等.其中MINST和Fashion-MINST类别少,文件大小不超过100MB,本文归类为小数据集类型.而ImageNet,VisualQA数据集类别多且文件大,本文归类为大数据集.
将上述卷积神经网络应用于小数据集上,LeNet模型存在准确率低并且收敛速度慢的问题,同时VggNet等模型出现过拟合现象.AlexNet、VggNet、ResNet相对LeNet有更深的网络,运算时占用内存大,对硬件要求高.LeNet模型虽然效果最差,但是占用内存小,对硬件条件要求低,对LeNet加以改进,可以很好的解决分类问题的同时节省了硬件成本,故本文选择在LeNet基础上改进模型,提出一种改进LeNet模型.该模型在小龙虾数据集分类问题上有明显优势,在开源数据集MNIST和Fashion-MNIST上也有良好的表现.
为了在小数据集上有好的分类能力,在LeNet模型基础上主要做出如下改进.使用ReLU激活函数替换Sigmoid提高模型收敛速度.增加1*1卷积模块,增加模型深度的同时能够改变维度从而提高准确率.分解5*5卷积和加入改进Dropout方法来减少过拟合.
改进LeNet模型中使用ReLU函数替换LeNet模型的Sigmoid函数,加快模型训练的收敛速度.
Sigmoid函数曲线以及函数的导数曲线图见图1,图中实线表示函数曲线,虚线表示导数曲线.Sigmoid函数的优点是将输出映射在(0,1)之间,适用于二分类.在反向传播求误差梯度时需要对Sigmoid函数求导,但是Sigmoid函数存在当x>0时,随着输入的不断增大导数趋近于0,导致反向传播过程中容易出现梯度消失模型收敛速度慢的问题.
a) Sigmoid函数曲线;b) Sigmoid导数曲线图1 Sigmoid函数以及导数曲线Fig.1 Curves of Sigmoid function and derivative
ReLU函数曲线以及函数的导数曲线图见图2.该函数当x>0时导数值始终为1,反向传播过程中不会出现梯度消失的情况,卷积神经网络收敛速度快.
a) ReLU函数曲线;b) ReLU导数曲线图2 ReLU函数以及导数曲线Fig.2 Curves of ReLU function and derivative
为提高模型分类准确率,改进LeNet模型中添加了1*1卷积模块[13],该模块在本文中有以下三个特点.
第一,增加模型深度.VggNet中堆叠3*3小卷积来不断增加网络深度,实验证明网络深度对分类准确率有正面影响.改进LeNet模型通过添加1*1卷积模块加深网络,不仅能够提高准确率而且训练参数比3*3卷积少.
第二,增强模型非线性.卷积运算由矩阵乘法运算和加法组成,是线性运算.处理图像分类为非线性问题,故卷积层之后通常需要加入非线性激活函数将线性运算转化为非线性.添加1*1卷积模块可以保持图片分辨率不变的条件下加强模型的非线性,从而提高模型提取特征的能力.
表1 3种卷积操作的参数计算表Tab.1 Parameter calculations of three convolution operations
第三,改变维度.在卷积核大小为10*10深度为10与卷积核大小为5*5深度为20做卷积操作时,中间分别做无1*1卷积操作、1*1卷积降维操作(即深度为5<10)、1*1卷积升维操作(即深度为15>10),计算三种操作的参数计算量,结果由表1可见,1*1卷积通过改变维度既可以减少参数也可以增加参数.根据需求合理使用1*1卷积能够提高模型的识别率,当模型加深参数较多导致过拟合时可以使用1*1卷积降维减少过拟合,当模型分类准确率低时可以使用1*1的卷积模块升维增加模型复杂度.
将数据集分为训练集和测试集.在训练集上测试的误差称为训练误差,在测试集上测试的误差称为测试误差.卷积神经网络模型不仅需要训练集误差低而且要求测试集误差低,这样模型的泛化能力强.过拟合是指训练误差与测试误差之间的差距太大.为解决过拟合问题本文使用了Dropout和5*5卷积分解的方法.
1.3.1 加入Dropout
Dropout[14]是卷积神经网络中减少过拟合的一种方法,加入该方法后训练过程如下.第一次以概率p随机删除部分神经元,得到新的网络结构,未改变的神经元按梯度下降算法更新权重和偏置.第一次训练结束后,恢复删除的神经元.之后重复第一次训练过程和恢复神经元的操作,直到训练结束.该方法能够减少过拟合的原因有以下两点.
第一,平均拟合.Dropout方法随机删除神经元导致每次训练网络结构不同,类似在训练不同的网络,但是这些结构之间共享权重,相当于对不同的神经网络取平均.
第二,减少神经元之间复杂的共适应关系.由加入Dropout后的训练过程可知,即使相邻的神经元在训练中也可能不同时出现,因此权重的更新不再依赖于神经元的相互作用,这阻止了一些特征仅在其他特定特征下有效.
在AlexNet中为了减少过拟合提出Dropout方法,使用Dropout图由图3可见.图中C表示卷积,P表示池化,Fc表示全连接,D表示Dropout.
图3 AlexNet和改进LeNet中Dropout使用对比图Fig.3 Comparison of Dropout in AlexNet and improved LeNet
在改进LeNet模型中调整Dropout层的位置和参数让模型适应小龙虾分类问题.位置上与AlexNet不同,改进LeNet中将Dropout与卷积层相连,使用Dropout图由图3可见.概率p的选择也进行了相应的调整,在1.4章节模型参数中具体介绍.虽然Dropout方法可以有效抑制过拟合,但是它的缺点就在于训练时间增加了3倍.
1.3.2 分解5*5卷积
除了使用Dropout的方法,本文还将LeNet模型中的5*5卷积分解为5*1和1*5卷积来减少过拟合,分解图由图4可见.通过将卷积从空间上分解为不对称的卷积减少了1-(5+5)/5*5=60%的参数从而减少了过拟合.将1个卷积分解为2个卷积同时也增加了模型的深度,为模型增加了非线性,让模型增强了提取特征的能力.
图4 5*5卷积分解图Fig.4 Convolutional decomposition
综合上述观点提出改进LeNet,该模型包括9层卷积层,3层池化层,3层Dropout,1层全连接层,LeNet和改进LeNet模型框架对比图由图5可见,改进LeNet模型参数由表2可见.
图5 LeNet和改进LeNet的模型框架图Fig.5 Framework of LeNet and improved LeNet
表2 改进LeNet模型参数表Tab.2 Improved LeNet model parameters
图6 模型的应用过程图Fig.6 Application process of model
将改进模型按图6过程应用于图像分类项目中.首先将样本根据需求分类.然后根据分类生成对应的标签.做好标记之后将数据集打乱,避免特殊情况出现,从而可以增强图像分类模型的稳定性.做好标签后生成训练集和测试集.生成训练批次即一次训练的图片数量.之后构建模型,这里的模型为改进LeNet模型.准备工作做好后训练模型各层的权重和偏置,训练到10000步停止.
将改进LeNet模型分别在自制小龙虾,MNIST和Fashion-MNIST等数据集上实验,实验环境如表3所示.
表3 实验环境表Tab.3 Experimental environment
近年来,小龙虾在食品和药品中使用安全问题备受关注,自动剔除生产线上受损严重的虾和死虾等有问题的虾具有重要研究意义.该实验选择4300张龙虾图片作为样本,样本分为两类,一类为bads(黑虾和受损的虾等),另一类为goods(好的龙虾).第一组实验通过对比训练时间,准确率,过拟合等指标来比较改进LeNet模型与传统卷积神经网络模型.第二组实验为环境适应性实验,通过改变龙虾样本的亮度,饱和度和方向来测试改进的模型是否能够适应环境的改变.
2.1.1 改进LeNet模型与各模型对比实验
(1)训练时间对比实验
表4 模型训练时间对比表Tab.4 Time comparison of model training
模型训练时间结果由表4可见.与LeNet模型相比,改进LeNet训练时间增加36 min.主要原因有以下两点:改进LeNet模型网络层数及各层的参数相对增加;改进LeNet模型中增加了一种叫做Dropout的方法,该方法可以有效解决过拟合,但是训练时间增加3倍左右.与AlexNet相比,改进LeNet训练时间有所减少,是因为改进的模型中卷积核的大小相比AlexNet要小,导致训练参数较少,而且AlexNet中也使用了Dropout的方法.与VggNet和ResNet相比,随着VggNet和ResNet模型的逐渐增加,改进LeNet模型所用时间相对减少.
(2)准确率对比实验
a) LeNet;b) AlexNet;c) VggNet16;d) VggNet19;e) VggNet11;f) ResNet18;g) ResNet50;h) 改进LeNet图7 各模型准确率对比图Fig.7 Accuracy comparison
准确率是评价一个模型好坏重要指标之一,本文通过训练得到传统卷积神经网络模型与改进LeNet模型的准确率,结果图由图7可见.图中实线表示训练集准确率曲线,虚线表示测试集准确率曲线.横坐标表示训练步数(迭代次数),纵坐标表示准确率.由图可知对于训练集准确率,与LeNet相比改进LeNet提高15%,相比AlexNet等模型最终的准确率几乎相等都可以达到99.9%.对于测试集准确率,改进LeNet比各种经典模型都高,模型测试分类识别能力更好.相比LeNet而言不仅训练集准确率而且测试集准确率改进LeNet模型都要高出15%左右,验证了在改进LeNet模型中增加1*1卷积模块来增加模型分类准确率的可行性.相比AlexNet等模型而言,在测试集准确率上改进的模型更高,验证了在改进LeNet中使用一些方法减少过拟合的效果.
(3)过拟合对比实验
将训练误差和测试误差之差称为过拟合程度,对比结果由表5可见.改进LeNet模型中提出改进Dropout和5*5卷积分解的方法,进一步解决了过拟合的问题.由表可知改进LeNet模型过拟合程度比传统卷积神经网络模型过拟合程度小,模型的泛化能力更好.
表5 过拟合对比表Tab.5 Overfitting comparison
(4)收敛速度对比实验
为加快收敛速度,本文使用了ReLU激活函数来代替LeNet模型中的Sigmoid函数,由表6可见该方法成功解决了LeNet收敛速度慢的问题.与AlexNet等模型相比虽然收敛速度会不同,但在都在10000步内可以达到稳定.
表6 收敛速度对比表Tab.6 Comparison of convergence rates
(5)GPU占用对比实验
由表7可见改进LeNet模型占用GPU比LeNet模型增加19%.但相比AlexNet,VggNet和ResNet,改进LeNet占用GPU明显降低.改进LeNet模型在训练过程中只占用54%的GPU,表明在硬件条件一般时,不会影响计算机的正常运行,而VggNet等模型完全占用GPU,对硬件要求较高.
表7 GPU占用对比表Tab.7 Comparisons of GPU occupancy
2.1.2 环境适应性实验
在工业现场中各种情况都可能对图片样本产生影响.本实验通过改变图片的亮度,饱和度和方向来验证改变模型的适应性.
(1)亮度对比实验
实验通过改变tensorflow中函数tf.image.adjust_brightness(image,brightness)的brightness参数来改变图片的亮度,参数为0的表示没有改变亮度的图片数据.对比改变亮度的数据和没有改变亮度的数据,由表8可见改变图片亮度,训练集准确率变化在+0.29%~+0.34%之间,测试集准确率变化在-0.31%~+0.24%之间,过拟合程度在+0.05%~+0.64%之间,从而验证了改进LeNet模型对亮度适应性良好.
表8 不同亮度结果对比表Tab.8 Comparisons of different brightness
(2)饱和度对比实验
实验通过改变tensorflow中函数tf.image.adjust_saturation (image, saturation_factor)的saturation_factor参数来改变图片的饱和度,参数为0的表示没有改变饱和度的图片数据.由表9可见改变图片饱和度,训练集准确率变化在-0.1%~+0.29%之间,测试集准确率变化在-0.59%~+0.39%之间,过拟合程度在多少-0.3%~+0.71%之间,验证了改进LeNet模型对饱和度适应性良好.
表9 不同饱和度结果对比表Tab.9 Comparisons of different saturation
(3)方向对比实验
实验通过改变tensorflow中的函数对图片上下翻转,左右翻转,对角线翻转来验证模型对各方向的适应性.
表10 不同方向结果对比表Tab.10 Comparisons of different direction
由表10可见,训练集准确率变化在+0.32%~+0.34%之间,测试集准确率变化在-0.46%~-0.07%之间,过拟合程度在+0.4%~+0.78%之间,表明了改进LeNet模型对各方向适应性良好.
(4)组合对比实验
实验通过随机组合改变亮度,饱和度和方向来验证改进的模型是否可同时适应多个条件的改变。由表11可见,训练集准确率变化在+0.17%~+0.34%之间,测试集准确率变化在-0.54%~+0.26%之间,过拟合程度在+0.08%~+0.75%之间,改进LeNet模型对于随机组合亮度、方向饱和度适应性良好.
表11 不同组合结果对比表Tab.11 Comparisons of different combination
MNIST数据集来自美国国家标准与技术研究所.训练集共有60000张28*28的样本,由250个不同人手写的数字构成,其中50%是高中学生,50%来自人口普查局的工作人员.测试集也是同样比例的手写数字数据,包含10000张样本.将改进LeNet模型用于MNIST数据集,训练10000步最终实验结果由表12可见.
表12 MNIST数据集实验结果表Tab.12 MNIST dataset experiment results
Fashion-MNIST数据集由德国时尚科技公司Zalando提供,包含了10类共7万个不同商品的正面图片,图片大小、格式等与MNIST完全一致.将改进LeNet模型结构用于该数据集,训练10000步最终结果由表13可见.
表13 Fashion-MNIST数据集实验结果表Tab.13 Fashion-MNIST dataset experiment results
(1)本文基于小数据集提出一种改进LeNet模型,该模型使用ReLU替换LeNet模型中Sigmoid,加入1*1的卷积,将LeNet模型中的5*5卷积分解为5*1和1*5卷积,并加入Dropout方法.
(2)在小龙虾数据集上实验表明:该模型相比LeNet,AlexNet等传统卷积神经网络减少了过拟合情况,解决了LeNet识别准确率低和收敛速度慢的问题;改进LeNet模型在图像亮度,饱和度和方向等条件发生改变时具备良好的适应性.
(3)在开源小数据集MNIST和Fashion-MNIST上验证了改进LeNet模型良好的分类能力,因此可以推广用于其它小型数据集.
(4)本文改进的LeNet模型存在的问题一:在识别小龙虾图像时,还有些图片无法准确识别,部分分错的图像由图8、图9可见.待改进的方法如下:通过结合GAN模型生成类似的小龙虾图片来增加图片样本从而提高识别的准确率.
图8 部分分错的好龙虾样本Fig.8 Partially misclassified crayfish samples of good
图9 部分分错的坏龙虾样本Fig.9 Partially misclassified crayfish samples of bad
(5)本文改进的LeNet模型存在的问题二:目前只适用于类别少,文件小的数据集,不能够准确分类类别多、文件大的数据集.待改进的方法如下:可以加深模型深度来增加模型对于大数据集的分类效果;可以通过结合强化学习算法Q-learning[15]设计出一种动态分类算法来处理大数据集的分类问题.