李建华,郝 炘,牛明雷,王俊伟,李平安,杨立国
(1. 天津市宝坻区朝霞街道办事处,天津301800;2. 天津农垦渤海农业集团有限公司,天津301823;3. 农业农村部工程建设服务中心,北京100081;4. 北京市植物保护站,北京100029;5. 湖南省益阳市桃江县农业局,益阳413499;6. 内蒙古自治区植保植检站,呼和浩特010010)
农作物病害是我国主要农业灾害之一,它具有种类多、影响大并时常暴发成灾的特点,不仅对农作物生产造成损失,还会对食品安全产生威胁[1]。农作物病害的正确诊断和鉴定,对保证作物产量、预防食品安全起着重要作用。识别病害需要专业人士进行鉴定分析、得出结论,但大多数种植人员专业知识较少、经验不足,因此迫切需要借助现代计算机和互联网技术实现农民通过拍摄病害叶子的图像来判断作物疾病,及时对疾病做出预防[2]。
随着深度学习和图像技术不断发展,利用高性能的并行计算集群,极大提高了计算速度,使得卷积神经网络(Convolutional Neural Network,CNN)在目标检测[3-5]和图像分类[6-7]方面取得了巨大的进步。弥补了传统的图像分类方法中,特征提取能力较差,经过复杂的图像预处理和分类算法之后无法根据获取到的特征表达进行分类的缺点。利用卷积神经网络结合计算机视觉技术识别农业病害已经成为当下研究的热点。Kawasaki等[8]利用卷积神经网络提出一种黄瓜叶病诊断系统,在甜瓜黄斑病毒和西葫芦黄花叶病毒和非病害类别方面达到94.9%的准确度。Sanyal等[9]根据水稻叶子颜色纹理诊断了褐斑病和稻瘟病的水稻病。李艳[10]提出了利用Fisher准则的卷积神经网络识别4种马铃薯病害,精度为87.04%。Srdjan等[11]利用卷积神经网络实现了对13种病害的识别,该模型还具有分辨植物叶片与其周围环境的能力,最终获得较高的识别率。Mohanty等[12]分别使用AlexNet和GoogLeNet模型训练,对农业相关网站(PlantVillage)中14种植物、59种病害以及部分健康植物的图像进行分类识别,识别精度分别可达到97.82%和99.35%。Brahimi等[13]收集了14 828张图像对番茄叶片59种病害种类识别,准确率达到99.18%。Jihen等[14]利用LeNet网络对香蕉病害进行分类,并取得了较高的识别率。
文章以10种农作物,59种病害为基础,提出了一种基于改进型的卷积神经网络的农作物病害识别方法。对常见病状进行等级划分并将每种植物健康叶片作为负样本加入数据集,得到35 861张数据集。利用随机失活(Dropout)和局部响应值归一化的方法以及稀疏连接的网络结构,设计了一种8层卷积神经网络,建立农作物病害识别模型,并验证模型有效性,实现对农作物日常出现疾病的诊断和预防。
该研究中的图像数据来源于AI Challenger 2018比赛中的植物病害数据集,对苹果、樱桃、玉米、葡萄、柑橘、桃树、辣椒、马铃薯、草莓和番茄10种植物的病害重新整理划分,将每种植物的健康叶片作为负样本加入到数据集中,避免网络的过拟合现象。数据集最终包含35 861张不同尺寸的病害叶片图像,由于神经网络要求输入图像的尺寸必须统一,因此利用图像填充法填充图像后再将尺寸缩放成227×227像素大小的图像。10种农作物的数据集中,由于一些疾病初期和后期的表现症状相差比较大,因此对这些不同程度的疾病分为不同类别,共59种类别,部分样本图像。如图1所示,部分典型病害根据特征是否明显划分为一般程度和严重程度,但像番茄花叶病毒病的发病程度外观不明显则作为一个类别。根据不同类别,整理网络所需要的数据,加入健康叶片作为负样本之后样本类别为59类,总数量为35 861张图像,如表1所示,并按照7∶1的比例将数据集样本划分为训练集31 370张图像和测试集4 491张图像。
利用卷积神经网络进行农作物病害分类,其关键部分在于叶片图像的特征提取,传统方法特征提取能力有限,具有极强特征提取能力的卷积神经网络使得图像分类迈入了一个新的阶段。LeNet是CNN的第一个典型网络结构[6],由两层卷积层、两层池化层以及三层全连接层构成。LeNet是典型的浅层网络的代表,但是该文数据集包含类别较多,LeNet无法较高准确率地完成病害分类。AlexNet[15]在ImageNet竞赛中对1 000种类别图像进行分类,以超过第二名10.9个百分点的绝对优势一举夺冠,在图像分类领域上获得了很好的成果,相比后期出现的深层网络,AlexNet设计更加简洁明了。农作物病害小样本分类时,深层网络过度提取特征容易导致过拟合,且训练速度和识别速度较慢,因此针对农作物病害的小样本数据集,该文设计了一种基于AlexNet卷积神经网络的农作物病害识别方法,能够实现快速训练和识别,如图2所示。
图1 部分农作物病害样本图像:(a)苹果黑星病一般(b)苹果黑星病严重(c)樱桃白粉病一般(d)樱桃白粉病严重(e)玉米灰斑病一般(f)玉米灰斑病严重(g)葡萄黑腐病一般(h)葡萄黑腐病严重(i)柑橘黄龙病一般(j)柑橘黄龙病严重(k)桃疮痂病一般(l)桃疮痂病严重(m)辣椒疮痂病一般(n)辣椒疮痂病严重(o)马铃薯晚疫病一般(p)马铃薯晚疫病严重(q)草莓叶枯病一般(r)草莓叶枯病严重Fig1 Partial sample image of crop diseases
表1 农作物病害训练集Table 1 Training set of crop diseases
图2 农作物病害识别卷积神经网络结构Fig.2 Agricultural crop disease identification convolutional neural network structure
AlexNet卷积网路由5个卷积层、3个最大池化层和3个全连接层组成,网络的参数结构以及图像经过每层之后的数据结果如表2所示。网络的输入层定义了输入图像的大小为227×227像素大小的RGB彩色图像,因此图像通道数为3。
表2 卷积神经网络各个阶段主要参数Table 2 Structure of Convolutional Neural Networks
表2列出了卷积神经网络AlexNet每一阶段的重要参数,其中LRN(Local Response Normalization)为局部响应值归一化,为局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
卷积层是由一个可训练的滤波器去卷积上一层输入的图像,输出图像的特征图。通过卷积运算可以使原信号增强、降低噪声信号,网络使用稀疏连接,改善了人工神经网络中参数冗余的缺点。在最后通过3层全连接层,对病害叶片的局部信息进行提取整合,最后一层全连接层参数设定为59,选取概率最大的类输出预测结果。
由于模型中参数较多而训练样本较少,训练结果容易出现过拟合现象,降低了网络的鲁棒性。因此AlexNet首次提出了Dropout,即随机失活方法。通过在最后两个全连接层中使用Dropout,按照一定的概率将网络中的神经元进行剔除,使得训练过程中部分神经元停止工作,有效缓解了过拟合的发生,达到了正则化效果。该文在AlexNet网络的全连接层中加入舍去概率为0.2的Dropout层,随机舍弃部分神经元,使其强制性失活,过滤特征中的冗余信息,使得模型的泛化能力更强,降低局部特征的依赖性。
该文使用随机梯度下降法(Stochastic Gradient Descent,SGD)进行训练,梯度下降法又被称为最速下降法(Steepest Descend Method),其理论基础是梯度的概念。梯度与方向导数的关系为:梯度的方向与取得最大方向导数值的方向一致,而梯度的模就是函数在该点的方向导数最大值。为了评估模型拟合好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。将训练集划分为多个小样本集分批进行训练,根据随机抽取的小样本数据的训练结果沿着梯度方向调整参数,加快迭代速度。
AlexNet网络在最后一层全连接层中使用了Softmax分类器对结果进行分类,从而得到不同类别的概率,而所有类别的概率之和为1。Softmax分类器的函数定义为:
式(1)中,ai(x)为类别i通道上的像素点x的输出值;C为类别,在该研究中C=59;yi(x)为像素点x属于类别i的概率。利用交叉熵损失函数计算下降梯度,其公式为:
式(2)中,p(xi)为图像i的真实标签,q(xi)为图像i的网络预测值,所有元素之和为损失函数的值。
在进行农作物病害识别模型训练中,该实验硬件环境中使用了两个GeForce GTX 2080Ti型GPU;软件环境为Ubuntu16.04操作系统以及Tensorflow深度学习框架,其中Keras的版本为2.2.4,CUDA API的版本为9.1,cuDNN的版本为9.0;算法实现语言采用Python3.6.3版本。
利用准备好的训练集对农作物病害识别模型进行训练,训练过程中利用交叉验证(Cross Validation)法中的留出法将数据集按照7∶1的比例分为训练集与测试集,其中训练集按照9∶1的比例划分为训练部分和验证部分。在实际训练过程中,每当训练的样本批次数量为10的倍数时,进行一次验证集验证识别率。借此可以更加直观分析模型的过拟合程度以及训练效果。
该实验将样本训练迭代次数设置为20次,学习率为0.000 1,每迭代一次输入的样本数量为50张图像。在图像输入网络之前将每个图像填充缩放到227×227像素,并进行归一化处理。在对样本进行训练时,根据每次迭代之后计算的损失函数的损失值和训练精度值,利用SGD和反向传播算法沿着小样本梯度下降的方向优化网络参数。如图3所示为训练集和验证集每轮训练的损失值和精度值变化曲线。
图3(a)为农作物病害模型训练过程中训练集的损失值和精度值,图(b)为验证集的损失值和精度值,整体而言,模型训练过程中的损失值呈下降趋势,精度值呈上升趋势,其数值经历了快速收敛后呈现在较小范围内震荡趋势。比较训练集和验证集的曲线变化趋势可知,两者间损失值和精度值的变化趋势基本一致,说明网络整体收敛较好,未出现过拟合情况,且收敛速度较快,模型在11~20轮之间趋于稳定。
为了比较不同迭代次数对模型性能的影响,对农作物病害模型进行训练,每50轮保存一次模型,训练轮数为200轮时停止,利用测试集测试每50轮模型的预测结果,如表3所示。
表3 不同训练轮数的模型性能Table 3 Model performance of different training rounds
从表3可以看出,随着迭代次数的不断增加,网络收敛越来越好,但当迭代次数增加到一定程度时,模型的损失函数值不下降且还有上升趋势,精度值也不再上升,在0.83±0.03之间震荡,模型在测试集上预测的正确率也不再增加。由此可知,当模型收敛良好时,增加迭代次数后模型的性能不再提升。
表4为农作物病害模型在测试集上的测试结果,模型综合可达到0.83的高识别率,由于一些类别样本数量较少,类别特征较弱,模型对此类样本识别率较低,因此需要增加样本数量和多样性来提升模型对农作物病害的识别能力。
表4 农作物病害模型对每种病害的识别结果Table 4 Identification results of each disease in the crop disease model
该文基于深度学习技术和图像处理算法,利用卷积神经网络AlexNet进行了农作物病害识别模型构建。使用10种农作物59种类的数据集对网络进行训练,统计每种病害的识别率,利用深度学习训练平台,不断地迭代训练网络,设计了9组不同的迭代步数的对比实验。实验结果表明,该文模型总体达到了0.83的高识别率,较多种类的识别率达到0.96~1.0的识别率。模型会随着迭代次数的增加收敛越来越好,但当网络收敛到一定程度时,迭代次数便不能提高模型的性能。证明该研究基于卷积神经网络的农作物病害识别,在有充足的数据量进行训练时,可以获得更高的识别率。但是真实环境中,光照程度不同,会影响图像的质量,对于强光或弱光情况下的图像,识别率会降低,光照情况对于整个图像研究领域都具有较大挑战性,因此对于使用卷积神经网络实现农作物病害识别的应用,还需进一步实验,增强网络的鲁棒性,如增加不同光照实验,采集不同光照下的病害图像,进一步训练,优化改进网络。