APP下载

基于深度学习的玉米病虫害智能诊断系统开发

2023-12-08付忠军李君保郭彩霞

南方农业 2023年17期
关键词:卷积病害病虫害

姚 强,付忠军,李君保,吕 斌,粟 超,郭彩霞

(1.重庆市农业科学院,重庆 401239;2.酉阳县农业技术推广站,重庆酉阳 409800;3.重庆市农业学校,重庆 401239)

玉米具有丰富的营养价值,作为重要的粮食作物在我国被广泛种植,其产量约占我国粮食总产量的1/4。病虫害的发生会直接影响玉米产量,如果不能及早识别并进行防治,会造成大幅减产。在种植过程中,病虫害的发现、诊断与防治是玉米生产中的重要环节。如何及时准确地诊断出病虫害信息,并给出合理有效的防治措施,已成为一个重要研究方向。随着信息技术、AI、物联网、大数据、移动互联网等的高速发展,越来越多的技术和产品被应用于玉米生长过程监测、病虫害识别诊断。随着智能手机已在国内广泛普及使用,且性能越来越好,其自身携带的摄像头为随时拍摄图像和视频提供了极大的便捷。本研究基于深度学习的方法开展玉米病虫害识别诊断模型设计与训练,开发了基于Android 系统的玉米病虫害智能诊断系统手机APP。

1 研究背景

近十年,国内外农业领域越来越多地应用了图像识别、机器视觉、深度学习等技术。深度学习以其自动提取特征、学习能力强、覆盖范围广、适应性好、可移植性好等特点,越来越受到重视。在玉米病虫害识别应用上,国内外开展了大量基于深度学习的探索和研究。例如,樊湘鹏等为解决田间环境复杂背景下病害识别困难、识别模型应用率低的问题,提出了一种基于改进卷积神经网络的玉米病害识别方法,对田间复杂背景下的9 种玉米病害进行识别[1]。许景辉等在Image Net 数据集上对玉米病害(大斑病、锈病)使用VGG16 预训练模型进行病害识别,提升了模型识别精度和训练效率[2]。刘翱宇等针对玉米叶病害识别的问题,引入焦点损失函数(Focal Loss)专注于难分类的病害样本,提出了一种深度残差网络TFL-Res Net,在Res Net50 网络的基础上利用迁移学习,对玉米4 种病害进行识别,新网络收敛更快,效果更好[3]。王国伟等采用LeNet 模型,对玉米花叶病、灰斑病、锈病、叶斑病进行识别试验[4]。朱家辉等对Al Challenger 比赛的农作物叶片病害数据集图像预处理后,使用VGG16 和Res Net50 对玉米等农作物病害图像进行分类识别[5]。Xu 等人为了提高玉米病害识别的准确性,避免参数过多导致的过拟合问题,用全局汇集层替换全连通层,提出了一种多尺度卷积全局池化的神经网络[6]。Chen 等基于DenseNet,保留过渡层结构,使用深度可分离卷积替换传统卷积层,并嵌入注意力模块,提出一种基于注意力嵌入的轻量级新型玉米病害识别网络[7]。陈桂芬等使用CNN 模型基于迁移学习方法对玉米5 种常见病害(3 种斑点病害及黑穗病、瘤黑粉病)进行识别[8]。李恩霖等使用PlantVillage 公开数据集作为病害样本,分别基于VGG16、Inception V3、ResNet50、ResNet101、DenseNet121 等5 种深度卷积神经网络建立病害识别模型,对锈病、叶枯病、灰斑病3 种典型玉米病害开展分类识别研究[9]。

2 模型设计和训练

2.1 模型设计

模型设计主要包括:病虫害种类的选取、深度学习网络的选择等。

2.1.1 病虫害种类选取

模型选取10种发生在玉米植株地上部位的常见病虫害,包括大斑病、小斑病、纹枯病、茎腐病、南方锈病、玉米螟、玉米黏虫、玉米棉铃虫、玉米蚜虫、玉米叶螨。

2.1.2 深度学习网络选择

深度学习网络有很多种类,卷积神经网络(CNN)主要用在计算机视觉(CV)中,在图像处理方面表现十分出色,当前开展的基于深度学习的农作物病虫害诊断识别大多采用CNN网络。

模型采用自定义CNN 网络和DenseNet201 网络分别开展训练。自定义CNN 的网络结构如图1 所示。DenseNet201的网络结构如图2所示。

图2 DenseNet201网络结构图

CNN 的基本结构由输入层(Input layer)、卷积层(Convolutional layer)、池化层(Pooling layer)、全连接层(Fully connected layer)及输出层(Output layer)构成。卷积层提取图像特征,池化层对特征抽样,全连接层将提取的特征连接起来,分类器输出结果。本研究使用的CNN 网络有10 个输入层神经元(对应10个玉米病虫害分类),神经元的激活函数用Relu,输入图像大小为228×228 像素,图像格式RGB,1 个卷积层和1个池化层构成1组,共设置了3组,分类输出层使用Softmax 分类器,输出结构是1 个长度为10 的一维数组。

DenseNet201是DenseNet网络(Dense Convolutional Network,密集卷积网络)系列中的一种,也是一种深度卷积神经网络,在图像分类时性能更好。DenseNet网络的核心结构主要由两个模块组成,一个是Dense Block,一个是Transition。Dense Block 主要完成密集连接,Transition 是不同Dense Block 之间的过渡。DenseNet201网络构建过程如下:首先构造1个卷积核为7×7、步长为2的卷积层,然后构造1个大小为3×3、步长为2 的max pool 层,再构造第1 个DenseBlock,DenseBlock 的基本单元是BN-ReLU-Conv(1x1)-BNReLU-Conv(3×3),其中的Conv(1×1)用来降维、减少计算和参数,第一个DenseBlock 包含6 个基本单元,在DenseBlock 后构造1 个Transition,Transition 的基本单元是Conv(1×1)-Avgpooling,这里的Conv(1×1)也是用来降维,Avgpooling 的大小是2×2、步长是2,用来降低特征图大小;然后构造第二个DenseBlock,包含12个DenseBlock 基本单元,再是第二个Transition;第三个DenseBlock 包含48 个基本单元,接着是第三个Transition;第四个DenseBlock 包含32 个基本单元,最后是构造1 个大小为7×7 的global average pool,1 个全连接层和1 个softmax 分类器,构造过程中DenseBlock和Transition交替设置。

2.2 模型训练过程

主要包括:图像数据的采集、图像数据的预处理、模型训练环境的配置、图像数据的划分、模型训练。

2.2.1 图像数据采集

用于训练玉米病虫害智能诊断模型的图像数据主要来源于两个部分:一部分采集于重庆市内的玉米种植区,采集时间在2023 年5—8 月,光照条件为自然光,采集设备包括智能手机自带摄像头、数码相机等。为提高图像数据的清晰度和病虫发生部位的聚焦度,减少图像曝光率,部分图像采集时使用了高清镜头、滤镜等工具。另一部分为互联网上采集的图像数据,少量来源于公共数据集。图像数据总量为3 733幅。

2.2.2 图像数据的预处理

对图像数据进行了以下预处理:

1)裁剪。很多采集的图像数据包含了除玉米植株和病虫害之外的无用甚至影响识别诊断准确性的部分,如植株间的杂草、田块边界的田埂、田边的树木等。对图像数据进行裁剪,使图像只保留发生病虫害的玉米植株或部位。

2)切片。将图像数据切成固定大小,将图像数据切成228×228像素大小。

3)灰度变换。将RGB 格式的彩色图像转化为灰度图像,使图像更清晰、特征更明显。

2.2.3 模型训练环境配置

基于Python 语言构建模型训练环境,具体配置如下:Python 版本使用3.7.0,集成开发环境使用PyCharm,2 种网络结构均基于TensorFlow 实现,使用的TensorFlow 版本为2.3.0,用到了numpy、OpenCV 等程序包,numpy 的版本是1.19.2,OpenCV 的版本是4.5.1.48,在配置过程中需要安装很多有依赖关系的程序包,为了减少因程序包之间的依赖关系造成的大量冲突和错误,使用了Anaconda 管理安装这些程序包,Anaconda的版本为5.3.1。

2.2.4 图像数据的划分

将图像数据划分为训练集、验证集和测试集。训练集是使用指定网络开展深度学习和训练的数据样本集合,直接参与模型调参,是原始数据的一部分。网络通过训练集,学习数据特征,拟合生成用于预测的模型。验证集是用于评估模型性能的数据集,也是原始数据的一部分,在训练过程中帮助调整参数,避免过拟合或欠拟合。测试集是用于判断模型的准确性和鲁棒性,用在模型生成之后,使用模型没有遇过的数据测试模型性能。由于采集的图像数据总量偏少,属于小规模样本集,按照6∶2∶2的比例划分为训练集、验证集和测试集。

2.2.5 模型训练

要得到一个性能较好的模型,需要进行多次的训练,通过调整batch_size、epoch、learning_rate、image_size 等参数,甚至重新清理数据样本,重新划分训练集、验证集合测试集。本次分别在两台x86 服务器上开展模型训练,1 台基于CNN 网络开展训练,另1台基于DenseNet201网络开展训练,为了提升模型训练速度,2台服务器均配置32 GB内存。

2.3 模型训练结果

训练过程中记录了不同参数设置下的模型训练情况,只保留了val_accuracy 在0.8 以上的模型以供后续开发诊断系统使用。

基于自定义CNN 网络模型、基于DenseNet201 网络模型的训练结果如表1 所示。可以看出,所得val_accuracy 大于0.8 的模型中,基于CNN 网络的相对稳定,val_loss值也相对较小,说明在特定情况下基于CNN 网络的模型收敛性相对较好,但DenseNet201 网络更容易取得较高准确率的模型。

表1 两种网络模型训练结果比较

3 系统设计与实现

3.1 系统设计

3.1.1 功能目标设计

系统主要功能目标是让用户能够方便、快捷地使用智能手机等便携式移动设备对玉米病虫害进行智能识别诊断,并提供相应的防治建议。系统功能设计如下:

1)调取智能手机等移动设备上的摄像头,拍摄玉米病虫害发生图像。

2)从文件系统上读取图像数据。

3)基于深度学习模型对玉米病虫害种类识别诊断的功能。

4)根据病虫害种类给出防治建议的功能。

3.1.2 数据库设计

使用SQLite 轻量级数据库,用于管理病虫害编码信息、病虫害名称信息和病虫害防治建议。

3.1.3 流程设计

系统工作流程如图3所示。

图3 系统工作流程图

3.2 系统实现

3.2.1 开发环境配置

集成开发环境为Android Studio,第三方程序库有OpenCV 和Tensorflow-Lite。具体版本如下:Android Studio3.4,OpenCV4.5.1,TensorFlow-Lite2.3.0。引入第三方程序库需在build.gradle 文件dependencies 段添加如下内容。

3.2.2 系统UI实现

系统UI 共包含两个部分:1)与用户交互(选择图像、拍摄图像、启动识别诊断)的各种按钮;2)展示信息(待诊断图像、诊断结果、防治建议)的各种View。调用摄像头拍摄待诊断图像使用ImageButton发起,调用模型开展诊断使用Button 发起,选择本地图像并展示使用ImageView 实现,诊断结果和防治建议使用TextView 实现。使用ConstraintLayout 布局各个组件。实现的用户界面如图4所示。

图4 系统用户界面

3.2.3 功能实现

3.2.3.1 调取摄像头功能实现

使用Activity 的startActivityForResult()方法将调用摄像头的意图(Intent)传递给Android系统,Intent的Action 属性需设置为ACTION_IMAGE_CAPTURE。对拍摄图像进行处理通过Activity 的onActivityResult()方法根据requestCode实现完成。

3.2.3.2 选取本地图像功能实现

同样通过startActivityForResult()方法向系统传递意图,Intent 的Action 属性设为ACTION_OPEN_DOCUMENT,Type 属性设为“image/*”。因浏览和选择本地图像需要读取存储设备的权限,在AndroidManifest.xml 中要做如下配置:

3.2.3.3 识别诊断功能实现

首先将图像数据转化为矩阵数据,然后将RGBA格式数据转换为BGR 格式,再根据模型输入尺寸对图像大小进行缩放,使用OpenCV 完成数据归一化处理,接着将矩阵数据转换为张量(tensor)数据,最后传递给模型解释器Interpreter开展识别诊断。

3.2.3.4 防治建议功能实现

诊断结果是一组数字,包含了病虫害的类别编码和可能性,若可能性大于80%,则根据编码到数据库中读取对应编码的防治建议,最终在TextView 中展示给用户。数据库的操作使用SQLiteOpenHelper 类和SQLiteDatabase的相关方法实现。

4 结论

本研究在自定义CNN 网络和DenseNet201 网络上开展了基于深度学习的玉米病虫害模型训练,得到了多个val_accuracy 参数大于0.8 的模型,开发的玉米病虫害智能诊断系统能够在Android 系统中运行,并能使用模型开展识别诊断。经验证,发现系统对于小斑病、纹枯病、茎腐病3 种病害的诊断错误率较高,主要原因与采集的图像样本数量较少有关;另外,模型的泛化能力较弱,主要原因与数据集划分和训练参数欠合理有关。后续将通过采集更多的图像样本、图像预处理、调整数据集和训练参数提升模型的准确率和泛化能力。

猜你喜欢

卷积病害病虫害
早春养羊需防六大病害
小麦常见三种病害咋防治
春季葡萄苗病虫害咋样防治
基于3D-Winograd的快速卷积算法设计及FPGA实现
夏季玉米主要病虫害有哪些
三招搞定花卉病虫害
葡萄病害周年防治历
果树休眠期咋防病害
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法