明德廷,李娟,王兴宇
(江西农业大学计算机与信息工程学院,江西 南昌 330045)
江西省气候温暖湿润,每年季风气候带来充沛的雨量,很适宜水稻的栽种;同时地形多以平原、丘陵、山地为主,其中鄱阳湖平原、吉泰盆地、赣抚平原和赣西地区都以种植水稻为主[1],也是江西省的重要粮食生产基地,占全省耕地面积的六成以上。据报道,江西粮食产量从2012 年开始连续9 年稳定在430 亿斤以上。
影响水稻产量的因素很多,其中水稻病虫害的影响尤为突出[2],其中危害最为严重是纹枯病、稻瘟病、稻纵卷叶螟、稻飞虱、水稻螟虫等[3]。
本文使用基于深度学习的目标检测算法在构建的数据集上进行识别,使用PyQt框架将训练好的YOLO v5 模型嵌入到应用程序中,实现了一个可以对害虫进行检测与识别并提供相应防治建议的系统。Py-Qt是一个将Python编程语言与Qt库融合,用于创建图形用户界面应用程序的工具包。
目标检测是在图像或者视频中精确找到特定物体所在位置并标注出物体类别的一个多任务算法。YOLO 是“You Only Look Once”的首字母缩写,YOLO v5 是一种将图像划分为网格系统的对象检测算法。在图像的不同位置上进行着均匀的不同尺度和比例的密集采样,然后再利用提取特征并进行分类。YOLO v5 模型分为四个部分:输入端、Backbone、Neck 以及Prediction[4]。
为了加快模型的训练速度和精度以及模型收敛速度,YOLO v5 采用基于Mosaic 数据增强功能,即将四张图像按照随机裁剪和随机排列的方式进行拼接组成一张图像,还可随机缩放。
YOLO v5提出了一种自适应图片缩放方法:根据原始图像与网络要求图像大小计算缩放比例,计算缩放后的图像大小,添加最少的黑边。既解决了输入图像大小不一问题,也减少了过多噪声对实验的影响。
本文使用的数据集是基于IP102 数据集建立的,因为IP102 数据集包含的害虫种类多达102 种,且背景复杂,更符合目标检测在农田害虫检测与识别领域的实际环境。
为了选择适合本文数据集的最佳模型,对本文数据集进行全面的分析。通过各类害虫数量的分析、数据集真实目标框的大小分布,数据集真实目标框中心点的位置分布;综合以上几点分析,该数据集存在以下特点:1)各类害虫数据分布较为平衡;2)数据集中的害虫大多分布在图像中心;3)属于大目标检测。基于这些特点,本文选择YOLO v5 模型进行训练,因为其网络结构较小,网络参数更少,节约内存空间的同时提高了检测速度,适用于大目标检测。
数据集可以通过线上标注,完成后以VOC格式保存。所有样本会按照一定的比例对标签文件和害虫图像进行分类,测试集、验证集、训练集的比例为2∶2∶6。
在正确读取图像文件和标签文件后,按照比例在整个数据集中随机选择样本作为训练验证集,其余的样本就是测试集,其作用主要用来检测训练后的测试模型效果,然后按照选定的比例随机地从训练验证集中选择样本用作训练集,剩余即为验证集。
为了评估目标检测模型的分类和定位效果,常用混淆矩阵、准确度(Accuracy)、精确度(Precision)、召回率(Recall)、平均精度(AP)以及F1分数等评价指标对模型进行评价。
为了缩短网络的训练时间,加快网络收敛速度,使用YOLO v5s预训练权重进行训练,使用Python 3.6。训练模型开始训练时设定学习率衰减因子为20%,学习率为1%,训练轮数设置为150 epochs(向前和向后传播中所有批次的单次训练迭代),在配置好相应的预训练环境、创建配置文件、修改模型配置文件后,使用YOLO v5s模型训练自己的数据集。
结果表明,在前100 epochs内,精度和召回率随着epochs的增加快速增长,在100 epochs后,增长速度明显变缓并趋于平衡,说明将训练轮数设置为150 epochs是合理的,因为该设置不仅使得模型收敛达到了最佳效果,而且减少了模型由于更多无用训练轮数带来的资源消耗。YOLO v5s 模型最终在测试集的精度达到0.833,召回率达到0.809,可以认为模型达到了预期检测效果。
本文将YOLO v5算法嵌入病虫害诊断模块中,其使用流程为:用户登录成功后进入病虫害检测界面,新用户点击注册按钮进入注册界面,注册完成后进入登录界面,登录成功则进入检测界面。
用户在检测界面点击“选择weights”按钮完成训练权重文件的选择,点击“初始化模型”按钮加载模型完成初始化后,根据自己的需求对选择的害虫数据文件进行检测并在检测界面显示检测结果以及相应的防治措施。
为了响应系统是否存在用户信息,建立一张用户信息表以键值对形式存储用户信息,可以给每个用户分配不同的权限,执行相应的功能,以完成不同的任务。
当农作物发生了病虫害时使用农药一种有效手段,但也是一种迫不得已的手段,有时效果不一定很好,从环保和经济效益上也不划算。所以在发生病虫害之前做好预测工作是很重要的,如果对预测预报的重要性认识不足,就可能错过病虫害防治的最佳时期。
水稻病虫害的预测预报主要经历了四个阶段:经验预测、实验预测、统计预测和信息预测[5]。
本系统综合使用已有的一些技术和方法,获取了水稻病虫害的相关认知构建一个病虫害知识库,然后使用相关算法在此知识库上建立模拟模型,进行挖掘推理以及模式识别,从而获得病虫害发生与流行规律。
病虫害预测预报其实也是一个专家系统,即把水稻病虫害方面专家的系统性知识获取过来,进行整理存储在数据库中,采取推理和匹配技术,并辅以人机交互界面,提供给用户使用,达到人类专家的水平完成水稻病虫害的识别。用户在系统中输入农作物目前的现状、病虫害的症状以及天气情况等,同时按照系统要求输入相关参数值,就可以得出何种病虫害及处理措施。
专家知识的获取途径少难度较大,主要通过获取公开发布的资料,再进行整理。本系统收集了1995—2013 年之间江西省各地区水稻主要病虫害的发生情况。系统的知识库主要由苗期病害库,成株期叶部病害库,成株期叶鞘病害库,主要水稻虫害库组成。
在对收集的数据分析后,可从中提取一些关键信息,比如病虫害发生的时间节点、每次发生的数量、危害程度等。根据提取的数据可以下列方法为病虫害的发生提供预测预报。
1)时间序列分析
时间序列分析是指对某个数据x 进行观察测量时,在某一时刻t 的测量值x(t),如果在一系列的时间节点t1,t2,...,tn上就可以得到一组观测值x(t1),x(t2),...,x(tn),我们再对这些数据序列进行分析研究。通常时间序列值具有一定的规律性比如符合某些概率分布规律,通过这些数值统计分析方法总结出某些规律,并用它进行病虫害的预测预报。
在本系统中x(t)是指t年虫害发生的情况,那么连续若干年病虫害发生的情况即为一个序列集合x(t1),x(t2),...,x(tn),然后在此序列集合上分别采用增长曲线预测、二次曲线趋势预测、指数平滑等方法做一个趋势预测,再把各种预测结果发生的概率值作为系数,进行加权平均所得的值即为最终的预测结果,可以作为病虫害的长期预测[3]。
①增长曲线预测
增长曲线用于描述某事物在其发展过程中增长或下降的快慢,本系统使用了修正指数曲线,它是在一般指数曲线的基础上增加一个常数[3],其一般形式为:
=K+abt,其中K>0,a≠0,b≠1
未知常数K、a、b的求解方法:将基于时间节点的数值序列分为三部分,分别计算出原数值序列(Yt)的三个局部总和,以及趋势值Ŷt的三个局部总和;令这两个值相等即可求得常数K、a、b的值。
②二次曲线趋势预测
当现象发展的趋势呈现抛物线形态时,可用二次曲线趋势来预测。其一般方程为:
曲线中的三个未知常数a、b、C,可以根据最小二乘法或者选点法求得。
③指数平滑法
指数平滑法原理是任一期的指数平滑值都是本期实际观察值与前一期指数平滑值的加权平均。基本公式是:
其中Yt是当前时间的观测值,Ft是上一个时间的预测值,α是指数平滑因子[6]。
2)逐步判别分析
当分析气候因素与病虫害严重程度的关系时使用逐步判别分析法,其判别准则为贝叶斯判别函数,基本思想是按照变量是否重要逐步引入变量,每当判别式要引入新的最重要的变量时,都需要分析之前引入的变量的重要性,如果新变量的引入使之前的变量的重要性变得不再显著了,就可以停止迭代,结束筛选[7]。
根据逐步判别分析迭代的结果,就可以确定与病虫害严重程度相关性高的气候因素,再综合考虑本地区的历史数据,建立一个高可信度判别函数。由于不同地区气候因素不一样,所以判别函数也不相同。确定判别函数后就可以根据本地区的气候因素进行预测了。预测的结果可能需要修正,因为病虫害与水稻的品种、施肥多少也有关系。
3)历期预测法
历期预测法主要是以某种害虫历史时期发生发育的情况作为分析判断的基础,再对此害虫当前几个虫态发生的发育进度,比如害虫数量、发育百分比率等情况来确定它们分别达到始盛期、高峰期和盛末期的时间,然后再参考各虫态的平均历期数据,就可以预测出其后一虫态发生的日期。
通过比较与分析,本预测预报系统若为病虫害作长期预测,可以使用时间序列分析法,而且可以使用多种时间序列进行趋势预测,并将所有结果加权平均,即为最终结果;若要进行中长期预测,可以使用逐步判别法;若要作短期预测则可使用历期预测法。
本系统采用Python开发技术,实现基于互联网的水稻病虫害诊断与预测,如图1 所示,是本系统的软件模块结构图,二级功能模块分别是信息管理、病虫害诊断、病虫害预测、病虫害论坛、系统管理等[8]。
图1 系统模块结构图
每个功能模块具体实现的功能如下:
信息管理模块:各级用户登录后,可以将本地区的病虫害相关信息录入的数据库中,同时也可以将本地区的气候等信息录入的相应数据库中。
系统管理模块:主要分两大功能,一个是添加用户,主要是系统管理员功能,所有新用户的添加都由系统管理员来操作;第二个是用户信息管理,即每个用户来管理和维护自己的基本信息以及密码的修改。
病虫害论坛模块:所有用户可以在此发布信息,查看信息,回复信息等,主要用于用户之间信息交流。
病虫害诊断模块:主要由两部分组成,一个是用户上传病虫害的图像和视频功能;另外一个是病虫害诊断功能[9]。
病虫害预测模块:各用户可以查看和管理相应病虫害预测的相关信息,由于用户的权限不同,普通用户只能查看预测信息,而管理员用户还可以修改,这样可以有效地防止共享信息遭到损坏,可维护信息的一致性和有效性。在此级功能模块下又分了相应的三级功能模块。
首先,系统采用YOLO v5算法实现病虫害诊断功能,YOLO v5s 模型最终在病虫害的识别精度达到83.3%,可以认为模型达到了预期检测效果,在水稻栽培过程中对病虫害的防治具有一定指导作用。其次,病虫害的预测模块通过不同的预测方法可以为病虫害作长期预测、中长期预测以及短期预测,以适应不同的需求。最后,系统还可以根据不同地区的生态环境不同,采用不同的预测模型,这样可以提高准确度。总之,该系统对水稻病虫害防治具有一定的现实指导意义,能提高防治水平和效益,减少过度农药防治带来的环境污染。