APP下载

基于YOLO V3的葡萄病害人工智能识别系统

2022-12-19王超学王白暄马春森

植物保护 2022年6期
关键词:葡萄病害精度

王超学,祁 昕,马 罡,朱 亮,王白暄,马春森*

(1.西安建筑科技大学信息与控制工程学院,西安 710311;2.中国农业科学院植物保护研究所,植物病虫害生物学国家重点实验室,北京 100193)

葡萄在全球水果生产中占有重要地位。据国际葡萄与葡萄酒组织(International Organization of Vine and Wine,OIV)统计,2019年全球葡萄种植面积为740万hm2,中国葡萄种植面积为85.5万hm2,位居世界第二[1]。病虫害的侵蚀不仅导致葡萄的质量和产量下降,严重时甚至会导致葡萄植株死亡。葡萄病虫害种类繁多,防治困难,葡萄病虫害的防治对于葡萄产业的发展具有重要意义,而葡萄病害的高效识别是开展葡萄病虫害防治的基础和关键。目前葡萄病害的人工智能识别方法已有一些研究报道。

王小霞等[2]通过改进传统BP算法构建出了基于模糊神经网络的农业病害诊断通用平台。Liu等[3]使用支持向量机(support vector machine,SVM)提取葡萄叶片图像中的颜色和纹理信息来加速‘设拉子’和‘赤霞珠’两个葡萄品种的识别,准确率达到87%。孙俊等[4]提出了一种批归一化与全局池化相结合的卷积神经网络(convolutional neural networks,CNN)识别模型,在PlantVillage数据集上达到99.56%的准确率,可识别3类葡萄病害。王利伟等[5]利用SVM对葡萄叶部常见病害进行自动识别,与其他核函数相比,径向基核函数对葡萄叶部病害测试样本的识别率最高,正确率达95%。刘阗宇等[6]提出一种基于改进Faster R-CNN网络的葡萄叶片病害识别方法,对6种常见病害的识别精度达到75.52%。Arnal Barbedo[7]利用单个病斑而非整个叶片来自动识别植物病害,对10种植物病害的识别准确率均高于75%。Agarwal等[8]使用卷积神经网络模型分析叶片图像来识别葡萄的早期病害,模型性能优于传统的机器学习算法,准确率达到了99%。Zhu等[9]提出了一种基于图像分析和反向传播神经网络(back propagation neural network,BPNN)的葡萄叶片病害识别方法,对5种葡萄叶部病害的识别精度达到91%。Jaisakthi等[10]使用SVM从图像中分割出葡萄叶片,精度达到93%。Militante等[11]使用改进的CNN模型来检测和识别苹果、玉米、葡萄、马铃薯、甘蔗和番茄的病害,达到了96.5%的准确率。Bharate等[12]使用最邻近节点算法(K-nearest Neighbor,KNN)将给定的葡萄叶片分类为健康和非健康,准确率达到90%。Singh等[13]提出了一种使用SVM从葡萄叶图像样本中发现黑麻疹病的方法,准确率达到97.2%。何欣等[14]提出了一种基于多尺度残差神经网络(multi-scale ResNet)的葡萄叶片病害识别方法,与原始的残差神经网络(ResNet)和SVM相比,多尺度残差神经网络平均识别准确率分别提高了1.12%和26.56%。Liu等[15]通过优化YOLO V3(you only look once V3)目标检测算法的特征提取网络建立了番茄病虫害识别模型,识别精度达到92.39%。Gutiérrez等[16]使用图像分割方法对有霜霉病、叶螨和无症状叶片进行分类,准确率达94%。

可见深度学习是葡萄病害识别研究的热点,但是目前普遍都是针对部分葡萄病害进行识别,且目标数据集的样本数量较少。本文在前人研究的基础上,特别是从Liu等[15]使用YOLO V3目标检测算法对番茄病虫害进行识别受到启发,引入EfficientNet网络替换YOLO V3算法的主干网络形成改进的YOLO V3算法进行葡萄病害识别,通过依托植物病虫害生物学国家重点实验室建立了全国性的葡萄病害权威数据集,经过训练得到一种自然环境下葡萄病害图像识别模型,再将其部署到基于微信小程序开发的葡萄病虫害识别系统上,对葡萄病害和健康葡萄果实、健康葡萄叶片目标进行高效识别。以供使用者上传葡萄病害图片来获取识别结果、病害特征、发病原因、病害地理分布和防治建议以及将未知葡萄病害提供专家研究。

1 材料与方法

1.1 系统技术路线

葡萄病害智能识别系统基于微信小程序开发,由微信小程序、云服务器和基于YOLO V3的葡萄病害识别模型组成(图1)。使用者通过手机端打开微信小程序,拍照或上传葡萄病害图片,经云服务器送入葡萄病害智能识别模型中识别,识别结果反馈展示在病害详情页面,支持使用者保存识别结果。在病害库中使用者可查阅12种葡萄病害信息,并可使用意见反馈功能提交葡萄病害图片来完善葡萄病害数据集。

1.2 数据集与其预处理

本研究试验环境为Pytorch 1.7.1框架,操作系统为Windows 10系统,开发平台为PyCharm 2020,Python版本为3.8,CPU为8核AMD R7 5800X,主频4.2 GHz,内存16 Gb,GPU为NVIDIA GeForce RTX 3070,Anaconda的cudatoolkit版本为11.0.221。

在植物病虫害生物学国家重点实验室专家的帮助下,筛选出12类葡萄病害和健康葡萄果实、健康葡萄叶片共14类目标的原始图像,合计2 566张作为试验的初始数据集,由于原始数据集中各类图像数据不均衡,会使训练出的模型出现过拟合、泛化能力差等问题,所以需要对原始葡萄病害图像进行预处理。

图1 葡萄病害智能识别系统技术路线图Fig.1 Technical roadmap of the intelligent identification system of grape diseases

数据预处理的关键有两点,其一是标注图像数据,其二是处理原始数据不平衡问题。在标注图像数据时,根据葡萄病害的发病特征,将图片分为两大类:第一类为害位置散布于葡萄果实、叶片和果梗,标注病害名称时,将各病害的果实、叶片和果梗的为害状统一标记为一类。标注为害区域时,对葡萄果实为害状以一串葡萄果实为单位进行标记;对叶部为害状以一片葡萄叶片为单位进行标记;对果梗为害状由于为害边界不明显,仅标记为害特征最为显著的区域。第二类为害位置主要集中在叶片,由于叶片较密集,且叶片覆盖重叠,边界不明晰,以整体为害区域为单位进行标记。对于该类中葡萄缺素症的标记,由于造成葡萄缺素的元素种类较多,本文统一标记为葡萄缺素症。另外,本文将同一种葡萄病害的不同发病时期归为一类进行标记。

针对原始数据不平衡问题,由于大部分葡萄病害为害状特征较为明显,本文使用重采样方法,即使用数据增强的方法扩充现有数据集,使各类样本达到均衡。通过对图像进行旋转、缩放、裁剪、添加高斯噪声等方式对14类葡萄图像进行扩充,使各类别图像数据在分布均衡的基础上增加训练集的数量,经过处理后的图像效果如图2所示,其中图a、b、c分别对应葡萄霜霉病、葡萄炭疽病、葡萄卷叶病的为害状,各类中左起第一张为病害原始为害图,其余4张为经过数据增强后的图像。扩充后各类别图像数量基本达到均衡,如图3所示,葡萄病害数据集达到32 871张。

1.3 基于深度学习的葡萄病害识别模型

2016年,Redmon等[17]提出了用于目标检测的YOLO(you only look once)算法。目前应用最为广泛的是其在2018年提出的YOLO V3算法[18]。YOLO V3算法使用了Darknet-53作为主干网络,Darknet-53网络性能与ResNet-152网络性能相当[18],而2019年Tan等提出的EfficientNet网络[19]是通过模型复合缩放同时平衡图像分辨率、训练网络的深度和宽度来实现网络优化。

通常情况下1个神经网络有多个结构相同的卷积层,如果将多个结构相同的卷积层称为1个stage,那么卷积网络N可以改为(1)式[19]:

(1)

其中,⊙为Hadamard乘积,表示对应位置元素相乘。i表示stage的序号,Fi表示对第i层卷积运算,Li是Fi在第i个stage中有Li个相同结构的卷积层,〈Hi,Wi,Ci〉表示第i层输入的shape。Hi和Wi是图像的分辨率,Ci是通道数,Li是网络的深度。通过调整和平衡3个维度的系数,在相同计算量下可以获得精度更高的网络模型。通过引入一个混合系数φ来统一3种维度系数的变化,变化方法为(2)式[19]:

(2)

以MnasNet的基本模块MBConv为搜索空间[20],搜索出基准网络EfficientNet-B0,然后固定φ=1,采用网络搜索的方法,搜索出最佳组合是α=1.2,β=1.1,γ=1.15,再通过固定这3个系数,逐渐放大φ,从而获得EfficientNet的B1~B7的网络结构。比较本文数据集和EfficientNet的B0~B7网络的参数[20]后,选择EfficientNet-B3网络作为模型的主干特征提取网络。EfficientNet网络的baseline结构如表1所示。

图2 葡萄病害及其数据增强效果Fig.2 Grape diseases and data enhancement results

图3 数据增强后的葡萄病害数据集Fig.3 Enhanced data set of grape diseases

表1 EfficientNet网络的baseline结构Table 1 Baseline structure of the EfficientNet network

该网络的性能普遍优于ResNet网络[19],相比于EfficientNet-B0的18层卷积结构,Darknet-53的网络结构较为复杂,且EfficientNet网络中的复合缩放方法更倾向聚焦于与更多目标细节相关的区域[21],由于待检测的部分葡萄病害具有较为相似的危害特征,例如葡萄黑痘病与葡萄炭疽病均为斑块状分布,葡萄黑腐病与葡萄褐斑病的危害状叶片较为相似,所以将EfficientNet网络应用于YOLO V3算法作为其主干网络利于提取葡萄病害危害特征,更加适合对葡萄病害进行识别。葡萄病害识别模型的整体结构如图4所示。

图4 葡萄病害识别模型整体结构示意Fig.4 The overall structure of the grape disease recognition model

1.4 模型参数与训练设置

在YOLO V3算法中作者提出了3种分辨率,分别是320×320、416×416、608×608[18],本文选取的输入图像分辨率为416×416,这样既满足了不同适用对象使用葡萄病害模型时的图像精度,又在降低模型运算量的基础上保证了本模型的识别效率。

由于葡萄病害叶片目标普遍偏大,需要对原有先验框大小进行调整,原有先验框大小为:[10,13][16,30][33,23][30,61][62,45][59,119][116,90][156,198][373,326],本文使用K-means++聚类算法[22]对数据集所有样本的目标标记信息进行聚类分析,如图5所示,改进后的先验框大小为:[79,96][116,168][168,256][193,164][205,347][298,253][300,381][359,336][391,397]。

图5 K-means++聚类分析结果Fig.5 Cluster analysis results by using K-means++

迁移学习能够在减少模型训练时间的同时防止模型过拟合,所以本文模型使用迁移学习思想进行训练。利用EfficientNet的B0~B4网络在VOC(visual object classes challenge)数据集上预训练好的权重对本文数据集进行训练,以避免训练期间发生梯度消失或梯度爆炸,模型分两个阶段进行训练,首先冻结训练50 epoch,解冻后训练100 epoch,共训练150 epoch,冻结网络部分和非冻结网络部分的学习率分别设置为0.001和0.000 1,Batch_size大小分别设置为32和4,两部分训练均使用Adam优化器,gamma值设置为0.95,输出为13×13、26×26、52×52共3个尺度,适合不同尺寸的葡萄病害识别。图6为葡萄病害识别模型训练时的损失函数图像,可以看出随着训练代数的增加,训练集和测试集上的loss均不断下降,且模型收敛速度很快,说明模型训练有效。

图6 葡萄病害识别模型的损失函数图Fig.6 Loss function of grape disease recognition model

1.5 基于微信小程序的葡萄病害识别系统

使用微信开发者工具实现葡萄病害识别系统微信小程序,其核心功能包括葡萄病害信息查询、葡萄病害图像采集和上传、识别结果的反馈及保存、未成功识别出的葡萄病害图像信息收集等功能。微信小程序使用wxml设计页面结构,使用wxss设计模块组件样式,使用JavaScript实现页面跳转和前后端的交互逻辑。

葡萄病害图像采集模块中,小程序提供拍照和本地相册上传两种采集方式,将wxml中的按钮属性data-category设置camera为拍照上传,设置album则为从本地相册上传葡萄病害图像,使用微信小程序提供的wx.chooseImage接口函数选取照片,使用wx.uploadFile接口函数上传已选取的本地图片到云服务器中。识别结果模块将模型计算结果的图片云链接传给前端,成功后将识别结果的云链接作为字符串保存在前端,在识别结果展现页面调取此链接。

针对未成功识别出的信息收集,当部署在服务器的模型未识别此图片,页面将引导使用者将此图片上传至小程序的云服务器,具体使用wx.cloud.uploadFile接口函数,我们将收集此图片作为训练样本。葡萄病害的详细信息预储存在微信小程序的云服务器中以备检索。

2 结果与分析

2.1 模型精度与识别效果

本文使用均值平均精度(mean average precision,mAP)、模型平均训练时间、模型大小和参数量对模型进行评估。均值平均精度是各类别平均精度(average precision,AP)的均值,AP是每个类别的精度(precision)和召回率(recall)所围成的曲线面积,模型在每个类别上的精确程度,精度和召回率由(3)~(4)式表示:

(3)

(4)

TP(true positives)指被分类器正确分类的正样本。FP(false positives)指被分类器错误分类的负样本,FN(false negatives)指被分类器错误分类的正样本。精度(precision)指分类器正确分类的正样本占分类器认为是正样本的比例,召回率(recall)指分类器正确分类的正样本占所有正样本的比例。

通过绘制不同模型在不同epoch时的mAP可以发现,在75 epoch以后,8种模型的mAP均平稳增加,在105 epoch后趋于稳定(图7)。可以看到5种以EfficientNet网络结构作为主干特征提取网络的YOLO V3模型均值平均精度表现均好于Faster R-CNN、YOLO V3、RetinaNet,且B3网络模型mAP曲线平稳且处于最高。B4网络模型与B0~B2网络模型性能相当。Faster R-CNN、YOLO V3、RetinaNet以及本文模型对葡萄各类病害识别的AP值如表2所示。8种模型在经过150 epoch训练后,B4网络结构的模型对健康葡萄识别精度最高,达到98.28%,Faster R-CNN模型、B0和B4网络结构的模型对葡萄轮斑病的识别达100.00%,Faster R-CNN模型对葡萄褐斑病、葡萄轮斑病和葡萄黑腐病的识别效果最好。但是,综合看来,以EfficientNet-B3网络结构作为主干特征提取网络所构建的葡萄病害识别模型的均值平均精度(mAP)最高,达到98.60%。基于EfficientNet-B3网络的各类葡萄病害P-R(precision-recall)曲线如图8所示。

图7 不同epoch时的各模型均值平均精度(mAP)Fig.7 mAP value of each network model training epoch

表2 150 epoch时各算法对各类葡萄病害的平均识别精度(AP)值Table 2 AP value of each algorithm for various grape diseases at 150 epoch

图8 基于EfficientNet-B3网络的各类葡萄病害P-R曲线Fig.8 P-R curves of various grape diseases based on EfficientNet-B3 Network

模型的识别效果如图9所示。对于葡萄灰霉病,本文模型可以很好地识别出果实受害状和果梗受害状;对于葡萄卷叶病,本文模型可以完整识别出病害区域;对于葡萄白粉病、葡萄酸腐病、葡萄炭疽病、葡萄黑痘病等,本文模型均能准确识别。对于多个同种待检测目标的情况,如图9中的健康葡萄,本文模型亦能很好地分别标记出完整目标。

2.2 平均训练时间、模型大小及参数量对比

通过表3可以看出,本文模型与YOLO V3模型的平均训练时间远低于Faster R-CNN模型,在提升模型精度的同时,本文模型体积均不超过Faster R-CNN、RetinaNet和YOLO V3,其中B0网络结构模型仅为YOLO V3模型体积的1/8,且该模型参数量仅为YOLO V3模型参数量的1/6,但该模型的均值平均精度(mAP)相对于B3网络结构模型较低。B3网络结构模型与其他以EfficientNet作为主干特征提取网络的模型训练时间和模型体积相近,且相对于YOLO V3网络模型,参数量缩减一半,模型体积缩减为1/3的同时,模型平均识别精度提升3%。可见,以EfficientNet-B3网络作为YOLO V3的主干特征提取网络所训练的模型,能在保证识别精度的前提下,更好地完成葡萄病害的识别任务。

图9 葡萄病害识别效果Fig.9 Results of grape disease recognition

表3 各算法平均训练时间、模型大小及参数量比较Table 3 Comparison of the average training time,model size and parameter value of different algorithms

2.3 基于微信小程序和YOLO V3的葡萄病害智能识别系统

为了能够更加直观、快速、准确地识别葡萄病害,本文结合所训练的葡萄病害识别模型基于微信小程序设计出一款葡萄病害智能识别系统,主界面与病害库页面如图10所示。

图10 主界面与病害库页面Fig.10 Home page and disease database page

葡萄病害智能识别小程序首页如图10a,可点击“拍照上传”或点击“从相册选取”进行葡萄病害识别,选择拍照识别后使用相机功能实时拍照对葡萄病害识别;选择图片识别则通过上传相册中图片进行病害识别。病害库如图10b所示,可浏览点击具体葡萄病害了解详细信息。

成功识别葡萄病害的页面如图10c所示,使用者可点击对应按钮来了解所识别出葡萄病害的详细信息(图10d),此外还支持葡萄病害识别结果保存到相册,若对识别结果有疑问,还可通过点击问题反馈按钮进行反馈。

3 结论与讨论

本文构建了包含12种葡萄病害、健康葡萄果实和健康葡萄叶片在内共14类合计32 871张的葡萄病害数据集,基于YOLO V3算法使用EfficientNet作为特征提取网络对数据集进行分段训练,最终得到mAP为98.60%的葡萄病害识别模型,并基于微信小程序开发了一个葡萄病害智能识别系统。葡萄果农、消费者以及相关科研人员可通过本系统拍摄或上传在自然条件下的葡萄病害图片进行识别,来快速获取病害种类以及防治方法。识别效果分析表明,本系统实用性强、识别精度高,对于葡萄病害的防治具有重要的指导价值。

下一步将细化本文模型可识别葡萄病害的种类,加入葡萄生理性病害、干旱以及虫害引发的病变类别,同时增加葡萄病害数据集中各类别样本的数量,使本系统能够识别更多葡萄病害的同时更加精确。还可以将葡萄害虫及其危害状的识别加入到模型中,构建成为葡萄病虫害识别系统,辅助葡萄产业的健康发展。

猜你喜欢

葡萄病害精度
早春养羊需防六大病害
热连轧机组粗轧机精度控制
小麦常见三种病害咋防治
葡萄病害周年防治历
当葡萄成熟时
果树休眠期咋防病害
超高精度计时器——原子钟
分析误差提精度
基于DSPIC33F微处理器的采集精度的提高