基于Inception-v3模型的蛇类图像识别
2019-07-20张皓洋
张皓洋
摘要:本研究基于迁移学习方法,重新训练TensorFlow深度学习库中的Inception-v3卷积神经网络模型,对5种代表性蛇类进行高精度分类。模型训练结果显示,训练集总体准确率达到99%,测试集总体准确率达到92.3%,模型交叉熵损失值维持在0.015,具有良好的分类准确性。本研究针对此模型开发了一款Web系统,实现.了模型Web线上部署,系统实测评估结果显示,对于5种实际蛇类图片,模型实际分类准确率维持在88%-96%之间,具有良好的泛化能力。
[关键词]蛇咬伤迁移学习TensorFlow卷积神经网络Web系统
1引言
据相关数据显示,全世界范围内,毒性.蛇类超过660种,约占蛇类总数的20%,其中致命性毒蛇近200余种。我国毒性蛇类有60余种,约占国内蛇类总数的30%,其中剧毒类10余种。由于我国蛇咬伤(snakebite)情况主要发生于南方热带、亚热带的农村偏远地区并且我国蛇伤诊疗标准不统一、不规范等问题,蛇咬伤总体死亡率和致残率较高,严重危害了国民生命健康。近年来,人工智能(Artificialintelligence,AI)迅猛发展,深度学习(Deeplearning,DL)作为人工智能的重要方法,在图像识别中被广泛应用。本文主要基于迁移学习方式,使用深度学习方法中的卷积神经网络对几类野外常见的蛇类图像进行分类,进而判别其有无毒性。研究旨在提高野外作业人员应对毒性蛇的安全意识,尽可能避免野外毒蛇咬伤事故的发生。
2模型与方法
2.1深度学习模型
深度学习模型属于深层算法模型,由Hinton等在2006年提出。以反向传播(BP)算法为核心的神经网络是深度学习模型的核心网络结构,主要包括输入层、隐含层以及输出层,网络过程包括输入的正向传播和误差梯度的反向传播。
4层神经网络的正向传播过程如图1所示,每个层级都含有多个结点,i,j、k,1分别为输入层、隐含层、输出层的结点个数,0y,0)k,0u分别是各层之间的链接权重。设输入层各神经结点的输入值为(xo,x,...x.).,第一层隐含层各神经结点的输出值为(h1o,h1,,h2...h1}),第二层隐含层各神经结点的输出值为(h2o,h21,h2...2k),输出层各神经结点的输出值为(yo,y,y..y),b,bk,by是各层之间的偏置值,激活函数为g,则第一层隐含层各神经结点的输出值可表示为式(1):
第二层隐含层各神经结点的输出值可表示为式(2)
输出层各神经结点的输出值可表示为式(3):
神经网络的反向传播是将损失误差从输出层向输入层反向传递,在负梯度方向重新调整链接权重。通过正、反向传播过程,完成神经网络的一步训练,然后利用下一组样本数据再次训练,如此循环直到达到设定的训练迭代次数或者损失函数不再下降,就完成了神经网络的训练。
卷积神经网络(Convolutionalneuralnetwork,CNN)是神经网络发展的产物,属于深层前馈型神经网络,常用于处理图像识别问题。卷积神经网络通常包括输入层、卷积层(Convolution)、池化层(Pooling)、全连接层与输出层(FullyConnected)。输入层的每幅图像数据与卷积层中多个卷积核进行卷积计算生成新的图像特征。池化层针对生成的图像特征图,选择其中的一块小区域,计算它的平均值或最大值,实现特征图像各位置的特征聚合分析,减少特征维度,防止过拟合。全连接层类似于神经网络,负责将之前处理过的特征进行综合评判,输出各分类概率,作为分类器分类的依据。
在本文中,我们使用迁移学习方法对TensorFlow深度学习库中的Inception-v3模型在有无毒性蛇类数据集上重新训练来实现有无毒性蛇类的分类。迁移学习是指利用从一个环境中已学到的现有知识,来解决与旧问题不同但又有一定关系的其他新问题的深度学习方法,这种学习方式对数据集数量要求较低,并且训练时间短,精度高。Inception-v3模型是以Inception网络结构构成的第三代CNN分类器。其网络结构如图2所示,由11个Inception模块组成,共包含46层网络,图像通过11个Inception模块卷积、池化(包括平均池化和最大池化)后由最后的全连接层整合特征,输入至Softmax层,通过ImageNet数据集进行训练后的Softmax层可识别ImageNet中1000个类别。
2.2技术方法
2.2.1TensorFlow
TensorFlow是Google官方發布的一款机器学习系统,可在大规模和异构环境中运行,计算模型通过TensorFlow可轻松部署到分布式集群、单主机以及移动设备上,具有很强的灵活性和移植性。
TensorFlow使用数据流图来表示计算、共享状态以及改变状态的各类操作,包括各个数学运算,参数及其更新规则以及输入预处理。数据流图将数据运算或操作视作一个节点(Node),各节点间的连接称为边(Edge),边中承载流动的计算数据是一个多维数组,即张量(Tensor)。数据流图整个计算过程的本质是张量数据的流动(Flow)过程,是对机器学习过程的逻辑描述。
2.2.2Docker
Docker是一种轻量级的虚拟化容器技术。Docker虚拟化容器技术使开发者不必再为应用程序的安装、部署、发布以及移植等困扰,通过从开源的Docker镜像库(DockerHub)中拉取(Pull)应用镜像来创建对应的应用程序容器,这些容器自动包含应用程序的各种依赖包和复杂的环境配置。开发人员在这些装有应用和服务的容器内完成开发工作后,可以直接将容器集成到后续开发流程中,实现应用程序快速部署和发布。Docker容器还可以在物理机、虚拟机、PC端、服务器等多个平台上兼容运行,具有良好的移植性;Docker容器启动极快,能在亚秒内启动,并且对系统资源的利用率很高,不占用系统额外资源。
3研究内容
3.1数据准备
由于有毒蛇和无毒蛇类繁多且各类蛇分布区域差异性大,我们随机选取了5种有代表性的蛇类作为研究对象,分别为黑蛇、王锦蛇、眼镜蛇、银环蛇、竹叶青蛇,其中黑蛇和王锦蛇属于无毒类,眼镜蛇、银环蛇以及竹叶青蛇属于有毒类。利用python爬虫脚本以搜索关键字为爬取参数,从网上抓取了5462张高质量的蛇类图片,并以8:2的比例将数据集划分为训练集和测试集,其中训练集以5种蛇类名称作为数据标签来对数据进行标识,数据集划分情况如表1所示。
3.2模型建立与训练
在Ubuntu16.04LTS系统平台上安装Docker,随后从DockerHub上pullTensorFlow最新官方鏡像tensorflow/tensorflow,运行dockerrun命令创建Tensorflow容器。Tensorflow容器提供了TensorFlow深度学习框架的工具库以及所有依赖项。基于Tensorflow容器提供的TensorFlow平台,使用迁移学习方法保持Inception-v3模型最后全连接层之前的卷积层和池化层参数不变,导入有无毒性蛇类数据集重新训练Inception-v3模型得到图像特征向量,然后将图像特征向量重新输入一个全连接层,进行特征变换,全连接层类似于神经网络结构,其每个神经元均与前一层的所有神经元全连接,神经元激励函数采用ReLU函数。Softmax层对最后的全连接层输出值进行分类,最终得到5个分类节点。
3.3评价指标
为了更好地评估所建立的深度学习模型性能,本文拟采用总体准确率(Accuracy)和交叉熵损失函数(CrossEntropyCostFunction)作为模型的评价指标。
3.3.1总体准确率
总体准确率表示正确分类样本数占样本总数的比例,如式(4)所示。
其中,TP代表正类样本被预测为正类的样本数;FN代表正类样本被预测为负类的样本数;FP代表负类样本被预测为正类的样本数;TN代表负类样本被预测为负类的样本数;TP+TN代表正确分类样本总数;TP+FN+FP+TN代表样本总数。.
3.3.2交叉熵损失函数
交叉熵损失函数表示实际输出概率与期望输出概率之间的相近程度。Softmax层通过回归处理可将神经网络的实际输出转化为概率分布,再利用交叉熵损失函数计算实际输出概率与期望输出概率之间的相近距离系数,系数越小,两个概率分布越相似,期望输出的准确率也越高。对于单个神经元网络,交叉熵损失函数可表示为式(5):
其中L表示交叉熵损失函数值,y表示实际输出,y表示期望输出。当y=1时,交叉熵损失函数为式(6),可见当期望输出y越接近1时,即期望输出与实际输出越接近时,损失函数越小,相反期望输出y越接近0时,损失函数趋于无穷大。
当y=0时,交叉熵损失函数为式(7),可见当期望输出y越接近0时,即期望输出与实际输出越接近时,损失函数越小,相反期望输出y越接近1时,损失函数趋于无穷大。
由此可见交叉熵损失函数可以直观地解释实际输出与期望输出之间的相近程度:交叉熵损失值越小,期望输出与实际输出越相近,分类准确率越高。
3.4结果及分析
设定模型训练迭代次数为4000余次,分别记录训练集和测试集上模型的总体准确率(如图3所示)以及训练过程中交叉熵损失量的变化情况(如图4所示)。
如图3所示,随着训练迭代次数的增加,训练集总体准确率可高达99%,测试集总体准确率可达到92.3%,模型总体准确率表现良好,基本满足模型识别率要求。如图4所示,训练初期,交叉熵损失量下降明显,表明实际输出与期望输出间差距不断减小;当训练迭代次数达到3000次时,交叉熵总体损失量基本趋于平缓,在0.015上下波动,表明实际输出与期望输出接近一致,模型预测准确率高。
3.5线上部署
3.5.1系统概述
为了将具有良好预测分类效果的模型部署到生产环境中,实现模型持久化,本文设计开发了一款蛇类图像识别Web系统。系统页面如图5所示,主要分为蛇类图像上传模块、蛇类图像识别模块以及蛇类知识库模块。其中蛇类图像上传模块功能包括用户图片,上传;蛇类图像识别模块功能包括蛇类图像识别分类以及信息提示;蛇类知识库模块功能主要包括蛇类查询、蛇类简介以及蛇咬伤急救方案。系统开发平台为Window7专业版,服务器配置为1GB,1核的WindowServer2012R2Standard,代理服务器采用Nginx,使用HTML5+CSS3+JavaScript的Web技术搭建系统前端页面,数据库使用关系型数据库管理系统MySQL,服务器后端使用PHP脚本实现数据动态交互,并通过PHP外部命令调用python函数接口,实现模型线上识别图像。
3.5.2系统测试
模型泛化能力是指利用现有数据集训练得到的模型来对训练数据以外的数据集的预测能力,模型泛化能力越高,说明模型的实际预测效果越好。为了评估与验证本文所建立的模型泛化能力,选取5种蛇类的实际图片,每类图片数为50张,上传至Web系统来查看模型的分类效果,测试结果如表2所示。
通过实测结果可见模型对于5种实际蛇类图片的分类准确率在88%至96%,其中眼镜蛇的分类准确率最低,其中有5例被分类为黑蛇,分析可能的原因是眼镜蛇在外观颜色上与黑蛇相近,由此导致了识别出现偏差,表明模型识别特征能力还需进一步提高。考虑到实测结果准确率与模型总体准确率差异性较小,说明模型实际预测分类效果良好,模型具有良好的泛化能力,有一定应用价值。
4结论
本文基于Tensorflow深度学习框架,利用迁移学习方法重新训练了卷积神经网络Inception-v3模型,在有限样本数量的情况下重新构建了模型最后的全连接层,实现了5种有无毒性蛇类的高准确率识别分类。本文还开发了一款蛇类图像识别Web系统,将模型部署上线至生产环境中,并在实际测试中验证了模型具有良好的泛化能力。后续将围绕增加蛇类数量和图片数量,进一步完善模型参数和性能,帮助从事蛇类或者野外工作者安全识别蛇类类别,提高预防意识,保障生命安全。
参考文献
[1]FARRARJ,HOTEZP,JUNGHANSST.MansonsTropicalDiseases,23rd[M].EIsevierLimited,2014
[2]覃公平.中国毒蛇学[M].南宁:广西科学技术出版社,1998.546-772.
[3]李其斌,呂传柱,梁子敬,张剑锋,王威,赖荣德.2018年中国蛇伤救治专家共识
[J].蛇志,2018,30(04):561-567.
[4]LECUNY,BENGIOY,HINTONG.Deeplearning.[J].Nature,2015,521(7553):436.
[5]HINTONGE,SALAKHUTDINOVRR.Reducingthedimensionalityofdatawithneuralnetworks[J].Science,2006:504-507.
[6]胡越,罗东阳,花奎,路海明,张学工,关于深度学习的综述与讨论[J].智能系统学报,2019,14(01):1-19.
[7]庄福振,罗平,何清等,迁移学习研究进展[J].软件学报,2015,26(01):26-39.
[8]SZEGEDYC,VANHOUCKEV,IOFFES,etal.[IEEE2016IEEEConferenceonComputerVisionandPatternRecognition(CVPR)-LasVegas,NV,USA(2016.6.27-2016.6.30)]2016IEEEConferenceonComputerVisionandPatternRecognition(CVPR)-RethinkingtheInceptionArchitectureforComputerVision[J].2016:2818-2826.
[9]ABADI,MARTIN,BARHAMP,CHENJ,etal.TensorFlowAsystemforlarge-scalemachinelearning[J].2016.
[10]WONGSUPHASAWATK,SMILKOVD,WEXLERJetal.VisualizingDataflowGraphsofDeepLearningModelsinTensorF1ow[J].IEEETransactionsonVisualization&ComputerGraphics,2017,PP(99):1-1.
[11]ANDERSON,CHARLES.Docker[Softwareengineering][J].IEEESoftware,2015,32(3):102-103.
[12]任进军,王宁,人工神经网络中损失函数的研究[J].甘肃高师学报,2018,23(02):61-63.