在智慧农业的发展背景下,水稻害虫的快速检测与识别对于保障农作物健康、提高产量以及减少农药使用具有重要的现实意义。
项目信息
编号:PDV-6
大小:110M
运行条件
Python开发环境:
– PyCharm的安装包:PyCharm: Python IDE for Professional Developers
– PyCharm的历史安装包:PyCharm: Python IDE for Professional Developers
– Anaconda的安装包:Anaconda | Start Coding Immediately
– Python开发版本:Python==3.9
需要安装依赖包:
– pip install PyQt5== 5.15.11
– pip install Pillow==9.5.0
– pip install opencv-python==4.10.0.84
– pip install torch==2.4.0
– pip install torchvision==0.19.0
– pip install numpy== 1.26.4
– pip install matplotlib==3.9.2
项目介绍
在智慧农业的发展背景下,水稻害虫的快速检测与识别对于保障农作物健康、提高产量以及减少农药使用具有重要的现实意义。传统的害虫检测方法往往依赖人工观察,既费时又费力,且检测结果容易受到人为因素的影响。因此,采用高效、准确的自动化害虫检测技术成为智慧农业发展的关键环节之一。
本文提出了一种基于YOLOv8深度学习算法的水稻害虫检测系统,旨在实现对水稻作物中多种害虫的准确识别与定位。该系统能够检测包括水稻叶卷螟、水稻叶蝉、稻茎蝇、亚洲稻螟、黄稻螟、稻瘿蚊、水稻螟、褐飞虱、白背飞虱、小褐飞虱、稻水象甲、稻叶蝉、粮食白粉蝇和稻壳虫在内的十四种常见水稻害虫。通过广泛的害虫覆盖范围,该系统在提高检测精度和速度的同时,为农民和农业技术人员提供了准确的虫害信息支持,以便他们能够快速地采取适当的防治措施。
系统采用PyQt5框架开发用户界面,简洁直观,支持图像导入、实时检测与检测结果显示等功能。界面设计不仅便于用户快速上手操作,还提供了多种互动功能,如结果导出、批量检测等,以适应不同的农业应用场景。
在系统实现过程中,首先,本文通过收集并标注包含上述十四种害虫的大量图像数据集,为模型训练提供了高质量的数据基础。在此基础上,通过调整YOLOv8模型的超参数,包括学习率、批次大小、迭代次数等,进一步优化了网络结构以适应具体任务需求。优化后的模型不仅提高了检测精度,同时保持了较高的实时性和检测速度,使其适用于实际农业生产中的害虫快速检测任务。
实验结果表明,本文提出的YOLOv8害虫检测系统在害虫识别的准确性、处理速度和实时性方面均表现出色,在一定程度上解决了传统害虫检测方式的不足。该系统为智慧农业中的水稻害虫防治提供了新的解决方案,具有良好的推广应用前景,可为实现农业的智能化与可持续发展作出贡献。未来的研究方向包括增加更多种类的害虫检测支持、结合无人机和边缘计算实现大规模检测以及引入多模态数据(如温度、湿度等)提升系统的环境适应性。
项目文档
Tipps:可以根据您的需求进行写作,确保文档原创!
– 项目文档:写作流程
算法流程
代码讲解
Tipps:仅对train.py部分代码简要讲解。该项目可以按需有偿讲解,提供后续答疑。
项目数据
Tipps:通过搜集关于数据集为各种各样的建筑外墙破损相关图像,并使用Labelimg标注工具对每张图片进行标注,分3检测类别,分别是’裸露钢筋’,’外墙剥落’,’墙体裂缝’。
目标检测标注工具
(1)labelimg:开源的图像标注工具,标签可用于分类和目标检测,它是用python写的,并使用Qt作为其图形界面,简单好用(虽然是英文版的)。其注释以 PASCAL VOC格式保存为XML文件,这是ImageNet使用的格式。此外,它还支持 COCO数据集格式。
(2)安装labelimg 在cmd输入以下命令 pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
结束后,在cmd中输入labelimg
初识labelimg
打开后,我们自己设置一下
在View中勾选Auto Save mode
接下来我们打开需要标注的图片文件夹
并设置标注文件保存的目录(上图中的Change Save Dir)
接下来就开始标注,画框,标记目标的label,然后d切换到下一张继续标注,不断重复重复。
Labelimg的快捷键
(3)数据准备
这里建议新建一个名为data的文件夹(这个是约定俗成,不这么做也行),里面创建一个名为images的文件夹存放我们需要打标签的图片文件;再创建一个名为labels存放标注的标签文件;最后创建一个名为 classes.txt 的txt文件来存放所要标注的类别名称。
data的目录结构如下:
│─img_data
│─images 存放需要打标签的图片文件
│─labels 存放标注的标签文件
└ classes.txt 定义自己要标注的所有类别(这个文件可有可无,但是在我们定义类别比较多的时候,最好有这个创建一个这样的txt文件来存放类别)
首先在images这个文件夹放置待标注的图片。
生成文件如下:
“classes.txt”定义了你的 YOLO 标签所引用的类名列表。
(4)YOLO模式创建标签的样式
存放标签信息的文件的文件名为与图片名相同,内容由N行5列数据组成。
每一行代表标注的一个目标,通常包括五个数据,从左到右依次为:类别id、x_center、y_center、width、height。
其中:
–x类别id代表标注目标的类别;
–x_center和y_center代表标注框的相对中心坐标;
–xwidth和height代表标注框的相对宽和高。
注意:这里的中心点坐标、宽和高都是相对数据!!!
存放标签类别的文件的文件名为classes.txt (固定不变),用于存放创建的标签类别。
完成后可进行后续的yolo训练方面的操作。
模型训练
Tipps:模型的训练、评估与推理
1.YOLOv8的基本原理
YOLOv8是一个SOTA模型,它建立在Yolo系列历史版本的基础上,并引入了新的功能和改进点,以进一步提升性能和灵活性,使其成为实现目标检测、图像分割、姿态估计等任务的最佳选择。其具体创新点包括一个新的骨干网络、一个新的Ancher-Free检测头和一个新的损失函数,可在CPU到GPU的多种硬件平台上运行。
YOLOv8是Yolo系列模型的最新王者,各种指标全面超越现有对象检测与实例分割模型,借鉴了Yolov5、Yolov6、YoloX等模型的设计优点,在全面提升改进Yolov5模型结构的基础上实现,同时保持了Yolov5工程化简洁易用的优势。
Yolov8模型网络结构图如下图所示:
2.数据集准备与训练
本研究使用了包含水稻害虫相关图像的数据集,并通过Labelimg标注工具对每张图像中的目标边框(Bounding Box)及其类别进行标注。然后主要基于YOLOv8n这种模型进行模型的训练,训练完成后对模型在验证集上的表现进行全面的性能评估及对比分析。模型训练和评估流程基本一致,包括:数据集准备、模型训练、模型评估。本次标注的目标类别为水稻害虫,数据集中共计包含1248张图像,其中训练集占1060张,验证集占188张。部分图像如下图所示:
部分标注如下图所示:
图片数据的存放格式如下,在项目目录中新建datasets目录,同时将检测的图片分为训练集与验证集放入datasets目录下。
接着需要新建一个data.yaml文件,用于存储训练数据的路径及模型需要进行检测的类别。YOLOv8在进行模型训练时,会读取该文件的信息,用于进行模型的训练与验证。
data.yaml的具体内容如下:
train: E:\RicepestDetectionObjective_v8\datasets\train 训练集的路径
val: E:\RicepestDetectionObjective_v8\datasets\val 验证集的路径
nc: 14
names: [‘rice leaf roller’, ‘rice leaf caterpillar’, ‘paddy stem maggot’, ‘asiatic rice borer’, ‘yellow rice borer’, ‘rice gall midge’, ‘Rice Stemfly’, ‘brown plant hopper’, ‘white backed plant hopper’, ‘small brown plant hopper’, ‘rice water weevil’, ‘rice leafhopper’, ‘grain spreader thrips’, ‘rice shell pest’]
这个文件定义了用于模型训练和验证的数据集路径,以及模型将要检测的目标类别。
数据准备完成后,通过调用train.py文件进行模型训练,epochs参数用于调整训练的轮数,batch参数用于调整训练的批次大小(根据内存大小调整,最小为1)。
CPU/GPU训练代码如下:
加载名为 yolov8n.pt 的预训练YOLOv8模型,yolov8n.pt是预先训练好的模型文件。
使用YOLO模型进行训练,主要参数说明如下:
(1)data=data_yaml_path: 指定了用于训练的数据集配置文件。
(2)epochs=150: 设定训练的轮数为150轮。
(3)batch=4: 指定了每个批次的样本数量为4。
(4)optimizer=’SGD’):SGD 优化器。
(7)name=’train_v8′: 指定了此次训练的命名标签,用于区分不同的训练实验。
3.训练结果评估
在深度学习的过程中,我们通常通过观察损失函数下降的曲线来了解模型的训练情况。对于YOLOv8模型的训练,主要涉及三类损失:定位损失(box_loss)、分类损失(cls_loss)以及动态特征损失(dfl_loss)。训练完成后,相关的训练过程和结果文件会保存在 runs/ 目录下,具体如下:
各损失函数作用说明:
定位损失box_loss:预测框与标定框之间的误差(GIoU),越小定位得越准;
分类损失cls_loss:计算锚框与对应的标定分类是否正确,越小分类得越准;
动态特征损失(dfl_loss):DFLLoss是一种用于回归预测框与目标框之间距离的损失函数。在计算损失时,目标框需要缩放到特征图尺度,即除以相应的stride,并与预测的边界框计算Ciou Loss,同时与预测的anchors中心点到各边的距离计算回归DFLLoss。这个过程是YOLOv8训练流程中的一部分,通过计算DFLLoss可以更准确地调整预测框的位置,提高目标检测的准确性。
训练结果如下:
这张图展示了YOLOv8模型在训练和验证过程中的多个重要指标的变化趋势,具体如下:
train/box_loss:
(1)这是训练过程中边界框损失的变化。边界框损失用于衡量模型预测的目标框与实际目标框的差异。
(2)随着训练周期增加,box loss 逐渐下降,表明模型在目标位置的预测上逐渐改善。
train/cls_loss:
(1)这是训练集上的分类损失。分类损失衡量模型对目标类别的预测准确性。
(2)cls_loss 逐步下降,显示模型在类别预测方面的准确度逐渐提高。
train/dfl_loss:
(1)这是分布聚焦损失(distribution focal loss),用于帮助模型对目标框的精确定位。
(2)随着训练进行,dfl_loss 逐渐减小,表明模型在定位边界上越来越精确。
metrics/precision(B):
(1)这是训练集上的精度(precision)曲线。精度表示模型在检测到的目标中有多少是真正的目标。
(2)模型在训练过程中逐渐减少错误检测,精确率提升。
metrics/recall(B):
(1)这是训练集上的召回率(recall)曲线。召回率表示模型检测出的真实目标的比例。
(2)召回率的提升表明模型对正样本的识别率提高。
val/box_loss:
(1)这是验证集上的边界框损失曲线。
(2)验证集上的边界框损失,数值逐渐减小并趋于平稳,表明模型在验证集上对目标位置的预测有所改善。
val/cls_loss:
(1)这是验证集上的分类损失曲线。
(2)验证集上的分类损失,随着训练继续减少,表明模型在验证集上对目标类别的预测越来越准确。
val/dfl_loss:
(1)这是验证集上的分布聚焦损失曲线。
(2)验证集上的聚合损失,逐步降低并趋于平稳,显示模型在验证集上目标框边界的预测有所提升。
metrics/mAP50(B):
(1)这是验证集上的mAP50曲线,表示在交并比阈值为0.5时模型的平均精度(mean Average Precision)。
(2)图中显示 mAP50 逐步上升并趋于平稳,表明模型的总体检测精度有所提升并稳定下来。
metrics/mAP50-95(B):
(1)这是验证集上的mAP50-95曲线,表示在不同交并比阈值(从0.5到0.95)下模型的平均精度。
(2)随着训练进行,该值逐步上升,表明模型在多种IoU阈值下的检测性能逐步改善。
总结:
(1)训练和验证集的损失值都逐渐下降,表明模型在逐步学习和收敛。
(2)精确率、召回率和mAP在训练期间逐渐上升,并趋于稳定,表明模型在水稻害虫检测任务上获得了良好的学习效果,达到了较高的检测准确性。
(3)mAP@0.5与mAP@0.5:0.95的逐渐上升显示了模型在不同精度要求下都具有较好的检测性能。
这张图展示的是 Precision-Recall 曲线,用于评估模型在不同类别下的检测性能。以下是详细解释:
各类害虫的曲线:
1.每种害虫类别都用不同颜色的线条表示,并在图例中标出了各类别的名称及其mAP@0.5(平均精度)值。
2.mAP@0.5值表示在0.5的IoU阈值下,模型对该类别的检测平均精度。例如:
(1)稻水象甲 (Rice Water Weevil) 的mAP@0.5为0.945,表现最佳,说明模型对该类别的识别精度最高。
(2)小褐飞虱 (Small Brown Plant Hopper) 的mAP@0.5最低,为0.546,表明在该类别的检测上模型表现较弱。
3.其他类别,如水稻叶卷螟 (Rice Leaf Roller) 和 稻瘿蚊 (Rice Gall Midge),也有较高的mAP值,表明模型在这些类别上有良好的检测性能。
整体模型性能:
(1)粗蓝线表示所有类别的整体性能,平均mAP@0.5为0.770,反映了模型在总体上的检测精度。
(2)蓝色曲线的变化趋势显示出精确率和召回率之间的权衡:精确率高时,召回率通常较低,反之亦然。
总结:
(1)整体来看,模型在大部分类别上的精确率和召回率都保持在较高水平,尤其是对部分害虫类别(如稻水象甲、稻叶蝉等)检测效果较好。
(2)某些类别(如小褐飞虱和白背飞虱)的精确率和召回率稍低,可能需要更多的数据或模型的进一步优化来提升检测效果。
通过分析Precision-Recall曲线,可以直观地评估模型在不同害虫类别上的表现。模型整体表现较好,但也指出了某些类别的改进空间,为进一步优化提供了指导。
4.检测结果识别
模型训练完成后,我们可以得到一个最佳的训练结果模型best.pt文件,在runs/train/weights目录下。我们可以使用该文件进行后续的推理检测。
imgTest.py 图片检测代码如下:
加载所需库:
(1)from ultralytics import YOLO:导入YOLO模型类,用于进行目标检测。
(2)import cv2:导入OpenCV库,用于图像处理和显示。
加载模型路径和图片路径:
(1)path = ‘models/best.pt’:指定预训练模型的路径,这个模型将用于目标检测任务。
(2)img_path = “TestFiles/imagetest.jpg”:指定需要进行检测的图片文件的路径。
加载预训练模型:
(1)model = YOLO(path, task=’detect’):使用指定路径加载YOLO模型,并指定检测任务为目标检测 (detect)。
(2)通过 conf 参数设置目标检测的置信度阈值,通过 iou 参数设置非极大值抑制(NMS)的交并比(IoU)阈值。
检测图片:
(1)results = model(img_path):对指定的图片执行目标检测,results 包含检测结果。
显示检测结果:
(1)res = results[0].plot():将检测到的结果绘制在图片上。
(2)cv2.imshow(“YOLOv8 Detection”, res):使用OpenCV显示检测后的图片,窗口标题为“YOLOv8 Detection”。
(3)cv2.waitKey(0):等待用户按键关闭显示窗口
此代码的功能是加载一个预训练的YOLOv8模型,对指定的图片进行目标检测,并将检测结果显示出来。
执行imgTest.py代码后,会将执行的结果直接标注在图片上,结果如下:
这段输出是基于YOLOv8模型对图片“imagetest.jpg”进行检测的结果,具体内容如下:
图像信息:
(1)处理的图像路径为:TestFiles/imagetest.jpg。
(2)图像尺寸为 480×640 像素。
检测结果:
(1)模型在该图片上检测到 1 个稻茎蝇(”1 Rice Stemfly”)
处理速度:
(1)预处理时间: 3.6ms。
(2)推理时间: 33.8ms。
(3)后处理时间: 49.9ms。
输出的这些信息有助于了解检测到的水稻害虫类别,以及模型在该特定图像上的推理表现。
运行效果
– 运行 MainProgram.py
1.主要功能:
(1)可用于实时检测目标图片中的水稻害虫;
(2)支持图片、视频及摄像头进行检测,同时支持图片的批量检测;
(3)界面可实时显示目标位置、目标总数、置信度、用时等信息;
(4)支持图片或者视频的检测结果保存。
2.检测结果说明:
这张图表显示了基于YOLOv8模型的目标检测系统的检测结果界面。以下是各个字段的含义解释:
用时(Time taken):
(1)这表示模型完成检测所用的时间为0.026秒。
(2)这显示了模型的实时性,检测速度非常快。
目标数目(Number of objects detected):
(1)检测到的目标数目为1,表示这是当前检测到的第1个目标。
目标选择(下拉菜单):全部:
(1)这里有一个下拉菜单,用户可以选择要查看的目标类型。
(2)在当前情况下,选择的是“全部”,意味着显示所有检测到的目标信息。
类型(Type):
(1)当前选中的行为类型为 “水稻螟”,表示系统正在高亮显示检测到的“Rice Stemfly”。
置信度(Confidence):
(1)这表示模型对检测到的目标属于“稻茎蝇”类别的置信度为96.61%。
(2)置信度反映了模型的信心,置信度越高,模型对这个检测结果越有信心。
目标位置(Object location):
(1)xmin: 37, ymin: 47:目标的左上角的坐标(xmin, ymin),表示目标区域在图像中的位置。
(2)xmax: 200, ymax: 296:目标的右下角的坐标(xmax, ymax),表示目标区域的边界。
这些坐标表示在图像中的目标区域范围,框定了检测到的“稻茎蝇”的位置。
这张图展示了水稻害虫的一次检测结果,包括检测时间、检测到的种类、各行为的置信度、目标的位置信息等。用户可以通过界面查看并分析检测结果,提升水稻害虫检测的效率。
3.图片检测说明
(1)稻壳虫
(2)稻水象甲
(3)稻叶蝉
(4)稻瘿蚊
(5)褐飞虱
(6)黄稻螟
(7)粮食白粉蝇
(8)水稻螟
(9)水稻叶蝉
(10)水稻叶卷螟
(11)小褐飞虱
(12)亚洲稻螟
点击打开图片按钮,选择需要检测的图片,或者点击打开文件夹按钮,选择需要批量检测图片所在的文件夹。
操作演示如下:
(1)点击目标下拉框后,可以选定指定目标的结果信息进行显示。
(2)点击保存按钮,会对检测结果进行保存,存储路径为:save_data目录下。
检测结果:系统识别出图片中的水稻害虫,并显示检测结果,包括总目标数、用时、目标类型、置信度、以及目标的位置坐标信息。
4.视频检测说明
点击视频按钮,打开选择需要检测的视频,就会自动显示检测结果,再次点击可以关闭视频。
点击保存按钮,会对视频检测结果进行保存,存储路径为:save_data目录下。
检测结果:系统对视频进行实时分析,检测到水稻害虫并显示检测结果。表格显示了视频中多个检测结果的置信度和位置信息。
这个界面展示了系统对视频帧中的多目标检测能力,能够准确识别水稻害虫,并提供详细的检测结果和置信度评分。
5.摄像头检测说明
点击打开摄像头按钮,可以打开摄像头,可以实时进行检测,再次点击,可关闭摄像头。
检测结果:系统连接摄像头进行实时分析,检测到水稻害虫并显示检测结果。实时显示摄像头画面,并将检测到的行为位置标注在图像上,表格下方记录了每一帧中检测结果的详细信息。
6.保存图片与视频检测说明
点击保存按钮后,会将当前选择的图片(含批量图片)或者视频的检测结果进行保存。
检测的图片与视频结果会存储在save_data目录下。
保存的检测结果文件如下:
图片文件保存的csv文件内容如下,包括图片路径、目标在图片中的编号、目标类别、置信度、目标坐标位置。
注:其中坐标位置是代表检测框的左上角与右下角两个点的x、y坐标。
(1)图片保存
(2)视频保存
– 运行 train.py
1.训练参数设置
(1)data=data_yaml_path: 使用data.yaml中定义的数据集。
(2)epochs=150: 训练的轮数设置为100轮。
(3)batch=4: 每个批次的图像数量为4(批次大小)。
(4)name=’train_v8′: 训练结果将保存到以train_v8为名字的目录中。
(5)optimizer=’SGD’: 使用随机梯度下降法(SGD)作为优化器。
虽然在大多数深度学习任务中,GPU通常会提供更快的训练速度。
但在某些情况下,可能由于硬件限制或其他原因,用户需要在CPU上进行训练。
温馨提示:在CPU上训练深度学习模型通常会比在GPU上慢得多,尤其是像YOLOv8这样的计算密集型模型。除非特定需要,通常建议在GPU上进行训练以节省时间。
2.训练日志结果
这张图展示了使用YOLOv8进行模型训练的详细过程和结果。
训练总时长:
(1)模型在训练了150轮后,总共耗时0.720小时。
整体性能:
(1)模型在所有类别(总计14类害虫)上的 mAP50 为 0.77,mAP50-95 为 0.463。
(2)这表示在较为宽松的IoU阈值0.5时,平均检测精度达到了77%,而在更严格的IoU阈值范围(0.5到0.95之间)的平均精度为46.3%。
各类别检测效果:
1.每个类别都有对应的性能指标,包括:
(1)R(召回率):代表模型在检测到的正样本中,正确识别的比例。
(2)mAP50 和 mAP50-95:表示每个类别的平均精度。mAP50使用0.5的IoU阈值,而mAP50-95表示在0.5到0.95之间逐步增加IoU阈值的平均值。
2.从各类害虫的mAP50可以看到不同类别的检测精度:
(1)稻瘿蚊 (Rice Gall Midge) 和 稻水象甲 (Rice Water Weevil) 的 mAP50 分别达到了 0.929 和 0.945,表现最佳。
(2)白背飞虱 (White Backed Plant Hopper) 和 稻壳虫 (Rice Shell Pest) 的 mAP50 相对较低,分别为 0.631 和 0.648,可能是由于样本量不足或特征不明显。
3.其他害虫,如褐飞虱 (Brown Plant Hopper) 和 稻叶蝉 (Rice Leafhopper),均有较高的检测精度,分别为 0.827 和 0.89,显示了良好的检测性能。
速度:
(1)0.2ms 预处理时间
(2)1.2ms 推理时间
(3)0.7ms 后处理时间
结果保存:
(1)Results saved to runs\detect\train_v8:验证结果保存在 runs\detect\train_v8 目录下。
完成信息:
(1)Process finished with exit code 0:表示整个验证过程顺利完成,没有报错。
这张图展示了YOLOv8在这次水稻害虫检测任务中达到了较高的精度和稳定的表现,为智慧农业中的害虫检测提供了可靠的解决方案。
远程部署
Tipps:购买后可有偿协助安装,确保运行成功。
– 远程工具:Todesk 、向日葵远程控制软件
– 操作系统:Windows OS
– 客服QQ:3666308803
项目文件
文件目录
Tipps:完整项目文件清单如下:
项目目录
– 1.Code (完整代码:确保运行成功)
– 2.Result (运行结果:真实运行截图)
– 3.Demo (演示视频:真实运行录制)
评论(0)