NuScenes
约 5917 字大约 20 分钟
数据集
2025-04-24
https://www.nuscenes.org
概述
nuScenes 数据集(读音为 /nuːsiːnz/)是由 Motional(前身为 nuTonomy)团队开发的用于自动驾驶的公开大规模数据集。Motional 致力于让无人驾驶车辆变得安全、可靠且易于获取。通过向公众发布部分数据,Motional 希望支持计算机视觉和自动驾驶领域的公共研究。
为此,我们在波士顿和新加坡这两个以交通密集和驾驶情况极具挑战性而闻名的城市中收集了 1000 个驾驶场景。这些时长为 20 秒的场景是手动挑选的,展示了多样的、有趣的驾驶操作、交通情况和意外行为。nuScenes 的丰富复杂性将鼓励开发能够在有数十个物体的场景中实现安全驾驶的方法。在不同大洲收集数据,进一步使我们能够研究计算机视觉算法在不同地点、天气条件、车辆类型、植被、道路标记以及左侧行驶与右侧行驶情况下的泛化能力。
为了便于开展常见的计算机视觉任务,例如目标检测和跟踪,我们在整个数据集中以 2Hz 的频率为 23 个目标类别标注了准确的 3D 边界框。此外,我们还标注了目标级别的属性,例如可见性、活动和姿态。
**2019 年 3 月,我们发布了完整的 nuScenes 数据集,包含所有 1000 个场景。**完整的数据集包括大约 140 万张摄像头图像、39 万次激光雷达扫描、140 万次雷达扫描以及 4 万个关键帧中的 140 万个目标边界框。其他功能(地图图层、原始传感器数据等)将很快推出。我们还组织了 CVPR 2019 自动驾驶研讨会中的 nuScenes 3D 检测挑战赛。
nuScenes 数据集受到开创性的 KITTI 数据集的启发。nuScenes 是第一个提供自动驾驶车辆整个传感器套件数据的大规模数据集(6 个摄像头、1 个激光雷达、5 个雷达、GPS、IMU)。与 KITTI 相比,nuScenes 包含了 7 倍多的目标标注。
大多数之前发布的数据集都专注于基于摄像头的目标检测(Cityscapes、Mapillary Vistas、Apolloscapes、Berkeley Deep Drive),而 nuScenes 的目标是研究整个传感器套件。
**2020 年 7 月,我们发布了 nuScenes-lidarseg。**在 nuScenes-lidarseg 中,我们为 nuScenes 中的关键帧的每个激光雷达点标注了 32 种可能的语义标签(即激光雷达语义分割)。因此,nuScenes-lidarseg 包含了 4 万个点云和 1000 个场景中的 14 亿个标注点(850 个场景用于训练和验证,150 个场景用于测试)。
nuScenes 数据集仅可用于非商业目的,免费使用。非商业用途是指不主要以获取商业利益或金钱补偿为目的。非商业用途的例子包括但不限于个人使用、教育使用(如在学校、学院、大学等场所),以及某些研究用途。如果您打算将 nuScenes 数据集用于商业目的,我们建议您通过发送电子邮件至 nuScenes@motional.com 与我们联系,以获取商业许可选项。
我们希望这个数据集能够让世界各地的研究人员开发出更安全的自动驾驶技术。
引用 nuScenes 时,请使用以下引用格式:
@article{nuscenes2019,
title={nuScenes: A multimodal dataset for autonomous driving},
author={Holger Caesar and Varun Bankiti and Alex H. Lang and Sourabh Vora and
Venice Erin Liong and Qiang Xu and Anush Krishnan and Yu Pan and
Giancarlo Baldan and Oscar Beijbom},
journal={arXiv preprint arXiv:1903.11027},
year={2019}
}
数据收集
场景规划
对于 nuScenes 数据集,我们在波士顿和新加坡收集了大约 15 小时的驾驶数据。对于完整的 nuScenes 数据集,我们发布了来自波士顿海港和新加坡的 One North、Queenstown 以及 Holland Village 区域的数据。驾驶路线经过精心选择,旨在捕捉具有挑战性的场景。我们力求涵盖多样的地点、时间和天气条件。为了平衡类别频率分布,我们增加了稀有类别(例如自行车)的场景数量。根据这些标准,我们手动挑选了 1000 个时长为 20 秒的场景。这些场景由专业标注人员进行仔细标注。标注人员的指导说明可在开发工具包仓库中找到。

波士顿海港

新加坡 Queenstown

新加坡 One North

新加坡 Holland Village
车辆配置
我们使用两辆雷诺 Zoe 汽车在波士顿和新加坡进行驾驶,其传感器布局完全相同。这些数据是从研究平台上收集的,并不能代表 Motional 产品中所使用的配置。请参阅上述图表以了解传感器的放置位置。我们发布了以下传感器的数据:
1 个旋转激光雷达(Velodyne HDL32E):
- 20Hz 采集频率
- 32 束光,每圈约 1080(±10)个点
- 32 通道
- 水平视场角 360°,垂直视场角 +10° 至 -30°,均匀方位角
- 范围 80 米 - 100 米,有效返回距离可达 70 米,精度 ±2 厘米
- 每秒最多约 139 万个点
5 个长距离雷达传感器(Continental ARS 408-21):
- 13Hz 采集频率
- 77GHz
- 使用调频连续波在一次扫描周期内独立测量距离和速度
- 最大测量距离 250 米
- 速度精度 ±0.1 公里/小时
6 个摄像头(Basler acA1600-60gc):
- 12Hz 采集频率
- Evetar Lens N118B05518W F1.8 f5.5mm 1/1.8"
- 1/1.8" CMOS 传感器,分辨率为 1600×1200
- 采用 Bayer8 格式,每个像素编码为 1 字节
- 从原始分辨率裁剪出 1600×900 的感兴趣区域,以减少处理和传输带宽
- 自动曝光,曝光时间限制在最大 20 毫秒以内
- 图像解包为 BGR 格式并压缩为 JPEG
- 请参阅下图了解摄像头的方向和重叠区域
1 个 IMU & GPS(Advanced Navigation Spatial):
- 定位精度 20 毫米
- 带 GNSS 的航向精度 0.2°
- 横滚和俯仰精度 0.1°
- 定位结合了 IMU、GPS 和高精度激光雷达地图(更多细节请参阅我们的论文)
传感器校准
为了获得高质量的多传感器数据集,对每个传感器的外参和内参进行校准至关重要。我们将外参坐标相对于车辆自身坐标系(即后车轴中点)进行表达。以下是最重要的步骤:
- 激光雷达外参:
我们使用激光线标尺精确测量激光雷达相对于车辆自身坐标系的相对位置。
- 摄像头外参:
我们在摄像头和激光雷达传感器前方放置一个立方体校准目标。该目标由三个带有已知图案的正交平面组成。
在检测到图案后,我们通过将校准目标的平面进行对齐,计算出从摄像头到激光雷达的变换矩阵。
根据上述计算出的激光雷达到车辆自身坐标系的变换,我们就可以计算出摄像头到车辆自身坐标系的变换以及相应的外参。
- 雷达外参:
我们将雷达水平安装,然后在城市环境中收集雷达测量数据。在过滤掉移动物体的雷达回波后,我们采用穷举法对静态物体的补偿范围率进行最小化处理,以此来校准偏航角。
- 摄像头内参校准:
我们使用一个带有已知图案的校准目标板,以此来推断摄像头的内参和畸变参数。
传感器同步
为了实现激光雷达和摄像头之间良好的跨模态数据对齐,当顶部激光雷达扫描经过摄像头视场中心时,触发摄像头曝光。
图像的时间戳是曝光触发时间,而激光雷达扫描的时间戳是当前激光雷达帧完成一次完整旋转的时间。
鉴于摄像头的曝光时间几乎瞬间完成,这种方法通常能够提供良好的数据对齐。需要注意的是,摄像头的运行频率为 12Hz,而激光雷达的运行频率为 20Hz。12 次摄像头曝光尽可能均匀地分布在 20 次激光雷达扫描之间,因此并非所有激光雷达扫描都有对应的摄像头帧。
将摄像头的帧率降低到 12Hz,有助于减少感知系统的计算、带宽和存储需求。
隐私保护
保护第三方隐私是我们的首要任务。为此,我们使用最先进的目标检测技术来检测车牌和人脸。我们力求实现高召回率,并移除那些与已知人物和车辆边界框的重投影不重叠的误检结果。最终,我们利用目标检测器的输出结果,在 nuScenes 的图像中对人脸和车牌进行模糊处理。
数据格式
attribute
属性是可以在类别保持不变的情况下更改的实例的属性。例如:一辆正在停放/停止/移动的车辆,以及一辆自行车是否有人骑。
attribute {
"token": <str> -- 唯一的标识符
"name": <str> -- 属性名
"description": <str> -- 属性描述
}
calibrated_sensor
定义在特定车辆上校准的特定传感器(激光雷达/雷达/摄像机)。所有外部参数都是关于自我车体框架给出的。所有相机图像都没有失真和校正。
calibrated_sensor {
"token": <str> -- 唯一的标识符
"sensor_token": <str> -- 指向传感器类型的外键。
"translation": <float> [3] -- 以米为单位的坐标系原点: x, y, z.
"rotation": <float> [4] -- 坐标系方向为四元数: w, x, y, z.
"camera_intrinsic": <float> [3, 3] -- 内置相机校准。对于非相机的传感器为空。
}
category
对象类别的分类(例如车辆、人)。子类别由一个点划分(如:human.pedestrian.adult)。
category {
"token": <str> -- 唯一的标识符.
"name": <str> -- 类别名称,子类别由句点划分
"description": <str> -- 类别描述
"index": <int> -- 在nuScenes-lidarseg中 .bin 文件中用于提高效率的标签索引。
}
ego_pose
自车具在特定时间戳的姿势。给出了 log 的全局坐标系。ego_pose是我们论文中描述的基于激光雷达地图的定位算法的输出。定位在x-y平面上是二维的。
ego_pose {
"token": <str> -- 唯一的标识符.
"translation": <float> [3] -- 坐标系原点以米为单位:x, y, z。注意z总是0
"rotation": <float> [4] -- 坐标系方向为四元数:w x y z。
"timestamp": <int> -- 唯一的表示符.
}
instance
对象实例,例如特定的车辆。这个表是我们观察到的所有对象实例的枚举。注意,实例不是跨场景跟踪的
instance {
"token": <str> -- 唯一的标识符.
"category_token": <str> -- 指向物体类别的外键
"nbr_annotations": <int> -- 此实例的注释数量.
"first_annotation_token": <str> -- 外键。指向此实例的第一个注释
"last_annotation_token": <str> -- 外键。指向此实例的最后一个注释
}
lidarseg
nuScenes-lidarseg注释和sample_data之间的映射,对应于与关键帧相关的lidar点云。
slidarseg {
"token": <str> -- 唯一的标识符.
"filename": <str> -- 包含nuScenes-lidarseg标签的.bin文件的名称。这些是使用numpy以二进制格式存储的uint8的numpy数组
"sample_data_token": <str> -- 外键。Sample_data对应于带注释的激光雷达pointcloud,带有is_key_frame=True。
}
log
提取数据的日志的信息。
log {
"token": <str> -- 唯一的标识符.
"logfile": <str> -- 日志文件名.
"vehicle": <str> -- 车辆名称.
"date_captured": <str> -- 日期 (YYYY-MM-DD).
"location": <str> -- 定位, e.g. singapore-onenorth.
}
map
从自顶向下视图存储为二进制语义掩码的地图数据。
map {
"token": <str> -- 唯一的标识符.
"log_tokens": <str> [n] -- 外键.
"category": <str> -- 地图类别,目前只有semantic_prior用于可驾驶的表面和人行道
"filename": <str> -- 具有映射掩码的文件的相对路径。
}
sample
一个sample是一个带注释的2hz关键帧。数据收集在(大约)相同的时间戳作为单个LIDAR扫描的一部分。
sample {
"token": <str> -- 唯一的标识符.
"timestamp": <int> -- Unix时间戳
"scene_token": <str> -- 指向scene的外键
"next": <str> -- 外键。在时间上跟随这个样本。空如果场景结束。
"prev": <str> -- 外键。在时间上早于此的样本。如果场景开始为空。
}
sample_annotation
定义样本中物体位置的边界框。所有位置数据都是在全局坐标系下给出的。
sample_annotation {
"token": <str> -- 唯一的标识符
"sample_token": <str> -- 外键。注意:这指向一个样本而不是一个sample_data,因为注释是在样本级别上完成的,考虑了所有相关的sample_data。
"instance_token": <str> -- 外键。这个注释是哪个对象实例。随着时间的推移,一个实例可以有多个注释。
"attribute_tokens": <str> [n] -- 外键。此注释的属性列表。属性会随着时间而改变,所以它们属于这里,而不是实例表中。
"visibility_token": <str> -- 外键。能见度也可能随着时间的推移而改变。如果没有标注可见性,则token为空字符串。
"translation": <float> [3] -- 边界框的位置,以米为单位,如center_x, center_y, center_z
"size": <float> [3] -- 边框大小以米为单位,如宽、长、高。
"rotation": <float> [4] -- 边框方向为四元数:w, x, y, z
"num_lidar_pts": <int> -- 这个检测框里的激光雷达点的数量。在此样本识别的激光雷达扫描过程中计算点。
"num_radar_pts": <int> -- 这个盒子里雷达点的数目。在此样本识别的雷达扫描过程中计算点。这个数字是所有雷达传感器的总和,没有任何无效的点滤波
"next": <str> -- 外键。来自后面同一对象实例的示例注释。如果这是该对象的最后一个注释,则为空。
"prev": <str> -- 外键。来自时间上位于此之前的同一对象实例的示例注释。如果这是该对象的第一个注释,则为空。
}
sample_data
传感器数据,如图像、点云或雷达返回。对于带有is_key_frame=True的sample_data,时间戳应该非常接近它所指向的样本。对于非关键帧,sample_data指向时间最接近的样本。
sample_data {
"token": <str> -- 唯一的标识符.
"sample_token": <str> -- 外键。与此sample_data相关联的示例。
"ego_pose_token": <str> -- 外键.
"calibrated_sensor_token": <str> -- 外键
"filename": <str> -- 磁盘上data-blob的相对路径.
"fileformat": <str> -- 数据文件格式.
"width": <int> -- 如果样本数据是一张图像,则这是图像宽度(以像素为单位)
"height": <int> -- 如果样本数据是一张图像,则这是图像高度(以像素为单位)。
"timestamp": <int> -- Unix时间戳。
"is_key_frame": <bool> -- 如果sample_data是key_frame的一部分,则为True,否则为False。
"next": <str> -- 外键。来自同一传感器的样本数据在时间上跟随这个。空如果场景结束。
"prev": <str> -- 外键。从同一传感器采样数据,在此时间之前。如果场景开始为空。
}
scene
场景是从日志中提取的20秒长的连续帧序列。同一个日志可以产生多个场景。注意,对象标识(实例token)不会跨场景保存。
scene {
"token": <str> -- 唯一的标识符.
"name": <str> -- 短字符串标识符。
"description": <str> -- 更长的场景描述。
"log_token": <str> -- 外键。提取数据的位置记录日志的点。
"nbr_samples": <int> -- 这个场景中的样本数量
"first_sample_token": <str> -- 外键。指向场景中的第一个样本。
"last_sample_token": <str> -- 外键。指向场景中的最后一个样本。
}
sensor
特定的传感器类型。
sensor {
"token": <str> -- 唯一的标识符.
"channel": <str> -- 传感器通道名称
"modality": <str> {camera, lidar, radar} -- 传感器形态。支持括号内的类别
}
visibility
实例的可见性是在所有6个图像中可见的注释的百分比。分为4个bin : 0-40%,40-60%,60-80%和80-100%。
visibility {
"token": <str> -- 唯一的标识符.
"level": <str> -- 能见度水平
"description": <str> -- 能见度描述
}
数据标注
在收集驾驶数据后,我们以 2Hz 的频率对同步良好的关键帧(图像、激光雷达、雷达)进行采样,并将它们发送给我们的标注合作伙伴 Scale 进行标注。借助专业标注人员和多步验证流程,我们实现了高度准确的标注。nuScenes 数据集中的所有目标都配有语义类别,以及每个出现帧的 3D 边界框和属性。与 2D 边界框相比,这使我们能够准确推断目标在空间中的位置和方向。
我们为 23 个目标类别提供了真值标签。有关每个类别的详细定义和示例图像,请参阅标注人员指导说明。对于完整的 nuScenes 数据集,我们提供了以下类别的标注(不包括测试集):
对于 nuScenes-lidarseg,我们为激光雷达点云中的每个点标注了语义标签。除了 nuScenes 中的 23 个前景类别(事物)外,我们还增加了 9 个背景类别(背景)。有关每个类别的详细定义和示例图像,请参阅 nuScenes 和 nuScenes-lidarseg 的标注人员指导说明。我们提供了以下类别的标注(不包括测试集):
类别 | nuScenes 立方体 | 立方体比例 | Lidarseg 点 | 点比例 |
---|---|---|---|---|
动物 | 787 | 0.07% | 5,385 | 0.01% |
人类.行人.成人 | 208,240 | 17.86% | 2,156,470 | 2.73% |
人类.行人.儿童 | 2,066 | 0.18% | 9,655 | 0.01% |
人类.行人.建筑工人 | 9,161 | 0.79% | 139,443 | 0.18% |
人类.行人.个人移动工具 | 395 | 0.03% | 8,723 | 0.01% |
人类.行人.警察 | 727 | 0.06% | 9,159 | 0.01% |
人类.行人.婴儿车 | 1,072 | 0.09% | 8,809 | 0.01% |
人类.行人.轮椅 | 503 | 0.04% | 12,168 | 0.02% |
可移动物体.障碍物 | 152,087 | 13.04% | 9,305,106 | 11.79% |
可移动物体.碎片 | 3,016 | 0.26% | 66,861 | 0.08% |
可移动物体.可推拉物体 | 24,605 | 2.11% | 718,641 | 0.91% |
可移动物体.交通锥 | 97,959 | 8.40% | 736,239 | 0.93% |
静止物体.自行车架 * | 2,713 | 0.23% | 163,126 | 0.21% |
车辆.自行车 | 11,859 | 1.02% | 141,351 | 0.18% |
车辆.公交车.铰接式 | 1,820 | 0.16% | 357,463 | 0.45% |
车辆.公交车.刚性 | 14,501 | 1.24% | 4,247,297 | 5.38% |
车辆.汽车 | 493,322 | 42.30% | 38,104,219 | 48.27% |
车辆.工程车 | 14,671 | 1.26% | 1,514,414 | 1.92% |
车辆.应急车.救护车 | 49 | 0.00% | 2,218 | 0.00% |
车辆.应急车.警车 | 638 | 0.05% | 59,590 | 0.08% |
车辆.摩托车 | 12,617 | 1.08% | 427,391 | 0.54% |
车辆.拖车 | 24,860 | 2.13% | 4,907,511 | 6.22% |
车辆.卡车 | 88,519 | 7.59% | 15,841,384 | 20.07% |
总计 | 1,166,187 | 100.00% | 78,942,623 | 100.00% |
平面.可行驶表面 | - | - | 316,958,899 | 28.64% |
平面.其他 | - | - | 8,559,216 | 0.77% |
平面.人行道 | - | - | 70,197,461 | 6.34% |
平面.地形 | - | - | 70,289,730 | 6.35% |
静止物体.人造物体 | - | - | 178,178,063 | 16.10% |
静止物体.其他 | - | - | 817,150 | 0.07% |
静止物体.植被 | - | - | 122,581,273 | 11.08% |
车辆.自身 | - | - | 337,070,621 | 30.46% |
噪声 | - | - | 2,061,156 | 0.19% |
总计 | - | - | 1,106,713,569 | 100.00% |
* 注意:“静止物体.自行车架”类别可能包括未单独标注的自行车。我们使用它来忽略在训练过程中出现的大量共享自行车,以避免使目标检测器偏向这些不太有趣的目标。
此外,nuScenes 中的某些类别具有特殊属性:
属性 | 标注数量 |
---|---|
车辆.移动 | 149,203 |
车辆.停止 | 65,975 |
车辆.停放 | 420,226 |
自行车.有骑手 | 7,331 |
自行车.无骑手 | 17,345 |
行人.坐卧 | 13,939 |
行人.站立 | 46,530 |
行人.移动 | 157,444 |
总计 | 877,993 |
全景
在 nuScenes 的首次发布中,使用边界框或立方体来表示 3D 目标。尽管在许多情况下很有用,但立方体缺乏捕捉关节目标的精细形状细节的能力。全景 nuScenes 通过包含 nuScenes 数据集中 4 万个关键帧的每个激光雷达点的标注,实现了更高层次的粒度。令人惊叹的是,14 亿个激光雷达点每个都标注了语义标签、实例标签和跟踪标签。
语义标签可以是 32 个类别中的一个。除了 nuScenes 中的 23 个前景类别(事物)外,我们还增加了 9 个背景类别(背景)。有关每个类别的详细定义和示例图像,请参阅标注人员指导说明。
全景 nuScenes 的分类体系与 nuScenes 和 nuImages 的其余部分兼容,从而能够开展跨越多种传感器模态的广泛研究。对于行业和学术界来说,这是一个巨大的进步,因为它允许研究人员使用点级语义来研究和量化诸如激光雷达点云分割、前景提取、传感器校准和地图绘制等新问题。在未来,我们计划围绕这些任务组织各种公开挑战。
全景 nuScenes 是站在巨人的肩膀上发展起来的。学术界的 SemanticKITTI 数据集为著名的 KITTI 数据集标注了激光雷达分割标签,覆盖 28 个类别。KITTI 主要由交通密度低、交通情况不太复杂的郊区街道组成,其标注仅涵盖前置摄像头,而不是整个 360 度视图。此外,它不包含雷达,且仅限于非商业用途。nuScenes 旨在改进这些方面,其数据涵盖了新加坡和波士顿的城区和郊区场景。它是一个多模态数据集,覆盖整个 360 度视图,并且可以由商业实体获得许可。继全景 nuScenes 发布之后(其中的激光雷达语义分割标注最初于 2019 年 10 月作为 nuScenes-lidarseg 发布),我们看到其他一些激光雷达分割数据集也相继出现,例如禾赛的 Pandaset,我们期待更多公司与社区共享数据。
与 nuScenes 一样,全景 nuScenes 的标注仅可用于非商业目的,免费使用。非商业用途是指不主要以获取商业利益或金钱补偿为目的。非商业用途的例子包括但不限于个人使用、教育使用(如在学校、学院、大学等场所),以及某些研究用途。如果您打算将 nuScenes 数据集用于商业目的,我们建议您通过发送电子邮件至 nuScenes@motional.com 与我们联系,以获取商业许可选项。
我们希望这个数据集能够让世界各地的研究人员在开发安全自动驾驶技术的道路上走得更远。
如何使用 nuScenes 数据集
└── nuscenes
├── maps
│
├── samples
│
├── sweeps
│
├── lidarseg
│ └── v1.0-{mini, test, trainval} <- Contains the .bin files; a .bin file
│ contains the labels of the points in a
│ point cloud (note that v1.0-test does not
│ have any .bin files associated with it)
│
├── panoptic
│ └── v1.0-{mini, test, trainval} <- Contains the *_panoptic.npz files; a .npz file
│ contains the panoptic labels of the points in a
│ point cloud (note that v1.0-test does not
│ have any .npz files associated with it)
└── v1.0-{mini, test, trainval}
├── Usual files (e.g. attribute.json, calibrated_sensor.json etc.)
├── lidarseg.json <- contains the mapping of each .bin file to the token
├── panoptic.json <- contains the mapping of each .npz file to the token
└── category.json <- contains the categories of the labels (note that the
category.json from nuScenes v1.0 is overwritten)