沈若兰 黄英来 温 馨 张 岚
(东北林业大学 信息与计算机工程学院,黑龙江 哈尔滨 150040)
蘑菇产业是中国农业部门发展最快的产业之一,其也作为一种食用食材,在许多农业大省都处于较高的地位[1]。同时,我国存在许多种类的毒蘑菇,误食会很危险。当人们遇见未知的蘑菇时,传统方法为将蘑菇外在信息在浏览器窗口进行查询,其搜索结果依赖于描述者的文本信息,具有较强的主观性。随着科技的发展,人们可以通过图片上传,从而识别图像种类,在传统的识别方法中常用为,先除去背景多余信息再进行特征提取与模型训练[2]。此方法的模型泛化能力较差且受多种客观因素影响。
近年来,深度学习方法得到不断发展,在图像识别、语音处理等领域都取得了许多进展,许多相关研究工作也随之展开。同时,目前许多现有的智能识别方法仅停留在实验阶段,缺乏与用户进行交互的应用设计,但随着识别技术与智能交互技术更加广泛的发展,智能识别技术将逐渐走出实验室,应用于生活实践[3]。
本文以搭建蘑菇识别APP平台为主要展现形式,基于深度学习模型的迁移学习为主要训练方法,对蘑菇图像进行识别与分类,并返回相关信息。
深度学习由Hinton[4]等人在2006年提出,其通过对样本数据的内在规律和表示层次进行学习信息,并通过此信息进行图像分类、语音识别等任务,是一种复杂的机器学习算法。其具备许多不同的学习模型,如卷积神经网络CNN,是一种经过不断优化且发展深入的学习模型,通过对其结构的不断改进,使其更加适用于图像识别与分类方向。
由于样本量较少,本文采用迁移学习[5]的方法进行实验。其主要为利用前人在基于大规模数据集ImageNet上,通过消耗大量时间计算成本设计出现了许多验证集准确率高的经典网络,并可利用其基本参数进行模型的参数初始化代替随机初始化,减少实验时间。迁移学习方法可行性高且模型泛型能力强是由于模型低层CNN主要学习低级的边缘和颜色信息特征,此基础特征信息在图像分类任务中提取顺序不变,其后CNN主要学习的则是图像特定的高层特征[6]。
本文借鉴其参数与模型结构,发挥利用在本蘑菇识别的实验中,以达到更快、更高的识别能力。
本文实验采用ResNet50与Xception模型作为实验模型,进行蘑菇图像处理和模型训练。
1.2.1 ResNet50模型
ResNet50模型[7]为深度残差模型,其于2015年被提出,并在检测、分割、识别等多个领域取得优绩。其出现在于解决随着网络加深,训练集准确率下降的问题,同时具有易于优化、计算量小等特点。
ResNet50包含了49个卷积层和一个全连接层,其中主要包含两种模块:一种为Identity模块,一种为Conv模块。Identity模块其输入输出维度不变,其经常用于串联多个模型,Conv模块为添加维度的残差块,其输入输出维度不同,其主要功能为改变特征向量维度,每一个残差块都包含三个卷积层。ResNet模型采用Shortcut Connection跨层连接传递的方式。其残差连接模块如图1所示。
图1 ResNet50基本模块
此连接可以将经过卷积处理后的特征与输入特征进行合并,而不会增加参数和计算复杂度,同时将底层网络训练更加充分,使其达到网络深度增加,精确率也不断提升的作用。其中的1×1卷积层被称为瓶颈层,采用1×1卷积层首先进行降维,再通过其卷积进行维度的恢复,降低计算种的参数量。
如图2所示的模块连接过程中,添加了关于x的恒等映射,函数关系为F(x)=H(x)-x,其中H(x)为残差网络的输出,F(x)为经过中间卷积处理的输出。此函数在模型梯度消失时,可以使原输入恒等映射输出,相当于输入特征复制转移的过程,通过此处理可以使模型结果不会受到梯度消失的不良影响。
图2 ResNet50函数映射
1.2.2 Xception模型
Xception模型是在InceptionV3模型上进行的改进模型,Chollet F[8]提出一种新的深度卷积神经网络结构,用深度可分卷积替代Inception模块,称为Xception。组成主要由残差网络与深度可分离卷积组成。Xception包含36个卷积层,分为14块,中间12块都包含线性残差连接。同时,模型参照深度可分卷积[9]的特点,对输入数据的每一个通道独立进行空间逐层卷积,再对其结果进行逐点卷积。
如图3所示的Xception模型结构介于普通卷积与以上可分卷积之间,第一步通过1×1卷积进行通道分离,第二步独立绘制每个输出通道的空间相关性,用3×3单独处理,最后合并。
图3 Xception基本模块
实验过程硬件方面为64位windows操作系统,GPU为1 080Ti。软件方面:使用jupyter notebook作为开发平台,采用python3.7进行编写设计,选择keras与pytorch框架作为程序框架。
实验结果采用验证集精度和Top1精确率作为结果评判标准。其中Top1精度为识别结果与标签相同的准确率。
本文数据集来源于Kaggle中,采集了共6 714张蘑菇图像。实验数据集总共包含九类蘑菇,包括菌类有落叶松蕈,伞形毒菌, 牛肝菌属, 阿美尼亚丝膜菌, 肉色粉褶蕈, 绯红湿伞, 乳菇, 红菇, 乳牛肝菌。
实验对数据集以4:1的比例进行训练集(80%)和验证集(20%)的分割,所分训练集数量为5 367张,验证集数据集为1 347张。每一种蘑菇的样本图例如图4所示。
图4 九类蘑菇图像数据
对蘑菇数据集图像进行数据增强处理,通过平移、分割等图像预处理,增加数据集样本的数量,减少由于实验样本过少所引起的过拟合现象。同时,将数据集图像统一整理输入大小为224×224,规范模型输入,对图像数据进行随机打乱顺序处理。
由于卷积神经网络需要大量样本进行实验,而本文采用的是小样本,为了解决样本量过少对模型训练结果造成的影响,实验引入迁移学习进行训练。实验采用的模型为Xception模型和ResNet50模型,并利用此模型预训练参数作为模型初始参数进行实验。以下为初步对模型进行的实验处理过程。
(1)建立BatchNormalization,对模型输出进行归一化处理,即将一批不标准数据进行统一处理,将特征值标准正态化,落入对于Relu函数变化敏感的区间,从而达到避免梯度消失、收敛更快的目的。
(2)分别建立神经元个数为256和128的全连接层,激活函数为Relu函数,并再次进行BatchNormalization处理。
(3)搭建分类层,激活函数为Softmax函数,设输出神经元个数为9。
(4)编译时将迭代轮次设置为40次,steps_per_epoch为16,训练中设定初始学习率为0.001,设定最小学习率为1e-8,优化器选为sgd。
以上步骤与参数条件下,实验结果如表1所示。
表1 实验一结果
在此种参数条件下,ResNet50模型训练结果较差,验证集精确度低于Xception模型约18%。
在此步主要对两模型的参数和结构进行调整,进行下一步实验,进一步提高验证集精确率。
(1)对两类经典模型原最后全连接层进行层内参数修改,将输出参数修改为9。
(2)损失函数为CrossEntropyLoss交叉熵函数。此函数将九类输入数据进行sigmoid函数处理,将输入映射到[0,1]区间,输入数据越大则标签属于1的概率就越大,并通过增加负log对数求和处理转化为多类别概率输出。
(3)添加Dropout处理,减少过拟合现象。将舍弃率设为50%,即该全连接层神经元在每次迭代训练时有50%的可能性被随机丢弃不参与训练,极大减少了参数的数量。
(4)模型编译时,将momentum动量参数设定为0.9,采用余弦退火函数CosineAnnealingLR调整学习率,学习率呈余弦函数型衰减,其变化和epoch的大小相匹配。设置实验迭代轮次为100次,综合实验GPU 条件,将batch_size批次样本数设为64。
(5)调整模型微参数,将初始学习率设为0.001,优化器调整为Adam,在实验过程中函数对参数进行自动调整。
以上步骤的实验结果如表2和图5所示。
表2 实验二结果
通过此实验,可以看出Xception模型比ResNet50模型Top1精确率高约2%。由此得出,对于此细颗粒蘑菇图像数据集Xception模型比ResNet50模型在图像分类任务上更适合。同时Xception模型收敛也相对更快,其损失函数下降趋势相对快且平稳,在20轮次时下降达到0.30。而ResNet50在接近60轮次时,损失曲线趋势才相对平稳,下降达到0.31。
图5 Xception&ResNet50实验数据
实验绘制了对于微调整后的Xception模型验证集图像预测的混淆矩阵,结果如图6所示。
可以从混淆矩阵清晰看出第四类蘑菇检测结果相对偏低,得知其对应数据集量偏少,同时数据集需要进行一定的调整,其蘑菇颜色等信息与其他蘑菇具有一定的相似性。同时具有较高识别率的第五类中有两张图片被识别为第六类,第二中有两张被识别为第一类,两张被识别为第七类,有三张被识别为第八类。从图6也可以看出,对于蘑菇验证集各类蘑菇种类之间的相似类别,以及本模型具有较高识别准确率。
图6 X c e p t i o n混淆矩阵
Xception模型对于九类蘑菇图像的识别时间如表3所示。根据结果显示,除第一类蘑菇第一张识别速度较慢以外,其他八类蘑菇第一张图像平均识别时间为0.013s完成图像预测。总体蘑菇图像平均识别时间为0.013s左右,体现了通过迁移学习并进行微调的Xception模型具有较快的图像识别预测速度。
表3 九类蘑菇图像识别时间
随着安卓系统手机的普及与发展,市场与各研究中出现了许多基于图像识别功能的系统设计研发[10]。但菌类识别软件缺乏,本文将从此角度设计蘑菇识别系统,并以APP形式展现。
总体设计目标为用户通过拍照或者上传本地蘑菇图片,上传到后台深度学习平台,后台返回相应蘑菇品种及对应知识,同时APP提供给软件用户,即蘑菇学习者一个便捷的交流平台。
蘑菇分类整体系统框架如图7所示。
图7 系统整体框架
Android客户端的应用程序在Window10平台下基于Visual Studio code + Android Studio开发环境中进行开发,通过Android Studio生成.apk文件,安装设备为安卓系统手机。
客户端界面设计使用Flutter框架与Andriod Studio布局管理器进行页面搭建,并与服务器端进行交互,APP设计界面如图8所示。APP系统后端采用JAVA语言编程实现,连接深度学习平台并与蘑菇数据库联系调用相关种类信息。
图8 APP界面显示图
本文提出了将蘑菇图像分类与两种经典预训练模型进行迁移学习的实验设计,同时设计了对应蘑菇识别APP系统,提供了更便捷、快速的识别方式,目的是解决生活中蘑菇识别应用软件缺乏与训练模型时间成本较大的问题。实验中,由于样本量不足,采用了在ImageNet大规模数据集上预训练的模型网络及其参数进行初始化,在原有模型上修改全连接分类层。实验首先通过对Xception与ResNet50模型进行迁移测试实验,得到ResNet50模型与Xception模型精度分别为72.17%、90.33%的实验结果。再对两种模型同时进行调整微参数实验,两种模型精确率都有所提升,ResNet50模型精确率提升约21.29%,Xception模型提升约4.77%。由此可以得出,Xception模型比ResNet50模型更适合于细颗粒蘑菇数据集的图像识别任务,同时体现出迁移学习方法对图像分类任务具有泛化能力强、简化模型训练的特点,同时可以有效减少实验时间,在短时间内提高实验效果,为计算机辅助识别蘑菇图像进行分类处理提供可行性实验论证。