当前位置:首页 期刊杂志

基于Spark的花卉图像分类研究

时间:2024-05-04

侯向宁,徐草草,杨井荣

(成都理工大学 工程技术学院 电子信息与计算机工程系,四川 乐山 614000)

0 引 言

在植物花卉研究领域,传统花卉分类方式大多基于人工提取特征,不仅耗时费力,效率低下而且还很容易出错;而基于深度学习的花卉分类方法,由于能够自动提取特征且分类准确率高,因此逐渐受到人们的关注。全世界已知的花卉种类约40多万种,面对海量的花卉图像数据,基于单机的处理方式已无法适应,人们把目光逐渐转向了基于大数据的云计算平台。Hadoop是目前常见的大数据计算平台,然而其核心组件MapReduce由于磁盘I/O开销大、延时高而无法胜任实时、快速迭代的计算任务。Spark以其基于内存的更高的迭代运算效率、结构一体化、功能多元化等优势,正逐步取代MapReduce。

文献[1]设计了一个8层卷积神经网络,并在Oxford102花卉数据集上进行了测试,由于模型的深度较浅,分类效果并不理想。文献[2]通过迁移学习,对InceptionV3网络模型在花卉数据集上进行微调,对分类准确率有少量的提升。文献[3]基于AlexNet迁移学习提取花卉特征,采用SVM进行花卉的分类,但分类准确率还有待提高。文献[4]在Spark的基础上,利用SVM机器学习算法对小麦病虫害进行分类识别。文献[5]基于Spark构建了一个分布式的图像处理系统,用于对遥感图像的处理。文献[6]在Spark的基础上,利用K-Means聚类算法对移动用户的行为轨迹进行分析。

该文基于Spark分布式计算框架,对现有的VGG16模型进行改进,引入选择性软注意力机制即SK(选择性内核)单元,并采用TensorFlowOnSpark技术,实现花卉图像特征及模型训练的并行化,降低了模型训练时间,进一步提高了花卉分类的速度及准确率。

1 相关研究

1.1 Spark

Spark[7-9]是Apache软件基金会的开源项目,其设计理念是一站式解决平台,Spark发展至今,逐步形成一个完整的生态圈,如图1所示。

图1 Spark生态系统

图中处于核心地位的计算层是Spark的内存计算架构层。工具层主要包括用于即席查询的Spark SQL、用于实时流处理的Spark Streaming、用于机器学习的MLlib及用于图处理的GraphX等。存储层主要是Hadoop的HDFS及HBase组件。资源调度层主要包括Standalone、YARN、Mesos等模式。Spark具有运行速度快、通用性强等优势,现在被很多大型公司使用,例如Amazon、eBay、雅虎、腾讯、淘宝、优酷土豆等。

1.2 TensorFlowOnSpark

TensorFlowOnSpark[10-11]是对TensorFlow和Spark的无缝集成,TensorFlowOnSpark解决了TensorFlow在Spark和Hadoop集群上分布式的并行执行,以及集群间数据传递的问题。TensorFlowOnSpark可实现异步和同步训练和推理,支持并行化模型和数据处理。TensorFlowOnSpark的架构如图2所示。

图2 TensorFlowOnSpark的系统架构

TensorFlowOnSpark将TensorFlow算法和TensorFlow内核封装到一个Spark Executor中,通过Spark为每个Spark Executor启动相应的TensorFlow进程,并通过gRPC或RDMA进行模型训练、数据传输和交互。

2 网络模型与系统架构

2.1 改进的VGG16网络模型

VGG16[12-14]网络的深度为16层,这种较深的网络通过逐层的抽象,能够不断学习由低到高各层的特征,具有更强的非线性表达能力,能表达更为丰富的特征,拟合更为复杂的输入特征。另外,VGG16网络最开始采用64个3×3卷积核,随着网络的加深,卷积核数量逐渐从64增加到128、256、512,使其具有较大的网络宽度,宽度的增加能使网络各层学习到更为丰富的颜色、纹理等特征。VGG16网络结构如图3所示。

图3 VGG16网络结构

VGG16存在的问题是每个卷积层均采用3×3的卷积核,因此不能自适应地调节感受野的大小,对花卉分类这种精细化分类问题的分类准确率不高;此外,瓶颈层后的3个全连接层使得网络的参数剧增,消耗了过多的计算机资源。

该文解决的方法是:首先引入SKNet模块,SKNet[15]是一个轻量级的模块,可以方便地嵌入到其他模块中。SKNet基于软注意力机制,其“选择性卷积核”(SK)使网络能够从不同的感受野获取信息,能够有效提取花瓣、花蕊等细微的变化,比较适合花卉分类这种精细化分类问题,并使网络的泛化能力变得更强。其次,用全局平均池化层替换VGG16瓶颈层后的3个全连接层,可以减少参数的数量,提高网络训练的速度。

改进后的VGG16的网络结构如图4所示,在VGG16的瓶颈层之后加入SK(选择性内核)单元,并用全局平均池化GAP代替之后的3个全连接层。

图4 VGG16_SK网络结构

图4中前5段的每个卷积层中均加入BN层和ReLu激活函数。其中BN层的作用是加快网络的训练和收敛的速度,防止梯度爆炸及梯度消失,提高模型精度;ReLu[16]激活函数能增强网络的非线性、防止梯度消失、减少过拟合并提高网络训练的速度。

2.2 系统架构

总体的系统架构如图5所示,左上是由1个Master节点和3个Slaver节点构成的Hadoop及Spark集群。其中Master是主控节点,负责整个集群的正常运行,维护HDFS命名空间、任务的调度以及各种参数;Slaver为计算节点,负责接收主节点的指令以及进行状态汇报,进行相关矩阵运算、权值更新、数据存储等操作。在分布式文件系统HDFS的支持下,HBASE主要用于存储相关的集群参数及模型参数。系统管理主要涉及任务管理和配置管理,其中配置管理负责对Hadoop和Spark集群及相关任务的参数进行配置;任务管理主要负责接收客户端的上传、下载等命令操作。TensorFlowOnSpark主要负责花卉分类模型的训练及参数调优。

图5 系统架构

3 实验与结果分析

3.1 实验环境

采用standalone模式搭建Hadoop及Spark集群,整个集群由4台虚拟机组成,虚拟机均为Centos7操作系统,并分别安装jdk1.8.0_65,hadoop2.7.4,Spark1.6.0,python2.7,tensorflow0.12.1,tensorfl-owonspark1.0.2。其中1台是Master,另外的3台虚拟机为Slaver。

数据集采用Oxford102,该数据集包括102类西方常见花卉,共有8 189张花卉图片。由于该数据集的数据量较小,为了防止过拟合,提高网络模型的性能,首先对该数据集进行随机旋转、翻转、平移、裁剪、放缩等操作,通过数据增强,将Oxford102扩充至49 134张。为进一步扩展花卉的数据集,利用爬虫程序爬取了国内较为常见的20种花卉,每种花卉1 000张,共计20 000张,添加的20种花卉如图6所示。数据增强后的花卉种类是122类,花卉图片共计69 134张。

图6 国内20类花卉图像

3.2 模型训练及参数设置

(1)为提高训练的效果,加快网络模型的收敛,对两个数据集的花卉图片按照保持长宽比的方式归一化,归一化后的尺寸为224×224×3。

(2)将数据增强后的每类花卉图片数的70%作为训练集,剩余30%作为测试集。

(3)训练时保留VGG16经ImageNet预训练产生的用于特征提取的参数,在SK(选择性内核)单元中,路径数M设为2,扩张数D设为2,组数G设为32,其余参数均使用正态分布随机值进行初始化。

(4)采用随机梯度下降法优化模型,batchsize设置为32,初始学习率设为0.001,epoch设为500,学习率下降间隔数设为50个epoch,调整倍数为0.1。

3.3 实验对比与分析

(1)与常见网络模型及引用文献中的网络模型,在Oxford102花卉数据集上做了比较,准确率对比结果表1所示。

表1 Oxford102上不同网络模型分类准确率对比

对比的结果显示,文中模型比常见模型在Oxford102花卉数据集上的分类准确率平均高出近18.5个百分点,这主要因为Lenet-5及Alexnet等网络的深度较浅,不能充分学习花瓣、花蕊等细微的特征变化。

文中模型比所引文献中在Oxford102花卉数据集上平均高出近6.9个百分点,这一方面缘于对数据进行了增强,提高了模型的泛化能力和鲁棒性,另一方面文中模型中嵌入了SK模块,能够有效学习花瓣、花蕊等部分的细节的信息,从而提高了模型分类的准确率。

文中模型比未添加SK模块的VGG16高出近15.3个百分点,这得益于VGG16网络加入BN层后,有效防止了梯度爆炸及梯度消失,加快了网络的训练和收敛的速度;另外加入SK模块后使网络能够从不同的感受野获取多尺度的信息,能够有效学习花瓣、花蕊等部分的细节的信息,并使网络的泛化能力变得更强。

(2)不同数据集下文中模型的分类准确率对比如表2所示。

表2 不同数据集下的分类准确率对比

从实验结果可以看出,本方案在国内20类数据集上的分类效果最好,这主要是因为国内20类数据集的花卉图片样本数量多且样本种类少,使得网络模型能充分学习到每类花卉的特征,其次是花卉图片的清晰度比Oxford102数据集上的高。

(3)为研究在应对“海量”花卉分类任务时,节点数对Spark集群性能的影响,设计并测试了Spark集群在不同节点数下,完成相同“海量”花卉分类任务时的耗时,共进行了5组对比实验,实验对比结果如图7所示。

图7 不同节点与图片数量下的分类耗时

对比结果表明,单节点下,随着图片数量的增加,内存急剧增加,分类测试的耗时呈非线性向上增长趋势,随着节点数的增加,分类所需的耗时越来越趋于线性增长,体现出分布式计算能将负载均衡至每个节点,充分发挥了每个节点的性能,提高了分类的效率。

4 结束语

基于Spark分布式计算框架,引入选择性软注意力机制,将SK(选择性内核)单元添加至VGG16模型,并采用TensorFlowOnSpark技术,实现花卉图像特征及模型训练的并行化,降低了模型训练的时间。实验表明,花卉分类的准确率比未添加SK(选择性内核)单元的VGG16高出近15.3个百分点,实验还表明,Spark分布式计算有利于负载均衡,能发挥各个节点的性能,进一步提高了花卉分类的效率。下一步的工作是将SK单元引入Inception、ResNet、DenseNet等深度更深的网络,以进一步提高花卉分类的准确率。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!