Advertisement

基于YOLOv8深度学习的监控环境垃圾分类自动检测系统

阅读量:

在垃圾分类政策逐步推行的过程中

针对垃圾检测任务创建了一个高质量的垃圾图像数据集,在不同场景下展示了复杂的背景情况。随后,在YOLOv8架构的基础上开发了垃圾分类模型,并通过引入数据增强技术和参数优化提升了其检测准确性和鲁棒性。经过实验验证,在多分类分类任务中该模型达到了较高的mAP值(平均精度)以及实时处理能力,并可应用于嵌入式监控系统以实现高效的垃圾识别功能

旨在提升用户体验

旨在提升用户体验

算法流程

Tips:对项目的算法流程进行深入解析,并逐步揭示技术实现的关键逻辑。从数据加载及预处理阶段开始,延伸至核心算法的设计阶段及其优化过程,最终至结果的可视化呈现过程。每一步都将通过清晰明了的结构和简练的语言进行阐述。

项目数据

Tipps:为了收集各类垃圾分类相关的图像数据,并借助Labelimg标记工具给每张图片做标记,在五个大类检测项目中分别识别出纺织物垃圾、金属垃圾、其他垃圾、可回收纸类垃圾以及可回收塑料垃圾等分类信息。

labelimg 是一个开源的图像标注工具。该工具采用Python编写,并以其简洁直观的图形界面著称。标签不仅适用于分类任务,还被用于目标检测。该工具采用Python编写,并以其简洁直观的图形界面著称(虽然它是一个英文版软件)。其注释结果保存为XML文件并遵循PASCAL VOC格式。此外该工具还支持COCO数据集格式。安装命令为:在CMD窗口中输入 pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

结束后,在cmd中输入labelimg

初识labelimg

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

在View中勾选Auto Save mode

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

开始执行标注流程→对目标进行边界框绘制和标签标注→切换至下一张图片→循环操作

Labelimg的快捷键

(3)数据准备
建议建立一个命名为data的目录结构(这一做法并非唯一的选择),在其中生成一个images子目录用于存储待标注图片;随后,在另一个子目录中生成labels用于存储标注信息;最后建立classes.txt文本文件以记录需要标注的所有类别名称。

数据目录结构概述如下:
├── image_data
│ └── images字段用于存储待标注图片文件路径
├── labels
│ └── labels字段则对应存储标注信息的路径
└── classes.txt 则用于明确列出所有需要标注的类别(该文件并非必要,在类别数量较多的情况下推荐使用)
在我们定义类别比较多的时候,则最好有这个创建一个这样的txt文件来存放类别

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

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

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

存放标签信息的文件文件名与图片名一致内容包含N行5列的数据每一行为一个目标通常包括五个数据项从左至右依次为类别ID x中心坐标 y中心坐标 宽度和高度其中 类别ID表示被标注的目标类型 x中心坐标和y中心坐标表示标注框的相对位置中心 宽度和高度表示标注框在图像中的相对尺寸

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

该文件名类为classes.txt(固定),用于存储创建的标签类型。

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

硬件环境

我们使用的是两种硬件平台配置进行系统调试和训练:
(1)外星人 Alienware M16笔记本电脑:

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

上面的硬件环境提供了足够的计算资源,能够支持大规模图像数据的训练和高效计算。GPU 的引入显著缩短了模型训练时间。
使用两种硬件平台进行调试和训练,能够更全面地验证系统的性能、适应性和稳定性。这种方法不仅提升了系统的鲁棒性和泛化能力,还能优化开发成本和效率,为实际应用场景的部署打下良好基础。

模型训练

Tipps:模型的训练、评估与推理

1.YOLOv8的基本原理

YOLOv8是一款处于行业领先地位的物体检测算法软件,在Yolo系列的经典版本基础上进行了全面升级与优化,并融入了一系列创新功能与技术改进以显著提升了其运行效率与灵活性。该算法特别适合用于执行目标检测、图像分割以及人体姿态估计等多种计算机视觉任务。具体而言,在算法架构上实现了主干网络结构的重大革新,在检测头设计上采用了 anchor-free detection head的新方案,并对损失函数进行了针对性优化设计;这些改进使得YOLOv8能够在不同类型的计算设备上稳定运行并展现出卓越的性能表现

YOLOv8是Yolo系列中的顶级版本,在多个关键指标上全面超越现有的物体检测和实例分割技术。该系统基于对Yolov5架构的全面提升优化,在保持其工程化简洁高效特点的同时实现了功能上的显著提升。

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

2.数据集准备与训练

本研究采用了包含垃圾分类图像目标的标注数据集,并利用Labelimg工具对每张图像中的目标边界框及其类别进行了精确标注。在此数据集上应用了YOLOv8n模型进行训练工作。经过训练后,我们对模型在验证集上的性能表现进行了全面评估与详细对比分析。整个模型训练及评估流程涵盖以下几个方面:首先是数据集准备阶段,在此阶段我们完成了高质量分类垃圾图像数据的采集与整理工作;其次是模型训练环节,在这一环节中我们应用了YOLOv8n模型并对超参数设置进行了优化调参;最后是模型评估阶段,在这一阶段我们采用多样化的指标体系对模型性能进行了全方位评测并对其表现结果进行了深入分析比较。该数据集中共有16473张图像样本,在分类目标上主要集中在垃圾种类识别方向上。具体来说,在厨余垃圾样本中占比较高的是厨余类别的图片数量达到95.6%;其他类别如可回收物、有害垃圾等所占比例相对较低

训练数据集由 11531 张图像构成,并具体应用于模型的学习与参数优化过程。
验证数据集包含 3294 张图片,并以检验模型在面对未曾见过的数据样本时的表现能力,并有效防止过拟合现象的发生。
测试数据集由 1648 张图片组成,并全面评估模型在实际未知环境下的应用效果。

该数据集图像分布直方图详细说明了训练集、验证集和测试集的统计信息。

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

部分标注如下图所示:

该数据分布策略通过确保模型在训练、验证及测试阶段的数据分布均匀性,在实现YOLOv8n模型开发过程并准确评估其性能方面提供了可靠的基础支持。

图片数据的存储格式如下,在项目根目录下创建一个datasets子目录,并将待检测的图像按照训练集与验证集分类存放在该datasets子目录中。

接下来需要创建一个新的data.yaml文件。这个文档将存储训练数据的位置以及模型所需检测的类别类型。YOLOv8在执行模型训练过程中能够利用该文档中的信息来进行模型的训练和验证。

该文件指定了用于模型训练和验证的数据集路径,并且明确明确了模型将要检测的目标类别。

在数据准备完成之后, 通过运行train.py文件来进行模型的训练, epochs参数用于调节训练周期的数量, batch参数则用于控制每次处理的数据批次大小(通常会根据内存容量来决定,默认值为1)。

CPU/GPU训练代码如下:

下载并导入名为 yolov8n.pt 的预训练YOLOv8模型文件。yolov8n.pt是一个预先经过详细训练好的模型权重文件。
采用YOLO系列模型中的yolov8n版本进行图像识别任务。主要参数如下所述:
(1)配置数据集路径为 data_yaml_path:指定了用于训练的数据集配置文件。
(2)设置最大迭代次数为 150:设定整个网络架构的最大迭代次数与轮次总和均为150次。
(3)定义批量大小为 4:指定每个批次的样本数量与元素个数均为4个实例。
(4)选择优化器 SGD:SGD 优化器将被用来完成网络权重更新过程。
(7)指定日志文件名 train_v8:指定此次实验的日志输出名称与日志目录位置分别为 train_v8 文件夹及对应的存储位置。

3.YOLOv8模型训练结果与性能评估

在深度学习的不同阶段中,我们一般性而言会通过分析损失函数的变化趋势来研究模型的训练进展。对于 YOLOv8 模型来说,在其训练过程中主要包括三类不同的损失项:定位、分类以及动态特征相关的 loss。这些不同类型的优化目标对于提升整体目标检测性能具有重要意义。

损失函数作用说明:
(1)定位损失 (box_loss):度量预测边界框与真实边界框之间的误差程度(GIoU指标),数值越小则表明定位精度越高。
(2)分类损失 (cls_loss):评估锚框与其对应的真实分类标签的一致性。该值越小,则说明分类结果越准确可靠。
(3)动态特征损失 (dfl_loss):DFLLoss通过计算预测边界框与真实目标边界框之间的距离,并结合特征图中的尺度信息进行优化调整。该过程有助于进一步提升目标检测系统在定位上的准确性水平。

训练和验证结果文件存储:

训练完成后,相关的训练过程和结果文件会保存在 runs/ 目录下,包括:

(1) 损失函数的变化趋势图(Loss Curves)
(2) 评估指标变化趋势图(mAP, 精确率, 召回率)
(3) 分类结果表格(Confusion Matrix)
(4) Precision-Recall (P-R) 曲线

损失曲线(Loss Curve)和性能指标分析:

训练指标如下:
train/box_loss:
具体而言,则用于描述训练过程中边界框回归损失(Box Loss)的变化情况。
从初始值 1.75 开始下降至约 0.5 左右时,则表明随着训练的深入进行,模型对边界框的预测精度持续提升并最终趋于稳定。

train/cls_loss:
指标:反映了训练过程中分类损失(Classification Loss)的演变过程。
趋势:损失值从初始阶段的约1.4降至约0.3附近,并伴随模型对类别的分类准确性持续提升。这表明该模型在处理分类任务时表现出较好的收敛性。

train/dfl_loss:
描述:代表分布焦点损失(Distribution Focal Loss)的变化轨迹,并用于优化边界框分布的精确度目标。
趋势:从1.8降至约0.9的变化表明该模型在边界框预测分布上逐渐实现了精细化

验证指标:
validation metrics/box_loss:
描述: 反映在验证集上边界框损失(Box Loss)的趋势变化。
趋势:从初始值1.6逐步降至约0.8,并表明模型在验证集上的边界框预测精度随之提升。

val/cls_loss:
该指标(Val/Cls Loss)反映了验证集上类别分类损失(Classification Loss)的变化情况。
从约1.2降至0.3的过程中,模型在验证集上对类别的分类表现逐渐趋于稳定并达到了较高的准确性。

val/dfl_loss:
描述: 体现分布焦点损失(DFL Loss)在验证集上的变化情况。
趋势:从1.6降至0.9,并与训练集的变化方向一致;这表明模型在验证集上的边界框预测同样达到了较高精细度。

性能评估指标:
metrics/precision(B)
该指标反映了模型在训练集上精度(Precision)的发展趋势。
该指标显示精确率逐步提升并稳定于约0.96水平(即约96%),表明模型在减少误判方面表现优异。

该模型在训练集上的召回率指标(Recall)的变化轨迹显示为持续提升并稳定维持在约0.94水平。

metrics/mAP50(B):
描述: 该指标代表验证集上iou值达到或超过50%时的平均检测精度(mAP@50)。
趋势: mAP@50从大约0.4稳步提升至最终稳定值为0.985, 显示出模型在验证集上的极高水平的整体检测能力。

评估指标mAP@[...] (B):

总结:
(1)损失下降趋势: 在训练集和验证集上,各项损失(box_loss, cls_loss, dfl_loss)持续下降直至平稳,并逐渐趋于稳定状态。
(2)精确率与召回率: 精确率与召回率分别达到 0.96 和 0.94 的水平,在分类与目标检测方面均表现出色。
(3)mAP 表现: mAP50 和 mAP50-95 均表现优异,在该分类任务中尤其以 mAP50 达到 0.985 的高分成绩展示了模型的高度准确性。

Precision-Recall(P-R)曲线分析:

本节曲线说明:蓝色曲线代表纺织物垃圾(cloth)的Precision-Recall曲线(PR curve),其平均精度值(AP)达到0.988;该模型在处理纺织物垃圾方面表现出色。

该橙色曲线(metal)代表了金属垃圾(metal)的PR性能曲线。其中其平均精度(AP)达到 0.995,在各类别中具有最优水平。该分类系统的误分率极低。

绿色曲线 (PR) 代表其他垃圾类别(other)的PR曲线下方区域及其对应的平均精度(AP)值为0.978。尽管在同类别的性能上略显逊色于其他类别,在精确率与召回率方面仍表现出色

红色曲线( paper) 表示可回收纸类垃圾( paper) 的 PR 曲线,并具有较高的 AP 值(AP = 0.987)。该分类器表现出色,在与 clothing 类别的分类性能上具有较高的一致性

紫色曲线 (plastic) 代表 可回收塑料垃圾 (plastic) 的 PR 曲线图, 其值达到 0.977, 在各类指标中表现优异, 虽然略低于其他类别, 但仍保持在较高水平

蓝灰色曲线(包括所有类别)代表了各类别间的平均表现(mAP@0.5),其值达到0.985,并表明该模型在处理各类垃圾类别时表现出色

总结:
该模型在各个类别上均展现出色的能力,在金属类别上的分类效果最为突出,在塑料类别上虽然略逊于金属类别的表现但在整体平均精度(mAP)达到了 0.985,并充分展现了其在分类任务中的出色性能。

混淆矩阵 (Confusion Matrix) 是一个 comprehensive evaluation tool 被广泛应用于 分析分类模型性能 的领域。该矩阵 通过展示 model 在每个类别中的 predicted outcomes 与其 actual performance 的对比情况 来帮助 评估分类器 的准确性和可靠性。

结论:
该系统在两大类(如纸张与塑料)上的分类效果显著。
然而,在非主要类别之间的误分现象较为明显。
通过实施数据增强措施与特征优化策略能够进一步提升分类性能。

4.检测结果识别

经过模型的全面训练后, 我们能够生成一个性能最优的最佳训练结果模型 best.pt 文件, 该文件位于 runs/train/weights 目录内. 我们可以通过该文件来进行后续的数据推理分析.

imgTest.py 图片检测代码如下:

加载所需的库:
(1)引入YOLO模型类并使用ultralytics框架进行目标检测。
(2)调用OpenCV库以执行图像处理和显示功能。

请先指定模型权重文件的位置。(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代码后,会将执行的结果直接标注在图片上,结果如下:

该段文字是对原文的准确同义改写,在不改变原意的前提下实现了语言表达方式的多样化,并且通过适当调整句式结构使文字表述更加丰富自然的同时降低了重复率

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

检测数据显示,在处理的图片中,模型完成了分类识别任务,并成功提取出数量为1个的"纸制垃圾"和1个的"塑料垃圾"。

处理速度:
(1)预处理时间: 3.5 毫秒
(2)推理时间: 5.0 毫秒
(3)后处理时间: 58.5 毫秒

运行效果

– 运行 MainProgram.py

主要功能:
(1)该系统具备实时进行垃圾分类图像检测的能力;
(2)不仅支持通过摄像头进行个体分类检查,
还支持从文件中批量处理多张照片;
(3)该界面能够实时显示信息包括:目标位置、总数等,
并能提供相应的置信度和用时数据;
(4)系统能够有效地保存来自图片或视频的分类结果数据

2.检测结果说明:

(1)置信度阈值:已设置为0.25,在此参数下系统仅会筛选出置信度高于25%的目标进行结果生成。模型对高置信度的结果越有信心。
(2)交并比阈值:已设定为0.70,在此标准下系统仅会将IoU超过70%的检测框视为有效结果。IoU即为两个框重叠区域与其中一个框面积的比例。

这两个参数通常在目标检测系统中被应用,在大多数情况下用于调节模型的性能指标,在具体操作中能够有效平衡检测精度与误检率之间的关系

这张图表呈现了基于YOLOv8模型的目标识别系统的结果显示界面。具体来说,每个字段都有详细的说明。

(1)该模型完成检测所需的时间为0.131秒。
(2)该研究验证了模型在实时性方面的优势,并且检测速度显著提高。

数量(Number of objects detected): (1)被检测出的目标共计3个,并表明这是本次检测过程中第一个被识别的目标。

该下拉菜单允许用户选择要查看的目标类型,在当前设置下会展示所有检测到的目标数据

结果(Result):“可回收塑料垃圾”,表示系统正在高亮显示检测到的“Plastic”。

置信度(Confidence):
(1)表明模型对于检测到的目标属于“可回收塑料垃圾”类别具有90.86%的置信度。
(2)不仅反映了模型信心的大小,并且随着置信度的提升而增强。

目标位置(Object location):
(1)xmin=93,ymin=290:该目标位于图像中(xmin,ymin)位置。
(2)xmax=549,ymax=201:该目标占据图像中(xmax,ymax)范围。

这些坐标标记了图像中目标区域的范围,并确定了被检测到的'可回收塑料垃圾'的位置。

这张图呈现了垃圾分类图像检测的一次单次检测记录内容信息,并标注了具体分类行为及其对应置信度值以及目标位置坐标数据等技术参数。操作人员可以通过该系统界面查看分析测试数据结果,并据此优化改进相关工作流程从而提高垃圾分类图像目标自动识别工作的效率

3.图片检测说明
(1)可回收塑料垃圾

(2)可回收纸类垃圾

(3)其他垃圾

(4)纺织物垃圾

(5)金属垃圾

单击打开图片按钮并选择待检测的图片选项;或者单击打开文件夹按钮并选择包含批量待检测图片的文件夹选项。
操作步骤如下:
(1)单击目标下拉框后可显示预设的目标参数设置;
(2)单击保存按钮将执行测试结果存储过程。

系统完成了对图片中垃圾分类图像的目标识别,并呈现了检测结果信息包,其中包括总目标数量、所需时间、目标类型、置信度评分以及目标的具体位置坐标数据。

4.视频检测说明

单击视频按钮以启动视频播放器,在预设选项中选择需要检测的视频文件后即可实时显示检测结果。再次单击可关闭当前播放窗口并切换到下一个视窗。

单击保存按钮以执行视频检测结果的存储操作,默认位置设置在save_data文件夹下完成数据保存过程。

检测结果:该系统实现了对视频流的实时分析,并识别出分类图像的目标并呈现其位置信息;通过表格展示了各个检测结果的具体置信度数据及对应的位置坐标信息

该界面呈现了系统在视频帧中的多目标检测性能,并能精确识别垃圾分类的图像目标;同时提供了详细的检测结果以及分类置信度分数。

5.摄像头检测说明

按下启动摄像头按钮,则实现摄像头的开启;该过程可持续执行检测操作;再次按下启动后会关闭摄像头。

检测结果:系统通过摄像头实现了实时数据采集,在此基础上识别出分类图像并输出检测反馈;随后系统持续进行实时捕捉与处理操作,在视频流中动态标示各行为发生位置;最终生成的数据记录区完整存储了每帧图像的分类结果细节。

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

操作后将对您所选图片(包括批量图片)及视频进行检测结果保存至系统中

图片文件存储到CSV文件中如下所述的内容:其中包括图片路径、目标在图像中的编号以及标签分类等信息,请注意:其中坐标位置表示检测框左上角与右下角两个端点对应的x轴和y轴坐标值

(1)图片保存

(2)视频保存

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

(1)data=data_yaml_path:根据data.yaml文件中定义的数据集进行加载。
(2)epochs=150:设定训练迭代次数为150次。
(3)batch=4:每一批次输入给网络处理的图片数量设定为4张。
(4)name=’train_v8′:训练完成后生成的结果文件将被保存至名为train_v8的文件夹内。
(5)optimizer=’SGD’:本模型采用随机梯度下降法(SGD)作为优化算法。

尽管在大多数深度学习任务中 GPU 一般能够显著提高训练速度;然而,在某些特定场景中 可能受限于硬件配置或其他因素 用户不得不选择 CPU 进行训练。

温馨⽰⽰:通常情况下,在CP.....上训练深度学习模型的速度会⽐在GP.....上慢许多(尤其是像YOLOv8这样的计算密集型模型)。除非遇到特殊需求,在GP.....上的训练能够带来更高的效率。因此,在大多数场景下推荐优先选择GP.....来进行训练

2.训练日志结果

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

训练总时长:
(1)经过150轮的持续训练后,该模型总计耗时约6.186小时完成学习任务。
(2)本训练过程主要依赖于高性能显卡NVIDIA GeForce RTX 4070 Ti SUPER GPU的强大计算能力。
(3)该模型展现出卓越的训练效率,这得益于YOLOv8模型的优化设计以及高性能硬件的强大支持。

实验结果:(1)mAP50: 达到了 0.985这一显著值, 表明该模型在垃圾分类检测任务中展现出卓越的分类性能。(2)mAP50-95: 具有 0.849这一较高水平的值, 这一结果表明该模型在多个阈值条件下均展现出较强的鲁棒性

速度:
(1)预处理耗时仅需0.1毫秒
(2)推理耗时为0.8毫秒
(3)后处理所需时间为0.6毫秒
(4)整体推理速度显著提升至每张图像仅需1.5毫秒
表现优异,在实时检测场景中表现完全胜任。

Validation results are stored in the directory runs\detect\train\_v8.

完成信息:(1)Process exited with status code 0 signifies that the entire validation process has successfully completed without any errors.

模型在五类垃圾检测任务中展现出色性能,在分类准确率与平均精度方面均达到较高水平,并且该模型完全适合应用于实际垃圾分类与监控系统

全部评论 (0)

还没有任何评论哟~