从人工标注到模型上线:一个多月搞定裂缝检测数据集的实战复盘(含YOLO/VOC格式)
从零构建基建裂缝检测数据集:一位算法工程师的45天实战手记
去年夏天,我接手了一个高速公路裂缝检测项目。甲方要求两个月内完成从数据采集到模型上线的全流程,而团队连一张标注好的图片都没有。这段经历让我深刻体会到:在工业场景中,数据工程往往比模型调参更能决定项目成败。本文将分享我们如何用45天完成从原始图像采集到YOLOv7模型部署的全过程,特别是那些在技术文档中很少提及的"脏活累活"。
1. 为什么放弃分割模型?一个关键的技术转向
项目启动会上,甲方展示了一段隧道巡检视频——昏暗光线下的混凝土表面布满了蛛网般的裂缝。团队最初方案是采用DeepLabV3分割模型,但在POC阶段就发现了三个致命问题:
- 计算资源瓶颈:分割模型在边缘设备上的推理速度无法满足实时检测需求
- 标注成本爆炸:像素级标注的效率只有检测框标注的1/5
- 业务适配困难:养护部门更需要裂缝的位置和尺寸,而非精确轮廓
经过两周的技术验证,我们做出了关键转向:
# 两种技术路线对比(测试环境:RTX 3090) 模型类型 推理速度(FPS) 显存占用(G) 标注工时(张/人天) 分割模型(DeeplabV3) 8.2 10.8 80-100 检测模型(YOLOv7) 32.6 4.2 400-500这个决策带来了连锁反应:我们需要重新设计标注规范。裂缝的特殊性在于:
- 宽度变化大(从毫米级到厘米级)
- 形态不规则(直线型、网状、放射状)
- 对比度低(与背景灰度差常<15%)
2. 数据采集的"土办法"与"黑科技"
没有高质量数据,再先进的模型也是空中楼阁。我们采用了三级数据采集策略:
2.1 基础数据获取
- 实地拍摄:使用工业相机在6条隧道采集原始图像(注意:普通手机拍摄的广角畸变会导致后续标注困难)
- 网络爬取:构建了关键词组合爬虫(如"concrete crack detail shot"+"high resolution")
- 合作共享:与3家检测机构交换了部分非敏感数据
关键教训:务必在采集阶段记录元数据(光照条件、拍摄角度、表面湿度等),这对后续数据增强至关重要
2.2 智能预处理流水线
原始图像存在三大问题:
- 明暗不均(隧道内光照条件复杂)
- 透视畸变(斜拍导致的几何变形)
- 无效区域(护栏、标线等干扰项)
我们开发了自动化预处理脚本:
# 预处理流水线示例(使用OpenCV+ImageMagick) for img in $(ls ./raw_images/*.jpg); do convert $img -normalize -gamma 0.8 temp.jpg python perspective_correction.py temp.jpg python roi_extraction.py temp.jpg output/ done3. 标注实战:如何让框选精度提升3倍
标注质量直接决定模型上限。经过多次迭代,我们总结出"三阶标注法":
3.1 基础标注规范
- 最小单元:长度>5cm或宽度>2mm的裂缝必须标注
- 框选原则:采用"细粒度覆盖"而非"最小外接矩形"
- 属性记录:裂缝类型(横向/纵向/网状)、严重程度(1-5级)
3.2 标注效率提升技巧
- 使用CVAT的AI辅助标注功能(先用1000张训练临时模型)
- 开发快捷键系统(空格键确认+自动跳转下一张)
- 采用双屏工作:左图右标,减少视觉切换疲劳
标注团队从最初的5人减少到2人后,效率反而提升了40%。这印证了一个反直觉的发现:标注质量与团队规模成反比。
4. 数据增强:不只是旋转和缩放
常规增强手段对裂缝检测效果有限。我们创新性地引入了三类增强策略:
4.1 物理仿真增强
- 材质贴图:将裂缝叠加到不同老化程度的混凝土纹理上
- 光照模拟:用Blender渲染不同角度的点光源效果
- 水渍合成:模拟潮湿环境下的反光干扰
4.2 对抗样本生成
通过GAN网络生成具有挑战性的负样本:
# 使用CycleGAN生成对抗样本 model = CycleGAN(input_channels=3) fake_images = model.generate( real_images, style="wet_concrete" # 模拟水渍干扰 )4.3 多尺度融合
构建金字塔式训练集:
| 尺度等级 | 分辨率 | 适用场景 |
|---|---|---|
| L1 | 1024x1024 | 近距离精细检测 |
| L2 | 512x512 | 常规巡检 |
| L3 | 256x256 | 快速全局扫描 |
5. 模型选型与部署的隐藏成本
在YOLO系列模型对比测试中,我们发现两个意外现象:
- YOLOv5s在测试集上mAP最高,但实际部署后漏检率比YOLOv7-tiny高15%
- 模型量化到INT8后,某些类别的AP值不降反升(可能与裂缝的灰度特征有关)
最终部署方案采用了混合推理策略:
- 第一级:YOLOv7-tiny快速扫描(95%置信度的直接输出)
- 第二级:可疑区域送入YOLOv5s二次检测
这套系统在Jetson AGX Orin上达到了27FPS的实时性能,比原定KPI提升了35%。但最大的收获不是技术指标,而是那些教科书上不会写的实战经验:
- 标注团队需要每周做视力检查(连续标注会导致视觉疲劳)
- 暴雨天气后采集的数据质量提升明显(潮湿表面使裂缝更显眼)
- 模型在上午的误报率比下午低2-3%(可能与光照色温变化有关)
项目上线半年后回访,养护部门反馈检测准确率稳定在92%以上。最让他们满意的不是技术先进性,而是我们提供的"裂缝生长趋势分析"增值功能——这个需求在最初的需求文档中只字未提。这或许就是工业AI项目的真谛:用技术解决用户没说出口的痛点。
