APP下载

采用改进的SqueezeNet模型识别多类叶片病害

2021-04-02高国琴

农业工程学报 2021年2期
关键词:运算量准确率卷积

刘 阳,高国琴

(1. 江苏大学电气信息工程学院,镇江 212013;2. 南通职业大学电子信息学院,南通 226007)

0 引言

准确识别作物病害类别是作物病害防治的前提,而作物叶片病斑及其相关特征是判断作物病害种类及其病害程度的重要依据[1-2]。传统作物病害检测主要依靠人工现场观察判断,存在主观性强、工作强度大等不足,难以满足大范围作物病害实时监测系统的需求[3]。

利用现代信息技术对作物病害种类进行诊断和识别是一种先进有效的手段。在作物病害识别研究方面,国内外已有诸多报道,较多涉及马铃薯[4]、黄瓜[5-7]、西红柿[8]、茄子[9]等单一作物的病害识别。这些传统机器学习方法一般包含了图像分割,特征提取和模式识别三个环节,但其性能的优劣非常依赖于对病斑特征的提取。如果不能准确地提取病斑底层特征并选择对分类贡献率较高的特征来进行分类,则分类性能会明显下降。传统机器学习方法的另一个缺点是针对某种具体作物病害识别任务生成的特征不仅费时费力,而且泛化性能较差。与之相比法,深度学习是一种端到端的方法,它以原始数据为输入,以最终的任务为输出,经过层层抽取将原始数据逐层抽象为任务自身所需要的特征,避免了人为特征选取对分类性能的影响,也同时大幅增强了系统的鲁棒性。

近年来随着深度学习技术的兴起,卷积神经网络(Convolutional Neural Network,CNN)在作物叶片病害识别相关领域已获得广泛应用。黄建平等[10]以PlantVillage公开数据集为试验数据,设计了一种新颖的基于神经结构自动学习并搜索的叶片病害识别方法;任守纲等[11]研究了一种基于反卷积引导的VGG网络模型,能够同时实现植物叶部病害种类识别与病斑分割;鲍文霞等[12]先利用深度语义分割网络分割出麦穗图像,然后设计多路卷积神经网络进行小麦赤霉病的识别;赵立新等[13]以棉花叶部病虫害为研究对象,利用PlantVillage大数据集对改进的AlexNet模型进行预训练,然后使用自建棉花数据集微调并识别;姚青等[14]提出以RetinaNet为目标检测框架的水稻冠层2种害虫为害检测模型,包括采用基于ResNeXt101的特征提取网络、组归一化及改进特征金字塔网络等措施;余小东等[15]以AI challenger 2018公开数据集为研究对象,提出一种基于残差网络的农作物病虫害的检测模型并进行基于Android的APP设计与测试;杨森等[16]提出一种基于卷积神经网络与综合特征词袋模型相结合的马铃薯病害叶片识别方法;Nazki等[17]将生成对抗网络GAN应用于番茄的病害识别研究中。上述研究采用各自模型在取得较好研究效果的同时也存在网络模型结构复杂、参数庞大、运算量要求高等不足,因此目前的研究也有趋向于模型结构小型化、实用化。其中,孙俊等[18]通过使用批归一化、空洞卷积与全局池化等措施,提出多种改进的AlexNet模型,减少了模型所需参数,提升了识别准确率;郭小清等[19]基于AlexNet提出一种适用于移动平台的多感受野识别模型,针对AlexNet模型第一层设置不同尺寸的卷积核,综合提取多种特征来表征病害的动态变化;刘洋等[20]基于MobileNet与Incption V3提出2种轻量级卷积神经网络的作物病害分类模型,综合考虑识别精度、运算速度和模型尺寸等指标进行择优选择,并实现手机端的叶片检测。在前人研究基础上,为进一步探索病害叶片识别应用中卷积网络模型的轻量化研究,本文基于PlantVillage工程开源数据库,对轻量级卷积神经网络SqueezeNet[21]架构进行分析,结合多种改进步骤先后获取5种病害叶片检测模型,并运用迁移学习和随机梯度下降算法进行训练,力图在保持较高的识别性能的同时进一步减少识别系统模型参数及其运算量,以便应用于资源受限的嵌入式实时系统。

1 试验数据

本文以 PlantVillage工程开源数据库(www. plantvillage.org)所收集的54306张叶片图像作为试验数据,其中包含14种植物共38类叶片(包含26类病害叶片和12类健康叶片),各类叶片数目从275到5357张不等,直接采用这样的数据会产生严重的样本分类不均衡问题,对模型训练过程造成困扰。由于学习算法设计的背后隐含的优化目标是数据集上的分类准确度,因此样本量大的类别因其累积训练误差较大往往会主导训练过程,这将导致学习算法在不平衡数据上偏向于更多样本的类别[22]。

抽样是解决样本分布不均衡的常用方法,包括过抽样和欠抽样两种。过抽样也称为上采样,它通过增加分类中少数类样本的数量来实现样本均衡。最直接的上采样方法是简单复制少数类样本形成多条记录,其缺点是一旦样本特征少则可能导致过拟合问题。为此,可以用数据增强的方法在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本。欠抽样也称为下采样,通过减少分类中多数类样本的数量来实现样本均衡。最直接的方法是随机去掉一些多数类样本来减小多数类的规模,其缺点是会丢失多数类样本中的一些重要信息。总体上,过抽样方法应用更加广泛。

本文采用开源的Python库imgaug(https://github.com/ aleju/imgaug)对样本量较少的类别进行数据增强。增强的方法包括水平镜像翻转、垂直镜像翻转、随机截取、加噪声、改变亮度和对比度等,并将尺寸归一化至224×224像素。文中原始PlantVillage工程样本在经过欠采样和数据增强后,各类叶片的样本总数增加到73327张,本文随机选取其中的80%作为训练集,剩下的20%作为测试集,其中38个类别分别标注为C1~C38。部分增强后的样本示例如图1所示。

2 模型结构

2.1 经典SqueezeNet模型

近年来卷积神经网络的层数不断增加,从7层的AlexNet[23]到 16 层的 VGGNet[24],再到 22 层的GoogleNet[25]、152层的ResNet[26],更有上千层的复杂网络,虽然网络性能得到了提高,但随之而来的就是效率问题。效率问题主要是指模型存储及模型预测计算量问题,只有解决效率问题,才能让CNN走出实验室,更广泛地应用于日常生活当中。对此,通常的方法是在已经训练好的模型上进行压缩,使网络携带更少的参数,从而解决内存及速度问题。相比之下,轻量化模型设计则是另辟蹊径,其主要思想在于设计更高效的“网络计算方式”从而使网络参数减少的同时不过多损失网络性能。本文主要研究了轻量级卷积网络SqueezeNet[21],并在其基础上提出了多种改进模型以满足叶片病害识别的任务需求。经典SqueezeNet内部参数如表1所示,图2为其直观的结构图,方便与后续改进结构的对照。

表1 SqueezeNet的内部参数 Table 1 Internal parameters of SqueezeNet

如图2所示,该架构中共有3个最大池化层分别标识为池化层A、B和C。每通过一个池化层,图像的大小就变为原来的一半以减少计算量。卷积层10采用1×1的卷积核,输入通道为512,输出通道为1000,输出图像大小为14×14像素。卷积层10的输出经过全局平均池化,并通过softmax计算得到1000种分类的概率,其中全局平均池化是指将每个输出通道特征图求取平均值,使得该层输出特征维数等于该层的输出通道数。

如图3所示,SqueezeNet的核心在于fire模块,它由两部分构成,分别是squeeze层和expand层。通常定义一个fire模块为fire(M,N,E1,E2),其中M、N分别代表squeeze层的输入、输出通道数,E1、E2分别代表expand层中1×1、3×3卷积核的输出通道数目。

图3中,squeeze层是一个卷积核为1×1的卷积层,它把输入通道从M变到N,通常N小于M,squeeze层主要用来对输入通道进行压缩,以减少网络的计算量;expand层是包含1×1和3×3两种卷积核的卷积层,1×1卷积核、3×3卷积核分别将输入通道从N扩张成E1与E2,最后把1×1和3×3得到的特征图进行拼接,得到输出通道为(E1+E2)的特征图。

为引入非线性并使深度学习模型产生强大的表示能力,模型中在每个卷积层后都添加了激活函数ReLU[27]。为了避免网络过拟合的发生,对全连接层引入了随机失活(dropout)[28]。随机失活就是对某层的每个神经元,在训练阶段均以概率p随机将该神经元的权重置为0。在测试阶段所有神经元均为激活态,但其权重须乘上系数(1-p)以保证训练和测试阶段各自权重拥有相同的期望值。

2.2 改进模型设计

改造上述网络,并利用其对PlantVillage开源叶片数据进行分类。由于只需要识别26类病害及12类健康叶片,两者合计38类,因此将图2中卷积层10的输出通道数从1000修改为38,将此仅修改卷积层10参数的模型标识为改进模型0,并将其作为后续改进的基础模型。

改进模型0的参数可以用经典的SqueezeNet的网络参数进行初始化。这里采用迁移学习方法,迁移学习就是将一个庞大而复杂的模型所学习到的知识,通过一定的技术手段迁移到另一模型上。考虑到大部分数据或任务是存在相关性的,所以通过迁移学习可以将已经学到的模型参数通过某种方式来分享给新模型从而加快并优化模型的学习,而不需要从零开始。

注意到经典SqueezeNet模型是对ImageNet数据库进行分类的,该数据库包含了1000类物体。而本文只需要对38类叶片进行分类,对于相对简单些的任务并不需要很深的网络结构。为了最大限度减少模型参数并保持网络在PlantVillage数据库上的性能,对改进模型0做修改:移除fire模块6、7和8,并把fire模块5的参数修改为fire(256,32,256,256),即把该模块中squeeze层的输出通道由48减少为32,同时把expand层的输出通道由192增加为256,修改后的网络结构如图4a所示,文中将其标识为改进模型1。

注意到3×3的卷积核共有9个参数,进行一次卷积需要进行9次浮点乘法和1次浮点加法运算。而1×1的卷积核只有1个参数,进行一次卷积运算只需要进行1次浮点乘法运算,所以1×1的卷积运算量和参数量都约是3×3卷积的1/9[20]。

基于此原理,考虑把部分3×3的卷积核用1×1的卷积核来代替,这样既可以减少参数数量,同时又可以大幅减少计算量。改进模型2就是把改进模型1中所有fire模块expand层中1×1和3×3的卷积核数目比例按3∶1的重新分配,图4b显示了改进模型2的架构。

下面以经典SqueezeNet结构中的fire模块1为例进行expand层中2种卷积核数目重新分配及其计算量减少的说明。

图5a显示的是原始的fire模块1。其Expend层分为左边的卷积核为1×1的分支和右边的卷积核为3×3的分支,每个分支都各有64个输出通道。Fire模块1的输出为这两个分支的拼接,总通道数为128。图5b显示的是改进后的fire模块1。主要的改进在于把右分支中卷积核为3×3的输出通道由64减少为原来的一半(32个输出通道)。为了保证总的输出通道数不变,把这减少的32个输出通道移到左边的卷积核为1×1的分支上。经过改进后fire模块1的输入与输出通道数保持不变,expend层的参数由原来的10240个减少到了6144个,大幅减少了40%;expend层的运算量也由原来的 32.1 MFLOPs(Million Floating-point Operations,MFLOPs,百万次浮点运算)减少到了19.2 MFLOPs。

注意到改进模型2中共有5个fire模块(最大池化层A、B中间与最大池化层B、C中间各有2个,最后1个位于最大池化层C和卷积层10之间)。原始图片大小为224×224像素,通过第1个卷积层后,特征图大小变为112×112像素;通过最大池化层A后,特征图大小变为56×56像素;通过最大池化层B后,特征图大小变为28×28像素;通过最大池化层C后,特征图大小变为14×14像素。很显然,特征图的大小与深度学习架构的运算量有着紧密的关系。对fire模块2即fire(128,16,96,32),如将它从最大池化层A、B之间移动到最大池化层B、C之间,此时特征图大小变为移动前的1/4,因此相应计算量也会减少至移动前的1/4。基于此思想,在改进模型2的基础上,把fire模块2从最大池化层A、B之间移动到最大池化层B、C之间,提出改进模型3;在改进模型3的基础上,再把fire模块3、4从最大池化层B、C之间移动到最大池化层C之后,提出改进模型4。2种改进模型如图6所示。

3 模型训练

3.1 试验平台

试验软件环境为Ubuntu 16.04 LTS 64位系统,采用目前流行的PyTorch(https://pytorch.org/)深度学习开源框架。PyTorch是一个基于Torch的Python开源机器学习库,它主要由Facebook的人工智能小组开发,不仅能够实现强大的GPU加速,同时还支持动态神经网络。计算机内存为16GB,搭载Intel Core i5-8300 CPU,GPU采用英伟达的GTX1050Ti对深度学习模型进行加速。

3.2 参数设置与训练

试验中训练数据和测试数据的批次大小都设置为32,遍历一次训练集中的所有图片称作一次迭代(epoch)。由于采用了迁移学习技术,模型收敛速度很快,因而每个模型都只迭代了30次。训练模型时采用了随机梯度下降优化算法(Stochastic Gradient Descent,SGD)。为防止过拟合,采用了随机失活(dropout)技术,其参数p设置为0.5,初始学习率设置为0.01,每7次迭代(epoch)学习率减小为原来的10%。

本文训练具体采用anaconda环境,框架是pytorch10,训练30个epoch,每个epoch有3666次迭代,训练过程与结果分别如图7、图8所示。

3.3 评价指标

混淆矩阵定义中的变量定义如下:

TP,真实值为正且预测也为正的数量;TN,真实值为负且预测也为负的数量;FP,真实值为负但预测为正的数量;FN,真实值为正但预测为负的数量。

查准率(Precision)定义如下

查准率是分类器预测的正样本中预测正确的比例,取值范围为[0,1],取值越大表示模型预测能力越好。

查全率(recall)定义如下;

查全率又称召回率,是分类器预测正确的正样本占所有正样本的比例,取值范围为[0,1],取值越大模型预测能力越好。

准确率(accuracy,ACC)定义如下

在正、负样本不平衡的情况下,准确率这个评价指标有较大缺陷,因此需要综合运用这3个指标对算法模型进行科学和全面的评价[22]。

4 结果与分析

利用ImageNet数据集对5种改进模型进行预训练,之后在PlantVillage训练数据集上进行迁移学习,测试集上的试验结果如表2所示。

由表2可知,改进模型0与经典SqueezeNet非常类似,拥有2个卷积层(卷积层1和卷积层10)和8个fire模块,因此改进后的5种模型中模型0的准确率、查全率和查准率都是最高的,但是其参数内存需求及模型运算量在所有模型里最多,分别达到了2.91 MB和272 MFLOPs。

表2 改进模型的参数及性能 Table 2 Modified model parameters and performance

模型1在模型0的基础上删除了最后3个fire模块,减少了网络的深度,其内存需求大幅减小到0.908 MB,运算量也大幅减少到185 MFLOPs,准确率为98.76%。这说明仅简单应用迁移学习获取的模型0结构上存在一定程度的冗余,有着明显的改进空间。模型2是在模型1的基础上用1×1的卷积核代替部分3×3的卷积核,其内存需求进一步减少到了620 kB,运算量减少到131 MFLOPs,准确率为98.46%。这说明按3∶1的关系重新调整expand层的1×1和3×3的卷积核数量后,网络的性能仅有轻微的下降,但在节省参数内存及模型运算量上的收益却相当巨大。模型3、4在模型2的基础上仅调整了fire模块相对于池化层的位置。模型3的计算量减少到111 MFLOPs,准确率为98.13%;模型4的计算量进一步减少到76 MFLOPs,准确率为96.25%,下降略显明显。这说明特征图的大小对深度学习模型的性能有一定影响,在相对较大特征图上进行的特征抽取能在一定程度上改善网络的性能。

总体上各改进模型均表现较为优异,虽然在性能指标上依次呈现小幅下滑,但其参数内存需求及模型运算量却依次呈现出明显的逐级改善。综合来看,模型3具有更高的性价比,因此将其作为本文最终的改进结果。

表3显示了采用改进模型3在测试集38类测试图片上的分类准确率。

表3 Plant village测试集的分类准确率 Table 3 Classification accuracy of Plant village test set

由表3可以看出错较高的类别主要为玉米灰斑病、玉米北方叶枯病、番茄早疫病和番茄晚疫病,其图片如图9所示,可以看出这2组叶片的相似度较高,一定程度上造成误判。

由于文献[18-20]采用了相同的PlantVillage工程开源数据进行类似的模型轻量化研究,因此与本文方法具有一定的可比性,其中的方法均选自各自文献中PC端的最优或优化后的模型进行比较,其结果如表4所示。

表4 不同分类方法的主要性能比较 Table 4 Main performance comparisons of different classification methods

文献[18]基于改进的AlexNet结构,运用多种技术手段获取最优模型4的技术指标为:模型参数需求2.60 MB及平均识别准确率、查全率和查准率分别99.56%、99.41%、99.42%,四项性能指标均接近并略好于本文基础模型(模型0)的2.91 MB、99.29%、98.73%、98.78%。但本文最优模型3是在基础模型0上的改进,以较小幅度的性能牺牲进一步换取较大幅度的模型参数(0.62 MB)及计算量的减少,而且本文模型设计过程更为简明方便。文献[19]提出改进的多尺度感受野AlexNet模型,采用部分PlantVillage工程开源数据结合自建图像样本进行8种番茄叶片(7种病害加健康叶片)的识别研究并开发基于Android平台的识别系统。其模型参数需求达29.9 MB,均远高于本文的5种改进模型;其平均识别准确率(该准确率定义实际为召回率)为92.7%,均低于本文表2中的5种改进模型,这或许与该研究样本数量(8349张)明显偏少及自建样本质量下降存在一定关系。文献[20]在PC端采用MobileNet和Inception V32种轻量级卷积神经网络借助ImageNet数据集进行迁移学习,在PlantVillage数据集上取得95.02%和95.62%的平均识别率(该识别率定义实际也为召回率);在模型参数需求方面分别为17.1 MB与87.5 MB。这两项主要指标也均低于表2、表4中本文的5种改进模型。上述结果表明,与已有相关研究相比,本文在轻量级网络的基础上进一步提出的精简改进模型具有更好的性价比与竞争优势,更加适合尝试部署在嵌入式资源受限设备上。

图10a给出了5种改进模型的测试准确率与迭代次数关系曲线,由于采用了迁移学习,所有模型收敛迅速,其中模型0收敛最快,在第一次迭代后的准确率就达到了93.7%。其他改进模型在三次迭代后准确率都达到了93%以上;图10b给出了5种改进模型的预测误差与迭代次数的关系曲线,模型0、1、2和3在第七次迭代后的模型损失都一直稳定保持在0.1以下水平。

图11以苹果为例,给出4种不同苹果叶片的分类混淆矩阵。可以看出,378张果疮痂病叶片中有370张被正确识别,召回率为97.88%;373张黑腐病叶片中有371张被正确识别,召回率为99.46%;385张锈病叶片中有381张被正确识别,召回率为98.96%;329张健康叶片图片中有327张被准确识别,召回率为99.39%。这表明本文提出的模型具有较好的识别性能和鲁棒性。

5 结论

本文基于深度学习技术,提出将轻量级卷积神经网络应用于14类不同作物的38种不同病害叶片识别。在已有经典轻量级SqueezeNet模型的基础上,为进一步适应网络规模小型化和计算过程快速化的需求进行了改进,改进后的模型在识别性能基本保持不变的情况下,在参数内存需求和运算量上体现出明显的优越性,其中最优模型的参数内存需求从经典SqueezeNet的4.85 MB大幅减少到0.62 MB,模型计算量也从经典SqueezeNet的360 MFLOPs大幅减少到111 MFLOPs,平均准确率达到98.13%,平均查全率达到98.09%,平均查准率达到97.62%,与已有相关研究相比,具有一定的比较优势。

本文提出的模型较好的平衡了参数内存需求、网络运算量和网络性能这3个指标,在大幅减少模型参数内存要求和模型计算量的同时使模型的性能保持在了一个较高的水平,这有利于将卷积神经网络模型部署在移动终端等嵌入式资源受限设备上,有助于实现对作物病害的实时准确识别。下一步将在融入自然环境图像数据的基础上,尝试将本文模型移植到手机平台,以测试本文模型对于作物病害的实时识别效果。

猜你喜欢

运算量准确率卷积
基于3D-Winograd的快速卷积算法设计及FPGA实现
一种并行不对称空洞卷积模块①
乳腺超声检查诊断乳腺肿瘤的特异度及准确率分析
不同序列磁共振成像诊断脊柱损伤的临床准确率比较探讨
2015—2017 年宁夏各天气预报参考产品质量检验分析
颈椎病患者使用X线平片和CT影像诊断的临床准确率比照观察
用平面几何知识解平面解析几何题
从滤波器理解卷积
减少运算量的途径
基于傅里叶域卷积表示的目标跟踪算法