KITTI与nuScenes数据集下载及使用指南

10 次阅读

KITTI和nuScenes都是自动驾驶领域常用的公开数据集,但两者在传感器配置、数据组织方式、标注结构以及适用任务上存在明显差异。做目标检测、3D检测、点云处理、视觉里程计或多传感器融合实验时,选择合适的数据集能够减少大量数据预处理工作。

KITTI数据集简介

KITTI Vision Benchmark由德国卡尔斯鲁厄理工学院(KIT)与Toyota Technological Institute at Chicago等机构共同推动,主要用于自动驾驶场景下的计算机视觉研究。官方提供了立体视觉、光流、视觉里程计、3D目标检测、目标跟踪、深度估计等多类任务的数据和评测基准。CVLibs

KITTI的数据采集平台搭载了双目摄像头、Velodyne激光雷达以及GPS/IMU定位设备,数据覆盖城市道路、郊区道路和高速公路等场景。CVLibs

常见的KITTI数据集包括:

  • KITTI Object:主要用于2D/3D目标检测与目标方向估计。

  • KITTI Raw:提供原始传感器数据,适合研究多传感器数据处理。

  • KITTI Odometry:主要用于视觉里程计、SLAM和定位研究。

  • KITTI Tracking:用于多目标跟踪。

  • KITTI Stereo:用于双目视觉和深度估计。

  • KITTI Depth:用于单目深度预测和深度补全。

  • KITTI-360:面向更加完整的3D场景理解任务。

其中,KITTI Object是很多3D目标检测论文和开源项目最常使用的版本之一。官方数据显示,该任务包含7481张训练图像和7518张测试图像,并提供对应点云及目标标注。CVLibs

KITTI怎么下载

KITTI并不是一个简单的单文件压缩包,而是按照研究任务划分成多个数据子集。下载前首先应该确定自己的实验目标。

例如:

如果研究YOLO类2D目标检测,可以重点关注Object数据集;如果研究LiDAR 3D检测,则需要下载对应的Velodyne点云、图像和标注;如果研究SLAM或视觉里程计,则应该选择Odometry数据。

KITTI官方目前要求下载用户完成注册,并填写数据使用目的。注册下载页面需要提供包括机构邮箱在内的信息,激活账户后才能进行数据下载。CVLibs+1

建议优先从KITTI官方页面获取数据,不要直接使用来源不明的第三方压缩包。官方页面同时提供不同Benchmark的下载入口和数据说明。

KITTI Object数据结构

以常见的3D目标检测数据为例,下载并解压后通常会涉及以下几类内容:

KITTI/
├── training/
│   ├── image_2/
│   ├── image_3/
│   ├── velodyne/
│   ├── calib/
│   └── label_2/
└── testing/
    ├── image_2/
    ├── image_3/
    ├── velodyne/
    └── calib/

其中:

  • image_2:左侧彩色相机图像。

  • image_3:右侧彩色相机图像。

  • velodyne:LiDAR点云数据,通常以.bin形式保存。

  • calib:相机、雷达之间的标定参数。

  • label_2:目标检测标注。

读取LiDAR点云时,经常可以看到如下Python代码:

Python
运行
import numpy as np

points = np.fromfile(
    "000000.bin",
    dtype=np.float32
).reshape(-1, 4)

print(points.shape)

每个点通常包含:

x y z intensity

也就是三维坐标和反射强度。

KITTI标注如何理解

KITTI目标检测标签通常是一行表示一个目标,字段包含目标类别、截断程度、遮挡状态、观察角度、2D边界框以及3D尺寸、位置和旋转角等信息。

例如:

Car 0.00 0 -1.57 50.0 50.0 150.0 180.0 1.5 1.6 3.9 1.2 1.5 20.0 -1.5

其中3D尺寸、位置和旋转角对于3D目标检测尤为重要。

需要特别注意坐标系。KITTI中的相机坐标系、Velodyne坐标系并不完全相同,进行LiDAR与Camera数据融合时必须结合calib目录中的标定参数进行坐标转换,否则容易出现3D框位置偏移、左右颠倒或投影错误等问题。

nuScenes数据集简介

nuScenes由Motional团队推出,是自动驾驶领域具有代表性的多模态数据集。官方数据包含在Boston和Singapore采集的1000个驾驶场景,每个场景大约20秒,并且重点覆盖城市道路中的复杂交通情况。NuScenes

与传统KITTI相比,nuScenes更强调多传感器融合。一个典型传感器配置包括:

  • 6个摄像头

  • 1个LiDAR

  • 5个Radar

  • IMU

  • GPS

因此,nuScenes特别适合研究3D目标检测、多目标跟踪、传感器融合、预测和场景理解。

nuScenes怎么下载

nuScenes需要先进入官方Download页面注册账户并登录。官方说明显示,数据下载免费,但需要注册并同意相关使用条款;数据也提供在AWS Open Data Registry中。NuScenes

如果只是第一次学习nuScenes,不建议直接下载完整数据。官方教程提供了v1.0-mini版本,可以先使用小规模数据熟悉目录结构、JSON数据库以及SDK的调用方式。官方教程给出的示例会将mini数据解压到:

/data/sets/nuscenes

然后通过nuscenes-devkit进行读取。NuScenes

完整数据下载完成后,还需要根据研究方向选择trainval、test以及其他扩展数据。nuScenes官方devkit要求相关数据解压到统一的数据根目录,并保留samples、sweeps、maps和v1.0-*等目录结构。GitHub

nuScenes目录结构

一个典型的nuScenes目录可以整理为:

nuscenes/
├── maps/
├── samples/
│   ├── CAM_BACK/
│   ├── CAM_BACK_LEFT/
│   ├── CAM_BACK_RIGHT/
│   ├── CAM_FRONT/
│   ├── CAM_FRONT_LEFT/
│   ├── CAM_FRONT_RIGHT/
│   └── LIDAR_TOP/
├── sweeps/
├── v1.0-mini/
├── v1.0-trainval/
└── v1.0-test/

samples保存关键帧传感器数据,sweeps保存中间帧数据,而v1.0-*目录主要保存数据集的元数据和标注JSON文件。GitHub

nuScenes的数据组织方式与KITTI差别很大,它不是简单通过“图片文件名 + 标签文件”建立对应关系,而是通过数据库表之间的token关联不同传感器、样本、场景和标注。

nuScenes核心数据概念

第一次使用nuScenes时,最容易困惑的是各种JSON表之间的关系。

官方教程将数据拆分为多个基本对象,包括:

  • log:一次数据采集记录。

  • scene:约20秒的驾驶片段。

  • sample:某个时间点的关键帧。

  • sample_data:某一个传感器采集的数据。

  • ego_pose:车辆自身的位置和姿态。

  • sensor:传感器定义。

  • calibrated_sensor:传感器在车辆上的标定信息。

  • instance:目标实例。

  • category:目标类别。

  • attribute:目标属性。

  • sample_annotation:某个时间点的目标标注。

  • map:地图相关数据。NuScenes

这种设计虽然比KITTI复杂,但对于多传感器时间同步和目标跟踪更加灵活。

安装nuScenes开发工具

Python环境中可以安装官方devkit:

Bash
pip install nuscenes-devkit

安装完成后,可以使用下面的代码加载mini数据:

Python
运行
from nuscenes.nuscenes import NuScenes

nusc = NuScenes(
    version='v1.0-mini',
    dataroot='/data/sets/nuscenes',
    verbose=True
)

然后查看场景:

Python
运行
nusc.list_scenes()

官方教程中也采用类似方式初始化NuScenes对象,并通过SDK加载数据表和标注信息。NuScenes

如果使用的是完整数据,需要把version修改为实际下载的数据版本,例如:

Python
运行
nusc = NuScenes(
    version='v1.0-trainval',
    dataroot='/data/sets/nuscenes',
    verbose=True
)

KITTI与nuScenes如何选择

两套数据集的定位并不完全相同。

对比项目KITTInuScenes
数据特点经典自动驾驶视觉与LiDAR数据多传感器融合数据
典型场景城市、郊区、高速城市复杂交通
摄像头双目为主多摄像头环视
LiDAR有有
Radar非核心数据包含Radar
数据组织相对简单数据库关联结构
3D检测常用常用
视觉里程计很适合也可研究
多传感器融合支持更突出
入门难度相对较低相对较高
适合初学者较适合建议先使用mini

如果目标是学习自动驾驶数据集的基本结构、LiDAR读取、相机标定和传统3D检测流程,KITTI通常更容易上手。

如果研究重点是多摄像头、LiDAR、Radar联合感知,或者希望研究更加复杂的自动驾驶场景,nuScenes的数据组织和传感器配置会更加符合这类实验需求。

KITTI和nuScenes数据预处理注意事项

数据下载完成后,真正容易出问题的往往不是下载,而是预处理。

首先要确认数据目录。很多开源项目会在配置文件中直接写死类似:

/data/kitti
/data/sets/nuscenes

如果实际路径不同,应修改配置文件中的数据根目录,而不是随意移动部分子目录。

其次要检查压缩包是否完整。KITTI不同任务需要的文件不同,不能认为下载一个压缩包就包含所有实验需要的数据。官方Benchmark页面会分别列出图像、点云、标注和开发工具等资源。CVLibs+1

nuScenes则要特别注意重复目录。多个归档文件解压到同一个根目录时,应避免覆盖已有目录。官方devkit明确要求将相关归档解压到统一目录,并保持samples、sweeps、maps和版本目录之间的完整结构。GitHub

使用数据集前检查数据完整性

可以通过简单的Python脚本检查KITTI点云文件:

Python
运行
from pathlib import Path
import numpy as np

root = Path("KITTI/training/velodyne")

files = list(root.glob("*.bin"))

for file in files[:5]:
    points = np.fromfile(file, dtype=np.float32)
    print(file.name, points.size // 4)

如果数据正常,每个文件的元素数量应该能够被4整除。

nuScenes则可以直接通过SDK加载:

Python
运行
from nuscenes.nuscenes import NuScenes

nusc = NuScenes(
    version="v1.0-mini",
    dataroot="/data/sets/nuscenes",
    verbose=False
)

print(len(nusc.scene))
print(len(nusc.sample))

官方mini数据加载后包含场景、sample、sample_data、标注等多张关联表,可以利用这些信息快速判断数据是否安装正确。NuScenes

常见下载和使用问题

1. KITTI下载页面无法直接下载

首先检查是否完成注册和邮箱激活。当前KITTI下载政策要求用户注册并说明数据使用目的。CVLibs

2. nuScenes SDK提示找不到数据

重点检查dataroot是否正确,并确认该目录下是否同时存在samples、sweeps、maps和对应的v1.0-*目录。

3. 点云和图像无法正确对应

KITTI需要检查文件编号和标定文件;nuScenes则需要通过sample、sample_data和token关系获取对应传感器数据,不能简单按照文件名排序后进行匹配。

4. 运行3D检测模型出现坐标偏移

通常需要检查坐标系、旋转角定义、长度宽度高度排列方式以及传感器标定参数。不同数据集对3D框的定义并不完全一致,直接转换标签格式很容易出现错误。

5. nuScenes完整数据太大

可以先下载v1.0-mini进行代码调试。官方教程本身就是以mini版本作为快速入门示例,确认数据读取和训练流程正常后,再切换到完整数据。NuScenes

数据集使用建议

实际开展自动驾驶算法实验时,建议先确定“任务”再决定“下载哪些数据”。

如果只是验证模型代码,优先使用KITTI的小规模子集或nuScenes mini。模型能够正常读取图像、点云和标签后,再扩展到完整训练集。

如果进行3D目标检测,应同时关注点云、标定文件和3D标注;如果进行多模态融合,还需要保证图像、LiDAR和其他传感器之间的时间与空间关系正确。

对于nuScenes,还应该尽早理解token和数据库表之间的关联。官方devkit已经提供了数据读取和可视化工具,直接基于SDK处理数据通常比自己解析大量JSON文件更加稳妥。NuScenes+1

另外,KITTI官方数据服务器在2026年9月曾进行服务器恢复,官方页面提示相关时间段内的Benchmark结果需要重新提交。因此,如果涉及论文实验、排行榜提交或数据版本复现,最好以官方当前页面公布的信息为准。CVLibs+1

对于研究人员而言,KITTI更像是自动驾驶视觉和LiDAR研究中的经典基准,而nuScenes则提供了更加完整的多传感器自动驾驶数据体系。理解两者的数据格式、坐标系、标注方式和工具链,不仅能够顺利完成数据下载,也能减少后续模型训练和评测阶段的大量数据处理问题。