胡伟健,樊杰,杜永兴,李宝山,李灵芳,杨颜博
(内蒙古科技大学 信息工程学院,内蒙古 包头 014010)
农作物疾病是影响农业生产产量与质量的主要因素之一.农作物感染疾病后一般会有变色、坏死、畸形、腐烂以及萎蔫等表现,大部分疾病现象都会体现在农作物的叶片上,通过农作物叶片来判断疾病已经成为农业领域的常用手段之一[1].传统的农作物疾病识别由农民在田间完成,疾病诊断和农药使用不正确的现象屡见不鲜[2].不仅如此,传统的人工判断方法具有耗时耗力、工作量大、效率低,人为主观因素起主要作用等不足之处[3].
随着人工智能技术的不断发展,越来越多的学者将深度学习引入到农作物病症识别中,并取得了不错的效果.2018年廖经纬等[4]采用AlexNet模型,对38种不同分类的植物病害进行识别,识别率达到98.43%.2018年郑一力等[5]基于迁移学习,采用AlexNet,InceptionV3模型对植物病症叶片进行识别,在测试集上达到95.31%和95.40%的准确率.2018年张立超等[6]采用LeNet-5模型,将全连接层的激活函数由ReLu改为LeakyReLu,对红富士和红元帅2种类型的苹果病症进行识别,达到理想的效果.2018年李凯雨等[7]采用AlexNet,VGG-16和GoogleNet 3种深度卷积神经网络模型,并将其与迁移学习和微调相结合用于3类农作物7种病害的图像识别,结果表明使用VGG-16模型效果较好,病害的平均识别率达到98.92%.2018年MA J等[2]通过构建DCNN模型并采用数据增强方法来扩充数据集,对黄瓜炭疽病,霜霉病,白粉病和目标叶斑病4种病虫害进行识别,准确率达到了93.4%.2018年RANGARAJAN A K等[8]采用AlexNet和VGG16模型,通过分析图像数量和超参数对模型的影响,进而对番茄叶片病症图片进行识别.2018年ZHU H Y等[9]采用深度卷积神经网络VGG19,对植物的不同器官进行特征提取进而对植物种类进行识别,并与SVM进行对比.2018年IQBAL Z等[10]利用图像处理技术,对柑橘类农作物的病虫害进行了自动检测和识别.相比于传统的方法,不仅提高了农作物疾病的识别效率,同时识别准确率也得到了提升.
综上所述,利用深度学习的方式对农作物病症进行识别已经取得了不错的效果.但是,在实际诊断和治疗的过程中,疾病的不同严重程度往往直接决定了治疗方案.一般严重程度的疾病与特别严重程度的疾病在用药类型和剂量上都会存在差异,错误的用药不仅会导致疾病不能及时正确治疗,而且会导致环境污染.因此,如何在正确诊断农作物疾病的前提下,进一步识别出疾病的严重程度,成为了农作物病症识别中新的挑战.本文着眼于番茄病症的细粒度识别,将每种病症分为一般、严重2种程度,使用深度神经网络中具有更深层次的深度残差神经网络作为模型,在正确识别番茄病症的基础上,能够准确识别出每种病症的严重程度.实验中,对番茄的7种粗粒度疾病,14种细粒度病症进行了识别,并取得了不错的识别效果.
在一般的深度学习网络中,随着网络层数的加深也带来了难以训练、梯度消失、梯度爆炸和网络退化等问题,使得网络的加深对性能提高并没有显著效果[11].2016年,何凯明等[12]人在VGG网络的基础上提出了残差网络,引入了残差块解决了这些问题.残差块的思想就是在标准的前馈卷积网络上,加上一个跳跃绕过一些层的连接.每绕过一层就产生一个残差块,卷积层预测加输入张量的残差.图1所示为残差块示意图,其中x表示残差块的输入,F(x)+x表示残差块的输出,而F(x)代表残差.本文采用的残差块有2种:恒等残差块和卷积残差块.这2种残差块的主要差别是跳跃连接上是否进行了卷积操作.
本文采用的残差网络主要包含5部分:第一部分包括3层:卷积层、BatchNorm层和ReLu激活层;第二部分包括4层:MaxPooling层、1个恒等残差块和2个卷积残差块;第三部分包括4层:1个恒等残差块和3个卷积残差块;第四部分包括6层:1个恒等残差块和5个卷积残差块;第五部分包括3层:1个恒等残差块和2个卷积残差块.为了更好地训练模型,使用自适应优化器Adam取代传统网络中的SGD优化器.
本文采用的数据集来自2018 年AI挑战大赛(https://challenger.ai/),其中包含番茄白粉病(一般、严重)、番茄早疫病(一般、严重)、番茄晚疫病(一般、严重)、番茄叶霉病(一般、严重)、番茄斑枯病(一般、严重)、番茄红蜘蛛损伤(一般、严重)以及番茄黄化曲叶病毒病(一般、严重)7种番茄疾病,共14个细粒度种类.一共包含了11 359张图片.
由于原始数据集中图片的来源不同,在拍摄过程中所使用的设备、拍摄环境等因素的不同,造成了每一类图片数量参差不齐、图片大小不一致等问题.为了能够更好地进行模型训练,在数据预处理中,使用可数据增强和数据归一化来处理图片.
数据集中,图片数量最少一类只有251张图片,最多一类有2 473张图片.本文采用水平翻转与旋转的数据增强方式,将类别少于1 000张图片数量的补齐1 000张,图片数量多于1 000张的舍去,这样保证每一类的图片数量都为1 000张.数据增强后的数据集一共包含了15 419张图片,其中11 200张图片作为训练集,2 800张作为验证集、1 419张图片作为测试集.实验时为了区分二者,将数据增强前所使用的数据集称为不平衡数据集,使用不平衡数据集的模型称为UNB-ResNet50,数据增强后所使用的数据集称为平衡数据集,使用平衡数据集的模型称为B-ResNet50.
最后,为了图片数据更好地适应模型,解决图片大小不一致问题,提高模型训练效率,在实验前利用数据归一化处理将数据集的图片统一归一化为224像素×224像素.
本次实验在GPU环境下进行,使用了基于Tensorflow的Keras框架,其中CUDA与Tensorflow都是9.0版本,运行环境为Anaconda,处理器为Intel(R) Core(TM) i7-7800X,操作系统为Windows10,系统内存8G.
实验一的目的是验证UNB-ResNet50和B-ResNet50随着训练的不断深入,训练集准确度、损失值与验证集准确度、损失值的变化.在实验一中,训练轮数(Epoch)选取为0~40.图2(a)为各个损失值随Epoch的变化曲线,可以看出:
随着Epoch的不断增加,各个损失值均不断下降,当Epoch为0~20时,损失值下降明显;当Epoch为20~40基本趋于平稳,说明Epoch在20以后,模型逐步趋近于收敛;Epoch在40时,损失值几乎不变,说明模型训练已完成;
B-ResNet50的训练集损失和验证集损失在各个Epoch下均明显高于UNB-ResNet50的训练损失和验证损失,说明B-ResNet50模型的训练效果优于UNB-ResNet50.
图2(b)为各个精确度随Epoch的变化曲线,可以看出:
(1)随着Epoch的不断增加,各个精确度均不断上升,当Epoch为0~15时,精确度提升明显;当Epoch为15~40逐渐趋于平稳;当Epoch为40时,精确度几乎不再变化,说明模型逐步达到最佳识别效果;
(2)B-ResNet50的训练集精确度和验证集精确度在各个Epoch下均明显高于UNB-ResNet50的训练精确度和验证精确度,说明B-ResNet50具有更好的识别效果.
综上,由实验一可以看出,B-ResNet50与UNB-ResNet50随着训练轮数的不断增加,其识别效果也在不断提升,在本实验中,当Epoch趋近于40时,模型训练完成,识别效果达到最优;B-ResNet50对于模型的训练效果优于UNB-ResNet50的训练效果,说明平衡数据集更加有力于模型的训练,提升模型识别准确率.
实验二的目的是验证UNB-ResNet50和B-ResNet50对14个种类的细粒度识别效果,使用实验一中训练好的模型,利用测试数据,分别从准确率、召回率与F1值3个方面进行对比,对比结果如表1所示,由表1可以看出:
(1)在准确率方面:B-ResNet50在10个种类的准确率上优于UNB-ResNet50,平均提升5.49%,最高提升21.05%,说明B-ResNet50的识别准确率明显优于UNB-ResNet50;
(2)在召回率方面:B-ResNet50在8个种类的召回率上优于UNB-ResNet50,平均提升1.17%,最高提升12.56%,说明B-ResNet50的识别召回率明显优于UNB-ResNet50;
(3)在F1值方面:B-ResNet50在12个种类的F1值上优于UNB-ResNet50,平均提升3.33%,最高提升8.21%,说明B-ResNet50的识别F1值明显优于UNB-ResNet50;
(4)在整体识别准确率方面,B-ResNet50较UNB-ResNet50有0.78%的提升.
表1 番茄细粒度病害识别的实验结果
综上所述,由实验二可以看出,测试数据中,B-ResNet50的表现仍优于UNB-ResNet50,说明B-ResNet50对于细粒度番茄病症识别具有更好的效果;B-ResNet50在细粒度番茄疾病的识别中达到了整体81.68%的识别准确率,在分类识别中,取得了最高88.33%的识别准确率、最高98.44%的召回率以及最高92.01的F1值.
实验三用于验证深度残差神经网络在细粒度番茄病症识别中的效果,实验中选取了目前广泛用于农作物病症识别的VGG-19[14],AlexNet[15]模型,与UNB-ResNet50,B-ResNet50模型进行对比.分别对比了在粗粒度番茄病症识别与细粒度番茄病症识别的识别准确度和训练时间,其结果如表2所示.
(1)在准确率方面:提出的B-ResNet50模型准确率最高,在细粒度上准确率达到了81.68%,比UNB-ResNet50,AlexNet与VGG-19分别高出了0.78%,0.51%和3.31%.在粗粒度上达到了97.18%,比UNB-ResNet50,AlexNet与VGG-19分别高出了1.27%,0.56%和2.24%.说明B-ResNet50在细粒度病症和粗粒度病症上的识别效果上优于UNB-ResNet50,AlexNet与VGG-19.
(2)在训练时间方面:因AlexNet模型的网络层数相比于其他2个模型要少,所以在细粒度与粗粒度上所花费的训练时间都是最少的.
表2 各个模型的结果对比
实验中,虽然B-ResNet50相较于其他模型,有更好地识别效果,但是其在细粒度疾病识别的准确率方面并不十分理想.为了具体分析其中原因,将识别错误的样本情况进行汇总分析,分析结果如表3.由表3可以看出,每一类的识别错误情况主要出现在将某一种病的一般程度与严重程度的识别中,例如类别0中共有8张图片识别错误,而这8张图片被识别类别1;类别12中有25张识别错误,而这25张中有22张被识别为类别13.图3为番茄叶霉病的一般与严重2种程度图片对比,可以看出2种程度图片较为相似,区分具有十分大的难度.
表3 错误识别样本的分析
通过对错误样本的分析不难发现,虽然B-ResNet50已经取得了不错的识别效果,但是其在疾病图片细节特征的提取与相似度较高的图片分辨上,仍然有很大进步空间.实验三中将病症的一般和严重2种等级进行合并,对7类粗粒度疾病进行识别,整体准确率达到97.18%,相较于细粒度准确率有15.5%的提升,也验证了这个问题.
针对于农作物疾病的识别工作,将深度残差神经网络应用到了番茄疾病的细粒度识别任务中,提出了一种基于深度残差神经网络的细粒度番茄疾病识别方法.通过对比实验,观察了深度残差神经网络的训练过程,验证了平衡数据集与不平衡数据集对模型训练以及模型效果的影响,同时与当下使用较多的AlexNet,VGG-19模型进行了对比.最后,对识别错误的样本进行原因分析,找到错误原因,为模型的改进与后续工作提供了支持.
虽然所使用的B-ResNet在粗粒度和细粒度番茄病症识别任务中都取得了良好的识别效果,但是细粒度番茄病症识别效果相较于粗粒度的识别效果仍有很大进步空间,主要问题集中于对同一种疾病的不同程度的区分.在接下来的工作中,将从图片特征提取与模型改进的角度出发,提高模型在细粒度病害识别上的准确率.