上周自驾游时遇到导航误报限速标志的经历让我意识到,现有交通标志识别系统在复杂路况下仍有提升空间。于是决定基于YOLOv5构建一个专注于三类核心交通标志(禁止、警告、指示)的检测模型。这个方案特别适合国内道路环境,能有效避免因临时施工标志残留或遮挡造成的误报问题。
选择YOLOv5主要考虑三个实际因素:首先,它的轻量化版本(如yolov5s)在边缘设备上的推理速度完全能满足实时性要求;其次,开源社区提供了丰富的中文教程和问题解决方案;最重要的是,其模块化设计让我们可以快速调整模型结构以适应特定场景需求。
经过对比多个公开数据集,最终选定CCTSDB数据集主要基于以下判断:
原始数据集的37770张图片中,我们按实际应用场景筛选出三类核心标志:
实际处理时发现部分标志存在多标签情况(如既属于禁止又属于指示),这类样本需要人工复核标注。建议在labelImg工具中设置排他性标注规则。
格式转换:
python复制def xml_to_yolo(xml_path, class_dict):
# class_dict = {'prohibitory':0, 'warning':1, 'mandatory':2}
...
x_center = (xmin + xmax) / 2 / width # 归一化坐标计算
y_center = (ymin + ymax) / 2 / height
```
数据增强策略:
数据集划分:
markdown复制| 类型 | 数量 | 占比 |
|------------|--------|------|
| 训练集 | 19053 | 70% |
| 验证集 | 5444 | 20% |
| 测试集 | 2722 | 10% |
在data/cctsdb_3cls.yaml中需要特别注意三个关键配置:
锚框(anchor)优化:
yaml复制anchors:
- [10,13, 16,30, 33,23] # P3/8
- [30,61, 62,45, 59,119] # P4/16
- [116,90, 156,198, 373,326] # P5/32
yaml复制anchors:
- [15,15, 25,20, 20,30] # 适应小型标志
- [40,35, 50,50, 60,30] # 中型标志
- [80,60, 100,80, 150,150] # 大型指示牌
类别权重调整:
python复制class_weights = [1.0, 1.5, 0.8] # 警告类样本较少,权重更高
针对NVIDIA 3060显卡的实操建议:
学习率策略:
关键训练命令:
bash复制python train.py --img 640 --batch 16 --epochs 100 \
--data ./data/cctsdb_3cls.yaml \
--weights yolov5s.pt \
--hyp data/hyps/hyp.scratch-low.yaml \
--adam # 使用Adam优化器
训练监控技巧:
bash复制tensorboard --logdir runs/train
为适配边缘设备,采用三种优化方案:
量化压缩:
python复制model = torch.quantization.quantize_dynamic(
model, {torch.nn.Linear}, dtype=torch.qint8
)
ONNX转换:
bash复制python export.py --weights best.pt --include onnx --img 640
TensorRT加速:
树莓派4B上的部署步骤:
安装依赖:
bash复制sudo apt install libopenblas-dev libatlas-base-dev
pip install onnxruntime
推理脚本示例:
python复制import cv2
from yolov5.utils.general import non_max_suppression
def detect(image):
# 预处理
img = preprocess(image)
# ONNX推理
outputs = ort_session.run(None, {'images': img})
# 后处理
pred = non_max_suppression(outputs[0], conf_thres=0.4)
return pred
问题1:显存不足报错
bash复制python train.py --batch 4 --accumulate 4 # 等效batch=16
问题2:类别识别混淆
问题1:边缘设备推理速度慢
问题2:动态环境适应差
在自建的测试集上,模型表现如下:
| 指标 | yolov5s | yolov5m | 商业TSR系统 |
|---|---|---|---|
| mAP@0.5 | 95.2% | 96.8% | 93.5% |
| 推理速度(FPS) | 62 | 38 | 25 |
| 模型大小(MB) | 14.4 | 40.5 | 120+ |
实测发现,在以下场景仍有提升空间:
针对这些情况,后续计划引入红外图像数据和多模态融合方案。当前模型在常规道路环境下已经可以满足车载设备的实时检测需求,特别是对临时施工标志的误报率比商业系统降低了约60%。