项目介绍
项目中所用到的算法模型和数据集等信息如下:
算法模型:
yolov8、yolov8 + SE注意力机制 或 yolov5、yolov5 + SE注意力机制 , 直接提供最少两个训练好的模型。模型十分重要,因为有些同学的电脑没有 GPU,无法自行训练。
数据集:
网上下载的数据集,格式都已转好,可直接使用。
界面:
PyQt5
以上是本篇博客的简单说明,添加注意力机制可作为模型的创新点 。
摘要:垃圾分类检测在智能城市建设中具有重要意义,不仅能够提升环境保护意识,还可以为自动化垃圾处理技术提供可靠的感知信息。本文介绍了基于YOLOv8深度学习框架的一个垃圾分类检测模型,该模型使用了多张图片进行训练,能够识别生活中常见的垃圾种类,包括可回收物、厨余垃圾、有害垃圾、其他垃圾等多种类型。此外,我们开发了一款带有UI界面的垃圾分类检测系统,支持实时检测这些垃圾,并通过图形界面直观地展示检测结果。系统采用Python与PyQt5开发,支持对图片、视频以及摄像头输入进行识别,同时可以保存检测结果供后续分析。本文还附带了完整的Python代码和详细的使用指南,供有兴趣的读者参考,完整的代码资源请见文章末尾。
前言
垃圾分类检测在提升环境保护意识、优化资源回收以及推动可持续发展方面起到了至关重要的作用。在智能城市建设中,快速且精准地识别垃圾类型,能够有效提高垃圾分类的准确性,减少环境污染,尤其在自动化垃圾处理系统中,准确识别垃圾种类是其决策和处理过程的基础。同时,垃圾分类检测系统也为市民提供了重要的实时反馈,帮助人们进行正确的垃圾投放。
垃圾分类检测已在多个领域得到了广泛应用,如城市管理、废物处理、资源回收、环境监测等应用场景中,均依赖于高效准确的垃圾分类技术。通过一个自动化的垃圾检测系统,城市管理部门可以在日常运作中实时监控垃圾投放情况,并根据识别到的垃圾信息做出相应的管理决策,从而提高废物管理的效率和有效性。
在现代城市管理环境中,垃圾分类检测系统还可以与其他智能管理系统结合使用,如环境监测、智能调度和资源分配系统,形成一个完整的智能管理体系,帮助城市更有效地处理垃圾。在特殊的垃圾投放场景或复杂环境中,系统能够快速识别不同类型的垃圾,从而为用户提供更为精准的垃圾投放建议。
本文通过收集与垃圾分类相关的数据和图像,博主利用YOLOv8、YOLOV5等目标检测技术,结合Python与PyQt5,开发出了一款界面简洁的垃圾分类检测系统。该系统支持图片、视频及摄像头检测,并能够保存识别结果,为用户提供直观便捷的垃圾分类体验。
目录
功能展示:
部分核心功能如下:
- 功能1: 支持单张图片识别
- 功能2: 支持遍历文件夹识别
- 功能3: 支持识别视频文件
- 功能4: 支持摄像头识别
- 功能5: 支持结果文件导出(xls格式)
- 功能6: 支持切换检测到的目标查看
更多的其他功能可以通过下方视频演示查看。
基于深度学习的垃圾检测与分类系统(yolov8)
🌟 一、环境安装
文档中有详细的环境安装指南,包括 Python、PyCharm、CUDA、Torch 等库的安装步骤,所有版本均已适配。你可以根据文档或视频教程一步步完成安装。
经过三年多的经验积累,我整理了在帮助他人安装环境过程中常见的问题和解决方法,并汇总到这份文档中。无论你是使用 GPU 版还是 CPU 版,都能找到相关的安装细节和说明。文档会定期更新,以确保最新的环境配置和优化,供大家参考。
文档截图如下:
🌟 二、数据集介绍
通过网络上搜集了关于垃圾分类的各类图片,并使用Labelimg标注工具对每张图片中的垃圾目标边框(Bounding Box)及类别进行了标注。此数据集涵盖多种常见的垃圾类型,包括可回收物、厨余垃圾、有害垃圾和其他垃圾等,适用于训练深度学习模型进行垃圾分类检测。部分图像及标注如图所示。
该数据集包含了多个类别的垃圾图片,涵盖了多种不同的天气条件和复杂的场景,如光照变化、遮挡、模糊等情况,为算法的泛化能力提供了充分的测试环境。使用YOLOv8目标检测技术,对这些垃圾分类图片进行训练和验证,使模型能够准确识别各种不同环境下的垃圾类型。
该数据集共有约5000
张图像,具体的类别如下:
1. 可回收物:
- 电源银行(Power bank)
- 袋子(Bag)
- 化妆品用品(Toiletries)
- 塑料玩具(Plastic toys)
- 塑料餐具(Plastic dishes)
- 塑料衣架(Plastic hangers)
- 玻璃餐具(Glass dishes)
- 金属餐具(Metal dishes)
- 快递袋(Express delivery bag)
- 插头和电线(Plug and wire)
- 旧衣服(Old clothes)
- 铝罐(Aluminum can)
- 枕头(Pillow)
- 毛绒玩具(Plush toy)
- 鞋子(Shoes)
- 切菜板(Cutting board)
- 纸板盒子(Cardboard box)
- 调料瓶(Seasoning bottle)
- 酒瓶(Wine bottle)
- 金属食品罐(Metal food cans)
- 金属厨具(Metal kitchenware)
- 锅(Pot)
- 食用油桶(Edible oil barrel)
- 饮料瓶(Beverage bottle)
- 书纸(Book paper)
- 垃圾桶(Trash bin)
- 塑料厨具(Plastic kitchenware)
- 毛巾(Towel)
- 纸袋(Paper bag)
- 饮料纸盒(Beverage carton)
2. 厨余垃圾:
- 剩饭剩菜(Leftover food)
- 大骨头(Large bone)
- 水果皮和果肉(Fruit peel and flesh)
- 茶渣(Tea residue)
- 蔬菜茎叶(Vegetable stalks and leaves)
- 蛋壳(Eggshell)
- 鱼骨(Fish bones)
3. 有害垃圾:
- 干电池(Dry battery)
- 药膏(Ointment)
- 过期药物(Expired medicine)
4. 其他垃圾:
- 快餐盒(Fast food container)
- 受污染的塑料(Contaminated plastic)
- 烟蒂(Cigarette butt)
- 牙签(Toothpick)
- 花盆(Flower pot)
- 陶瓷餐具(Ceramic dishes)
- 筷子(Chopsticks)
- 受污染的纸张(Contaminated paper)
为了方便使用,数据集已经进行了标注,且转为了转换为YOLO
格式,并且按照train、val
和test
的划分进行了组织。您可以直接使用这些数据集进行模型的训练和评估。
下面是一些数据集图片的截图,展示了具体的数据集的示例图像,以帮助您更好地了解数据集的内容和质量。
🌟 三、深度学习算法介绍
本系统集成了多个不同的算法版本和界面版本,以下是对这些版本的概述:
算法版本方面,系统提供了多种深度学习算法和传统图像处理技术,用户可以选择最合适的算法进行任务处理。此外,各算法版本经过严格的测试和优化,以提供更高的准确率和效率。
在界面版本方面,系统设计了多种用户界面风格,可以选择简约、直观的界面,快速上手进行操作;也可以选择功能丰富的专业界面,满足复杂任务的需求。界面设计注重用户体验,确保用户在操作过程中能够方便地访问各种功能。
此外,系统还支持实时更新和扩展,可以根随时添加新的算法模块或界面选项。这种灵活性不仅提高了系统的适用性,也为未来的技术发展预留了空间。
总之,本系统通过多个算法和界面版本的组合,提供了丰富的选择和强大的功能。
下面是对包含到的算法的大概介绍:
1. yolov8相关介绍
YOLOv8 是当前深度学习领域内的一个SOTA(State-Of-The-Art)模型,凭借其前代版本的技术积累,再次引领了目标检测算法的发展方向。与其前辈不同,YOLOv8在模型结构和计算方式上都做了创新性调整,旨在实现更高效的计算和更灵活的应用场景适应能力。全新的骨干网络设计,结合Anchor-Free 检测头,让模型在面对不同输入尺寸、不同目标尺度时的表现更加出色,极大提升了性能和准确性。
此外,YOLOv8 的另一个重要进步在于它采用了全新的损失函数,使得训练过程更加稳定和高效。无论是在传统的CPU平台上运行,还是在更强大的GPU平台上进行加速,YOLOv8 都能够适应不同硬件资源的场景,确保在各种场合下保持高效的推理速度和精确的检测能力。
不过,值得注意的是,ultralytics 这一开发团队并没有直接将其开源库命名为 YOLOv8,而是采用了ultralytics的品牌名来命名整个项目。这并非单纯的命名策略,而是反映了其定位的重大变化。ultralytics 将这个库不仅视为一个算法框架,而非仅仅一个 YOLO 版本的延续。其设计目标之一是打造一个能够适应不同任务的算法平台,无论是目标检测、分类、分割,还是姿态估计,都能够在这个框架中被高效地支持。
这也意味着,未来的ultralytics 开源库将不仅限于 YOLO 系列,它的可扩展性为用户提供了更大的可能性。无论是使用非 YOLO 系列模型,还是面对不同应用领域的特定需求,ultralytics都提供了灵活且高效的解决方案。
总的来说,ultralytics 开源库 的优势可以归纳为以下几个要点:
-
融合当前最前沿的深度学习技术,让用户可以轻松实现复杂的计算任务。
-
具有极高的扩展性,未来将不仅支持 YOLO 系列,还会支持更多非 YOLO 的算法,适用于广泛的任务场景。
如此一来,ultralytics 不仅能够帮助开发者在算法研究和工程应用上取得突破,更能推动未来智能视觉领域的进一步发展。
网络结构如下:
2. yolov5相关介绍
YOLOV5有YOLOv5n,YOLOv5s,YOLOv5m,YOLOV5l、YOLO5x五个版本。这个模型的结构基本一样,不同的是deth_multiole模型深度和width_multiole模型宽度这两个参数。就和我们买衣服的尺码大小排序一样,YOLOV5n网络是YOLOV5系列中深度最小,特征图的宽度最小的网络。其他的三种都是在此基础上不断加深,不断加宽。不过最常用的一般都是yolov5s模型。
本系统采用了基于深度学习的目标检测算法YOLOv5,该算法是YOLO系列算法的较新版本,相比于YOLOv3和YOLOv4,YOLOv5在检测精度和速度上都有很大的提升。YOLOv5算法的核心思想是将目标检测问题转化为一个回归问题。此外,YOLOv5还引入了一种称为SPP(Spatial Pyramid Pooling)的特征提取方法,这种方法可以在不增加计算量的情况下,有效地提取多尺度特征,提高检测性能。
在YOLOv5中,首先将输入图像通过骨干网络进行特征提取,得到一系列特征图。然后,通过对这些特征图进行处理,将其转化为一组检测框和相应的类别概率分数,即每个检测框所属的物体类别以及该物体的置信度。YOLOv5中的特征提取网络使用CSPNet(Cross Stage Partial Network)结构,它将输入特征图分为两部分,一部分通过一系列卷积层进行处理,另一部分直接进行下采样,最后将这两部分特征图进行融合。这种设计使得网络具有更强的非线性表达能力,可以更好地处理目标检测任务中的复杂背景和多样化物体。
在YOLOv5中,每个检测框通过其左上角坐标(x, y)、宽度(w)、高度(h)以及置信度(confidence)来表示。此外,YOLOv5对于每个检测框还会预测C个类别的概率得分,每个类别的概率得分总和为1。这意味着每个检测框最终可以被表示为一个维度为(C+5)的向量,包括类别概率、位置和置信度信息。
在训练过程中,YOLOv5使用了交叉熵损失函数来优化模型,该损失函数由定位损失、置信度损失和分类损失三个部分组成。YOLOv5还采用了Focal Loss和IoU Loss等优化方法,以缓解正负样本不平衡及目标尺寸变化等问题。这些优化不仅提高了模型的准确性,还改善了在不同尺寸目标下的表现。
从网络结构来看,YOLOv5分为四个主要部分:Input(输入)、Backbone(骨干网络)、Neck(颈部结构)和Prediction(预测)。其中,Input部分负责将数据引入网络,采用了Mosaic数据增强技术,能够通过随机裁剪和拼接输入图片,进一步提升网络的泛化能力。
Backbone部分是YOLOv5提取图像特征的关键模块,其特征提取能力直接影响了整个模型的性能表现。相比前代YOLOv4,YOLOv5在Backbone中引入了Focus结构。Focus结构通过切片操作将图片的宽度(W)和高度(H)信息转移到通道空间中,从而实现了2倍的下采样操作,同时保证了不丢失关键信息。
🌟 四、模型训练步骤
-
使用pycharm打开代码,找到
train.py
打开,示例截图如下:
-
修改 model_yaml 的值,以符合实际情况。如果你打算训练 YOLOv8s 模型,请将其修改为 model_yaml = yaml_yolov8s。如果你想训练添加 SE注意力机制 的模型,请将其修改为 model_yaml = yaml_yolov8_SE。
-
修改 data_path 的数据集路径。这里默认指定的是 traindata.yaml 文件。如果你使用的是我提供的数据,可以不用修改。
-
修改 model.train() 中的参数,根据自己的需求和电脑硬件的情况进行调整。
# 文档中对参数有详细的说明 model.train(data=data_path, # 数据集 imgsz=640, # 训练图片大小 epochs=200, # 训练的轮次 batch=2, # 训练batch workers=0, # 加载数据线程数 device='0', # 使用显卡 optimizer='SGD', # 优化器 project='runs/train', # 模型保存路径 name=name, # 模型保存命名 )
-
修改
traindata.yaml
文件, 打开traindata.yaml
文件,如下所示:
在这里,只需修改 path 的值,其他的都不用改动(仔细看上面的黄色字体),我提供的数据集默认都是到yolo
文件夹,设置到 yolo 这一级即可,修改完后,返回train.py
中,执行train.py
。 -
打开
train.py
,右键执行。
-
出现如下类似的界面代表开始训练了
-
训练完后的模型保存在runs/train文件夹下
🌟 五、模型评估步骤
-
打开
val.py
文件,如下图所示:
-
修改
model_pt
的值,是自己想要评估的模型路径 -
修改
data_path
,根据自己的实际情况修改,具体如何修改,查看上方模型训练中的修改步骤 -
修改
model.val()
中的参数,按照自己的需求和电脑硬件的情况更改model.val(data=data_path, # 数据集路径 imgsz=300, # 图片大小,要和训练时一样 batch=4, # batch workers=0, # 加载数据线程数 conf=0.001, # 设置检测的最小置信度阈值。置信度低于此阈值的检测将被丢弃。 iou=0.6, # 设置非最大抑制 (NMS) 的交叉重叠 (IoU) 阈值。有助于减少重复检测。 device='0', # 使用显卡 project='runs/val', # 保存路径 name='exp', # 保存命名 )
-
修改完后,即可执行程序,出现如下截图,代表成功(下图是示例,具体以自己的实际项目为准。)
-
评估后的文件全部保存在在
runs/val/exp...
文件夹下
🌟 六、训练结果
我们每次训练后,会在 run/train 文件夹下出现一系列的文件,如下图所示:
如果大家对于上面生成的这些内容(confusion_matrix.png、results.png
等)不清楚是什么意思,可以在我的文档中查看这些指标的具体含义,示例截图如下:
🌟 获取方法
如果您希望获取博文中提到的所有实现相关的完整资源文件(包括测试图片、视频、Python脚本、UI文件、训练数据集、训练代码、界面代码等),这些文件已被全部打包。以下是完整资源包的截图:
项目完整文件下载请见演示与介绍视频的视频简介部分进行获取➷➷➷
演示与介绍视频: 【基于深度学习的垃圾检测与分类系统(yolov8)】
演示与介绍视频: 【基于深度学习的垃圾检测与分类系统(yolov5)】
结束语
由于博主的能力有限,文中提到的方法虽经过实验验证,但难免存在一些不足之处。为不断提升内容的质量与准确性,欢迎您指出任何错误和疏漏。这不仅将帮助我在下次更新时更加完善和严谨,也能让其他读者受益。您的反馈对我至关重要,能够推动我进一步完善相关内容。
此外,如果您有更优秀的实现方案或独到的见解,也非常欢迎分享。这将为大家提供更多思路与选择,促进我们共同的成长与进步。期待您的宝贵建议与经验交流,非常感谢您的支持!
参考文献:
-
Chen, L., Wang, H., & Zhang, Y. (2021). A review of deep learning for object detection: Algorithms and applications. Journal of Visual Communication and Image Representation, 76, 103030.
-
Huang, Y., & Li, X. (2020). Real-time traffic sign recognition based on deep learning. Sensors, 20(3), 865.
-
Kim, J., Park, J., & Lee, S. (2022). A comprehensive review of image classification and segmentation for waste management. Waste Management, 145, 206-220.
-
Zhang, W., Wang, Y., & Liu, M. (2019). Traffic sign detection and recognition using YOLOv3. International Journal of Intelligent Transportation Systems Research, 17(2), 200-208.
-
Li, Y., Chen, H., & Yang, Y. (2023). Improving object detection in urban environments with YOLOv8: A case study on traffic signs. IEEE Transactions on Intelligent Transportation Systems, 24(1), 45-56.
-
Zhao, Y., Wang, T., & Hu, Y. (2021). Efficient garbage classification using convolutional neural networks. Journal of Cleaner Production, 286, 125516.
-
Yang, J., Zhang, Z., & Luo, W. (2022). A survey on deep learning methods for waste classification: Current trends and future directions. Journal of Environmental Management, 300, 113877.
-
Xu, R., & Xu, Q. (2020). Traffic sign detection and classification based on YOLOv4 and transfer learning. Applied Sciences, 10(4), 1342.
-
Sun, Y., & Zhang, Y. (2023). Multi-class garbage classification based on YOLOv8. Sensors, 23(2), 652.
-
Wang, X., Chen, H., & Li, Z. (2021). A novel approach for traffic sign detection in various environments using deep learning. Automotive Engineering, 13(6), 235-244.