基于YOLOv8深度学习的智慧农业草莓成熟度目标检测系统
随着农业自动化技术的迅速发展
建立了一个包含不同状态草莓图像的数据集,并利用人工标注的方式对图像进行了分类定位。为了增强模型的适应性,在此过程中我们对该数据集进行了强化处理。随后开发了一种高效的目标检测方案,并基于YOLOv8架构对其进行了训练以实现精准识别草莓的位置及其成熟度状态。该模型整合了更为先进的特征提取技术和目标检测方法,在运行速度和识别精度方面实现了显著提升
为实现系统的实际应用目标,在此基础上进一步开发了一个基于PyQt5平台的应用程序图形界面(GUI)。该界面设计采用简便的操作流程能够让用户轻松地上传草莓图像,并通过系统自动识别功能完成草莓成熟度判定工作,并将检测结果直观展示出来。此外该系统还具备模型训练与评估的功能支持对模型进行训练以及性能评估同时根据不同的需求条件对模型进行优化调整
实验数据显示,在精准度与实时响应方面均表现出色的研究方法中
算法流程
Tipps:建议对项目的算法流程进行详细分析,在系统性地探究核心技术是如何实现的基础上,涵盖数据加载、预处理等基础环节,并深入讨论核心算法的设计理念及其优化策略。具体而言,则是从数据输入的基本流程入手,在组织架构上做到条理清晰,在表达上力求简洁明了地展示各阶段的技术细节,并最终揭示技术背后的原理与实现思路

项目数据
Tipps:为了收集多样化的皮肤病理相关图像,并采用Labelimg标注工具对每张图片进行标注,在二分类检测任务中识别出'草莓成熟'与'草莓未成熟'两类。
目标检测标注工具
(1)labelimg:一款免费开源的图像识别与标注工具,在分类任务和目标检测领域均可应用。该工具基于Python开发,并以其直观友好的Qt图形界面著称(虽然是英文版本)。它的标注结果以PASCAL VOC格式保存为XML文件( ImageNet 使用的标准),此外还支持COCO数据集格式导出。
(2)如何在CMD中安装labelimg?只需执行 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模式创建标签的样式
标记信息存储文件的名字与图片名称一致。
每行对应一个被注标的对象。
其中:
- 类别ID字段用于标识被注标的类型;
- 中心坐标由x_center和y_center两个字段表示;
- 宽度(width)和高度(height)字段分别表示标注框的实际大小。
注意:这里的中心点坐标、宽和高都是相对数据!!!

用于存储标签类别的文件名为classes.txt(固定不变),并用于存放创建的标签类别。
完成后可进行后续的yolo训练方面的操作。
硬件环境
我们使用的是两种硬件平台配置进行系统调试和训练:
(1)外星人 Alienware M16笔记本电脑:

(2)惠普 HP暗影精灵10 台式机:

上面的硬件环境提供了足够的计算资源,能够支持大规模图像数据的训练和高效计算。GPU 的引入显著缩短了模型训练时间。
使用两种硬件平台进行调试和训练,能够更全面地验证系统的性能、适应性和稳定性。这种方法不仅提升了系统的鲁棒性和泛化能力,还能优化开发成本和效率,为实际应用场景的部署打下良好基础。
模型训练
Tipps:模型的训练、评估与推理
1.YOLOv8的基本原理
YOLOv8被视为当前目标检测领域的最佳解决方案。它基于Yolov5系列的发展成果,在此基础上实现了诸多创新,并旨在显著提升处理效率与适应性。这种算法能够高效地完成目标检测、图像分割以及人体姿态估计等多种任务。主要创新集中在三个关键组件上:一个高效的主干网络架构;一种新颖的 anchor-free 检测头部设计;以及一种改进型损失函数框架。这些设计要素确保了算法在不同计算平台上稳定运行。

YOLOv8成为Yolo系列新世代的核心成员,在各项关键指标上全面超越当前的对象检测与实例分割技术,并通过汲取YOLOv5、YOLOv6以及YOLOX等模型的优势,在基于对改进YOLOv5架构的深入优化的基础上实现。该系统不仅成功提升了物体检测和目标识别的整体性能水平,并且通过持续的技术迭代实现了对现有技术体系的有效突破;同时继承并强化了工程化设计中简洁高效的特点。
Yolov8模型网络结构图如下图所示:

2.数据集准备与训练
本研究采用了包含草莓成熟度图像目标的数据集作为基础,并利用 Labelimg 标注工具对每张图像的目标边界框(Bounding Box)及其类别进行了标注。在此数据集基础上,我们采用 YOLOv8n 模型完成了训练工作。经过训练后,在验证集中对模型的表现进行了系统性地评估并进行了对比分析。整个模型开发流程主要包括以下几个关键环节:数据准备阶段、模型训练阶段以及模型评估阶段。研究对象主要集中在草莓成熟度图像目标这一类别上。整个研究过程中处理的数据总量共计 2321 张图片,在不同成熟度等级上的分布情况如下:
训练数据集包含 1,848 个样本(共 1,677 副图像),以实现model的学习与调优目标。验证数据集共有359个样本(约296副图像),旨在检验model对新data的适应能力,并防止overfitting。测试数据集包含114个样本(约96副图像),主要用于全面评估model的generalization performance.
数据集的分布直方图

部分数据集图像如下图所示:

部分标注如下图所示:

该数据分布策略确保了在模型训练、验证及测试阶段的数据均衡性得以实现,并为YOLOv8n模型的应用开发与其性能评估提供了可靠的基础。
在项目根目录下创建一个datasets子目录,并按照要求将待检测的图像按照训练集和验证集分别放入该子目录中

随后需创建data.yaml文件,并详细记录以下两方面的信息:一是记录训练数据路径;二是确定模型需检测的目标类别。YOLOv8系统在执行模型训练过程中会调用该文件中的信息,并以此完成模型的训练和验证任务。

该文件指定了用于训练与验证的数据集路径,并明确了目标类别被模型预期检测。
在数据准备完成之后, 为了训练模型, 我们将依次执行一系列操作. 其中, epochs参数将被用来控制训练周期的数量; batch参数则将被用来调节每个训练周期所处理的小批次数据量, 并根据内存容量进行相应设置(最低设置为1)
CPU/GPU训练代码如下:

导入预定义的 YOLOv8 模型文件 yolov8n.pt,并将其指定为当前任务中的目标模型。其中 yolov8n.pt 包含预先训练完成的 YOLOv8 模型文件。
配置 YOLO 训练参数如下:
(1)training_data_config = data_yaml_path:指定了用于本次 YOLO 训练的数据集配置文件路径。
(2)total_epochs = 150:设定本次 YOLO 训练的总轮次数为 150 轮次。
(3)batch_size = 4:指定了单批次数据样本数量设置为 4 个数据项。
(4)training_optimizer = 'SGD':选择 SGD 优化算法作为本次 YOLO 训练所使用的优化器配置参数设置。
3.YOLOv8模型训练结果与性能评估
在深度学习过程中, 通过观察损失函数的变化轨迹来评估模型训练效果是一个常见的做法. 对于 YOLOv8 模型而言, 在其训练过程中主要包含了三类关键指标: 定位误差(box_loss)、分类错误率(cls_loss)以及动态特征偏差(dfl_loss). 这些指标的优化对于提高目标检测系统的整体性能具有重要意义.
损失函数的作用说明如下:
(1)定位损失 (box_loss):通过GIoU度量预测框与标定框之间的误差大小,在数值上越小则表明定位精度越高。
(2)分类损失 (cls_loss):通过评估锚框与其对应的标定分类是否匹配的程度来衡量分类准确性,在数值上越小则表示分类结果越精确。
(3)动态特征损失 (dfl_loss):DFLLoss用于计算预测框与目标框之间的位置偏差,并结合不同尺度的特征图信息进行调整优化,在一定程度上提升了目标检测的定位精度
训练和验证结果文件存储:
训练完成后,相关的训练过程和结果文件会保存在 runs/ 目录下,包括:

(1)损失函数变化趋势图
(2)各性能指标变化趋势可视化图表(mAP、精确率、召回率)
(3)分类结果对比表
(4)(PR 或 P-R 曲线)
损失曲线(Loss Curve)和性能指标分析:

评估指标:
具体说明:
该技术指标详细记录了模型在训练过程中的表现情况。
变化趋势:
该技术指标的具体数值随训练过程逐步优化而持续改进。
train/cls_loss:
描述:表示训练过程中类别分类损失(Classification Loss)的变化趋势。
趋势:分类损失随着训练的进行不断下降,表明模型在目标分类任务上逐步提高了准确性。
train/dfl_loss:
描述:衡量分布焦点损失(Distribution Focal Loss)的趋势变化情况,并用于提升边界框分布的准确性。
趋势:该损失项负责优化边界框的位置预测,在训练过程中呈现出减小的趋势表明模型对边界框位置预测的准确性逐步提升。
评估指标包括:
其中,validation set's bounding box loss metric(Val/Box Loss)是一个重要的评估指标。具体而言, 该指标反映了验证集数据中bounding box loss的变化情况。从训练过程来看, 在训练集上的bounding box loss变化与之相似, 在测试过程中, 随着模型优化的进行, validation set's bounding box loss持续降低。这表明该模型在面对新数据时表现出较好的泛化能力。
该指标用于表示验证集上的类别分类损失(Validation Set Classification Loss)的变化情况。
具体而言,则用于衡量模型在这一过程中的表现变化趋势。
从趋势来看,在验证集上该分类损失持续减少表明模型的分类能力确实在逐步增强。
val/dfl_loss: 反映了验证集上分布焦点损失(DFL Loss)的变化情况。 趋势表明验证集上的分布损失持续下降,并表明模型在处理未见数据时的边界框预测质量逐步提升。
性能评估指标方面进行详细描述:
- metrics/precision(B):
- 描述: 该指标用于衡量模型在训练集上预测的准确性与误判情况。
- 趋势: 随着模型训练的深入进行(即随着迭代次数或时间参数的变化),其预测精度持续上升并最终趋于平稳状态。
metrics/recall(B): 具体表现为模型在训练集上的召回率(Recall)变化轨迹。从初始阶段的缓慢增长逐步加快,并呈现出平稳发展的态势。这一趋势表明模型的漏检能力得到显著提升
metrics/mAP50(B):
描述: 指标用于衡量在验证集上的目标检测性能(mAP@50),其中IoU达到至少50%的目标框被正确识别的概率即为此指标的表现基础。
趋势: mAP值稳步提升直至趋于平稳状态,在验证集中展现出卓越的目标检测能力。
metrics/mAP₅₀₋₉₅(B):
描述: 表明验证集上IoU介于₅₀%至₉₅%之间的整体平均精度(mAP@₅₀₋₉₅)。
趋势: 持续提升直至趋于平稳状态,并表明模型在不同IoU阈值下的性能表现优异。
模型的损失指标在训练和验证过程中稳步减少。模型的精度与召回率均有所提升。验证集上的mAP值保持稳定。该模型展现出卓越的检测性能与良好的泛化能力。
Precision-Recall(P-R)曲线分析:

淡蓝色曲线代表成熟草莓(ripe)的检测性能最佳其平均精度值达到0.931 PR曲线的表现非常接近理论上的最佳状态(perfect top-right corner)。 橙色曲线表明未成熟草莓(unripe)在检测性能上相对较为薄弱 AUC-ROC值达到0.806 在高召回率情况下精度明显下降。 The deep blue thick line represents the average performance across all categories (all classes) achieving an AUC-ROC value of 0.868 which reflects a comprehensive aggregation of both ripened and unripened strawberry detection performances.
总结:
(1)淡蓝色曲线代表成熟草莓的模型检测表现最佳,在Precision和Recall方面均取得了显著提升。
(2)橙色曲线显示了未成熟草莓检测中的显著缺陷,在高召回率情况下精度明显下降。
(3)深蓝色粗线则展示了所有分类指标的整体表现趋势。
混淆矩阵 (Confusion Matrix) 作为检验分类器效果的关键指标,在各个类别间的预测表现与实际结果进行了详细对比分析。

结论:
该模型在成熟草莓识别方面表现优异,在处理成熟的草莓样本时展现出较高的准确率和可靠性。然而,在未成熟的草莓样本中存在较高的误分率,并且背景噪声的影响仍需进一步改善。为提升整体性能指标,建议采取数据均衡化处理、模型微调优化以及背景特征提取强化等措施。
4.检测结果识别
经过模型训练后,我们可以获得一个最优的训练结果模型 best.pt 文件,在 runs/train/weights 目录中。建议使用该权重文件进行后续的推理检测。 imgTest.py 图片检测代码如下:

加载所需的库程序:
(1)从ultralytics导入YOLO模型类,并用于目标检测。
(2)导入OpenCV库(cv2),用于图像的处理与显示。
加载模型路径和图片路径:
(1)path = ‘models/best.pt’:配置预训练模型的位置参数值,并将该模型配置用于执行目标检测作业。
(2)img_path = “TestFiles/imagetest.jpg”:配置图像文件的位置参数值。
加载预训练模型:
(1)model = YOLO(path, task=’detect’):按照所选路径加载YOLO模型,并将检测任务设定为目标检测。
(2)利用 conf 参数设定目标检测的置信度门槛;同时利用 iou 参数配置非极大值抑制(NMS)中的交并比(IoU)阈限。
图像检测:(1)results = model(img_path):针对指定的图像进行目标识别;其中包含该次检测的所有结果信息。
(1)res = results[0].plot():将结果显示为图像。
(2)cv2.imshow(“YOLOv8 Detection”, res):调用OpenCV库展示检测结果,并设置窗口标题为"YOLOv8 Detection"。
(3)cv2.waitKey(0):暂停程序等待用户按下任意键以关闭显示的窗口
执行imgTest.py代码后,会将执行的结果直接标注在图片上,结果如下:

该段输出利用YOLOv8模型对图像imagetest.jpg进行处理后生成的内容。
图像信息:
(1)处理的图像路径为:TestFiles/imagetest.jpg。
(2)图像尺寸为448×640像素。
检测结果:
(1)模型在图片中检测到
– 成熟草莓(ripe):2个。
– 未成熟草莓(unripe):1个。
处理速度:
(1)预处理时间: 4.0 毫秒
(2)推理时间: 43.5 毫秒
(3)后处理时间: 54.5 毫秒
该系统基于YOLOv8架构识别出草莓的成熟与未成熟状态,并展现出快速的推理速度和极高的实时性能。然而,在对尚未成熟的草莓进行检测时,当前的效果仍有提升空间。
运行效果
– 运行 MainProgram.py

1.主要功能:
(1)主要用于在线处理摄取的画面中草莓成熟的图像识别;
(2)不仅支持通过摄像头获取图像或视频进行分析,并且能够处理多张图片的批量识别;
(3)该系统界面能够实时呈现草莓的位置坐标、总数统计以及识别准确率和所需时间等数据;
(4)系统具备将测试结果存储到本地文件夹的功能。
2.检测结果说明:

(1)信心程度阈值:该系统目前将信心程度达到或超过25%的目标纳入输出范围。
(2)重合率阈值:该系统仅识别出那些重合率达到70%及以上的真实目标框。
其中重合率即是目标框与真实目标框之间的重叠区域占比例。
两个关键参数常用于目标检测系统中,在调节后将会影响模型的检测精确度与误报率。
该图表呈现了基于YOLOv8模型的目标检测系统的展示界面。
请查看以下各字段的详细说明。

(1)这表明该模型完成检测所需时间为0.058秒。
(2)该研究验证了模型的实时性能,并确认其运行效率显著高。
目标数目(Number of objects detected):
(1)当前物体计数为1个。
(2)该数值即为当前检测到的第一个目标的数量。
目标选择(下拉菜单):全部:
(1)此处有一个可选设置选项框,请您根据需求进行选择设置。
(2)在此情境中,默认状态设定为"全部"模式表示系统将显示所有符合条件的目标信息库内容

结果(Result):“草莓成熟”,表示系统正在高亮显示检测到的“ripe”。
置信度(Confidence):
(1)这表明模型对检测到的目标属于"鳞状细胞癌"类别的信心达到了90.81%。
(2)置信度反映了模型对该检测结果的信任程度,在此情况下表示模型信心越强。
(1)xmin: 256, ymin: 762:该点的目标位于图像中(xmin, ymin)的位置坐标处。(2)xmax: 1000, ymax: 483:该点的目标位于图像中(xmax, ymax)的位置坐标处。
这些坐标值对应于图像中的目标区域范围,并确定了检测到的'草莓成熟'的位置。
该图表呈现了草莓成熟度图像检测的一次测试结果。具体包含了不同阶段的草莓成熟度数据采集时间以及各类别草莓特征点的位置信息等。研究人员可借助平台界面进行查看与分析,并从中获得相应的信心值数据以辅助判断。这一方法显著提高了草莓成熟度图像目标自动识别的技术效率。
3.图片检测说明
(1)草莓成熟

(2)草莓未成熟

单击打开图片按钮以启动图像识别功能,请根据需求完成以下操作:若需单独处理一张图片,则选择待检测的图片;若需批量处理,则选择要批量检测图片所在的目标文件夹。
具体操作步骤如下:
(1)单击目标下拉框后即可设置并显示所需的目标结果信息。
(2)单击保存按钮可实现对检测结果的数据存储与管理,并将结果存储至save_data目录下。
检测结果:系统检测出图片中的草莓成熟度图像目标情况,并呈现检测结果, 包含总目标数, 耗时时间, 草莓类型, 置信水平以及各目标的具体位置坐标信息
4.视频检测说明

单击视频按钮以启动选择待检测的视频流程,在确认操作后系统将自动呈现检测结果。若需返回主界面,请再次单击可关闭当前窗口。
单击保存按钮以将对视频检测所得的数据进行持久化存储,并具体存储位置设置在 save_data 目录中。
系统对视频进行实时分析,并识别出草莓成熟度图像目标并记录检测结果。统计表详细列出了视频中各草莓成熟度检测结果的概率值及其对应位置坐标
该界面呈现了系统在视频帧处理中的多目标检测能力。它不仅具备精准的判断能力,并能准确识别出草莓成熟度的图像特征。同时提供丰富的检测数据以及相应的可信度评估结果。
5.摄像头检测说明

通过点击摄像头按钮来启动该功能;该功能能够开启摄像头;系统能够执行实时检测;再次点击该按钮后将关闭摄像头
检测结果:通过摄像头与系统的实时数据流获取信息,并识别出草莓成熟度的图像,并将识别结果反馈出来。动态呈现摄像头的画面,并对行为位置进行标记定位;统计数据显示,在每帧画面中都有详细的监测记录
6.保存图片与视频检测说明

单击"保存"按钮后(或点击"Save"按钮),系统将会将您所选中的图片(包括批量处理的多张图片)以及视频的检测结果进行存储。这些被检测到的图像与视频资料将会被存储在位于"save_data"目录下的指定位置。系统将会将所有被检测到的结果文件列示如下:

该CSV文件记录了图片相关的信息内容, 包括: 图片路径信息、目标在图像中的标注编号、目标所属类别标签以及对应的检测置信度评分, 进一步详细说明了目标物体的位置信息, 具体来说, 坐标位置参数具体表示的是检测边界框区域左上角顶点与右下角顶点的具体坐标数值

(1)图片保存

(2)视频保存

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

data遵循数据.yaml文件中的数据集配置。
训练任务设定共计150个 epoch 进行迭代训练。
每一批次输入图像数量固定为4张(批处理量)。
训练任务的结果文件将被存储于命名为 train_v8 的输出目录中。
优化算法选择随机梯度下降法(SGD)作为参数更新策略。
对于大多数深度学习任务而言,在大多数情况下 GPU 一般能够显著提升训练速度。然而,在如硬件限制或其他原因的情况下 用户可能不得不选择使用 CPU 进行计算。
特别提醒:由于在CPU上训练深度学习模型通常所需的时间多于使用GPU的情况而言,在大多数情况下建议将模型部署到GPU以提高效率。特别是像YOLOv5s这类计算密集型任务。
2.训练日志结果

这张图展示了使用YOLOv8进行模型训练的详细过程和结果。
(1)经过了150轮的训练周期后, 模型总耗时为 0.914 小时。
(2)该次训练基于 NVIDIA GeForce RTX 4070 Ti SUPER GPU 进行。
(3)该次训练呈现出显著的训练效率, 其得益于YOLOv8模型优化设计与高性能硬件的有效支持。
验证结果:
(1)mAP@0.5: 0.868
(2)mAP@0.5-0.95: 0.681
运行效率方面:
(1)预处理阶段所需时间为0.1毫秒;
(2)推理阶段所需时间为0.8毫秒;
(3)后续处理所需时间为0.7毫秒;
(4)综合推断速度为每张图像1.6毫秒,
表明该模型在实时检测任务中表现优异,
并且具备进一步优化的可能性。
Result saving: (1)Resulting outputs generated and stored in runs\detect\train_v8, which are located within the directory structure of runs\detect\train_v8. Validation results are also preserved within this directory structure.
完成状态如下:第(1)项中,进程以退出码0顺利完成验证过程。具体表现为整个验证流程顺利完成,并未出现任何错误。
该模型在草莓成熟度检测方面表现出色,在成熟的草莓类别上特别突出其精确度和召回率均达到较高水平,并具备实用价值。
