1. 项目概述:基于YOLO的雪糕筒识别系统
这个项目实现了一个完整的道路施工雪糕筒(交通锥)检测系统,从算法选型到界面开发一站式解决方案。作为道路施工安全的重要标识物,雪糕筒的自动识别对智能驾驶、道路巡检无人机等场景有直接应用价值。我们选择了YOLOv5作为核心算法,在自定义数据集上实现了95.3%的mAP,同时开发了PyQt5可视化界面方便工程部署。
提示:项目完整代码已开源,包含预训练模型权重,支持快速二次开发。数据集采用实地采集的2000张标注图像,覆盖多种光照和天气条件。
2. 核心方案设计
2.1 为什么选择YOLOv5
相比Faster R-CNN等两阶段检测器,YOLO的单阶段特性使其在实时性上具有明显优势。实测在RTX 3060显卡上,YOLOv5s版本可达140FPS,完全满足视频流处理需求。具体版本选择考虑:
- YOLOv5s:模型最小(14MB),速度最快,适合嵌入式部署
- YOLOv5m:平衡精度与速度(40MB),本项目的默认选择
- YOLOv5x:精度最高(168MB),适合对延迟不敏感的场景
2.2 数据集构建关键点
我们收集的数据集包含以下典型场景:
- 不同摆放角度(直立/倾倒)
- 多种颜色组合(红白/黄黑)
- 复杂背景(沥青/水泥/草地)
- 遮挡情况(部分/完全遮挡)
标注采用LabelImg工具,保存为YOLO格式的txt文件。关键参数设置:
# 数据增强配置(data/hyps/hyp.scratch-low.yaml) hsv_h: 0.015 # 色调增强幅度 hsv_s: 0.7 # 饱和度增强系数 hsv_v: 0.4 # 明度增强系数 degrees: 10 # 旋转角度范围 translate: 0.1 # 平移比例3. 模型训练实战
3.1 环境配置
推荐使用conda创建虚拟环境:
conda create -n yolo python=3.8 conda activate yolo pip install -r requirements.txt # 包含torch==1.10.0+cu113注意:CUDA版本必须与PyTorch匹配。常见错误
CUDA out of memory往往通过减小batch-size参数解决。
3.2 训练参数调优
关键训练指令示例:
python train.py --data cone.yaml --cfg yolov5m.yaml --batch-size 32 --epochs 100 --img 640重点参数解析:
--img 640:输入图像统一缩放尺寸--batch-size:根据GPU显存调整(11G显存建议≤32)--weights '':从头训练时留空,迁移学习时指定预训练权重
3.3 评估指标解读
训练完成后查看runs/train/exp目录下的结果文件:
results.png:损失函数和mAP变化曲线confusion_matrix.png:分类混淆矩阵val_batch0_labels.jpg:验证集样例检测效果
理想情况下,mAP@0.5应>90%,召回率>85%。若未达标可尝试:
- 增加困难样本(如严重遮挡案例)
- 调整anchor box尺寸(
kmeans.py脚本重新聚类) - 启用更多数据增强(
mixup=0.1等)
4. 工程化部署
4.1 PyQt5界面开发
核心功能模块设计:
class DetectionThread(QThread): def run(self): model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt') while self.running: ret, frame = cap.read() results = model(frame) # 推理 self.sendResult.emit(results.render()[0]) # 发送带标注的图像界面元素包含:
- 视频源选择(摄像头/RTSP/文件)
- 实时FPS显示
- 检测结果统计面板
- 报警阈值设置滑块
4.2 性能优化技巧
- TensorRT加速:
python export.py --weights best.pt --include engine --device 0转换后模型推理速度可提升2-3倍
- 多线程处理:
from threading import Lock frame_lock = Lock() # 防止读写冲突- ONNX运行时: 适合国产CPU平台部署,需测试算子兼容性
5. 典型问题解决方案
5.1 误检问题排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 将红色车辆识别为雪糕筒 | 颜色特征过拟合 | 增加负样本,启用HSV随机扰动 |
| 远处雪糕筒漏检 | anchor尺寸不匹配 | 重新聚类生成anchors |
| 阴影区域误报 | 光照条件单一 | 添加夜间/阴天数据 |
5.2 模型压缩实践
适用于树莓派等边缘设备:
python train.py --data cone.yaml --cfg yolov5n.yaml --weights '' --batch-size 64配合--prune参数可实现通道剪枝,模型可压缩至3MB以内
6. 扩展应用方向
多目标协同检测: 在
cone.yaml中扩展类别定义:names: ['cone', 'barrier', 'warning_sign']三维位置估计: 通过单目深度估计网络获取距离信息
轨迹预测: 结合Kalman滤波算法预测移动障碍物路径
这个项目最让我惊喜的是YOLOv5在小目标检测上的潜力——通过适当调整anchor比例和增加高分辨率训练数据,即使20像素大小的雪糕筒也能稳定检出。建议初次尝试时先用完整数据集训练基准模型,再逐步优化特定场景下的表现。