2. 数据采集与标注

做感知系统这几年,我最大的体会就是——数据质量决定了算法上限。你模型再牛,喂进去的数据是脏的,出来的结果也是垃圾。今天咱们就聊聊数据采集和标注这块,我踩过的坑不少,希望能帮你少走弯路。

核心观点:数据采集和标注不是体力活,而是技术活。规范做在前,后面能省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小时返工。别急着「先跑起来再说」,先把规矩立好。

好了,关于数据采集与标注,今天就聊到这儿。记住一句话:数据是感知系统的血液,质量就是血型——配错了,整个系统都会出问题。