摘要:
基于YOLO V8的高精度城市街道垃圾堆检测识别系统可用于日常生活中检测与定位垃圾堆目标,利用YOLO V8算法可实现图片、视频、摄像头等方式进行目标检测识别,另外支持结果可视化与检测结果的导出。本系统采用YOLO V8目标检测模型训练数据集,使用Pyqt5库来搭建页面展示系统,同时支持ONNX、PT等模型作为权重模型的输入。本系统支持的功能包括训练模型的导入、初始化;置信度与IOU阈值的调节、图像上传、检测、可视化结果展示、结果导出与结束检测;视频的上传、检测、可视化结果展示、结果导出与结束检测;摄像头的上传、检测、可视化结果展示与结束检测;已检测目标信息列表、位置信息;以及推理用时。本博文提供了完整的Python代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接。
优势:
-
高准确性:Yolov8在目标检测任务中表现出色,能够准确快速地检测出图片中的垃圾堆,提高了检测的准确性和可靠性。
-
实时性:Yolov8实现了实时或近实时的目标检测,可以及时发现街道上的垃圾堆,有利于及时清理和维护城市环境的整洁。
-
多类别检测:Yolov8能够同时检测多个类别的物体,包括垃圾堆在内,为城市管理部门提供更全面的信息。
-
自适应性:Yolov8能够通过反馈机制不断学习和优化模型,适应不同环境下的垃圾堆检测任务,提高系统的稳定性和适用性。
-
可扩展性:Yolov8的模型结构灵活,可以根据实际需求对模型进行扩展和优化,适用于不同规模和复杂度的垃圾堆检测任务。
应用场景:
-
智慧城市管理:将训练好的Yolov8模型应用于智慧城市管理中,实现对城市街道垃圾堆的实时监测和预警,有助于城市管理部门及时清理垃圾,维护城市环境的整洁。
-
环境监测:结合Yolov8检测垃圾堆的能力,可以搭建环境监测系统,监测城市街道上的垃圾情况,为环境保护和改善提供数据支持。
-
城市规划:通过Yolov8检测垃圾堆的分布情况,可以为城市规划部门提供数据参考,帮助他们优化城市道路布局和垃圾处理设施的规划,提升城市管理的效率和水平。
-
智能巡检:结合Yolov8的垃圾堆检测技术,可以实现智能巡检系统,自动识别街道上的垃圾堆并及时通知相关部门进行清理,提高工作效率和减少环境污染。
-
智能调度与优化:结合Yolov8的检测结果,可以实现智能调度系统,根据不同区域的垃圾堆情况和紧急程度,优化垃圾清理的调度计划,提高清理效率和降低成本
-
可视化展示与决策支持:利用Yolov8检测结果和其他城市数据,建立数据可视化平台,实时展示城市垃圾堆情况和处理进展,为决策者提供直观的数据支持,指导城市管理工作。
一、软件核心功能介绍及效果演示
软件主要功能
-
支持图片、图片批量、视频及摄像头进行检测,同时摄像头可支持内置摄像头和外设摄像头;
-
可对检测结果进行单独分析,并且显示单个检测物体的坐标、置信度等;
-
界面可实时显示目标位置、检测结果、检测时间、置信度、检测结果回滚等信息;
-
支持图片、视频及摄像头的结果保存,将检测结果保持为excel文件;
界面参数设置说明
-
标签4 摄像头源/相机/网络源;
-
标签5 交并比阈值:目标检测时的iou参数,只有目标检测框的交并比大于该值,结果才会显示;
-
标签6 置信度阈值:目标检测时的conf参数,只有检测出的目标置信度大于该值,结果才会显示;
-
标签7 显卡选择:在进行推理时是否使用显卡,默认勾选(使用显卡);
-
标签8 半精度选择:启用半精度(FP16)推理,可加快支持的 GPU 上的模型推理速度,同时将对精度的影响降至最低,默认不勾选(不适应半精度);
-
标签9 图片推理尺寸: 在推理时将推理图片固定的尺寸;
-
标签10 数据集的配置文件:数据集在训练时的配置文件(.yaml);
-
标签11 训练好的模型:最终要进行推理的模型,一般选择最优的一个模型;
-
标签12 类别名:该项目的所有类别,可以方便在后续查看某一个类别。
视频演示
图片检测演示
-
点击打开图片按钮,选择需要检测的图片,或者点击打开文件夹按钮,选择需要批量检测图片所在的文件夹,操作演示如下:
-
点击表格中的指定行,界面会显示该行表格所写的信息内容。
视频检测演示
-
点击视频按钮图标,打开选择需要检测的视频,在点击开始运行会自动显示检测结果。再次点击停止按钮,会停止检测视频。
-
点击表格中的指定行,界面会显示该行表格所写的信息内容。
摄像头检测演示
-
在选择相机源中输入需要检测的摄像头(可以是电脑自带摄像头,也可以是外接摄像头,视频流等方式),然后点击摄像头图标来固定选择的推理流方式,最后在点击开始运行即可开始检测,当点击停止运行时则关闭摄像头检测。
-
点击表格中的指定行,界面会显示该行表格所写的信息内容。
检测结果保存
点击导出数据按钮后,会将当前选择的图片【含批量图片】、视频或者摄像头的检测结果进行保存为excel文档,结果会存储在output目录下。
二、环境搭建
创建专属环境
conda create -n yolo python==3.8
激活专属环境
conda activate yolo
安装torch-GPU库
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "torch-2.0.1+cu118-cp38-cp38-win_amd64.whl"
安装torchvision-GPU库
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "torchvision-0.15.2+cu118-cp38-cp38-win_amd64.whl"
安装ultralytics库
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
测试环境
yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'
此时就表明环境安装成功!!!
安装图形化界面库 pyqt5
pip install pyqt5 -i https://pypi.douban.com/simple/
pip install pyqt5-tools -i https://pypi.douban.com/simple/
三、算法原理
YOLOv8是一种前沿的深度学习技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性,在精度和速度方面都具有尖端性能。在之前YOLO 版本的基础上,YOLOv8 引入了新的功能和优化,使其成为广泛应用中各种物体检测任务的理想选择。主要的创新点包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。
YOLOv8目标检测算法具有如下的几点优势:
(1)更友好的安装/运行方式;
(2)速度更快、准确率更高;
(3)新的backbone,将YOLOv5中的C3更换为C2F;
(4)YOLO系列第一次使用anchor-free;
(5)新的损失函数。
YOLO各版本性能对比
网络结构
YOLOv8模型的整体结构如下图所示:
YOLOv8与YOLOv5模型最明显的差异是使用C2F模块替换了原来的C3模块;另外Head 部分变化最大,从原先的耦合头变成了解耦头,并且从 YOLOv5 的 Anchor-Based 变成了 Anchor-Free。
四、模型的训练、评估与推理
数据集准备
本文使用的垃圾堆数据集是通过爬虫从网上进行爬取得到的,一共包含1188张图片,有2个类别,分别为['overflow', 'No Overflow'],两个标签的数量分别为1734个标签和414个标签。部分数据集及类别信息如下:
图片数据集的存放格式如下,在项目目录中新建VOCData目录,同时将图片放入images目录下。
模型训练
数据准备完成后,通过调用train.py文件进行模型训练,epochs参数用于调整训练的轮数,代码如下:
from ultralytics import YOLO
# build from YAML and transfer weights
model = YOLO('yolov8n.yaml').load('./weights/yolov8n.pt')
# Train the model
results = model.train(data='./VOCData/myvoc.yaml', epochs=100, imgsz=640)
训练结果分析
YOLOv8在训练结束后,可以在runs/目录下找到训练过程及结果文件,如下所示:
P_curve.png
通过查看P_curve.png图片,可以发现,该模型中两个类别的精确度在最后都接近在1附近。
results.png
通过查看results.png图片,可以发现,该模型在训练集和验证集上的损失都很低(box_loss、cls_loss、dfl_loss),并且 precision、recall、mAP50、mAp50-95 都很高,基本上接近 0.8。在这个少量数据集中这个精度还是不错。
训练 batch
验证 batch
模型推理
模型训练完成后,可以得到一个最佳的训练结果模型best.pt文件,在runs/trian/weights目录下。我们通过使用该文件进行后续的推理检测。
图片检测代码如下:
from ultralytics import YOLO
# Load a model
model = YOLO('./runs/detect/train/weights/best.pt')
# Run batched inference on a list of images
model.predict("./img", imgsz=640, save=True, device=0)
执行上述代码后,会将执行的结果直接标注在图片上,结果如下:
关于该系统涉及到的完整源码、UI界面代码、数据集、训练代码、测试图片视频等相关文件,均已打包上传,感兴趣的小伙伴可以通过下载链接自行获取。
五、获取方式
本文涉及到的完整全部程序文件:包括 python源码、数据集、训练好的结果文件、训练代码、UI源码、测试图片视频等(见下图),获取方式见文末:
注意:该代码基于Python3.8开发,运行界面的主程序为GUI.py,其他测试脚本说明见上图。为确保程序顺利运行,请按照requirements.txt配置软件运行所需环境。
关注下方公众号:【AI算法与电子竞赛】,发送【YOLO系列源码】即可获取下载方式
六、链接作者
欢迎关注我的公众号:@AI算法与电子竞赛
硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!