3、数据集准备:公开数据集介绍与预处理

做感知联调,第一步就是搞定数据。

说实话,我见过不少团队,模型选得挺好,算法也调得不错,结果一跑起来效果稀烂。为什么?数据没整明白。你想想看,连数据格式都不统一,预处理流程有坑,后面联调就是给自己挖坑。

今天咱们就聊聊公开数据集那些事儿。我把自己踩过的坑、积累的经验,一次性倒给你。

3.1 三大主流公开数据集

目前业界用得最多的,就是KITTI、nuScenes和Waymo。这三家各有千秋,我分别说说。

3.4.1 KITTI —— 经典但有点“老”

KITTI是2012年发布的,算是自动驾驶数据集的“老前辈”。它用一辆大众旅行车,在德国卡尔斯鲁厄市区和高速上采集的。

特点:

  • 包含双目图像、激光雷达点云、GPS/IMU数据
  • 标注了8类物体:Car、Van、Truck、Pedestrian、Cyclist等
  • 训练集7481张,测试集7518张

我个人习惯用KITTI做快速原型验证。为什么?数据量小,下载快,跑一轮实验不费时间。但要注意——它的场景比较单一,基本都是德国晴天路况。你在国内雨天、夜晚场景下,模型可能直接“翻车”。

避坑指南: KITTI的标注框是3D的,但它的点云只有64线。我曾经用KITTI训练完模型,换到128线激光雷达上,发现检测精度掉了5个点。原因就是点云密度差异太大。

3.4.2 nuScenes —— 多模态的“瑞士军刀”

nuScenes是2019年发布的,来自安波福(Aptiv)。它在波士顿和新加坡采集,场景覆盖了城市、郊区、夜晚、雨天。

核心数据:

  • 6个摄像头(360度环视)
  • 5个毫米波雷达
  • 1个32线激光雷达
  • 高精地图 + GPS/IMU

嗯,这里要注意——nuScenes的标注格式跟KITTI完全不同。它用了23类物体,而且每个物体有“属性”标签,比如车辆是“静止”还是“移动”,行人是在“走路”还是“站立”。

我建议做多传感器融合的同学,优先选nuScenes。它的雷达和相机数据是严格时间同步的,省了你不少对齐的功夫。

3.4.3 Waymo —— 数据量最大,但门槛也高

Waymo Open Dataset是2019年发布的,来自Waymo自动驾驶车队。它在旧金山、凤凰城、山景城等地采集。

数据规模:

  • 1150个场景,每个场景20秒
  • 5个激光雷达(1个中距+4个近距)
  • 5个摄像头(前、左前、右前、左后、右后)
  • 标注了1200万+个3D框

说实话,Waymo的数据质量是最高的。它的标注一致性做得特别好,框的抖动很小。但有个问题——数据太大了,完整下载要几百GB。我当年第一次下载,光解压就花了半天。

小技巧: 如果你只是想验证算法,可以只下载Waymo的“验证集”子集,大概20GB左右,够用了。

3.2 数据标注格式对比

这三个数据集的标注格式,说白了就是“各玩各的”。我整理了一张表,方便你对比:

数据集 标注格式 坐标系统 关键字段
KITTI txt文件(每行一个物体) 相机坐标系 类别、截断、遮挡、alpha、bbox、尺寸、位置、旋转角
nuScenes JSON(嵌套结构) 全局坐标系(ego) token、类别、属性、平移、旋转、尺寸、速度
Waymo TFRecord(protobuf序列化) 激光雷达坐标系 box_id、类别、中心点、尺寸、朝向、速度

你看,KITTI最简单,一个txt文件搞定。nuScenes的JSON嵌套很深,解析起来有点麻烦。Waymo的TFRecord最“现代”,但需要你熟悉TensorFlow的数据管道。

我曾经在项目里,需要把KITTI格式转成nuScenes格式。光写转换脚本就花了三天。为什么?因为坐标系统不一样——KITTI是相机坐标系,nuScenes是全局坐标系,中间要经过激光雷达坐标系、车身坐标系,一层层变换。

注意: 坐标转换时,一定要搞清楚“左乘”还是“右乘”。我见过有人把旋转矩阵的方向搞反了,结果检测框全飞到天上去。调试了一整天才发现。

3.3 数据预处理流程

数据预处理,说白了就是“把原始数据变成模型能吃的样子”。我一般分四步走:

3.3.1 数据清洗

原始数据里总有一些“脏数据”。比如:

  • 标注框超出图像边界
  • 点云里出现NaN值
  • 时间戳不同步

我的做法是写一个清洗脚本,把这些坏数据过滤掉。别小看这一步,有时候能过滤掉5%-10%的无效数据。

3.3.2 坐标对齐

不同传感器的数据,需要统一到同一个坐标系下。比如:

  • 激光雷达点云 → 转到相机坐标系,才能投影到图像上
  • 毫米波雷达目标 → 转到车身坐标系,才能跟激光雷达融合

嗯,这里有个坑——标定参数会随时间漂移。我建议每隔一段时间,重新做一次传感器标定,不然对齐精度会越来越差。

3.3.3 数据增强

数据增强是提升模型泛化能力的关键。常用的方法有:

  • 图像:随机裁剪、颜色抖动、高斯噪声
  • 点云:随机旋转、随机缩放、随机丢弃点
  • 多模态:同时增强图像和点云,保持对应关系

我特别推荐“混合增强”(MixUp)——把两张图像和对应的点云混合在一起。这个方法在nuScenes上能提升2-3个点的mAP。

3.3.4 格式转换

最后一步,把数据转成模型需要的格式。比如:

  • 图像:resize到固定尺寸(如1216×352),归一化到[0,1]
  • 点云:体素化(Voxelization)或柱状化(Pillarization)
  • 标注:编码成one-hot向量或回归目标
核心经验: 预处理流程一定要做成自动化pipeline。我见过有人手动处理数据,结果训练集和验证集用了不同的预处理参数,模型评估结果完全不可信。用脚本或DAG工具(如Airflow)把流程固化下来,一劳永逸。

3.4 知识体系总览

下面这张图,帮你理清数据集准备的整体脉络:

数据集准备知识体系 KITTI nuScenes Waymo txt格式 JSON格式 TFRecord格式 数据预处理流程 数据清洗 坐标对齐 数据增强 格式转换

你看,整个流程就是从数据集选择,到理解标注格式,再到预处理,环环相扣。每一步都马虎不得。

最后说一句——数据准备这件事,看起来枯燥,但它是整个感知联调的基石。我见过太多人急着调模型,结果数据没处理好,后面全白干。磨刀不误砍柴工,把数据整明白了,后面联调才能顺风顺水。

我的建议: 刚开始做感知联调的同学,先从KITTI入手,把整个流程跑通。等熟悉了,再换nuScenes或Waymo做深度优化。别一上来就搞Waymo,数据量太大,容易劝退。

可可精品资料库