YOLOv5与K-means实现交通锥智能检测与颜色识别

YOLOv5与K-means实现交通锥智能检测与颜色识别
1. 项目概述交通锥智能检测与颜色识别系统在道路施工、临时交通管制和自动驾驶测试场景中交通锥俗称雪糕筒是最常见的安全警示设施。传统基于规则算法的检测方案往往难以应对复杂光照、遮挡和视角变化等实际挑战。本项目构建了一个融合YOLOv5目标检测与K-means颜色聚类的复合系统实现了交通锥的精准定位和颜色分类双重功能。系统核心能力包括实时检测图像/视频中的交通锥位置bounding box输出自动识别锥筒主色调红/黄/绿/蓝四色分类处理动态场景下的多目标检测最高支持30FPS实时处理实测表明在NVIDIA Tesla T4显卡环境下系统对720P视频流的处理延迟可控制在35ms以内满足实时性要求。对于非常规颜色如橙色、紫色等会自动归类为未知类别。2. 技术方案设计与选型2.1 目标检测模型选型对比在方案设计阶段我们对比了三种主流检测框架模型参数量(M)mAP0.5FPS(T4)适用性分析Faster R-CNN13778.212精度高但速度慢SSD30026.375.842速度优但小目标检测差YOLOv5s7.276.583速度与精度最佳平衡最终选择YOLOv5s的核心考量计算效率7.2M参数量适合边缘设备部署多尺度检测通过FPNPAN结构增强小目标检测工程化支持完善的PyTorch生态和导出部署能力2.2 颜色识别方案设计传统HSV阈值分割方法在可变光照条件下表现不稳定。我们采用K-means聚类方案的优势在于自适应提取主色调不受绝对色值影响可扩展性强新增颜色只需增加聚类中心计算复杂度可控聚类像素数1000颜色空间选择对比实验# RGB空间 vs LAB空间聚类效果对比 rgb_accuracy 82.3% # 受光照影响大 lab_accuracy 91.7% # 更好的感知均匀性3. 数据集构建与增强策略3.1 数据采集难点长尾分布红色锥筒占比超60%需平衡采样多视角需求俯拍/平视/斜视角各占1/3环境多样性包含晴天/阴天/夜间/逆光场景3.2 标注规范设计采用Roboflow标注时遵循以下标准Bounding box完全包裹锥体底部橡胶座遮挡超过50%的实例标记为difficult颜色标签与位置标签独立存储数据增强策略augmentation [ RandomRotate(-15,15), # 小角度旋转 RandomExposure(0.8,1.2), RandomNoise(0,0.02), Cutout(max_holes3) # 模拟局部遮挡 ]4. 模型训练关键参数4.1 YOLOv5s训练配置# hyp.scratch-low.yaml 修改项 lr0: 0.0032 # 初始学习率 lrf: 0.12 # 最终学习率比率 warmup_epochs: 3.0 mixup: 0.1 # 小数据集推荐0.05-0.24.2 关键训练技巧冻结训练前50epoch冻结backbone自动锚框--autoanchor参数优化先验框早停策略patience30max_epochs300训练过程监控指标5. 颜色识别模块实现5.1 K-means优化方案def dominant_color(img): # 转换LAB空间 lab cv2.cvtColor(img, cv2.COLOR_BGR2LAB) # 仅取锥体上部60%区域避免地面干扰 h lab.shape[0] roi lab[:int(h*0.6),:,:] # K-means聚类 pixels roi.reshape(-1,3).astype(np.float32) criteria (cv2.TERM_CRITERIA_EPS cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) _, labels, centers cv2.kmeans( pixels, K2, bestLabelsNone, criteriacriteria, attempts3, flagscv2.KMEANS_RANDOM_CENTERS) # 返回最大簇中心 dominant centers[np.argmax(np.bincount(labels.flatten()))] return lab2color(dominant) # 转换回RGB分类5.2 颜色分类逻辑建立LAB空间颜色词典color_ranges { red: ([20, 150, 120], [40, 190, 150]), yellow:([80, 120, 150], [90, 140, 180]), green: ([70, 80, 80], [90, 120, 120]), blue: ([30, 120, 80], [50, 150, 120]) }6. 系统集成与部署6.1 处理流水线架构graph TD A[视频输入] -- B[帧提取] B -- C[YOLOv5检测] C -- D[ROI裁剪] D -- E[K-means聚类] E -- F[颜色匹配] F -- G[结果可视化]6.2 性能优化技巧ROI预处理对检测框扩大10%再裁剪异步处理检测与颜色识别并行化缓存机制连续帧相同ID保持颜色结果实测性能数据分辨率硬件平台平均延迟显存占用640x480T428ms1.2GB1280x720Xavier NX65ms2.3GB7. 常见问题与解决方案7.1 检测漏检问题典型场景密集排列的锥筒解决方案调整NMS参数--iou-thres 0.45 → 0.3添加小目标检测层修改model.yaml的detect层7.2 颜色误识别错误案例黄色锥筒被识别为绿色优化方法动态白平衡使用grayworld算法预处理空间加权中心区域像素权重提高30%7.3 工程化问题内存泄漏OpenCV视频流未释放修复方案# 正确释放资源 cap.release() cv2.destroyAllWindows() for _ in range(5): # 确保GPU缓存清空 torch.cuda.empty_cache()8. 项目扩展方向8.1 多模态融合结合毫米波雷达数据提升检测距离加入红外特征增强夜间识别8.2 边缘部署优化TensorRT加速FP16量化后速度提升2.3倍ONNX运行时ARM平台内存占用降低40%8.3 功能扩展锥筒姿态估计用于判断是否倾倒基于颜色的语义理解红色危险区实际部署中发现在雨天场景下反光锥筒的识别准确率会下降约15%。建议增加数据增强时的水滴噪声模拟。