1. 引言
玉米是重要的粮食作物和饲料作物,生产潜力大、经济效益高,具有食用、饲用和多种工业用途,玉米种业健康发展对保障国家粮食安全和农产品有效供给具有重要意义。玉米在生长过程中极易受到病害的影响,其产量也因此受到制约,这为玉米种植带来了极大的困扰。我国玉米种植地域广阔,生态各异,种植和栽培方式不同,因此要根据实际情况来制定解决策略。我国农民普遍缺乏病害的识别能力和防治知识,拥有农业病虫害诊断和防治的专家受地域和人数制约,在时间和精力上难以满足实际需求。
因此本文利用图像识别技术来识别玉米叶面病害的种类,以便保证高度准确性的前提下,及时发现病害,并制定正确的解决策略。故研发便捷、快速、准确,识别玉米病害和提供精准解决方案的智能化系统,对我国玉米种植的发展具有重要意义。
2. 文献回顾与研究思路
近年来,国内外基于Faster-RCNN算法对物体进行检测识别方面已经有了一定的进展。曹之君[1]等在目标检测中,通过引入区域树木调节层,从而实时判断训练效果,为防止退化现象,又引入了残差网络,实现了与原Faster-RCNN算法相比精度和速率的提高。Sun [2]等人对实现番茄的识别时,采用了一种改进的Faster-RCNN算法,将该算法与K-means聚类进行结合,并且对预选框做出优化,从而使算法的精度得到提升。石展鲲[3]等人在对苹果果实进行检测时,通过将Faster-RCNN算法进行改进,对锚框参数进行优化,增加Soft-NMS算法,并且在输入图像时使用Mosaic数据增强的方法,从而对苹果果实的检测效果有了明显的提升。
本文基于Faster-RCNN算法,对玉米叶面病害种类进行检测识别,使用Python语言的Django框架,将玉米叶面病害识别模型及Neo4j知识图谱作为核心,融合前端、MySQL数据库来开发系统。在本系统中Faster-RCNN算法检测识别的平均识别率高达96%,在Neo4j知识图谱中,将玉米页面病害种类的详细信息,通过知识图谱进行展示。因此本文在农业领域的研究和实践上,起到辅助识别功能,大大提高了工作效率和准确性。
3. 数据集制作与运行环境
本文选择玉米健康状态和3种玉米病害图片,进行分类研究。其中玉米健康图片1732张、大斑病1416张,小斑病1122张、玉米锈病1728张,共5998张。采用Labelimg工具对采集到的数据进行分类标注,对应4类的数据标签为:健康玉米(Health)、玉米锈病(Corn rust)、玉米小斑病(Corn spot disease)、玉米大斑病(Corn northern leaf blight)。将上述图片按9:1的比例划分为训练集和测试集。并将图像统一缩放为256像素*256像素。本文使用Faster-RCNN的先验框(Anchors),其中先验框大小 (Anchors_size) = [8, 16, 32]。模型会生成三组先验框,每组包含3个不同比例的先验框,进而影响模型对不同尺寸目标的检测能力。
本文使用Faster-RCNN识别玉米叶面病害系统的运行环境为:
硬件:训练、测试和运行的GPU是NVIDIA GeForce RTX 4060,该GPU采用NVIDIA Ada Lovelace架构,搭载了3072 CUDA核心 + 8GB GDDR6显存,操作系统是Windows 10 64-bit。
软件:系统基于Pycharm专业版编译软件实现与MySQL数据库以及Neo4j数据库之间进行连接,并且提供专门的Web开发工具:Django框架。本系统在调用Faster-RCNN算法时,基于Pytorch1.10.2 + CUDA Runtime11.8 + CUDA Driver12.4深度学习框架。
4. 玉米叶面病害识别模型
4.1. Faster-RCNN模型的构建
随着智能化的到来和计算机视觉的发展,在图像识别对物体进行目标检测方面取得了巨大进展。近年来,基于深度学习下卷积神经网络的目标检测识别算法可以大致分为两类:单阶段目标检测(One-Stage)和两阶段目标检测(Two-Stage)。单阶段典型代表算法有YOLO系列算法,这类算法直接对输入的图像进行分类和位置回归,速度较快。两阶段典型代表算法有RCNN系列等算法,这类算法首先提取图像中的候选区域,然后对这些区域进行分类识别,精度较高,但速度较慢。其中Faster-RCNN首先使用区域建议网络RPN生成候选区域,然后对候选区域进行目标分类和位置回归。
Faster-RCNN算法包括4个模块:骨干提取特征网络(Backbone)、区域建议网络(RPN)、感兴趣区域池化(ROI Pooling)和分类器(Classification)。图1为Faster-RCNN算法的流程图。
Figure 1. Flowchart of the Faster-RCNN algorithm
图1. Faster-RCNN算法流程图
① 骨干提取特征网络(Backbone)
Faster-RCNN是基于卷积神经网络(CNN)对图像进行特征提取的,传统的Faster-RCNN采用了VGG16骨干特征提取网络,VGG16是一个相对简单的卷积神经网络,包含16个卷积层和3个全连接层,而Resnet50拥有更多层和更复杂的结构,引入了残差连接的概念,因此本研究将传统的VGG16替换成Resnet50作为特征提取器。通过对输入的图像进行特征提取,得到特征图(Feature map)。
② 区域建议网络(RPN)
RPN作为Faster-RCNN的核心网络[4],在特征图中生成候选区域。使用CNN去判断锚框(Anchor)中是否包含目标,划分成有目标的Positive Anchor和没有目标的Negative Anchor。RPN先做了3*3的卷积,随后分为图1中的两条路径,分别做1*1卷积,上面一条使用Softmax函数分类Anchors获得Positive和Negative实现二分类,下面一条用于计算Anchors的边界框回归(Bounding Box Regression)的偏移量。最后在建议框(Proposal)中通过Bounding Box Regression偏移量对Positive Anchors进行校正,从而获得精准的Proposal,完成目标定位。
③ 感兴趣区域池化(ROI Pooling)
ROI Pooling层将在Backbone骨干提取特征网络中得到的特征图(Feature map)与RPN层得到的建议框(Proposal)进行融合,得到建议特征图(Proposal Feature Maps),将其送入分类器中。
④ 分类器(Classification)
建议特征图(Proposal Feature Maps)进入分类器后,首先通过全连接层进行处理,然后经过一系列操作,包括Softmax函数等,以计算出每个候选框所属的类别以及对应的概率。同时,再次利用边界框回归来调整候选框的位置,以提高标注框的定位精度。
4.2. 模型训练
本文使用ResNet50残差网络作为玉米叶面病害识别的网络架构,训练得到的损失值如图2所示。
Figure 2. Loss value
图2. 损失值
train loss是模型在训练过程中在训练集上的损失值,而val loss则是模型在验证集上的损失值。图2中train loss在0次到50次训练时一直下降,而在50次训练时上升,之后一直下降。经过调试问题为超参数不合适,经过调整超参数之后,恢复正常。二者都在缓慢收敛,并在100次迭代之后。Train loss最终稳定在1左右,val loss最终稳定在1.7左右。Train loss和val loss两者同时处于下降状态,表明网络仍在学习,并且处于最佳状态。说明模型和数据集非常贴合。
4.3. 检测结果
使用Faster-RCNN算法完成对数据集的训练后,生成迭代100次的权重文件,通过选取最优的权重文件对玉米叶面病害进行检测识别。识别后的效果如图3所示。
(a) 健康玉米 (b) 玉米小斑病
(c) 玉米大斑病 (d) 玉米锈病
Figure 3. Detection results
图3. 检测结果图
图3中的四张图片分别为识别成功的四种玉米状态,分别为健康玉米、玉米小斑病、玉米大斑病、玉米锈病。识别率分别为0.97、0.95、0.96、0.95,表明特征提取的非常成功。玉米四种状态的特征较为明显,且有易于区分的特征[5]。这使目标轮廓的提取更加容易。从成功识别的角度来看,四种不同的玉米状态识别率基本一致,识别率在96%以上。
5. 系统实现
5.1. 系统构建理论体系
本系统基于Faster-RCNN算法对玉米叶面病害种类进行识别检测,将训练完成的算法通过API接口部署到使用Django搭建的后端框架中,并且结合Neo4j知识图谱,将相关玉米叶面病害种类的详细信息,通过知识图谱进行展示。
图4为本文的系统流程图。
Figure 4. System flowchart
图4. 系统流程图
以下为本系统的构建过程:
① 在构建系统时,使用Django作为后端框架。Django基于Python的高级Web框架,用于快速开发Web应用程序。通过Django处理URL路由、管理用户身份验证、访问控制和编写视图。
② 使用MySQL作为后端数据库,通过与Django的集成,并且利用Django的ORM(对象关系映射)系统来管理数据库模型和进行数据库查询,从而简化数据访问和操作。
③ 将训练完成的Faster-RCNN模型添加到系统中。在系统中调用Faster-RCNN,将算法部署为一个API(应用程序编程接口),通过HTTP请求与前端进行通信。前端可以向API发送图像,并接收到识别结果,从而实现图像识别功能。
④ 基于Neo4j数据库的详细信息。通过将树种的详细信息存储在Neo4j数据库中,使用图形查询语言来执行复杂的图形查询,以获取玉米叶面各个病害的详细信息以及解决病害的方法。本系统提供丰富而深入的玉米叶面病害预防以及解决等信息,从而增强系统的功能和价值。
5.2. 系统页面展示
网页端主要功能包括:用户注册、用户登录、玉米页面病害识别、识别记录、识别结果展示、病害信息知识图谱详细展示等[6]。如图5、图6所示。
Figure 5. Login page display
图5. 登录页面展示
在图5中,通过Django与MySQL数据库连接,在系统中设置登录账号密码交互界面。当用户输入错误的用户名或密码时,系统会提示错误信息;而当用户输入正确的用户信息,则可以成功登录到系统中。
Figure 6. System recognition page
图6. 系统识别页面
图6为系统的玉米叶面病害的识别界面,在Django系统框架中通过使用API接口调用Faster-RCNN算法对图片进行检测识别。在图6中可以看到检测的结果为玉米大斑病,识别率达0.96,并且在界面的右侧含有该病害详细的解决方案和防治方法。
6. 总结与展望
6.1. 总结
本研究基于Faster-RCNN算法对玉米叶面病害进行了种类识别,主要针对玉米健康、玉米大斑病、玉米小斑病和玉米锈病四种玉米叶面病害进行重点研究,对数据集进行训练得到权重文件。在此基础上,开发了智能玉米叶面病害识别系统,有效的帮助农民识别病害的种类,并且提供合理的解决方案和防治方法。
6.2. 展望
将在未来进一步拓宽研究领域,将模型应用到更多的食品农作物叶面病害的识别中,从而提高农作物防治水平,提升农作物的产量。同时探索准确率、识别效率更高的模型算法。在系统上根据实际情况进行改善优化,更加贴合实际所需,为粮食农作物的健康发展做出贡献。
项目基金
2023年大学生创新创业训练计划创新训练项目“基于时间序列模型的山东大葱产量预测研究”(编号S202313320247)。