Advertisement

基于YOLOv8深度学习的智慧农业柑橘病害识别检测系统(PyQt5界面+数据集+训练代码)

阅读量:

柑橘病害对优化果园管理及病害防治具有关键作用。不仅制约了果实品质与产量产出,还可能导致农业经济损失大幅攀升。传统检测手段多依赖人工操作,在效率上存在明显劣势,并易受外界环境及人体视觉疲劳等因素制约。为此,在理论创新与技术创新方面均取得了显著成果的研究方向已获得广泛关注。

开发了一种利用YOLOv8深度学习模型的柑橘病害检测系统,其目标是提供高效率与高精确度的柑橘病变识别与分类方案。该系统能够被该模型识别出包括黄龙斑点菌感染引起的黄龙斑点,由角 spot psyllium caused black scab, 黑斑则是指cercospora leaf spot, 湧 authenticity则对应着causes of leaf Curling在内的四种主要症状以及健康状态下的叶片样本。通过利用大规模由真实图像构成的数据集进行训练, 系统能够在各种复杂的真实场景中展现出卓越的效果,并精准地鉴别出不同类型的病变症状。

旨在提升系统用户体验

经过多轮实验优化后发现,在测试集上本系统获得了较高的准确率与召回率。通过实验结果可以看出,在实际应用中该系统展现出良好的抗干扰能力和快速检测能力,并能适应多种环境条件下的工作需求。
本研究开发的基于YOLOv8的柑橘病害检测系统为农业生产中的病害监测与防治工作提供了一种高效可靠的解决方案。
该系统不仅能够实现精准的图像识别功能,
还能根据实时采集的数据进行快速分析与决策,
从而显著提高了果园管理工作的效率。
此外,
该技术还可帮助相关工作人员更好地掌握果园内植物的健康状况,
从而制定更加科学合理的防治策略,
最终实现了农业生产的可持续发展目标。

算法流程

项目数据

为了获取涵盖多种柑橘病害的高质量图像数据集,并采用Labelimg软件对每张图片进行精确标注。按照5个具体的检测分类标准可分为以下五类:包括'柑橘黄龙病'、'柑橘黑痘病'、'柑橘黑斑病'、'柑橘溃疡病'以及'无感染症状的健康状况'。

LabelImg 是一个开源的图像标注工具,在分类任务和目标检测中均可应用。它是由 Python 编写,并以其图形界面易用性著称(虽然界面为英文)。该工具采用 Pascal VOC 格式保存标注结果为 XML 文件(这也是 ImageNet 所采用的标准格式)。此外还支持 COCO 数据集格式。安装 LabelImg 可通过以下命令在 cmd 环境中完成:pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

结束后,在cmd中输入labelimg

初识labelimg

打开后,我们自己设置一下

在View中勾选Auto Save mode

接下来我们打开需要标注的图片文件夹

为了设置文件保存的目录(上图中标注Change Save Dir),请按照以下步骤操作:首先打开图片编辑软件;接着启动图像处理流程;然后在界面中选择"开始"选项卡;在弹出菜单中点击"开始处理"按钮;随后系统会自动生成预设参数窗口;最后点击"确定"按钮完成配置。

Labelimg的快捷键

(3)数据准备
为数据准备时,请创建一个名为data的父目录,并生成一个名为images的子文件夹来存储待标注的照片;随后,在同一个目录下,请创建另一个命名为labels的文件夹来存储分类标签,并生成一个命名为classes.txt的文本文件以记录需要识别的所有类别名称。

data目录下的组织架构如下:

首先在images这个文件夹放置待标注的图片。
生成文件如下:

“classes.txt”定义了你的 YOLO 标签所引用的类名列表。

(4)YOLO模式创建标签的样式

该文件名与图片名相同。该文件内容由N行5列的数据构成。每个条目代表标注的一个目标,通常包含五个数据项:从左到右依次是:类别ID、x中心坐标、y中心坐标、宽度和高度。其中类别ID代表标注目标所属的类别;x中心坐标和y中心坐标表示标注框在图像中的中心位置;宽度和高度表示标注框在图像中的大小。

注意:这里的中心点坐标、宽和高都是相对数据!!!

该文件存储了标记类别的名称(固定为classes.txt),用于存储生成的标记类别。

完成后可进行后续的yolo训练方面的操作。

模型训练

模型的训练、评估与推理

1.YOLOv8的基本原理

YOLOv8属于当前目标检测领域的顶尖技术。它是基于经典Yolo系列的发展而来,并融合了多项创新组件。其核心优势在于能够显著增强性能与适应性的同时,在不影响效率的前提下实现了更为灵活的功能配置。其主要创新集中在三个方面:一是采用了新型主干网络结构;二是设计了一个全新的Ancher-Free检测模块;三是引入了优化后的损失函数计算方案;这些改进均支持在不同计算平台上稳定运行。

YOLOv8作为YOLO系列中的顶尖版本,在各项关键指标上均超过了当前的对象检测及实例分割模型。基于对提升Yolov5模型结构的全面优化,在继承并发挥了Yolov5工程化设计上的简便易用性的同时,在各项性能指标上实现了显著突破。

Yolov8模型网络结构图如下图所示:

2.数据集准备与训练

本研究基于包含柑橘病害相关图像的数据集合,并利用Labelimg标注工具对每张图像的目标边界框及其分类进行了标注工作。随后主要采用YOLOv8n模型进行模型训练,并在完成后的模型在验证集中进行了全面的性能评估与比较分析。其流程主要包括三个环节:数据准备阶段、模型训练阶段以及评估阶段。本次研究关注的目标类别是柑橘病害,在数据集中共有1290张图片(其中训练集占1032张),验证集中共有129张图片(注:此处出现表述重复,请根据具体需求修改)。部分典型图像如图所示:

部分标注如下图所示:

在当前项目的根目录下创建datasets文件夹,并按照类型将检测到的图像分为训练集和验证集,并将其放入该文件夹中。

为了便于后续操作和管理

data directory structure

number of classes

nc: 5

class names

names: [Greening Orange, Melanose Orange, Black-Spot Orange, Canker Orange, Healthy Orange]

该文件指定了在模型训练与验证过程中所涉及的数据集路径,并且此外该模型旨在识别预定的目标类别。

在完成数据准备之后,系统将启动模型训练过程,并通过运行train.py脚本来执行。其中:

  • epochs参数将决定训练循环的数量
  • batch size将控制每个批次的数据量(受内存限制,默认值为1)

CPU/GPU训练代码如下:

导入预训练的YOLOv8模型文件位于yolov8n.pt中。通过指定相关超参数对模型进行训练:首先设定数据集配置文件路径;其次定义最大迭代次数为100次;每批处理4个样本;选择随机梯度下降优化器(SGD);并设置实验命名标识为train_v8。

3.训练结果评估

在深度学习的过程中, 我们一般通过观察损失函数下降的趋势来掌握模型运行状态. 针对YOLOv8模型的训练过程, 包括三个方面的损失: 定位损失(box_loss)、分类损失(cls_loss)以及动态特征损失(dfl_loss). 完成之后, 相关的结果文件将被存储于runs目录中.

各损失函数作用说明

训练结果如下:

该图表详细呈现了YOLOv8模型在训练与验证阶段的关键性能指标变化情况

(1)在训练过程中,边界框损失的变化情况如何?该指标用于评估模型预测的目标框与实际目标框之间的差异程度。
(2)随着训练的进行,该指标持续下降。由此可得,在边界框定位任务中,模型的表现持续优化。

(1)该指标衡量模型在训练数据集上的分类任务的损失函数。
(2)当该指标下降时,通常与模型在识别特定类别时的准确性提升有关。

train/dfl_loss:
(1)该分布聚焦损失(distribution focal loss)旨在使模型对目标框进行精准定位。
(2)该损失有助于提升边界框位置的精确度,在训练过程中,DFL损失逐渐减小,表明模型在细节定位方面表现越来越好。

metrics/precision(B):
(1)这是基于训练集计算得出的精度曲线。其数值反映了该模型在识别目标时准确识别出实际存在的目标的比例。
(2)其趋势呈现出逐渐攀升直至趋于平稳的特点,并表明该模型在识别目标时的表现持续优化并维持较高水平的能力。

metrics/recall(B):
(1)这是针对训练集的召回率曲线图。召回率衡量了模型在真实目标中被正确识别的比例。
(2)曲线逐渐趋近于1表明模型在训练集中能够有效地识别大部分实际存在的目标。

val/box_loss:
(1)该图表展示了在验证集上的边界框损失曲线。
(2)随着损失值下降,在验证集上模型的边界框定位精度显著提升,并且与训练阶段的表现保持一致。

val/cls_loss:
(1)该指标代表了验证集上的分类损失曲线。
(2)如同训练集所反映,在验证集中当损失值逐步下降时,则表示模型对目标分类准确性的识别能力逐渐增强。

val/dfl_loss:
(1)这是验证集上分布焦点损失的变化曲线。
(2)该曲线反映了模型在验证集上边界框定位精度的持续提升。

metrics/mAP50(B):
(1)该验证集上绘制了mAP50曲线图,即表示当交并比(IoU)阈值设定为0.5时模型的平均精度(mean Average Precision)。
(2)该曲线数值趋近于1,表明该模型在较低IoU标准下的检测性能优异。

metrics/mAP50-95(B):
(1)该曲线基于验证集数据生成,展示了模型在不同交并比(从0.5至0.95)范围内的平均精度。
(2)该指标评估了模型在各个IoU阈值下的性能表现,并显示随着IoU值的增加,mAP指标呈现逐渐提升的趋势,在IoU接近1时达到最高水平。

训练集与验证集的损失持续减少趋势;其精度、召回率及mAP等指标持续呈现稳定并接近理想值的趋势;经100次迭代后各项评估指标均达到理想水平。

这张图形化表示展示了 Precision-Recall 曲线的具体形态和特征,在直观上帮助理解模型在各类别上的检测性能表现。其中涉及的关键指标包括曲线下面积等重要评估参数。

每个类别的曲线:
(1)图中不同颜色的曲线代表模型针对不同的柑橘病害类别(包括但不限于柑橘黄龙病、柑橘黑痘病、柑橘黑斑病、柑橘溃疡病以及健康柑橘)的精确度与召回率关系。
(2)曲线越靠近右上角表明该类别的精确度与召回率均较高。
(3)每个类别旁边标注的数字代表该类别的平均精度水平。

(1)这条线反映了各类别整体表现。
(2)总体mAP@0.5为0.974,在IoU=0.5条件下显示模型均表现出色。

各类别的表现
1.Orange-Black-Spot和Orange-Canker:
(1)该两个类别的曲线几乎达到完美点(即精度与召回率均接近1),表明模型在这些类别上的识别能力非常出色(达到0.995的mAP@0.5)。
2.Orange-Melanose:
(1)该类别的曲线相对接近完美点(即精度与召回率均较高),其mAP@0.5值为0.978,在分析黑斑病的表现时表现出很好的效果。
3.Orange-Greening和Orange-Healthy:
(1)该两个类别的mAP@0.5值稍低于其他类别(分别为0.955和0.944),但仍处于较高水平,并且其曲线略微偏离完美点的位置可能是因为模型在某些方面偏向于更高的精度或召回率

总结:
(1)该模型在大多数病害类别中表现出较高的检测精度和召回率能力,在针对柑橘黑斑病和柑橘溃疡病的检测方面表现出色,并且其性能接近完美水平。
(2)对于柑橘类病害的检测任务而言,该模型表现出了极高的可靠性,在维持较高水平检测精度的同时,在召回率方面也表现优异。

4.检测结果识别

经过模型训练完成之后, 我们能够获取到位于runs/train/weights目录下的best.pt文件. 该文件可用于后续操作.

(1)通过从ultralytics导入YOLO模型类,旨在实现目标检测功能。
(2)通过导入cv2库,主要用于图像处理与显示。

加载模型路径和图片路径:
(1)path = ‘models/best.pt’:说明了预训练模型的位置。
(2)img_path = “TestFiles/imagetest.jpg”:明确了待检测图像的位置。

载入预训练好的模型:
(1)model = YOLO(path, task=’detect’):通过指定期望路径调用YOLO模型,并将目标检测任务设为目标检测模式。
(2)利用 conf 参数配置目标检测的有效置信度阈值;同时调整iou参数设定非极大值抑制(NMS)的交并比(IoU)阈值。

Image Detection: (1) results = model(img_path): Utilizing a target detection model to analyze the input image, where results encompass the detected outcomes.

显示检测结果:
(1)res = results[0].plot():将检测到的结果以图像形式呈现于屏幕上。
(2)cv2.imshow(“YOLOv8 Detection”, res):通过OpenCV库实现检测结果的显示,并设置窗口标题为“YOLOv8 Detection”。
(3)cv2.waitKey(0):程序暂停运行直至用户按下任意键后方能继续。

此代码的功能是调用预训练好的YOLOv8模型,识别指定输入的图像中的物体,并输出检测结果。

执行imgTest.py代码后,会将执行的结果直接标注在图片上,结果如下:

这段输出利用YOLOv8模型对图片'imagetest.jpg'进行检测得出的结果

这段输出是由YOLOv8模型在图片'imagetest.jpg'上执行检测所生成的结果

图像信息:
(1)处理的图像路径为:TestFiles/imagetest.jpg。
(2)图像尺寸为 640×576 像素。

检测结果:
(1)模型在该图片上检测到 1 个柑橘溃疡病(”1 Orange-Canker”)

处理速度:
(1)预处理时间: 10.0ms。
(2)推理时间: 38.1ms。
(3)后处理时间: 112.8ms。

该输出结果表明该模型能够准确地对目标类别进行分类,并提供了各阶段运行所需的时间消耗数据。同时展示了该模型在处理图像数据时的整体推断速度。

运行效果

– 运行 MainProgram.py

主要功能:
(1)旨在实现在线识别被摄图像中的柑橘病害;
(2)该系统具备对图像、视频以及摄像头进行检测的能力,并且还支持对批量图片进行检测;
(3)界面能够动态呈现目标位置坐标、总数统计、检测信心值以及耗时数据;
(4)系统能够保存来自图像或视频的检测结果。

2.检测结果说明:

该图表展示了基于YOLOv8模型的目标检测系统的结果界面。具体说明了各个字段的具体意义。

(1)这表明模型进行检测所需时间为0.013秒。(2)这体现了模型具有较高的实时性和较快的检测速度。

目标数目(Number of objects detected):
(1)检测的目标数量为1,并且这表示这是当前主要检测到的第一个目标。

此处提供了一个下拉菜单选项用于让用户选择需要查看的目标类型

类型(Type): (1)当前选中的是 "柑橘黑痘病" 表明系统正在高亮显示检测到的 "Orange-Melanose"

(1)这表明该系统对于检测到的目标属于"柑橘黑痘病"类别的预测具有高度的信心。
(2)这里的"置信度"是衡量系统对这一分类结果信任程度的一个重要指标;当"置信度"值越高时,则表示系统对该分类结果越有把握。

目标位置(Object location):
(1)xmin: 5, ymin: 0:该区域的起始点由xmin和ymin参数指定。
(2)xmax: 637, ymax: 609:终点则由xmax和ymax参数确定。

这些坐标值对应于图像中目标区域的范围,并决定了检测出的柑橘黑痘病的位置。

该图表呈现了柑橘病害的一次检测记录,并详细记录了包括以下信息:检测的时间节点、被检识到的具体病害类型以及各项行为所对应的置信度评分情况等关键数据要素。系统管理界面专门设计用于展示这些结果数据,并提供分析功能以帮助检验员进行深入研究与评估工作,从而提高对柑橘病害的检测试验效率

3.图片检测说明
(1)柑橘黑斑病

(2)柑橘黑痘病

(3)柑橘黄龙病

(4)柑橘溃疡病

(5)柑橘无病害

单击打开图片按钮并选择待检测的图片;此外,请单击打开文件夹按钮以选择包含待批量检测图片的文件夹。
操作步骤如下:

  1. 设置目标结果信息并显示出来。
  2. 将检测结果保存至指定于save_data目录中的位置。

检测结果:系统进行了柑橘病害的识别,并输出了相应的检测结果信息。该信息包括总目标数量、完成时间、分类类型以及置信度等关键指标,并提供了目标的具体位置坐标数据。

4.视频检测说明

单击视频按钮即可启动视频播放功能,在选择需要检测的视频后 系统将立即显示检测结果 单击该按钮则会关闭当前的播放

单击保存按钮后系统会将当前的检测结果存储起来 在指定位置即 save_data 目录下

检测结果:系统实时对视频进行分析,并能同时完成柑橘病害的识别及相应的检测信息呈现。表格记录了视频中多个检测结果的置信度评分以及具体位置坐标数据。

该界面旨在展示系统在视频帧中的多目标检测性能,并能够精确识别柑橘病害及其相关情况的同时提供了详细的结果数据和置信度评价指标。

5.摄像头检测说明

通过点击该摄像头按钮启动摄像头。此操作能够实现摄像头的开启。系统将支持实时监控功能。通过再次点击该按钮关闭摄像头设备。

检测结果:系统通过摄像头实现了实时数据采集。识别出柑橘病害并呈现检测报告。实时捕捉并展示摄像头画面,并在图像中标注行为位置坐标。The table below logs detailed detection outcomes for each frame.

检测结果:系统通过摄像头实现了实时数据采集。识别出柑橘病害并呈现检测报告。实时捕捉并展示摄像头画面,并在图像中标注行为位置坐标。The table below logs detailed detection outcomes for each frame.

6.保存图片与视频检测说明

在点击保存按钮之后(...)会实现对已选项目的检测结果存储操作

在CSV文件中存储了有关图片的数据如下:包括图片路径、目标在图片中的编号、目标类别、置信度以及目标坐标的详细信息。注释中指出:坐标位置指的是检测框左上角和右下角两点的x轴和y轴坐标。

(1)图片保存

(2)视频保存

– 运行 train.py
1.训练参数设置

(1)遵循data.yaml文件中的数据集配置:将训练数据加载至data_yaml_path路径中进行处理。
(2)将训练周期设定为100个周期:通过设置epochs=100参数来指定完整的训练循环次数。
(3)每一批次包含4幅图像(批量大小):批次大小设为4表示每一批次会包含4幅图像进行处理。
(4)存储在命名为train_v8的目标目录下:模型训练完成后将结果存储于名为train_v8的特定目录中。
(5)采用随机梯度下降算法(SGD)作为优化工具:选择随机梯度下降法(SGD)作为优化算法以更新模型参数。

尽管在多数深度学习任务中,GPU通常是带来更快训练速度的工具。然而,在少数场景中,则必须依赖于CPU来进行计算以克服硬件限制及其他因素的影响。

温馨提示:在CPU环境下训练深度学习模型通常会消耗更多的时间与资源;尤其是像YOLOv8这样的计算密集型任务,在GPU上的运行效率显著高于CPU;若无特殊需求,则建议优先采用GPU来进行训练以获得更好的性能表现与节省时间

2.训练日志结果

这张图展示了使用YOLOv8进行模型训练的详细过程和结果。

训练总时长:
(1)模型在训练了100轮后,总共耗时0.402小时。

精度指标方面:
(1)Box(P)(边界框精度):评估了模型在各个类别边界框预测上的精度水平。数值越高,则表明该模型在该类别上的定位准确性越强。从实验结果来看,在大多数类别上Box(P)值均接近于1,在柑橘黑痘病、柑橘黑斑病以及柑橘溃疡病类别上达到了1这一峰值数值。
(2)Recall(召回率):衡量了模型在该类别上实现目标实例识别的效果程度。Recall值越高,则表示该模型能够捕获更多与目标实例相关的样本数量。实验结果显示,在所有评价对象中Recall值均较高且稳定,在柑橘黑痘病、柑橘黑斑病以及柑橘溃疡病这三个关键病斑类别上的Recall值甚至达到了1这一理想状态。

该研究采用了平均精度指标(mAP)来评估检测模型的表现质量。
(1)mAP50: 当IoU阈值设定为0.5时计算得出的平均精度反映了模型对各类别的总体检测效果。当IoU阈值较低时(如0.5),该模型仍表现出很强的效果。
(2)mAP50-95: 这一指标综合考虑了不同IoU阈值(从0.5到0.95)下的检测性能,并评估了模型的整体表现能力。在针对柑橘黑斑病和柑橘溃疡病这两种病斑进行检测时,在这一范围内达到了极高的准确度(达到99.4%以上)。

速度:
(1)0.2ms 预处理时间
(2)4.3ms 推理时间
(3)0.7ms 后处理时间

结果存储:(1)Results have been successfully stored in the runs\detect\train_v8 directory:The validation results have been successfully stored within the runs\detect\train_v8 directory.

完成信息:
(1)整个验证过程顺利完成,并且成功退出状态(exit code 0)。这意味着系统运行正常而无异常发生。

从整体情况来看,在各类别上该模型均表现出较高的精确度和召回率,在柑橘黑斑病和柑橘溃疡病类别上的检测效果尤为突出。通过计算得出的整体平均准确率达到99.7%以上,在实际应用中能够有效实现柑橘病害的高效检测与分类任务

全部评论 (0)

还没有任何评论哟~