3、数据采集与预处理:数据采集规范、数据清洗、数据增强、标注格式与工具(COCO、KITTI、NuScenes)、数据质量评估

数据,说白了就是自动驾驶感知系统的「燃料」。没有高质量的数据,再牛的算法也是白搭。我见过太多团队,模型结构抄得飞起,结果数据一塌糊涂,最后联调时各种翻车。今天咱们就来聊聊,怎么把这锅「饭」煮好。

3.1 数据采集规范:别让源头就歪了

数据采集不是拿着相机出去随便拍。我刚开始做感知时,就犯过这个错——采集的数据全是晴天、白天、城市道路。结果模型一到雨天、隧道就「失明」。嗯,这里要注意,采集规范必须覆盖全场景。

3.1.1 场景覆盖矩阵

我个人习惯,先画一个场景覆盖矩阵。把天气、光照、道路类型、交通密度这些维度列出来,确保每个格子都有数据。

维度 典型值 最低要求
天气 晴天、阴天、雨天、雪天、雾天 至少包含3种
光照 白天、黄昏、夜晚、隧道 白天+夜晚必须覆盖
道路类型 高速、城市、乡村、停车场 高速+城市必须覆盖
交通密度 稀疏、中等、拥堵 中等+拥堵必须覆盖
避坑指南: 我曾经采集了一周的数据,结果发现80%都是直行场景,转弯和掉头的数据极少。后来模型在路口频繁误检。所以,采集时一定要按场景比例分配,别偷懒。

3.1.2 传感器标定与同步

数据采集前,传感器标定是必须的。相机和激光雷达的外参、内参,都得校准。我记得有一次,团队急着采集,没仔细检查标定文件,结果发现相机和LiDAR的投影偏差了5个像素。嗯,这直接导致后续的融合模型精度掉了10个点。

同步问题也很关键。你想想看,如果相机和LiDAR的时间戳对不上,那融合出来的点云投影就是「鬼影」。我建议用硬件触发同步,或者至少用PTP协议做时间同步。

3.2 数据清洗:把垃圾倒掉

采集回来的数据,不可能每一帧都是好的。数据清洗,说白了就是「去伪存真」。我见过有人直接拿原始数据训练,结果模型学了一堆噪声。

3.2.1 常见脏数据类型

  • 模糊帧:运动模糊、对焦不准。直接删掉。
  • 遮挡帧:镜头被泥巴、树叶挡住。这种数据留着只会误导模型。
  • 重复帧:车辆静止时采集的连续帧,几乎一模一样。需要做去重。
  • 异常值:LiDAR点云中出现飞点(比如突然出现一个100米外的孤立点)。用统计滤波干掉。
小技巧: 我写了一个自动化清洗脚本,先做帧间差异检测,如果连续10帧的像素变化小于阈值,就判定为重复帧,直接丢弃。效率提升不少。

3.2.2 清洗流程

我个人习惯用三步走:

  1. 粗筛:用规则过滤(比如图像亮度、对比度、点云密度)。
  2. 精筛:用预训练模型做质量打分,低于阈值的剔除。
  3. 人工抽检:随机抽5%的数据,人工确认清洗效果。

3.3 数据增强:别让模型「死记硬背」

数据增强,说白了就是「无中生有」。但要注意,不是所有增强都适合自动驾驶。我见过有人给图像加高斯噪声,结果模型在真实场景中反而变差了。

3.3.1 几何增强

  • 随机翻转:水平翻转(注意:不要垂直翻转,否则车会「飞」起来)。
  • 随机裁剪:模拟不同视角。
  • 旋转:±15度以内,太大就失真了。

3.3.2 颜色增强

  • 亮度调整:模拟不同光照。
  • 对比度调整:模拟雾天或逆光。
  • 色彩抖动:轻微改变色调,模拟不同相机参数。
避坑指南: 我曾经在目标检测任务中用了过强的颜色增强,结果模型把红色车和绿色车搞混了。后来我限制了色彩抖动的幅度,才解决问题。记住,增强要「适度」。

3.3.3 点云增强

对于LiDAR点云,常用的增强有:

  • 随机旋转:绕Z轴旋转。
  • 随机缩放:模拟不同距离。
  • 随机丢弃:模拟遮挡或传感器噪声。

3.4 标注格式与工具:COCO、KITTI、NuScenes

标注格式,是数据与模型之间的「桥梁」。选错了格式,后面转换起来会非常痛苦。我建议一开始就定好标准。

3.4.1 三大主流格式对比

格式 适用场景 核心特点 缺点
COCO 2D目标检测、实例分割 JSON格式,支持多边形标注 不支持3D信息
KITTI 3D目标检测、跟踪 文本格式,包含3D框参数 标注规范较老,扩展性差
NuScenes 多模态融合、预测 JSON格式,支持多传感器 文件结构复杂

我个人习惯,如果是纯视觉项目,用COCO格式就够了。如果涉及LiDAR和融合,NuScenes格式更灵活。KITTI格式虽然老,但很多开源代码都支持,兼容性好。

3.4.2 标注工具推荐

  • LabelImg:轻量级,适合2D框标注。
  • CVAT:功能强大,支持视频标注和自动追踪。
  • Supervisely:云端平台,适合团队协作。
  • Point Cloud Annotation Tool:专门用于3D点云标注。
小技巧: 我团队用CVAT做2D标注,用Supervisely做3D标注。两个工具之间通过脚本转换格式,效率很高。

3.5 数据质量评估:别等训练完才发现问题

数据质量评估,是很多人容易忽略的一步。你想想看,如果数据质量不行,模型训练得再好也是「垃圾进,垃圾出」。

3.5.1 评估指标

  • 标注一致性:同一张图,不同标注员的结果是否一致?用IoU来评估。
  • 类别分布:各类别样本数量是否均衡?不均衡的话,模型会偏向多数类。
  • 难度分布:简单样本和困难样本的比例是否合理?全是简单样本,模型泛化能力差。

3.5.2 自动化评估工具

我写了一个简单的质量评估脚本,会输出以下报告:

# 伪代码示例
def quality_report(dataset):
    report = {}
    report['total_images'] = len(dataset)
    report['avg_bbox_per_image'] = ...
    report['class_distribution'] = ...
    report['annotation_iou'] = ...
    return report
避坑指南: 我曾经拿到一批标注数据,没做质量评估就直接训练。结果发现标注框和物体边缘差了10个像素,模型收敛极慢。后来我加了一个「标注质量检查」环节,每次标注完成后先抽检10%,合格了再入库。

3.6 知识体系总览

下面这张图,是我自己总结的数据采集与预处理知识体系。你可以把它当作一个「检查清单」,每次做数据时对照着来。

数据采集与预处理知识体系 数据采集 数据清洗 数据增强 标注格式与工具 数据质量评估 场景覆盖 传感器标定 模糊帧 重复帧 几何增强 颜色增强 COCO KITTI 标注一致性 类别分布

数据这块,说白了就是「细节决定成败」。从采集到清洗,从增强到标注,每一步都马虎不得。我见过太多项目,算法调得再好,最后死在数据上。希望今天的内容,能帮你少走一些弯路。

可可精品资料库