YOLOv5在钢轨缺陷检测中的应用与实践

📅 2026/7/26 12:00:32
YOLOv5在钢轨缺陷检测中的应用与实践
1. 项目背景与核心价值钢轨作为轨道交通系统的核心部件其表面质量直接关系到列车运行安全。传统人工巡检方式存在效率低、漏检率高、受环境影响大等问题。这个项目采用YOLOv5目标检测算法实现了钢轨表面缺陷的自动化检测包含完整数据集和预训练模型为轨道交通运维领域提供了开箱即用的解决方案。我在工业视觉检测领域有五年实战经验曾参与多个轨道检测项目。相比传统方法基于深度学习的检测方案具有三大优势一是检测速度可达200FPS能满足实时检测需求二是对裂纹、剥落等典型缺陷的识别准确率超过90%三是模型泛化能力强适应不同光照和天气条件。2. 技术方案设计解析2.1 算法选型依据选择YOLOv5s作为基础模型主要基于三点考量速度与精度的平衡在Tesla T4显卡上YOLOv5s的推理速度可达140FPSmAP0.5达到0.89模型轻量化仅14MB的模型大小适合部署在边缘设备易用性PyTorch框架的生态完善便于二次开发实际测试中发现YOLOv5m版本在保持较快速度(80FPS)的同时对细小裂纹的检测效果更优2.2 数据集构建要点我们收集了超过5000张钢轨表面图像涵盖以下关键特征光照变化包含白天、夜间、隧道等不同光照条件缺陷类型裂纹横向/纵向、剥落、压痕、锈蚀等6类缺陷数据增强采用Mosaic增强和HSV色彩空间扰动提升模型鲁棒性数据集标注采用LabelImg工具保存为YOLO格式的txt文件。关键标注规范包括裂纹类缺陷标注整个裂纹区域而非单条线剥落缺陷包含边缘5像素的过渡区域最小标注尺寸缺陷长宽均大于15像素3. 模型训练全流程3.1 环境配置推荐使用以下环境配置# 基于Python 3.8 pip install torch1.8.1cu111 torchvision0.9.1cu111 -f https://download.pytorch.org/whl/torch_stable.html pip install -r requirements.txt # YOLOv5官方需求文件3.2 关键训练参数在data/rail_defect.yaml中配置数据集路径train: ../dataset/train/images val: ../dataset/val/images nc: 6 # 缺陷类别数 names: [crack, spalling, dent, corrosion, joint, pitting]启动训练的命令行参数示例python train.py --img 640 --batch 16 --epochs 300 --data data/rail_defect.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt3.3 训练过程监控使用TensorBoard监控关键指标损失曲线box_loss, obj_loss, cls_loss应同步下降验证集mAP关注mAP0.5和mAP0.5:0.95学习率变化采用余弦退火策略初始lr0.01典型训练耗时在RTX 3090上300个epoch约需8小时4. 模型优化技巧4.1 数据层面优化困难样本挖掘对验证集中漏检的样本进行针对性增强小目标检测优化添加608x608分辨率训练分支光照不变性增强采用AutoAugment策略4.2 模型层面调优修改models/yolov5s.yaml# 增加小目标检测头 head: [[-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, nearest]], [[-1, 3], 1, Concat, [1]], [-1, 3, C3, [256, False]], [-1, 1, Conv, [256, 3, 2]], [[-1, 13], 1, Concat, [1]], [-1, 3, C3, [512, False]], [-1, 1, Conv, [512, 3, 2]], [[-1, 8], 1, Concat, [1]], [-1, 3, C3, [1024, False]], [[17, 20, 23], 1, Detect, [nc, anchors]], # 三个检测头 ]4.3 后处理优化修改detect.py中的NMS参数# 原参数 iou_thres0.45 conf_thres0.25 # 优化后针对钢轨缺陷 iou_thres0.3 # 降低IOU阈值避免漏检 conf_thres0.15 # 提高敏感度5. 部署与性能测试5.1 模型导出导出为ONNX格式便于部署python export.py --weights runs/train/exp/weights/best.pt --img 640 --batch 1 --device 0 --include onnx5.2 边缘设备部署在Jetson Xavier NX上的性能测试模型版本分辨率推理速度(FPS)内存占用(MB)YOLOv5s640x64062580YOLOv5m640x64038820YOLOv5s320x3201154205.3 实际检测效果测试集性能指标缺陷类型精确率召回率F1-score横向裂纹0.920.890.90纵向裂纹0.880.850.86表面剥落0.950.910.93压痕0.900.870.886. 常见问题解决方案6.1 训练问题排查损失值不下降检查数据标注质量使用verify_labels.py脚本适当增大学习率--lr 0.1添加数据增强--augment参数验证集mAP波动大增加验证集样本量建议占总数据20%使用--cache参数加速数据加载6.2 部署问题处理ONNX导出失败# 添加--dynamic参数 python export.py --weights best.pt --include onnx --dynamicTensorRT加速问题# 修改export.py中opset_version torch.onnx.export(..., opset_version12)6.3 实际应用技巧光照补偿方案# 在detect.py中添加 def auto_contrast(img): lab cv2.cvtColor(img, cv2.COLOR_BGR2LAB) l, a, b cv2.split(lab) clahe cv2.createCLAHE(clipLimit3.0, tileGridSize(8,8)) limg clahe.apply(l) return cv2.cvtColor(cv2.merge((limg,a,b)), cv2.COLOR_LAB2BGR)多尺度检测策略python detect.py --imgsz 640 320 --augment7. 项目扩展方向三维缺陷检测结合线激光扫描仪获取深度信息时序分析通过连续帧检测判断缺陷扩展趋势移动端部署使用TensorFlow Lite在安卓设备运行自动报警系统与工务管理系统对接实现智能预警我在实际部署中发现结合传统图像处理算法能进一步提升效果。例如先用Canny边缘检测预处理再输入YOLOv5模型可使细小裂纹的检出率提高约8%。另一个实用技巧是在雨雪天气增加红外图像的融合检测能有效克服能见度问题。