APP下载

玉米叶部病害识别模型的建立与APP开发

2022-07-18张建华赵洪凯姜雷韩应欣姜娇阳张海涛

农业与技术 2022年13期
关键词:叶部病虫害叶片

张建华 赵洪凯 姜雷 韩应欣 姜娇阳 张海涛

(扎兰屯职业学院信息工程系,内蒙古 扎兰屯 162650)

引言

民以食为天,农业是国民经济的基础,粮食生产是基础的基础。粮食事关国计民生,粮食稳则人心稳、社会稳,粮食安全是国家安全的重要基础。玉米是我国产量最大的粮食作物。根据国家统计局数据公布2019年度我国的粮食产量是66384.00万t,其中玉米产量是26077.00万t,占比39.28%[1]。内蒙古地区作为我国第3大玉米产地,其玉米产量占全区粮食产量的74%[2],可见内蒙古地区玉米产量在全国粮食产量中重要地位。而呼伦贝尔市的粮食产量中玉米更是占据了绝对的主导地位[3]。

玉米在我国的粮食生产中占有主导作用,是因为玉米不仅是我国主要粮食作物同时也是非常重要的工业原料,在工业生产中也有广泛应用,如可以用于制造乙醇、氨基酸等各种化工原料。因此无论是从粮食安全角度还是从工业生产的角度,稳定玉米的产量都有重要意义。然而,玉米病虫害对其整个生长周期影响是巨大的,已成为影响我国玉米产量的主要原因[4,5]。

传统发现病虫害的方法是人工方法,通过农业技术人员来发现和判别病害严重程度,该方法存在耗时、费力的缺点。更可靠的方法是依靠实验室判别,虽然准确率很高,但是需要经过菌种培养过程,周期漫长,不适合及时诊断。因此,找到一种简单有效的判别玉米病虫害方法,对辅助玉米种植、提高产量具有重要研究价值。

从目前国内外植物病虫害识别研究来看,智能化的诊断方式正在逐步取代传统人工方式,近年来人工智能识别技术在植物病虫害的识别、诊断方面取得了显著进步。对常见的植物病虫害,人工智能技术已经具备较好的识别效果[6]。但是目前的病害检测结果还基本停留在实验室探索阶段,识别效果还有待进一步的大田验证。在移动终端普及的今天,要想在手机等移动设备上实现病变有效检测还有较长的路要走。

本研究计划通过对扎兰屯地区玉米叶片病虫害样本采集、自动识别的研究,找到一种基于深度卷积神经网络的轻便的玉米叶片病虫害识别方法。使用TensorFlowlite工具把模型部署至Android平台,开发出能够识别玉米叶部病虫害的APP。为扎兰屯地区玉米叶部病虫害的快速识别、积极防治提供科学的方法和依据,对减少人工投入、促进扎兰屯地区农业的发展有重要意义。

1 玉米叶部病虫害样本采集及模型训练

玉米叶片病虫害识别的模型训练主要包括样本采集、样本分类、样本裁剪、模型训练、模型优化等几个步骤。

1.1 玉米叶部病害公共数据集介绍

使用机器视觉和图像分类的作物病虫害分类算法中,需要大量的样本数据进行模型训练。数据集在人工智能、机器学习领域占有重要地位[7],是机器具有“智能”的重要前提条件。在玉米叶片病虫害的研究领域,也有了几种公开可用的数据集,以下对3种典型的玉米叶部数据集加以简要介绍。

田间玉米图像数据集[8]是Wiesner-Hanks等在2015年建立的。该数据集是玉米北方叶枯病(NLB)的单一数据集。Plant Village数据集[9]是一个经常被使用的、公开的植物病虫害数据集,该数据集的数据记录中包含54309幅农作物图像。大田作物病害识别研究图像数据集[10]由中科院合肥智能机械研究所陈雷等建立。该数据集包括我国主要3种农作物的15种病虫害样本,样本数量有17624张。

公共数据集可以用来进行模型的研究,但并不能满足本研究的全部条件,原因有2方面:在扎兰屯地区的病变种类公共数据集并不一定有,这样就缺少了实用性的条件;某些病变的样本比较少,训练出来的模型不够准确。鉴于以上原因本研究需要采集大量的样本,建立自己的数据集。

1.2 自建玉米叶部病害数据集

1.2.1 数据采集

经过多处实地勘察,最终选择呼伦贝尔市农业科学研究所的玉米种植基地作为采样的基地。该基地有实验地113.33hm2有余,种植有多个品种的玉米50hm2,距离扎兰屯市区约50km,交通比较方便,便于多品种样本的采集。

7月末时玉米接近成熟,到了采样时期。根据基地玉米的发病情况,选择玉米大斑病(真菌病)、双斑萤叶甲病变(玉米虫害)以及玉米叶斑病[11](真菌病)3种主要病变进行样本的采集。为了使采样尽可能接近将来手机APP使用拍照条件,采用一台尼康D3100入门级单反相机,配18~55mm镜头,另外安排2人采用手机进行样本拍摄。

样本拍摄时使用自然光照、垂直叶片拍摄的方式,单反相机采用固定较小光圈模式,手机采用自动模式。经过4次采集,共采集原始样本4516份,其中正常叶片500张。

1.2.2 数据处理

在进行采样前,通过网上学习及专家指导,对这3种玉米叶部病变有了基本识别能力。采样后,依据对病变的认知把病变样本分成3类;请扎兰屯职业学院农学方面专家对分类好的图片进行审核,筛选掉不属于这3种病变的样本,有效保证原始数据的正确性。

为统一图片形状、去掉不必要的背景区域,进行样本图片的裁剪工作。由于拍摄的样本图片形状都是矩形的,为了将来训练需要,把图片裁剪成正方形状。在样本图片的裁剪过程中主要考虑以下因素:尽可能贴近将来手机拍照的真实场景,突出病变区域;尽量保留玉米叶子的基本特征,即叶子的边缘和叶脉,实际裁剪中至少保留叶子一面的边缘及叶脉;尽量不带上其它玉米叶,尤其是玉米叶的叶脉部分;要考虑样本图片的多样性,在病变叶的方向上以及病变的位置上多样化一些。

裁剪后的样本情况:玉米大斑病1172例、玉米叶斑病1529例、双斑萤叶甲病1159例,正常样本775例。整样本图片大小为256×256像素,用来进行模型训练。

1.3 模型设计与训练

为了快速验证数据采集及样本裁剪的效果,特使用Keras[12]进行模型搭建。

1.3.1 模型训练的软、硬件条件

模型训练采用Intel(R)Core(TM)i5-3210MCPU 2.50GHz,8GBRAM,无支持GPU加速的显卡的笔记本电脑。软件条件是Windows1064位操作系统,深度学习框架是TensorFlow2.0[13]+keras,python3.7,开发环境是JupyterNotebook[14]。

1.3.2 训练模型及结果

本研究综合考虑Batch、Epoch、数据增强[15]、卷积核数量[16]等因素,经过反复对比试验,在超参数中Batch的大小为24、训练次数为100轮,有数据增强的情况下,在训练集和测试集上的正确率分别到达97.2%和95.1%,达到了本研究所需要的正确率指标。本模型输入层的大小是256像素×256像素×3通道,输出的结果是包含4个元素的张量,分别代表玉米大斑病、双斑萤叶甲病及正常样本的概率。模型各层简要说明如表1所示,模型的结构图1所示,模型的正确率及损失率曲线如图2所示。

表1 模型各层简要说明

图1 玉米叶部病虫害识别网络结构

图2 模型正确率及损失率曲线

1.4 模型的识别结果分析

为了了解本模型算法对哪些样本的识别错误率比较高,识别错误的原因又是什么,即网络是如何认错的,以便对本研究做进一步的改进,故使用CAM(Class Activation Mapping)技术对本模型识别结果进行分析。

CAM是一个能够可视化CNN的工具[17],通过CAM后再生成的热力图可以直观地看出为了达到正确分类的目的,CNN更侧重于哪块区域,图像上的哪一部分对于最后的分类结果影响最大。本文使用的方法是梯度类别响应图(Grad-CAM),不需要对原模型进行修改,避免了重新训练模型的过程。CAM过程:挑选出模型在测试集上所有分类错误的图片,再根据原始图像和该图像的热图对比分析,找出分类错误的原因。

测试集识别错误情况如表2所示,测试集错误识别为其它分类情况如表3所示。

表2 测试集识别错误数量情况表

表3 测试集错误识别为其它分类情况表

通过表2和表3,再结合CAM热图,对模型识别效果分析如下。

识别效果最好的是双斑荧叶甲和叶斑病,识别效果最不理想反而是正常叶片,其次是大斑病叶片。

正常叶片分别被误认为双斑荧叶甲叶片和大斑病叶片,大斑病分别被误认为双斑荧叶甲叶片和叶斑病叶片。正常叶片识别错误热图如图3所示,大斑病叶片识别错误热图如图4所示。

图3 正常叶片识别错误热图

图4 大斑病叶片识别错误热图

正常叶片识别错误率高的原因分析:训练用样本数量偏少,只有575例,和其它3种病变样本在数量上差距明显;正常样本的叶片以外区域的特征相比较叶片本身特征更加突出一些,尤其是边缘以外的亮点会被模型认为是双斑荧叶甲病,如图3a、图3e;而正常叶片的叶脉被部分会被误认为大斑病的长条状病斑,如图3c。

大斑病叶片识别错误率高的原因分析:大斑病的病变本身形状比较长,在正方形裁剪时存在裁剪不完整的情况,如图4c就是裁剪不完整;叶片边缘高亮区域的影响,如图4e;1种叶片上包含2种病变的干扰问题,如图4g就属于此类问题。

双斑荧叶甲病变和叶斑病识别率高的原因分析:病变区域不大,病变边缘清晰,特征比较明显,便于裁剪后保留完整病变区域;形状颜色比较统一,便于模型在训练数据量不大的情况下提高识别的准确率。

针对以上模型识别结果的原因分析,在后续的样本采集和图片裁剪的过程中除了要加大样本的采集数量外,还要有意识的避免干扰的发生,采集的过程中注意突出病变主体,尽量避免叶片边缘存在高亮区域,裁剪的时候尽量保持病斑的完整性。

2 移动端APP开发

目前APP开发有2种方法可以选择,基于客户端/服务端的在线模式;完全的终端模式即离线模式。前者要实现病虫害识别需要连接远程服务器上事先设计好的病虫害识别程序对样本图片进行判断,再返回给终端识别结果。后者为病虫害图片采集、预测、显示都在终端进行。前者对终端性能无特殊要求,后者则对终端有一定的性能要求。目前手机功能强大,性能优异,一些大型的APP都能流畅运行。但是考虑到有些偏远地区或其它环境因素造成手机网络信号可能欠佳,因此本病害识别系统采用离线模式。玉米叶部病变识别APP开发过程如图5所示。

图5 玉米叶部病变识别APP的开发流程

2.1 模型转换

使用TensorFlowlite[18]提供的tf.lite.TFLiteConverter. from_keras_model类将本研究的Keras模型(模型文件扩展名为.h5)转换为TensorFlow Lite模型格式(模型文件扩展名为.tflite)。

在部署到Android设备的过程中,需要用到模型的输入和输出层的名字,可以使用使用TensorFlowlite提供的tf.lite.Interpreter类获取这2个层的名字。

2.2 模型部署到Android系统

本文采用了Android studio 4.1.1[19]作为集成开发环境。把转换后的.tflite模型文件拷贝到app/src/main/assets文件夹,再建立文本文件label_list.txt,用来做正确分类的对应标签。assets目录及类别标签如图6所示。

图6 assets目录及类别标签

主要函数的基本介绍如下。编写一个名字为TFLiteClassificationUtil的工具类[20]。有关TensorflowLite模型预测的相关基本操作都在该类里完成,如图片预处理、加载模型、预测结果等。TFLiteClassificationUtil工具类的方法有以下5个。

2.2.1 构造方法TFLiteClassificationUtil()

在该类的构造方法中,通过参数传递过来的模型路径来加载模型。在方法的加载过程中初始化基本配置信息,如GPU的相关配置。TensorFlow lite提供了tensorflow-lite-support库,可以通过其中的ImageProcessor方法就能方便的编写一个预处理函数,在预测之前使用这个函数对图像进行预处理,要注意的是此处的图像预处理方式要和在训练的时候图像预处理一样的。否则就会出现在电脑上准确率很高,在手机上准确率很低的问题。

2.2.2 重载方法predictImage()

因为本文采用了选择现有图片和实时拍照2种预测病害的方法,为了兼容这2种图片预测方式,创建了2个重载方法,根据传递的参数不同来选择使用方法,但都是通过调用predict()方法进行预测的。

2.2.3 图像预处理方法loadImage()

该方法首先获得输入图像的长度(h)和宽度(w)值,根据w和h中较小的值对图像进行正方形居中裁剪;调用图像缩放方法对图像进行缩放,返回符合模型要求的图像尺寸,返回的图像大小是256像素×256像素。

2.2.4 获取概率最大的标签方法getMaxResult()

这个方法比较简单,通过循环比较找到最大概率值,并返回其下标。通过下标就可以获取概率最大的预测值标签。

2.2.5 执行预测方法predict()

通过该方法得到输入图像的预测概率值,再查找标签文件找到对应分类标签并返回预测概率、标签值、预测时间等信息。

2.3 识别效果展示及分析

玉米叶部病变识别APP开发完成,可以进行基本功能的测试。因为冬季没有实际玉米叶片可供测试,因此测试主要采用选择图片的形式进行,对于实时识别的效果只能采用对着笔记本屏幕采集样本图片的形式进行。测试用例采用经过重新裁剪的样本和部分原始样本,并增加缩放、旋转的变换,4种样本每种选取20个。表4显示了选择图片方式的预测情况。

由表4的预测结果显示,选择图片的方式对4种样本的识别准确率分别为95%、95%、100%和85%。识别准确率最好的是叶斑病达到100%,识别效果不佳是正常叶片只有85%。可以看出对3种病变识别的准确率都是很高的,对正常叶片的识别率偏低,基本与模型预测的结果相一致。另外,从识别正确时的平均概率来看,正常叶片也比较低。造成正常叶片识别率偏低原因应该是该类样本数量不足。从预测时间来看,平均预测时间在100ms以内,速度还是很快的。

表4 选择图片方式预测情况表

对照屏幕实时识别的方式没有办法进行大面积的测试,只是选择少部分样本进行了简单的测试,结果显示模型对3种病变识别准确率也能达到80%以上,预测时间200ms以下。这种测试方式对正常叶片的识别准确率更低,只能达到50%上下。可能的原因是正常叶片特征相对3种病变不够明显,容易受到屏幕光线反光的影响。

经过以上的功能测试,本APP基本能够满足病变识别要求,达到了本研究的目的。等到2022年暑期可以去玉米大田里进行实地的测试,观察在真实生产环境下该APP是否能满足其功能需要。

3 小结

本文以内蒙古地区玉米叶片的3种病虫害为研究对象,通过数据采集、数据处理、卷积神经网络模型训练优化、Android手机APP开发等过程,完成了一种用于玉米叶部病虫害检测的APP。从而实现了对Android平台终端拍摄的玉米叶片病虫害图片进行识别诊断。

本文给出的基于卷积神经网络的玉米叶部病虫害检测模型及APP,其创新点主要有以下几点:本研究与内蒙古地区玉米的生产实际相结合,将卷积网应用到当地玉米叶部病虫害的检测领域,并且在当地进行的样本采集,对促进内蒙古地区玉米叶部病害的检测智能化走向实际应用具有较大的意义;采用了轻量化的模型设计思路,在较小规模的网络上,通过引入批标准化层、优化超参数,实现了较好的预测正确率和预测速度;开发了基于Android系统的APP,经过测试,选择图片识别准确率达到95%以上,实时预测也能达到较好的准确率,实现了离线预测。

本研究的不足之处有2点:由于本文仅针对3种玉米叶部病虫害共计4500余张图片进行分类,存在样本数量不足、可预测病变数量不多的问题,要想走向应用,还有大量的工作要做;对于玉米叶部同时发生2种以上病变的情况,本模型还不能处理,解决这个问题很有实际意义,这类病变的检测也是今后的研究工作之一。

本研究的未来与展望:扩大样本采集数量,在未来2a进行更多样本采集工作,扩充现有数据集;加强对图像分类、识别新领域、新技术的研究,尤其要在多病变识别方面加强探索,把人工智能的前沿成果应用到本项目的后续开发中;积极推进本研究的实用化进程,为服务地方经济做出积极探索;扩充到其它农作物,如大豆。

猜你喜欢

叶部病虫害叶片
月季叶片“雕刻师”
面向移动端的苹果叶部病虫害轻量级识别模型
基于YOLOv3的多类烟草叶部病害检测研究
春季葡萄苗病虫害咋样防治
夏季玉米主要病虫害有哪些
三招搞定花卉病虫害
两种喷涂方法在TRT叶片上的对比应用及研究
基于颜色差异性的植物叶片病害图像分割方法
推广新型农药噻虫嗪防治甘蔗叶部害虫突破14万公顷
基于CFD/CSD耦合的叶轮机叶片失速颤振计算