十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

自动驾驶开源数据集全解析:从KITTI到Waymo的选型、实战与评估指南

自动驾驶开源数据集全解析:从KITTI到Waymo的选型、实战与评估指南 1. 从零开始为什么你需要一份高质量的开源数据集清单如果你正在踏入自动驾驶领域无论是做感知算法研究、模型训练还是想复现一篇顶会论文第一个拦路虎往往不是复杂的模型结构而是数据。我见过太多新手包括几年前的我自己兴致勃勃地打开一个开源项目结果在数据准备阶段就卡壳了——数据集官网打不开、数据格式千奇百怪、标注文件对不上号、甚至下载链接早已失效。折腾几天下来热情消耗殆尽。所以一份经过梳理、验证、附带“食用指南”的开源数据集汇总其价值远超过简单的列表罗列。它更像是一张藏宝图告诉你每个宝藏数据集的位置、里面有什么、怎么打开以及最重要的——有哪些暗礁坑需要避开。自动驾驶数据的价值在于其多维度和高复杂性。它不仅仅是图片或点云而是时间同步的多传感器信息流摄像头、激光雷达、毫米波雷达、高精度定位信息、车辆控制信号以及经过精细标注的3D边界框、语义分割图、车道线、可行驶区域等。一个优秀的数据集是算法迭代的基石。本文将围绕几个核心维度来拆解主流开源数据集首先是场景覆盖度是城市街道、高速公路还是停车场其次是传感器配置是纯视觉、纯激光雷达还是多模态融合再者是标注粒度与质量是2D框、3D框还是带朝向的精细标注最后是数据规模与多样性涵盖了不同天气、光照、交通密度吗理解这些你才能像老手一样快速为自己的项目找到最匹配的那块“拼图”。2. 主流开源数据集深度解析从KITTI到Waymo Open Dataset自动驾驶开源数据集的发展本身就是一部技术演进史。早期数据集受限于传感器成本和标注能力规模较小标注类型单一。随着自动驾驶成为热点科技巨头和顶尖高校纷纷入场推动了数据集在规模、多样性和标注质量上的飞跃。2.1 经典基石KITTI与nuScenesKITTI无疑是自动驾驶感知研究的“启蒙教材”。由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办它虽然数据量不大约6小时驾驶记录但其开创性的同步校准的多传感器配置立体相机、Velodyne 64线激光雷达、GPS/IMU和丰富的标注任务2D/3D物体检测、光流、视觉里程计、语义分割等使其成为算法性能评测的黄金标准。很多论文至今仍以在KITTI排行榜上的名次作为重要衡量指标。使用KITTI你首先需要理解它的文件组织结构image_2/存放左目图像velodyne/存放点云bin文件label_2/存放标注文件。标注文件中每一行代表一个物体包含了类别、截断/遮挡程度、观测角度以及3D框的中心点、尺寸和旋转角偏航角。这里有一个关键细节KITTI的坐标系定义。它的相机坐标系是x向右y向下z向前而激光雷达坐标系是x向前y向左z向上。在进行多传感器融合时必须通过标定文件提供的变换矩阵进行精确坐标转换否则投影会完全错误。nuScenes由Motional前身为nuTonomy发布标志着数据集进入“大而全”的时代。它包含了1000个场景每个场景20秒采集自波士顿和新加坡涵盖了丰富的天气和交通条件。nuScenes的核心优势在于其完整的传感器套件6个摄像头、1个激光雷达、5个毫米波雷达、GPS/IMU和精细的3D标注。它不仅提供了3D边界框还为每个标注对象赋予了属性如车辆是否静止、行人是否携带物品和可见性令牌。nuScenes的数据结构采用基于JSON的“数据库”模式通过sample,sample_data,instance,annotation等令牌关联所有数据。初次接触可能会觉得复杂但一旦理解你会惊叹于其设计的严谨性。例如要获取某一帧的所有标注信息你需要先找到对应的sample_token然后通过它关联到sample_annotation的token列表再逐一查询具体的标注内容。这种设计虽然增加了数据加载的代码量但使得数据关系的查询非常灵活和清晰。2.2 规模之王Waymo Open Dataset与A*3D当谈到数据规模Waymo Open Dataset是绕不开的巨人。Waymo开源了其自动驾驶车辆在多个城市收集的海量数据。以感知数据集为例它包含了超过1000个段落的驾驶数据每个段落约20秒总计有1200万帧3D标注和1200万帧2D标注。其传感器配置顶级5个高分辨率激光雷达、5个前向和侧向摄像头标注质量极高特别是对于远距离和小物体的标注。使用Waymo数据集的最大挑战在于其巨大的数据量和特定的数据格式TFRecord。一个TFRecord文件可能包含数十个场景直接处理需要熟悉TensorFlow的TFRecord读取API。官方提供了Python工具包但你需要足够的内存和存储空间。一个实用的建议是先下载最小的“验证集”进行代码流程的调试成功后再扩展到训练集。另外Waymo的数据标注是在全局坐标系下进行的这对于研究场景理解和运动预测极为有利。A*3D是由新加坡ASTAR研究院发布的数据集其特色在于专注于恶劣天气下的自动驾驶感知。它包含了39,179帧图像和点云数据标注了7类物体的3D边界框。数据采集自新加坡天然包含了大量雨天、夜晚的场景。这对于检验模型在极端条件下的鲁棒性至关重要。很多在晴天表现优异的模型在A3D上可能会“原形毕露”。使用A*3D时要特别注意其标注是在激光雷达坐标系下并且提供了相机和激光雷达之间的标定参数。它的数据组织相对简单按场景文件夹存放每个文件夹内包含图像、点云和标注的JSON文件。2.3 特色化数据集SemanticKITTI、Argoverse与Lyft Level 5除了通用的感知数据集一些数据集在特定任务上做到了极致。SemanticKITTI专注于点云的全景语义分割。它在KITTI Odometry数据集的基础上为所有点云序列提供了逐点语义标注共包含28个类别。这对于研究激光雷达点云的理解、高精地图构建至关重要。它的标注文件是每个点云帧对应的一个label文件其中每个点都有一个整数ID代表其类别。处理时需要注意原始点云文件.bin和标注文件.label是一一对应的。由于点云数量庞大整个数据集超过430亿个点在训练时通常需要采用抽样的策略或者使用能够处理大规模点云的网络结构如Cylinder3D或SPVCNN。Argoverse由Argo AI发布包含两个子集Argoverse 3D Tracking和Argoverse Motion Forecasting。前者提供3D跟踪标注后者专注于车辆轨迹预测提供了超过30万个真实驾驶场景每个场景有5秒的历史轨迹和需要预测的未来3秒轨迹。对于研究行为预测、决策规划的同学Argoverse Motion Forecasting是必选的数据集。它的数据以CSV表格形式存储非常清晰。轨迹预测任务的关键在于如何编码历史轨迹的上下文信息地图、交通规则、周围智能体互动Argoverse提供了高精度的矢量地图车道中心线、交通信号等使得研究可以更加深入。Lyft Level 5数据集虽然Lyft公司后续调整了策略但其开源的数据集在多智能体交互和大规模场景方面仍有参考价值。它提供了超过1000小时的数据包含多个激光雷达和摄像头数据以及详细的场景描述。它的数据格式也采用了类似nuScenes的基于JSON的数据库格式。3. 数据集实战下载、预处理与标准数据管道搭建拥有了数据集清单只是第一步真正的挑战在于将其转化为算法可以“消化”的格式。这个过程通常包括数据下载、解压、格式解析、坐标转换、数据增强最终封装成DataLoader。下面我以处理nuScenes数据集为例分享一套经过实战检验的流程。3.1 环境准备与数据下载首先你需要一个足够大的硬盘。nuScenes完整数据集包括雷达、相机、地图等超过300GB。建议使用命令行工具wget或aria2进行分块下载避免网络不稳定导致前功尽弃。官方提供了详细的下载脚本示例。下载后你会得到一系列.tar压缩包需要按顺序解压到同一个目录下。这里有个坑解压后的文件夹结构必须保持原样因为代码库会通过相对路径寻找数据。接下来是Python环境。强烈建议使用Conda创建一个独立环境。除了标准的科学计算库numpy, pandas你需要安装nuScenes官方开发工具包pip install nuscenes-devkit这个工具包提供了所有数据加载、可视化和评估的API能节省你大量时间。3.2 理解数据层次结构与关键APInuScenes的数据管理核心是NuScenes类。初始化时需要指定数据集的版本如v1.0-mini,v1.0-trainval和路径。from nuscenes.nuscenes import NuScenes nusc NuScenes(versionv1.0-mini, dataroot/path/to/data, verboseTrue)nusc对象是一个数据库查询入口。你需要理解几个核心概念Scene场景: 一段连续的20秒驾驶记录包含约40个关键帧sample。Sample关键帧/样本: 一个时间戳下所有传感器数据的集合。这是数据访问的基本单位。SampleData样本数据: 指代某一个传感器在某个sample下的具体数据文件如图像或点云文件。Annotation标注: 对一个可追踪实例如一辆车、一个行人在某个sample下的状态描述包括3D框、属性等。获取数据的基本流程是先选定一个scene_token然后获取该场景下的所有sample_token再遍历每个sample通过nusc.get(sample, sample_token)获取该sample的详细信息字典这个字典里包含了关联的所有sample_data和annotation的token。这个过程初看繁琐但它是理解数据关联关系的必经之路。3.3 构建自定义数据加载器官方工具包主要用于浏览和评估要用于训练你需要构建自己的torch.utils.data.Dataset类。核心是实现__getitem__方法返回模型需要的输入-输出对。假设我们在做基于多摄像头的3D物体检测那么对于每一个sample我们需要加载多视角图像从sample的data字段中找出所有CAM类型传感器的sample_data_token然后使用nusc.get_sample_data(sample_data_token)函数。这个函数非常强大它会返回图像路径、图像数据PIL Image或np.array、内参矩阵、外参矩阵从车身坐标系到相机坐标系以及投影到该图像上的3D标注框列表。加载点云可选用于融合或监督找到LIDAR_TOP的token同样使用nusc.get_sample_data加载点云N x 4 x, y, z, intensity。处理3D标注nusc.get_annotations(sample_token)可以直接获取该sample下的所有标注列表。每个标注是一个字典包含translation,size,rotation四元数等信息这些都是在全局坐标系下的。对于视觉检测我们通常需要将3D框投影到各个相机平面上。坐标转换这是最容易出错的部分。nuScenes提供了详细的坐标系定义和转换工具在nuscenes.utils.geometry_utils中。务必记住标注的3D框是在“全局坐标系”Ego Vehicle坐标系即车辆中心下的。要通过nusc.get_sample_data返回的pose外参和intrinsic内参矩阵才能正确地将3D框投影到图像上。一个常见的检查方法是随机选取几个样本用nusc.render_sample_data可视化看标注框是否严丝合缝地框住物体。注意在构建数据管道时务必加入缓存机制。例如将处理好的图像张量和标注信息如转换为模型需要的张量格式以.pkl文件形式保存下来。这样在多次训练迭代中可以避免重复执行耗时的文件IO和数据处理极大提升训练效率。尤其是在使用SSD硬盘时随机读取大量小文件的性能瓶颈非常明显。3.4 数据增强策略对于视觉任务标准的数据增强如随机翻转、裁剪、颜色抖动亮度、对比度、饱和度都适用。但对于3D感知尤其是多摄像头方案增强需要谨慎。图像层面的空间增强如翻转、旋转必须与3D标注框同步进行。例如图像水平翻转后3D框的中心点在图像上的x坐标应变为(width - x)同时框的朝向角yaw也需要进行镜像变换yaw -yaw。对于点云数据常见的增强包括全局旋转、平移、缩放以及针对点云的随机丢弃模拟激光雷达噪声或添加虚拟点。4. 数据集选型与评估如何为你的任务挑选最佳拍档面对众多数据集选择哪一个开始你的项目这取决于你的具体任务、可用资源和研究目标。没有一个数据集是万能的选对了事半功倍。4.1 根据任务类型匹配数据集3D物体检测/跟踪如果追求经典和广泛的对比性KITTI仍是入门首选。它的排行榜成熟代码库丰富便于快速验证想法。若需要大规模、高质量数据用于训练稳健模型Waymo Open Dataset是工业级选择。如果研究重点是多模态融合相机雷达nuScenes的传感器配置和标注更为均衡友好。若关注恶劣天气下的性能A*3D不可或缺。语义/全景分割点云分割首选SemanticKITTI图像分割可以考虑Cityscapes虽然非自动驾驶专用但城市场景标注精细或BDD100K中的分割子集。轨迹预测/行为分析Argoverse Motion Forecasting是当前最主流的轨迹预测数据集。INTERACTION数据集则专注于高度交互的驾驶场景如交叉路口、环岛对于研究博弈和决策很有价值。端到端驾驶/模仿学习CARLA仿真器可以生成大量带控制信号的数据。开源真实数据集中Lyft Level 5和Waymo的部分数据提供了车辆控制信号但规模有限。nuPlan是一个新兴的大规模规划数据集提供了丰富的驾驶情景和专家轨迹。4.2 评估指标解读不仅仅是mAP在数据集上训练模型后你需要用标准指标评估它。对于检测任务最常用的是平均精度Average Precision, AP。但AP的计算本身就有多种变体需要仔细区分。以KITTI为例它的评估非常严格难度划分根据物体高度、遮挡和截断程度分为Easy,Medium,Hard三个等级。你的模型需要在所有等级上都表现良好。评估方式使用40个召回率采样点计算AP而非VOC的11点法。更重要的是它要求检测框与真值框在三维空间对于3D检测或鸟瞰图BEV空间的重叠度IoU。对于车辆3D IoU阈值通常是0.7。朝向评估KITTI还评估检测框的朝向角误差要求与真值框的朝向角差在一定阈值内如5度否则即使位置框对了也不算正确检测。对于nuScenes它采用了更综合的nuScenes检测分数NDS。NDS是多个指标的加权平均mAP基于2D中心距离匹配而非IoU的平均精度。它设定了多个距离阈值如0.5m, 1m, 2m, 4m计算每个阈值下的AP后取平均。这种度量对框的尺寸误差更宽容更关注中心点定位。TP metrics一系列真阳性指标包括平均平移误差ATE、平均尺度误差ASE、平均方向误差AOE等分别衡量位置、大小、方向的准确性。 NDS (0.2 * mAP 0.8 * (1 - min(1, sum(TP metrics)/5)))。这种设计迫使模型必须在所有维度上都表现均衡而不能只追求高mAP而忽略朝向和尺寸精度。理解这些指标背后的含义能帮助你更有针对性地改进模型。例如如果你的模型mAP高但NDS低问题可能出在朝向预测不准你就应该检查角度回归分支的设计和损失函数。4.3 实战中的数据集“混合”与迁移技巧很少有项目只用一个数据集。为了提升模型的泛化能力混合训练Multi-Dataset Training是常见策略。但这会带来挑战不同数据集的类别定义不同如KITTI的“Van”在nuScenes里可能属于“Car”、标注坐标系和格式不同、传感器参数不同。处理策略类别统一映射建立一个主类别列表将其他数据集的类别映射过来。例如将{‘pedestrian’ ‘person’} 都映射到 ‘person’。数据格式标准化在数据加载层为每个数据集编写一个适配器将原始数据转换为内部统一的格式。例如内部统一使用x, y, z, l, w, h, yaw的7参数表示3D框并且统一坐标系如车身坐标系。传感器参数归一化对于图像可以将所有数据集图像resize到相同分辨率或者使用可变形卷积等网络结构来适应不同焦距。对于点云可以统一到相同的距离范围如[-50, 50]米和点数通过随机采样或最远点采样。分层采样在训练时每个epoch从不同数据集中按比例采样batch。比例可以根据数据集大小或难度来调整。要小心避免模型在某个数据集上过拟合而在另一个上欠拟合。另一个高级技巧是利用无标签或弱标签数据。例如Waymo数据规模巨大但标注成本极高。你可以先用Waymo的有标签数据训练一个教师模型然后用这个模型去生成nuScenes或自有数据上的伪标签pseudo-label再用这些伪标签参与训练往往能进一步提升模型性能尤其是在目标域数据标注不足的情况下。这个过程被称为自训练Self-training或领域自适应Domain Adaptation。
返回列表