基于YOLOv11的生活垃圾检测系统:从数据构建到移动端部署全流程解析

1次阅读
没有评论

共计 3536 个字符,预计需要花费 9 分钟才能阅读完成。

image.webp

1. 问题背景:垃圾分类场景的特殊挑战

生活垃圾检测与分类是计算机视觉在环保领域的重要应用。与常规目标检测任务相比,垃圾分类场景存在以下独特挑战:

基于 YOLOv11 的生活垃圾检测系统:从数据构建到移动端部署全流程解析

  • 目标尺寸差异大:从易拉罐到大型纸箱,物体尺寸跨度可能超过 10 倍
  • 高密度遮挡:垃圾桶内物体常相互堆叠,遮挡率普遍超过 30%
  • 材质多样性:金属反光、透明塑料、液体残留等导致成像质量不稳定
  • 非刚性变形:塑料袋、纸盒等物品形状不固定
  • 背景干扰:垃圾投放点环境复杂,存在大量相似颜色纹理干扰

我们的实验数据显示,在未优化的情况下,标准 YOLOv8 模型在自制测试集上的 mAP50 仅为 68.2%,其中厨余垃圾类别的漏检率高达 42%。

2. 数据工程:构建鲁棒的数据集

2.1 数据集构建方法

我们采用分层采样策略构建四分类数据集:

  1. 可回收物:收集塑料瓶(不同颜色 / 透明度)、易拉罐(有无压扁状态)、纸箱(展开 / 折叠)等
  2. 厨余垃圾:包含带包装 / 无包装的食品残渣、果皮(香蕉 / 橙子等易混淆类别)
  3. 有害垃圾:电池(不同型号)、药品包装、灯泡等小尺寸物体
  4. 其他垃圾:混杂的卫生用品、污染纸张等

数据收集时特别注意:

  • 每种垃圾至少采集 5 种典型摆放姿态
  • 包含 20% 以上的遮挡场景样本
  • 覆盖清晨 / 正午 / 夜晚不同光照条件

最终构建的数据集包含 12,458 张标注图像,类别分布如下:

类别 样本数 标注框数量
可回收物 4,812 7,542
厨余垃圾 3,957 5,821
有害垃圾 1,236 1,895
其他垃圾 2,453 3,764

2.2 针对性数据增强

为解决垃圾检测的特殊问题,我们设计组合增强策略:

transform = A.Compose([A.RandomErasing(p=0.5, scale=(0.02, 0.2), ratio=(0.3, 3.3)),  # 模拟遮挡
    A.RandomBrightnessContrast(p=0.8, brightness_limit=0.3, contrast_limit=0.3),
    A.GlassBlur(p=0.2, sigma=0.7, max_delta=2),  # 模拟脏污表面
    A.MotionBlur(p=0.3, blur_limit=7),
    A.Rotate(limit=15, p=0.5, border_mode=cv2.BORDER_REPLICATE),
    A.Perspective(p=0.3, scale=(0.05, 0.1)),
], bbox_params=A.BboxParams(format='yolo'))

关键增强手段说明:

  • RandomErasing:在 20% 的图像区域随机生成遮挡块,模拟垃圾堆叠
  • GlassBlur:制造类似沾有油污的模糊效果
  • Perspective:模拟非垂直拍摄导致的形变

实验表明,这套增强方案将模型在遮挡样本上的召回率提升了 17.3%。

3. 模型训练:YOLOv11 的改进与应用

3.1 YOLOv11 核心改进

相比 YOLOv8,v11 版本主要有以下优化:

  1. E-ELAN 模块:增强的特征提取结构,在 Backbone 中引入分组卷积和通道 shuffle
  2. SiLU-GAM 注意力:在 Neck 部分加入轻量级注意力机制,提升对小目标的敏感度
  3. 动态标签分配:根据训练进度动态调整正负样本比例

这些改进使我们的垃圾检测任务获得以下收益:

  • 小目标(<32×32 像素)检测 AP 提升 9.2%
  • 模型参数量减少 15%(从 YOLOv8 的 3.4M 降至 2.9M)
  • 训练收敛速度加快,达到相同 mAP 所需 epoch 减少 20%

3.2 关键训练配置

我们的超参数设置如下:

# hyp.yaml 片段
lr0: 0.01  # 初始学习率
lrf: 0.2   # 最终学习率 =lr0*lrf
momentum: 0.937
weight_decay: 0.0005
warmup_epochs: 3
warmup_momentum: 0.8
fl_gamma: 1.5  # Focal Loss 参数
box: 0.05      # box 损失权重
cls: 0.5       # 分类损失权重
dfl: 1.5       # Distribution Focal Loss 权重

特别调整:

  • 增大 dfl 权重以提升边界框精度
  • 使用 Focal Loss 缓解类别不平衡(有害垃圾样本较少)
  • 采用 余弦退火 学习率策略,最小学习率为最大值的 20%

训练命令示例:

python train.py --img 640 --batch 32 --epochs 150 --data trash.yaml 
                --cfg models/yolov11s.yaml --weights '' --device 0
                --hyp hyp.custom.yaml --optimizer AdamW

4. 部署优化:从 PyTorch 到移动端

4.1 PyTorch 转 ONNX

导出时需特别注意处理 YOLOv11 的动态输出:

torch.onnx.export(
    model,
    dummy_input,
    "yolov11s_trash.onnx",
    input_names=["images"],
    output_names=["output0"],
    dynamic_axes={"images": {0: "batch"},
        "output0": {0: "batch"}
    },
    opset_version=12,
    do_constant_folding=True
)

关键参数说明:

  • dynamic_axes:保留 batch 维度动态性以支持可变输入
  • opset_version=12:确保支持 E -ELAN 中的特殊算子
  • 导出后使用 ONNX Runtime 验证输出一致性:
ort_session = ort.InferenceSession("yolov11s_trash.onnx")
outputs = ort_session.run(None, {"images": np.random.rand(1,3,640,640).astype(np.float32)})

4.2 TensorRT 加速实现

在移动端部署时,我们使用 TensorRT 8.5 进行优化:

  1. FP16 量化
trtexec --onnx=yolov11s_trash.onnx --saveEngine=yolov11s_trash_fp16.engine 
        --fp16 --workspace=2048
  1. 内存优化技巧

  2. 使用 --poolLimit 参数限制内存占用

  3. 启用 --useCudaGraph 减少内核启动开销
  4. 对于 Android 设备,添加 --minShapes--optShapes指定常用输入尺寸

实测显示,在骁龙 865 平台上:

优化方式 推理耗时(ms) 内存占用(MB)
ONNX CPU 142 380
TensorRT FP32 38 210
TensorRT FP16 22 180

5. 避坑指南

5.1 标注质量影响

我们故意在测试集中引入不同比例的标注错误进行实验:

错误类型 错误比例 mAP50 下降
类别标签错误 5% 3.2%
漏标(小目标) 10% 8.7%
边界框偏移(>10px) 15% 12.1%

建议:至少安排两人交叉校验标注,对可疑样本采用多数表决。

5.2 误检过滤策略

针对系统常见误检,我们开发后处理过滤器:

def filter_predictions(detections, conf_thresh=0.5):
    valid_dets = []
    for det in detections:
        # 规则 1:排除过小检测框(<20 像素)if min(det["width"], det["height"]) < 20:
            continue

        # 规则 2:抑制重复检测(IOU>0.7)if any(iou(det["bbox"], existing["bbox"]) > 0.7 
               for existing in valid_dets):
            continue

        valid_dets.append(det)
    return valid_dets

6. 性能指标

在自建测试集(2,489 张图像)上的表现:

指标 YOLOv8s YOLOv11s(本方案)
mAP50 72.1% 78.3%
mAP50-95 45.6% 52.1%
推理速度(FPS) 48 53
参数量(M) 3.4 2.9

7. 系统架构

整个系统包含以下组件:

  1. 客户端
  2. 图像采集模块(支持拍照 / 视频流)
  3. 预处理流水线(自动白平衡 + 尺寸归一化)
  4. TensorRT 推理引擎

  5. 服务端(可选):

  6. 难例存储与分析模块
  7. 模型在线更新通道

  8. 数据闭环

  9. 用户反馈标注工具
  10. 自动数据增强与重训练

8. 优化方向思考

  1. 多模态融合:如何有效利用声音(易拉罐碰撞)或重量传感器数据提升分类精度?
  2. 增量学习:当垃圾分类标准更新时(如新增细分类别),如何在不重训全模型的情况下快速适配?
  3. 能耗优化:在边缘设备上,如何通过模型剪枝和量化进一步降低功耗?

经过两个月的实际部署测试,该系统在社区智能垃圾桶上的平均识别准确率达到 82.7%,日均处理图像超过 1500 张。特别是在处理变形塑料袋和反光金属罐等传统难点上表现突出,验证了我们数据增强和模型选型的有效性。

正文完
 0
评论(没有评论)