数据采集与标注:打好感知系统的基础
做感知系统这几年,我最大的体会就是——数据质量决定了算法上限。你模型再牛,喂进去的数据是脏的,出来的结果也是垃圾。今天咱们就聊聊数据采集和标注这块,我踩过的坑不少,希望能帮你少走弯路。
核心观点:数据采集和标注不是体力活,而是技术活。规范做在前,后面能省80%的返工时间。
传感器数据采集规范
先说采集。很多人觉得采集嘛,装好传感器上路跑就行了。其实没那么简单。
第一,传感器标定是前提。我记得刚入行时,有次采集了一整天数据,回来一看,激光雷达和相机的外参差了5厘米。结果所有标注都得重来。嗯,这个教训挺深刻的。
标定要做三件事:
- 内参标定:相机畸变参数、激光雷达的旋转中心偏移
- 外参标定:传感器之间的相对位姿(旋转+平移)
- 时间同步:各传感器的时间戳对齐,误差控制在1ms以内
第二,采集场景要覆盖全。我见过不少团队,白天晴天采集了80%的数据,结果雨雪天、夜间场景模型直接崩了。
我个人习惯把场景分成这几类:
| 场景维度 | 具体类型 | 建议占比 |
|---|---|---|
| 光照 | 白天、黄昏、夜间、隧道 | 40%、20%、30%、10% |
| 天气 | 晴天、阴天、雨、雪、雾 | 50%、20%、15%、10%、5% |
| 道路 | 高速、城市、乡村、停车场 | 30%、40%、20%、10% |
| 交通密度 | 稀疏、中等、拥堵 | 30%、40%、30% |
第三,采集频率和存储要规划好。举个例子,激光雷达一般10Hz,相机30Hz。但如果你做目标跟踪,建议所有传感器统一到20Hz,这样时间对齐简单很多。
存储格式我推荐:
- 激光雷达:PCD或BIN格式,保留原始点云
- 相机:PNG或JPG(无损压缩),注意保留EXIF信息
- IMU/GPS:CSV或JSON,带时间戳
小技巧:采集时多留10%的冗余数据。我曾经因为存储卡满了,漏掉了关键的高速出口场景,后来补采多花了两天。
标注工具选型
标注工具这块,说实话,没有完美的。我试过七八种,各有各的脾气。
开源工具 vs 商业工具?我的建议是:
- 小团队/原型验证:用开源工具,比如LabelImg(2D框)、PointLabeler(3D点云)
- 量产项目:上商业工具,比如Scale AI、Supervisely,省心但烧钱
我目前在项目中用的是自研工具+商业工具混合。为什么?因为开源工具对3D点云的标注效率太低了。你想想看,一个点云场景几十万个点,纯手动标注一个目标要半分钟。商业工具能自动预标注,效率提升3倍以上。
选型时重点看这几个维度:
| 功能 | 重要性 | 说明 |
|---|---|---|
| 2D/3D联合标注 | ★★★★★ | 能在图像和点云上同步标注,减少重复劳动 |
| 自动预标注 | ★★★★☆ | 用已有模型自动生成初始框,人工微调 |
| 多人协作 | ★★★★☆ | 支持多标注员同时工作,避免冲突 |
| 数据版本管理 | ★★★☆☆ | 能回溯每次修改,方便复盘 |
注意:别只看工具的功能列表。我曾经选了一个功能很全的工具,结果部署起来要配数据库、消息队列,折腾了两周。小团队建议选SaaS版的,开箱即用。
数据质量检查
数据质量检查,说白了就是「找茬」。我把它分成三个层次:
第一层:自动化检查。写脚本跑一遍,检查:
- 标注框是否超出图像边界
- 点云标注是否在传感器范围内
- 时间戳是否连续、无跳变
- 标注类别是否在预设列表内
代码示例(Python伪代码):
def check_annotation_quality(annotation):
errors = []
# 检查标注框是否在图像内
for bbox in annotation.bboxes:
if bbox.x_min < 0 or bbox.y_max > image_height:
errors.append(f"框 {bbox.id} 超出图像边界")
# 检查类别是否合法
valid_classes = ['car', 'pedestrian', 'cyclist']
for obj in annotation.objects:
if obj.class_name not in valid_classes:
errors.append(f"类别 {obj.class_name} 不合法")
return errors
第二层:人工抽检。自动化检查只能发现低级错误。更隐蔽的问题,比如标注框偏大、漏标了小目标,得靠人眼。
我建议抽检比例不低于10%。如果发现错误率超过5%,整批数据退回重标。
第三层:交叉验证。让两个标注员标同一批数据,然后对比一致性。常用的指标是mAP和IoU。
举个例子,如果两个标注员对同一辆车的框,IoU只有0.6,说明标注标准不统一。这时候需要重新对齐标注规范。
避坑指南:我曾经遇到过一个项目,标注员把「骑自行车的人」标成了「行人」,因为觉得骑车的人也算行人。结果模型训练出来,对骑行者完全不识别。所以标注规范一定要写清楚,每个类别都要有正例和反例的图示。
知识体系总览
下面这张图是我自己整理的,数据采集与标注的核心流程。你可以把它当作一个检查清单:
这张图把整个流程串起来了。从标定开始,到场景规划、采集,再到标注工具选型、规范制定、执行标注,最后质检。每一步都环环相扣,哪一环出问题,最终的数据质量都会打折扣。
我的经验:数据采集和标注这件事,前期花1小时做规范,后期能省10小时返工。别急着「先跑起来再说」,先把规矩立好。
好了,关于数据采集与标注,今天就聊到这儿。记住一句话:数据是感知系统的血液,质量就是血型——配错了,整个系统都会出问题。