文末附完整项目下载链接

开发目的
随着城市化进程的不断加快,生活垃圾产量持续攀升,垃圾分类作为实现资源高效回收利用、减少环境污染、推动可持续发展的重要举措,已成为现代城市管理的关键环节。然而,在实际推行过程中,公众分类意识薄弱、分类知识欠缺以及人工分拣效率低下等问题严重制约了垃圾分类工作的有效落实。传统依赖人力指导与监督的模式不仅成本高昂,且难以实现全天候、广覆盖的精准监管,导致"先分后混""分类不准"等现象屡见不鲜。为破解这一难题,亟需引入智能化手段提升垃圾分类的自动化与科学化水平。
在此背景下,本系统融合YOLOv8目标检测算法、Flask后端框架与Layui前端技术,构建了一套高效、可视化的智能垃圾分类检测系统。YOLOv8凭借其卓越的检测精度与实时推理能力,能够在复杂场景下准确识别各类垃圾物品,并实现快速分类判定;Flask以其轻量灵活的特性支撑系统的后端服务架构,保障图像上传、模型推理与结果返回的高效运行;Layui则为用户提供了简洁友好的可视化交互界面,实现检测过程的直观展示与操作管理。
该系统不仅可应用于社区宣传引导、校园环保教育及智能垃圾桶联动控制等多元场景,还能显著降低对人工干预的依赖,提升分类准确率与公众参与度。通过人工智能技术赋能垃圾分类,本系统在推动智慧环保建设、提升城市精细化管理水平方面具有重要意义,同时也为AI技术在民生领域的落地应用提供了可复制、可推广的实践范例。
YOLO介绍
YOLO(You Only Look Once)系列自诞生以来,凭借其高速度与高精度的平衡,已成为目标检测领域最具影响力的算法之一。继YOLOv3、YOLOv5、YOLOv7之后,Ultralytics公司推出的 YOLOv8 进一步优化了网络结构与训练策略,在保持实时性的同时显著提升了检测性能。本文将深入解析YOLOv8的网络架构,介绍Ultralytics框架的使用方法,并从骨干网络、Neck、检测头等方面对比其相较于YOLOv3、YOLOv5、YOLOv7的改进与创新。
YOLOv8延续了"Backbone-Neck-Head"的经典三段式设计,但在细节上进行了多项优化,整体结构更加简洁高效。
1. 骨干网络(Backbone)
YOLOv8采用 CSPDarknet53 的改进版本作为主干特征提取网络,但引入了更现代化的设计思想:
- 使用 卷积+批归一化+SiLU激活函数(CBS模块) 替代传统的CBL(Conv+BN+LeakyReLU),提升非线性表达能力。
- 引入 跨阶段局部结构(C2f 模块),取代YOLOv5中的C3模块。C2f通过更多的分支和短路连接增强了梯度流动,提升小目标检测能力。
- 更深的层次设计,支持多种规模模型(如YOLOv8n, YOLOv8s, YOLOv8m, YOLOv8l, YOLOv8x),适应不同场景需求。
C2f模块是YOLOv8的核心创新之一,它在保持计算效率的同时增强了特征复用,使模型在低算力设备上也能表现出色。
2. Neck(特征融合网络)
Neck部分负责多尺度特征融合,YOLOv8采用了 PAN-FPN(Path Aggregation Network with Feature Pyramid Network)的改进版本:
- 延续自顶向下与自底向上双向路径,强化语义信息与定位信息的融合。
- 移除了YOLOv5中使用的SPPF之前的额外卷积层,简化结构。
- 在每一层融合时均使用标准CBS模块,统一设计风格,便于部署与优化。
- 改进的PAN结构增强了对小物体的敏感度,尤其在复杂背景下的表现更优。
3. 检测头(Head)
YOLOv8放弃了以往的解耦头(Decoupled Head)设计,转而采用 Anchor-Free 的检测机制:
- 输出直接预测边界框中心点偏移与宽高,结合任务对齐分配器(Task-Aligned Assigner)实现更精准的正负样本匹配。
- 使用 Distribution Focal Loss(DFL) 对边界框回归进行优化,将回归问题转化为概率分布学习,提升定位精度。
- 分类与回归分支独立设计,但共享部分特征,兼顾速度与精度。
Anchor-Free 设计减少了先验框调参的复杂性,使得模型更具泛化能力,尤其适合不规则形状目标的检测。
Ultralytics 提供了一个简洁高效的Python接口,用于训练、验证和推理YOLOv8模型。安装与使用极为简便:
            
            
              bash
              
              
            
          
          pip install ultralytics1. 推理示例
            
            
              python
              
              
            
          
          from ultralytics import YOLO
# 加载预训练模型
model = YOLO('yolov8n.pt')
# 进行推理
results = model('image.jpg')
# 显示结果
results[0].show()2. 训练自定义数据集
            
            
              python
              
              
            
          
          # 加载模型
model = YOLO('yolov8s.yaml')  # 可从配置文件构建
# 开始训练
model.train(data='coco.yaml', epochs=100, imgsz=640, batch=16)3. 验证与导出
            
            
              python
              
              
            
          
          # 验证模型性能
metrics = model.val()
# 导出为ONNX格式
model.export(format='onnx')Ultralytics 支持自动数据增强、混合精度训练、多GPU并行等高级功能,且文档清晰,极大降低了使用门槛。
下表从多个维度系统对比YOLOv8与前代版本的关键差异:
| 特性 | YOLOv3 | YOLOv5 | YOLOv7 | YOLOv8 | 
|---|---|---|---|---|
| 发布时间 | 2018 | 2020 | 2022 | 2023 | 
| 主干网络 | Darknet-53 | CSPDarknet | E-ELAN / RepBlock | CSPDarknet + C2f | 
| Neck | FPN | PAN-FPN | ELAN-PAN | 改进PAN-FPN | 
| 检测头 | Anchor-Based | Anchor-Based | Anchor-Based | Anchor-Free + DFL | 
| 激活函数 | LeakyReLU | SiLU | SiLU | SiLU | 
| 正样本分配策略 | IoU阈值筛选 | 自动锚框匹配 | 动态标签分配(Dynamic Label Assignment) | 任务对齐分配器(TAL) | 
| 损失函数 | MSE + BCE | CIoU + BCE | SIoU + BCE | DFL + CIoU + v8 BCE | 
| 是否支持分类/分割 | 否 | 否 | 否 | 支持(Ultralytics一体化框架) | 
| 默认输入尺寸 | 416×416 | 640×640 | 640×640 | 640×640 | 
| 训练速度(相对) | 慢 | 快 | 快 | 更快(优化调度器) | 
| 小目标检测能力 | 一般 | 较好 | 好 | 优秀(C2f + TAL) | 
| 模型可扩展性 | 差 | 一般 | 较好 | 强(n/s/m/l/x 多尺度) | 
YOLOv8 的主要创新点总结
- C2f 模块替代 C3:增强特征重用与梯度传播,提升小目标检测性能。
- 全面转向 Anchor-Free:简化设计,提升泛化能力,配合DFL实现更精确的定位。
- 任务对齐样本分配(TAL):根据分类与定位质量动态分配正样本,提升训练效率与最终精度。
- 统一框架支持多任务:Ultralytics 提供对目标检测、实例分割、姿态估计、图像分类的统一接口。
- 更优的训练策略:集成先进的数据增强(如Mosaic、Copy-Paste)、余弦退火学习率等,开箱即用效果优异。
YOLOv8并非一次颠覆性的变革,而是对YOLO系列多年经验的集大成者。它在继承YOLOv5易用性的基础上,吸收了YOLOv7的高效结构设计,并大胆引入Anchor-Free与DFL等前沿技术,实现了速度与精度的新平衡。借助Ultralytics提供的强大工具链,开发者可以快速完成从训练到部署的全流程,真正实现"一键式"AI开发。
无论是工业质检、自动驾驶,还是安防监控,YOLOv8都已成为当前最值得推荐的目标检测解决方案之一。如果你正在寻找一个高性能、易上手、可持续迭代的检测模型,YOLOv8无疑是现阶段的最佳选择。
系统设计
数据集
(1) 数据集基本情况

本系统所使用的垃圾分类数据集是一个已经标注好的目标检测专用数据集,适用于YOLO系列模型(包括YOLOv5、YOLOv7、YOLOv8等)的训练与评估。该数据集共包含 14964张图片,其中:
- 训练集:11971张图片
- 验证集:2993张图片
数据集中不含任何数据增强生成的图像,均为真实采集或公开来源的真实场景图片。数据集共划分为 44个垃圾类别,涵盖四大垃圾分类标准下的细分类型,具体类别如下:
['其他垃圾/一次性快餐盒', '可回收物/书籍纸张', '可回收物/充电宝', '厨余垃圾/剩饭剩菜',
 '可回收物/包', '可回收物/垃圾桶', '可回收物/塑料器皿', '可回收物/塑料玩具',
 '可回收物/塑料衣架', '厨余垃圾/大骨头', '有害垃圾/干电池', '可回收物/快递纸袋',
 '可回收物/插头电线', '可回收物/旧衣服', '可回收物/易拉罐', '可回收物/枕头',
 '厨余垃圾/果皮果肉', '可回收物/毛绒玩具', '其他垃圾/污损塑料', '其他垃圾/污损用纸',
 '可回收物/洗护用品', '其他垃圾/烟蒂', '其他垃圾/牙签', '可回收物/玻璃器皿',
 '可回收物/砧板', '其他垃圾/筷子', '可回收物/纸盒纸箱', '其他垃圾/花盆',
 '厨余垃圾/茶叶渣', '厨余垃圾/菜帮菜叶', '厨余垃圾/蛋壳', '可回收物/调料瓶',
 '有害垃圾/软膏', '有害垃圾/过期药物', '可回收物/酒瓶', '可回收物/金属厨具',
 '可回收物/金属器 皿', '可回收物/金属食品罐', '可回收物/锅', '其他垃圾/陶瓷器皿',
 '可回收物/鞋', '可回收物/食用油桶', '可回收物/饮料瓶', '厨余垃圾/鱼骨']使用YOLOv8对该数据集进行初步测试,实测 mAP50 达到 62.8% (未充分训练),表明该数据集具备良好的可用性和进一步优化潜力。

(2) 数据集处理
在获取原始图像数据后,我们采用 LabelMe 工具对每一张图片中的垃圾物品进行手动标注。LabelMe 是一款开源的图像标注工具,支持多边形、矩形、点等多种标注方式,广泛应用于计算机视觉任务的数据准备阶段。
标注完成后,LabelMe 会生成 .json 格式的标注文件,每个文件记录了对应图片中所有目标的位置信息(坐标点列表)、类别标签及图像元数据。
由于 YOLO 系列模型要求输入的标注格式为 YOLO 格式(即 txt 文件),我们需要将 LabelMe 生成的 JSON 文件转换为目标检测所需的格式。YOLO 目标检测数据集的标准格式要求如下:
- 
每张图片对应一个同名的 .txt文本文件;
- 
每行代表一个检测目标,格式为: <class_id> <x_center> <y_center> <width> <height>其中: - class_id:类别索引(从0开始)
- x_center,- y_center:边界框中心点相对于图像宽度和高度的归一化坐标(范围0~1)
- width,- height:边界框宽高相对于图像宽高的归一化值(范围0~1)
 
通过编写脚本批量处理所有 JSON 文件,将其转换为符合 YOLO 要求的 TXT 标注文件,并按照训练集与验证集的比例组织目录结构,最终形成可用于 YOLOv8 训练的标准数据集。
模型训练
安装 Ultralytics
首先需要安装 Ultralytics 库以支持 YOLOv8 模型的训练与推理:
            
            
              bash
              
              
            
          
          pip install ultralytics确保 Python 环境中已正确安装 PyTorch 和相关依赖项。
训练代码编写
创建训练脚本 train.py,内容如下:
            
            
              python
              
              
            
          
          from ultralytics import YOLO
# 加载预训练模型(可选:yolov8n, yolov8s, yolov8m, yolov8l, yolov8x)
model = YOLO('yolov8s.pt')
# 开始训练
results = model.train(
    data='data/garbage_data.yaml',    # 数据集配置文件路径
    epochs=100,                       # 训练轮数
    imgsz=640,                        # 输入图像尺寸
    batch=16,                         # 批次大小
    name='garbage_yolov8s_exp'       # 实验名称,保存结果目录名
)
数据集配置文件
创建 garbage_data.yaml 文件,定义数据集路径与类别信息:
            
            
              yaml
              
              
            
          
          train: ./dataset/images/train
val: ./dataset/images/val
nc: 44  # 类别数量
names: ['其他垃圾/一次性快餐盒', '可回收物/书籍纸张', ..., '厨余垃圾/鱼骨']  # 44个类别名称超参数设置说明
Ultralytics 提供丰富的超参数供用户调节,以下为关键超参数及其含义:
| 超参数 | 默认值 | 含义说明 | 
|---|---|---|
| epochs | 100 | 总训练轮数,控制模型学习深度 | 
| batch | 16 | 每批次送入网络的图像数量,影响显存占用与梯度稳定性 | 
| imgsz | 640 | 输入图像尺寸,越大细节越丰富但计算量增加 | 
| lr0 | 0.01 | 初始学习率,控制权重更新步长 | 
| lrf | 0.01 | 最终学习率与初始学习率的比率(余弦退火) | 
| momentum | 0.937 | SGD动量系数,加速收敛并抑制震荡 | 
| weight_decay | 0.0005 | L2正则化系数,防止过拟合 | 
| warmup_epochs | 3.0 | 学习率预热周期,避免初期剧烈波动 | 
| warmup_momentum | 0.8 | 预热阶段动量值 | 
| box | 7.5 | 边界框回归损失权重 | 
| cls | 0.5 | 分类损失权重 | 
| dfl | 1.5 | 分布式焦点损失(DFL)权重 | 
| fl_gamma | 0.0 | Focal Loss gamma 参数(默认关闭) | 
| hsv_h | 0.015 | 图像增强:色调扰动幅度 | 
| hsv_s | 0.7 | 图像增强:饱和度扰动幅度 | 
| hsv_v | 0.4 | 图像增强:明度扰动幅度 | 
| degrees | 0.0 | 图像增强:随机旋转角度范围 | 
| translate | 0.1 | 图像增强:平移比例 | 
| scale | 0.5 | 图像增强:缩放比例 | 
| shear | 0.0 | 图像增强:剪切变换角度 | 
| perspective | 0.0 | 图像增强:透视变换系数 | 
| flipud | 0.0 | 图像增强:上下翻转概率 | 
| fliplr | 0.5 | 图像增强:左右翻转概率 | 
| mosaic | 1.0 | Mosaic数据增强使用概率 | 
| mixup | 0.0 | MixUp增强概率 | 
| copy_paste | 0.0 | Copy-Paste增强概率 | 
这些参数可根据硬件条件和实际效果进行微调,以获得最佳性能。
训练后评估
为什么需要对模型进行评价?
模型训练完成后,必须对其进行客观评估,以判断其在未知数据上的泛化能力和实际应用价值。仅凭训练损失下降无法反映真实性能,因此需要通过专门的评估指标来量化模型的表现。

PR曲线与mAP曲线介绍
- 
PR曲线(Precision-Recall Curve): - 精确率(Precision) :预测为正类的样本中,实际为正类的比例。
 P = T P T P + F P P = \frac{TP}{TP + FP} P=TP+FPTP
- 召回率(Recall) :实际为正类的样本中,被正确预测为正类的比例。
 R = T P T P + F N R = \frac{TP}{TP + FN} R=TP+FNTP
- PR曲线是以召回率为横轴、精确率为纵轴绘制的曲线,曲线下面积即为 AP(Average Precision),反映某一类别检测性能。
 
- 精确率(Precision) :预测为正类的样本中,实际为正类的比例。
- 
mAP(mean Average Precision): - 所有类别 AP 的平均值,是目标检测中最核心的综合性能指标。
- mAP@0.5 表示 IoU 阈值为 0.5 时的平均精度。
- mAP@0.5:0.95 表示在 IoU 从 0.5 到 0.95(步长0.05)多个阈值下的平均 mAP,更能体现模型鲁棒性。
 
数学公式总结:
IoU = 预测框 ∩ 真实框 预测框 ∪ 真实框 \text{IoU} = \frac{\text{预测框} \cap \text{真实框}}{\text{预测框} \cup \text{真实框}} IoU=预测框∪真实框预测框∩真实框
当 IoU ≥ 阈值(如0.5)时,视为一次正确检测(True Positive)。基于此统计 TP、FP、FN,进而计算 Precision 和 Recall,并积分得到 AP。
Ultralytics 在 model.val() 中自动输出各项评估指标,包括:
- Box: mAP@0.5, mAP@0.5:0.95
- Precision,- Recall
- 各类别 AP 值
这些指标帮助我们全面了解模型性能瓶颈,指导后续优化方向。
模型推理
图片推理代码
使用训练好的模型对单张图片进行推理:
            
            
              python
              
              
            
          
          from ultralytics import YOLO
# 加载训练好的模型
model = YOLO('runs/detect/garbage_yolov8s_exp/weights/best.pt')
# 对图片进行推理
results = model('test.jpg')
# 显示结果
results[0].show()
# 保存结果
results[0].save(filename='result.jpg')
视频推理代码
对视频文件进行逐帧检测并生成带标注的结果视频:
            
            
              python
              
              
            
          
          import cv2
from ultralytics import YOLO
# 加载模型
model = YOLO('runs/detect/garbage_yolov8s_exp/weights/best.pt')
# 打开视频
cap = cv2.VideoCapture('input_video.mp4')
# 获取视频属性
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 创建视频写入对象
out = cv2.VideoWriter('output_video.mp4', 
                      cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height))
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    # 模型推理
    results = model(frame, conf=0.25, iou=0.45)
    
    # 绘制结果
    annotated_frame = results[0].plot()
    
    # 写入视频
    out.write(annotated_frame)
cap.release()
out.release()
cv2.destroyAllWindows()上述代码实现了完整的视频检测流程,可用于监控分析、智能回收站等场景。
系统UI设计
Layui框架优点
Layui 是一款采用自身模块规范编写的前端UI框架,其主要优势包括:
- 轻量级:体积小巧,加载速度快,适合嵌入式系统或低带宽环境。
- 模块化设计:按需加载组件(如表格、表单、弹窗等),提升性能。
- 美观简洁:提供现代化的视觉风格,无需额外CSS即可构建专业界面。
- 兼容性强:支持主流浏览器,适配PC与移动端。
- 易于集成:可通过 CDN 或本地引用快速接入项目,与 Flask 模板引擎无缝协作。
结合 Flask 的 Jinja2 模板机制,Layui 可轻松实现前后端分离式开发,提升开发效率。
基于 Flask + Layui 的系统UI搭建

系统前端页面基于 Layui 构建,主要包括以下几个模块:
- 
登录注册页 ( login.html,register.html)使用 Layui 表单组件实现用户名密码输入、校验与提交。 
- 
主界面导航栏 ( index.html)提供菜单跳转至各功能页面,如图片检测、视频检测、摄像头识别、用户管理等。 
- 
图片检测页面 ( image.html)包含上传按钮、原图与检测结果对比显示区域、检测结果表格展示。 
- 
视频检测页面 ( video.html)支持视频上传与实时流播放,使用 <img>标签配合 MJPEG 流实现动态画面传输。
- 
摄像头识别页面 ( webcam.html)调用本地摄像头并通过 WebSocket 实时推送检测结果。 
- 
历史记录查询页 ( image_info.html,video_info.html,webcam_info.html)使用 Layui Table 组件展示数据库中的检测记录,并支持删除、查看详情等功能。 
- 
用户管理页面 ( user.html)管理员可查看、添加、修改、删除用户账号,权限分级明确。 
- 
模型参数配置页 ( model.html)提供滑动条调节置信度(conf)和IOU阈值,实时生效。 
所有页面均通过 Flask 的 render_template() 函数渲染,静态资源(CSS、JS)存放于 static/ 目录下,由 Nginx 或 Flask 内置服务器提供服务。
系统功能
根据提供的源码分析,本系统具备以下核心功能:
- 
用户认证系统 - 支持用户注册、登录
- 权限分级:普通用户与管理员
- 基于 SQLite 存储用户信息
 
- 
图片检测功能 - 支持 JPG/PNG/JPEG/BMP 格式图片上传
- 实时显示原始图像与检测结果对比
- 展示每个检测目标的类别、置信度、边界框坐标
- 自动记录检测历史(含时间戳、用户、标签等)
 
- 
批量图片检测 - 支持 ZIP 压缩包上传
- 后台异步处理多图识别任务
- 提供进度条反馈
- 完成后打包下载识别结果
 
- 
视频检测功能 - 支持 MP4/AVI/MOV 等常见视频格式上传
- 实时流式返回带标注的检测视频
- 显示 FPS、检测耗时等性能指标
- 支持检测结果视频回放与下载
 
- 
摄像头实时识别 - 调用本地摄像头进行实时检测
- 支持开启/关闭识别功能
- 检测结果实时推送到前端(Socket.IO)
- 可保存识别过程为视频文件
 
- 
检测历史管理 - 所有检测记录持久化存储至 SQLite 数据库
- 支持按用户、时间排序查询
- 管理员可查看全部记录,普通用户仅限个人数据
- 支持记录删除操作
 
- 
模型参数动态调整 - 提供 Web 界面调节 conf(置信度)与iou(交并比)阈值
- 修改后立即生效,无需重启服务
- 使用滑动条控件提升用户体验
 
- 提供 Web 界面调节 
- 
报警提示机制 - 当检测到特定危险品类(如"有害垃圾")时,前端弹出告警提示
- 可配置敏感类别列表(ALARM_CLASSES)
 
- 
响应式布局 - 页面适配不同屏幕尺寸
- 使用 Layui 网格系统实现居中对齐与响应式排版
 
- 
安全机制 - 所有接口进行身份验证(sessionStorage)
- 关键操作需二次确认(如删除)
- 文件上传限制格式与大小(如ZIP、100MB以内)
 
总结
本系统成功构建了一套基于YOLOv8、Flask与Layui的智能垃圾分类检测平台,实现了从数据处理、模型训练、性能评估到Web可视化部署的完整闭环。系统充分利用YOLOv8在目标检测领域的先进性,结合轻量级后端框架Flask与简洁高效的前端UI库Layui,打造了一个功能完备、交互友好、易于维护的垃圾分类智能辅助系统。
在技术层面,系统实现了多模态输入支持(图片、视频、摄像头)、批量处理能力、实时反馈机制以及用户权限管理体系,具备较强的实用性与扩展潜力。同时,通过标准化的数据集构建流程和可调优的模型训练策略,为后续性能提升奠定了坚实基础。
在社会价值方面,该系统不仅能够有效提升垃圾分类的准确率与效率,降低人工成本,还可广泛应用于社区宣传、校园教育、智能垃圾桶联动等场景,助力智慧城市建设与绿色可持续发展目标的实现。
未来可进一步优化方向包括:引入更大数据集进行充分训练以提升mAP;集成语音播报功能增强无障碍体验;对接物联网设备实现自动分拣;探索模型轻量化以便部署至边缘设备。总体而言,该项目为AI赋能环保事业提供了切实可行的技术路径与示范案例。

另外,限于本篇文章的篇幅,无法一一细致讲解系统原理、项目代码、模型训练等细节,需要数据集、整套项目源码、训练代码的小伙伴可以从下面的链接中下载:
垃圾分类检测 基于YOLO8的垃圾检测 基于YOLO8、Flask的垃圾分类系统