Advertisement

基于YOLOv8深度学习的智慧环保城市垃圾分类自动检测系统

阅读量:

随着城市化进程加快以及居民生活水平的提升,在智慧环保领域中实施垃圾分类已成为一项关键举措。为了优化资源利用并降低运营成本, 本文旨在通过创新性设计开发一个智能化的城市垃圾分类检测系统. 该系统基于YOLOv8深度学习模型构建, 集成了计算机视觉技术和智能分类理念, 能够实现多类型垃圾(如电池.药物.塑料.金属.土豆.胡萝卜.白萝卜.砖块.鹅卵石及玻璃容器)的实时识别与分类功能

在系统的开发过程中, 开发团队将YOLOv8算法确定为核心的目标检测方案, 并对其网络架构与超参数设置进行了优化调整, 从而使其在准确度、处理速度以及小目标识别方面表现出色。实验数据显示, 系统整体表现优异, 在测试数据集上的平均识别准确率达到98.5%, 处理速度符合实时标准(每帧耗时少于50毫秒)。此外, 系统设计注重用户体验, 面板布局简洁明了, 同时支持对目标进行分类识别、统计汇总以及结果展示功能的实现, 能够满足多种实际应用场景的需求。

本文的研究成果不仅为垃圾分类提供了先进可靠的解决方案,并助力智慧城市建设中环保技术的推广应用取得显著成效。未来的研究将进一步深入挖掘算法的鲁棒性潜力,并探索更多复杂场景下的垃圾分类应用前景。

算法流程

Tipps:全面解析项目的算法流程,并逐一探讨技术实现的核心逻辑。涵盖核心算法的设计及优化过程,并通过清晰的结构和简明扼要的语言进行阐述,深入剖析其背后的技术原理及实现思路。

项目数据

Tipps:为了收集不同分类的垃圾分类相关图像,并借助Labelimg标注工具对每张图片进行标注。将这些图像划分为10个检测类别,“电池", “药物", “塑料", “金属", “土豆", “胡萝卜", “白萝卜", "砖块"以及"鹅卵石"等物品会被单独识别出来。

LabelImg 是一个开源的图像标注工具,在分类与目标检测任务中均可使用。它基于 Python 编写,并采用 Qt 作为其图形界面设计,在操作上非常简便且易于上手(虽然界面为英文设计)。它的标注结果以 Pascal VOC 格式保存为 XML 文件,在 ImageNet 数据集中也常使用此格式存储此类数据。此外还支持COCO数据集格式

结束后,在cmd中输入labelimg

初识labelimg

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

在View中勾选Auto Save mode

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

并设置标注文件保存的目录(上图中的Change Save Dir)
接下来就开始标注:

  1. 开始标注
  2. 画框
  3. 标记目标的label
  4. 切换到下一张图片继续标注
  5. 不断重复以上步骤

Labelimg的快捷键

(3)数据准备
此处推荐创建一个名为data的文件夹(这是约定俗成的做法),其中包含一个命名为images的子目录用于存储待标注的所有图片;接着创建了一个命名为labels的文件来保存标注信息;最后生成了一个命名为classes.txt的文本文件,并在里面记录了所有要标注的具体类别名称。

data目录的组织架构如下:
├── images 文件夹用于存储待标记的照片
├── labels 文件夹存储待使用的标注信息
└── classes.txt 文本文件指定需要标注的所有类别列表(通常情况下此配置文件并非必要(但在类别数量较多时建议配置))

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

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

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

标记信息存储文件的名字与图片名称一致。
该存储文件包含N行5列的数据。
每一行标识一个待注标的对象,
一般包含五个参数,
按顺序排列为:

  1. 类别的唯一标识符用于区分不同类型的物体;
  2. 中心位置由水平坐标(x_center)和垂直坐标(y_center)共同确定;
  3. 宽度(width)和高度(height)分别表示标记框在图像中的占据范围;

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

存储标签类别的文件名为classes.txt(固定不变),用于存储创建的标签类别

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

硬件环境

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

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

该硬件配置配备了充足的计算能力,并能支撑大规模图像数据的训练及高效运算。GPU的应用显著提升了模型训练效率。通过两种硬件平台的调试与训练实践,在多个维度上充分验证了系统性能、适应性及稳定性等关键指标。这种方法既增强了系统的鲁棒性和泛化能力,又降低了开发成本并提升了效率,在实际部署中具有广泛的应用前景。

模型训练

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

1.YOLOv8的基本原理

YOLOv8是一款处于世界领先地位的目标检测框架,在Yolov5系列的发展历程基础上进行了多项优化与创新。该模型特别适合于进行目标识别、图像分割以及人体姿态分析等相关应用场景。其主要创新包括采用了全新的主干网络架构、设计了一种突破性的 anchor-free 检测头以及优化了独特的损失函数定义;这些技术特性使其能够在不同计算设备上稳定运行。

YOLOv8被视为该系列中的顶尖版本,在多个关键指标上显著超过了现有的物体检测和实例分割技术,并参考了包括但不限于YOLOv5、YOLOv6以及YoloX等模型的设计理念和成功经验。在此基础上对YOLOv5架构进行了系统性的优化和完善,并在此过程中继承了YOLOv5工程化的简洁性和易于使用的特性。

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

2.数据集准备与训练

本研究采用了包含垃圾分类目标图像的数据集,并利用Labelimg标注工具对每张图像中的目标边界框(Bounding Box)及其类别进行了精确标注工作。基于该数据集应用YOLOv8n模型完成了训练过程。经过训练后,在验证集中系统展开了对模型性能的全面评估与对比分析。整个建模与评估流程涵盖了以下关键环节:数据准备阶段、模型训练阶段以及模型评估阶段。本次标注工作的主要关注点集中在垃圾分类相关的目标类别上。所涉数据集共计包含5745张图像,在具体分类分布上如下所述:

训练数据集共包含约4千张图片,并被用来训练模型以提高其性能;验证数据集包含约一千余张图片,并被用来评估模型对新样本的识别精度以及防止过拟合问题的发生;测试数据集共计约五百多张图片,并被用来测试模型在未知样本上的泛化性能。

数据分布可视化图表显示了各类样本的数量统计情况

通过柱状图可以看出训练集、验证集和测试集中各类样本的数量比例及其差异情况

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

部分标注如下图所示:

这种数据分布方式确保了数据在各阶段(模型训练阶段、验证阶段及测试阶段)的均衡性分布,并为YOLOv8n模型的研发及其性能评估提供了可靠的技术基础。

在项目根目录中创建一个名为datasets的数据存储目录,并将收集到的图像按照训练集和验证集进行分类存储于该目录内。

随后

该文件指定了用于模型训练与验证的数据集路径,并包含了模型将要识别的目标分类类别。

在完成数据准备之后,在完成数据准备之后

CPU/GPU训练代码如下:

导入名为 yolov8n.pt 的预训练的YOLOv8模型文件,并将其作为训练好的模型使用。在进行 YOLO 模型的参数配置时:

  • 配置数据集路径为 data_yaml_path。
  • 设置为 150 轮次的训练轮数。
  • 每个批次处理 4 个样本。
  • 使用 SGD 优化器进行优化。
  • 并命名为 train_v8 进行区分标识。

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

在进行深度学习时

损失函数作用说明:
(1)box_loss:衡量预测框与标定框之间的误差程度(基于GIoU),误差越小表示定位越精确。
(2)cls_loss:用于判断锚框对应的分类是否准确。
(3)dfl_loss:通过DFLLoss计算预测框与目标框之间的距离,并根据特征图尺度进行优化。
最终优化了目标检测的定位准确性。

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

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

(1)损失曲线表
(2)性能参数图表(mAP, 准确率, 召回率)
(3)混淆矩阵表
(4)Precision-Recall 曲线表

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

训练指标:
train/box_loss:
体现训练过程中边界框回归损失(Box Loss)的变化情况。
趋势显示,在初始值为0.8时开始递减,并最终趋近于零值,这表明模型在边界框预测方面的精度持续提升。

表现:反映了训练过程中分类损失(Classification Loss)的变化轨迹。
变化过程:由初始较高的值(约为1.5)迅速降至接近零的状态,表明模型在类别区分能力方面得到了逐步提升。

该指标用于追踪分布焦点损失(Distribution Focal Loss)的变化情况,并作为优化边界的精确度的重要指标。
从初始估算的1.0降至最低为0的过程中可以看出,在训练过程中该损失指标持续下降直至趋于平稳。

验证指标:
val/box_loss:
描述该指标的变化情况。
该指标用于衡量模型在验证集上的边界框损失变化。具体而言,在训练初期(约为0.8),该值逐渐下降,并最终趋于稳定。这一趋势与训练过程中的整体损失变化相一致,并表明模型在验证集上的边界框预测效果得到了逐步提升。

val/cls_loss表示验证集上类别分类损失(Classification Loss)的变化趋势。该指标从初始值1.5逐步降至接近0,并表明模型在验证集上的分类能力逐步提升

val/dfl_loss:
描述: 该变量代表验证集上聚焦于分布焦点损失(DFL Loss)的变化情况。
趋势:随着训练过程的推进,损失值持续下降直至平稳状态,并显示出模型在验证集上的边界框质量优化表现优异。

性能指标:
metrics/precision(B):
描述: 衡量模型在训练集上的分类精度(Precision)的变化规律。
趋势: 模型的分类精度从约0.85开始迅速增长,并逐渐趋于稳定在接近1.0的水平。这一现象表明该模型对正样本的识别能力表现出色。

metrics/recall(B):
描述: 该指标体现模型在训练数据集上的召回率(Recall)变化轨迹。
趋势: 由低至高逐步提升,并最终趋于稳定于接近1.0的状态,
这反映出模型对于正样本的识别能力极为出色。

metrics/mAP50(B):
说明该指标代表验证集上iou值达到或超过50%时的平均检测精度(mAP@50)。
变化趋势显示该模型在较宽松iou条件下的检测性能显著提升:其指标值从大约88%逐步提升至接近1.0。

评估指标mAP@50-95(B):
描述: 代表验证集上IoU介于50%至95%之间时的综合平均精度(mAP@50-95)。
趋势: 由初始值逐步提升至约0.94,在更高IoU阈值条件下的性能持续增强。

总结:
(1)损失下降: 无论是训练集还是验证集,各项损失(box_loss、cls_loss、dfl_loss)都呈现出逐渐下降的趋势,并最终趋于平稳,表明模型训练过程稳定且收敛良好。
(2)指标提升: 精确率(Precision)、召回率(Recall)、mAP@0.5 和 mAP@0.5-95 都显示出快速提升并趋于接近1.0的趋势,说明模型的检测性能在不断提高。
(3)验证结果与训练一致: 验证集损失和训练集损失的下降趋势基本一致,表明模型没有出现明显的过拟合问题。

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

曲线说明:
蓝色(battery):
电池,mAP@0.5 = 0.995

橙色(drug):
药物,mAP@0.5 = 0.995

绿色(plastic):
塑料,mAP@0.5 = 0.995

红色(metal):
金属,mAP@0.5 = 0.995

紫色(potato):
土豆,mAP@0.5 = 0.988

粉红色(carrot):
胡萝卜,mAP@0.5 = 0.995

浅紫色(daikon):
白萝卜,mAP@0.5 = 0.988

青色(brick):
砖块,mAP@0.5 = 0.995

浅绿色(cobblestone):
鹅卵石,mAP@0.5 = 0.985

黄色(cup):
杯子,mAP@0.5 = 0.995

总结:
(1)每个类别对应一种颜色,并以相应的曲线表示其分类性能。
(2)距离右上角越近的曲线表明该类别的分类能力越强。

用于评估分类模型性能的关键工具 混淆矩阵 (Confusion Matrix) 作为核心指标 该表格详细比较了模型在各个类别上的预测结果与其真实情况之间的差异

结论:
该模型对于关键领域的分类能力展现出卓越的能力,并且具有良好的稳定性。该模型不仅可实现部署于实际场景中的垃圾分类工作,在智慧环保城市的建设中也具有重大的意义和应用价值。

4.检测结果识别

完成模型训练后, 我们能够生成一份最佳的训练结果报告, 其中包含了位于runs/train/weights目录下的best.pt文件. 该文件可作为后续检测的基础材料.

安装所需的库模块:
(1)通过from语句导入YOLO模型类。
(2)通过关键字导入OpenCV库。

加载模型路径和图片路径:
(1)path = ‘models/best.pt’:指定预训练权重文件的位置,并明确该权重文件旨在执行目标检测任务。
(2)img_path = “TestFiles/imagetest.jpg”:确定待检测图像的位置。

加载预训练模型:
(1)基于给定路径加载YOLO模型,并设置目标检测任务为.detect。
(2)根据.conf参数配置目标检测的置信度阈值;同时根据.iou参数配置非极大值抑制(NMS)的交并比(IoU)阈值。

图像处理:
(1)通过模型读取图像路径并执行目标识别任务;
(2)系统将识别到的目标信息记录在results变量中。

显示检测结果:
(1)res = results[0].plot():该系统将收集并呈现至预设输出路径的所有目标识别结果。
(2)cv2.imshow(“YOLOv8 Detection”, res):通过OpenCV库展示处理后的图像内容。
(3)cv2.waitKey(0):等待键盘输入以关闭显示窗口。

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

该段输出基于YOLOv8模型对图片imagetest.jpg执行检测所得的结果,具体信息如下

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

检测结果:
(1)模型在图片中检测到:检测到了 2个塑料(plastics)

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

该系统采用了YOLOv8算法作为基础框架,在检测精度和运行效率方面表现优异;系统的推理速度极快(仅需10ms/帧),能够完美应对实时垃圾分类的任务;对后处理环节进行优化升级将显著提升整体效能

运行效果

– 运行 MainProgram.py

主要功能:该系统具备完成目标图像中垃圾分类识别的能力;它不仅能够对图像、视频以及摄像头获取的画面进行分类识别,还可以处理多幅图像的一次性分析;系统界面会实时呈现目标定位坐标数据(如x,y坐标)、总物体数量统计以及每件物品的置信度评分和所需时间;该系统能够将分析结果存储为图像标注文件或视频分段报告格式。

2.检测结果说明:

(1)置信度阈值:当前设置为0.25,表示检测系统只会考虑置信度高于25%的目标进行输出,置信度越高表示模型对检测结果的确信度越高。
(2)交并比阈值:当前设置为0.70,表示系统只会认为交并比(IoU)超过70%的检测框为有效结果。交并比是检测框与真实框重叠区域的比值,用于衡量两个框的相似程度,值越高表明重叠程度越高。

这两个关键参数常用于目标检测系统中,并且调节后能够显著地影响模型的检测精度和误检率。

该界面呈现了基于YOLOv8模型的目标检测系统的检测结果界面。其中各字段的含义如下:

(1)这表明模型完成检测所需的时间为Time taken 0.043秒。
(2)这体现了模型的快速响应能力,并且其检测速度极快。

目标数目(Number of objects detected): (1)被检测的目标数量为3,并表明这是当前检测的第一个目标。

此处提供了一个可选的设置选项,请您根据需要进行调整

结果(Result):“狭窄血管”,表示系统正在高亮显示检测到的“Stenosis”。

(1)这表明该系统对检测结果为"药物"类别的预测具有97.41%的信心。
(2)置信度体现了模型的自信水平,在此情况下其值越高就意味着模型对该检测结果越有信心。

目标位置(Object location):
(1)x坐标值为244;y坐标值为151;该参数组用于确定目标区域在图像中的起始位置。
(2)x最大值为357;y最大值为453;该参数组用于确定目标区域在图像中的结束位置。

这些坐标表示在图像中的目标区域范围,框定了检测到的“药物”的位置。

此图呈现了垃圾分类检测系统的一次运行结果报告内容框架及相关参数数据信息。该报告具体涵盖了以下几项关键指标:运行时长参数值、分类识别类别分布统计信息、行为操作置信度评估结果以及目标定位坐标位置数据记录等信息维度。系统管理员可通过图形化操作面板界面直观获取样本分类识别情况的具体数值数据,并对结果数据进行深度分析研究工作流程环节以进一步提升分类目标识别系统的整体效能水平。

3.图片检测说明

单击图片按钮以打开并从工作区中选择待检测的图片。或者单击文件夹按钮以打开并拖动需要批量检测图片的文件夹至右侧的工作区中。
操作演示如下:
(1)单击目标下拉框以选择待处理的目标。
(2)单击保存按钮以将处理结果导出至指定位置。
导出至 save_data 文件夹内。

检测结果:系统通过图像识别技术,在图片中发现了垃圾分类的目标,并对这些目标进行了详细的信息展示。其中包含了总数量的数据统计、完成时间的具体记录以及各类别别分类的标准划分等关键数据。同时提供了每个目标的具体位置坐标信息

4.视频检测说明

单击视频播放器按钮即可启动程序流程:首先启动会话并选择待检测的视频文件;系统将自动识别并展示检测结果;若需停止观看则可再次单击该按钮以关闭当前窗口。
对于保存操作而言:单击保存选项卡后系统将执行图像识别运算并将结果存储至指定位置:即save_data文件夹内。

检测结果:该系统实现了对视频流的实时在线处理,并能同时呈现所有分类垃圾图片及其匹配程度的信息。通过表格详细记录了每个分类垃圾图片的位置坐标及其匹配程度

该界面不仅展示了系统的视频帧多目标检测性能,并且能够精确识别垃圾分类图像的目标;同时提供详细的结果信息和分类置信度分数。

5.摄像头检测说明

按下启动摄像头按钮能够启动摄像头具备实时监控功能再次按下按钮即可关闭摄像头

检测结果:该系统通过网络实现摄像头与系统的连接,并对视频流进行实时分析以识别出垃圾分类图像并在屏幕上展示出相应的分类标记。系统持续不断地捕捉并展示摄像头的画面内容,并在每帧画面处理完毕后,在表格中记录了详细的分类信息以及行为位置标注情况。

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

保存

保存

在所使用的csv文件中包含以下详细信息:图片路径、目标标记编号、目标分类标签、检测置信度评分以及目标定位坐标的详细信息。具体来说,在该数据集中记录了每个目标的位置信息:其坐标位置参数表示为检测框左上角与右下角两个顶点的x轴和y轴坐标值。

(1)图片保存

(2)视频保存

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

(1)遵循数据.yaml文件中的数据集定义:data_yaml_path
(2)将训练轮数配置为150轮:epochs=150
(3)每批图像的数量被设定为4(批量大小):batch=4
(4)训练结果将被归档至名为train_v8的目录中:name=’train_v8′
(5)本系统将采用随机梯度下降法(SGD)作为优化器:optimizer=’SGD’

虽然在大多数深度学习任务中,并非所有情况下GPU都能带来显著的优势。
然而,在一些特定场景下(如计算资源不足或其他技术瓶颈),用户仍需选择使用CPU来进行模型训练。

温馨提⽰:在CPU环境下进行深度学习模型的训练过程通常会比GPU环境更为缓慢;尤其是像YOLOv8这类计算密集型的任务;除非有特别的需求;否则建议选择GPU来进行训练以提高效率

2.训练日志结果

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

(1)经过一轮轮的训练共150次后 总共耗费时间达5.121小时。
(2)本次训练配备了一台NVIDIA GeForce RTX 4070 Ti SUPER 显存容量为16GB。
(3)该模型展现出卓越的训练效率 这归功于YOLOv8优化架构的强大支持以及配备的高性能GPU芯片。

验证结果:
(1)mAP50(平均精度,IoU阈值为0.5):0.985
(2)mAP50-95(平均精度,IoU阈值为0.5到0.95):0.506

速度:
(1)预处理所需的时间为0.4毫秒。
(2)推理所需的时间为1.8毫秒。
(3)后处理所需的时间为1.1毫秒。
(4)整体推断速度则达到了每张图像约 3.3毫秒,在实时检测任务中表现尤为出色。

实验结果存储

该进程以终止码0完成任务,并未出现错误。

综上所述:YOLOv8模型在目标检测任务中的性能卓越。无论是分类还是定位能力都非常出色。

全部评论 (0)

还没有任何评论哟~