当前位置:   article > 正文

【nuSences数据集】数据集简介与使用(一)

nusence

数据集网址:nuScenes

概述(官网直译)

nuScenes 数据集(发音为 /nuːsiːnz/)是由 Motional(前身为 nuTonomy)团队开发的自动驾驶公共大规模数据集。 Motional 正在使无人驾驶车辆成为安全、可靠和可访问的现实。通过向公众发布我们的数据子集,Motional 旨在支持公众对计算机视觉和自动驾驶的研究。

为此,我们在波士顿和新加坡收集了 1000 个驾驶场景,这两个城市以其密集的交通和极具挑战性的驾驶环境而闻名。 20 秒时长的场景是手动选择的,以展示多样化和有趣的驾驶机动、交通状况和意外行为。 nuScenes 的丰富复杂性将鼓励开发能够在每个场景中有数十个物体的城市地区安全驾驶的方法。收集不同大陆的数据进一步使我们能够研究计算机视觉算法在不同位置、天气条件、车辆类型、植被、道路标记以及左右手交通中的泛化。

为了促进常见的计算机视觉任务,例如对象检测和跟踪,我们在整个数据集上用 2Hz 的准确 3D 边界框注释 23 个对象类别。此外,我们注释对象级别的属性,例如可见性、活动和姿势。

2019 年 3 月,我们发布了包含全部 1000 个场景的完整 nuScenes 数据集。完整的数据集包括大约 140 万个相机图像、39 万个激光雷达扫描、140 万个雷达扫描和 4 万个关键帧中的 140 万个对象边界框。其他功能(地图图层、原始传感器数据等)将很快推出。作为 CVPR 2019 自动驾驶研讨会的一部分,我们还将组织 nuScenes 3D 检测挑战

nuScenes 数据集的灵感来自开创性的KITTI 数据集。 nuScenes 是第一个提供来自自动驾驶汽车的整个传感器套件(6 个摄像头、1 个激光雷达、5 个雷达、GPS、IMU)的数据的大规模数据集。与 KITTI 相比,nuScenes 包含 7 倍以上的对象注释。

之前发布的大多数数据集都专注于基于相机的对象检测(cityscapesmapillaryApollo ScapeBerkeley DeepDrive),而 nuScenes 的目标是查看整个传感器套件。

2020 年 7 月,我们发布了 nuScenes-lidarseg。在 nuScenes-lidarseg 中,我们使用 32 个可能的语义标签之一(即激光雷达语义分割)从 nuScenes 的关键帧中注释每个激光雷达点。因此,nuScenes-lidarseg 在 40,000 个点云和 1000 个场景(850 个用于训练和验证的场景,以及 150 个用于测试的场景)中包含 14 亿个注释点。

nuScenes 数据集可免费用于非商业目的。非商业手段主要不是为了或直接用于商业利益或金钱补偿。非商业用途的例子包括但不限于个人用途、教育用途,例如在学校、学院、大学等,以及一些研究用途。如果您打算将 nuScenes 数据集用于商业目的,我们鼓励您通过发送电子邮件至 nuScenes@motional.com 与我们联系以获取商业许可选项。 我们希望这个数据集能让世界各地的研究人员开发安全的自动驾驶技术。

数据采集

场景规划

对于 nuScenes 数据集,我们在波士顿和新加坡收集了大约 15 小时的驾驶数据。对于完整的 nuScenes 数据集,我们发布了来自波士顿海港和新加坡 One North、皇后镇和荷兰村地区的数据。驾驶路线经过精心挑选,以捕捉具有挑战性的场景。我们的目标是多样化的地点、时间和天气条件。为了平衡类频率分布,我们包含了更多具有稀有类的场景(例如自行车)。使用这些标准,我们手动选择 1000 个场景,每个场景持续 20 秒。这些场景是由人类专家仔细注释的。注释器说明可以在 devkit 存储库中找到。

 汽车设置

我们使用两辆具有相同传感器布局的雷诺 Zoe 汽车在波士顿和新加坡行驶。数据是从研究平台收集的,并不代表 Motional 产品中使用的设置。传感器的放置请参考上图。我们从以下传感器发布数据:

1x 旋转激光雷达(Velodyne HDL32E): 20Hz 捕捉频率, 32 个光束,每个环 1080 (+-10) 个点, 32个频道 ,360° 水平 FOV,+10° 至 -30° 垂直 FOV,统一方位角 80m-100m 范围,可用返回达 70 米,± 2 cm 精度 ,高达每秒约 139 万点。

5x 远程雷达传感器(Continental ARS 408-21): 13Hz 捕捉频率, 77GHz, 使用调频连续波在一个周期内独立测量距离和速度,距离可达 250m,速度精度为 ±0.1 km/h。

6x 相机(Basler acA1600-60gc): 12Hz 捕捉频率, Evetar 镜头N118B05518W F1.8 f5.5mm 1/1.8", 1/1.8'' CMOS 传感器,1600x1200 分辨率,Bayer8 格式,每个像素编码 1 个字节,从原始分辨率裁剪 1600x900 ROI 以减少处理和传输带宽, 自动曝光,曝光时间最长为 20 毫秒,图像解压缩为 BGR 格式并压缩为 JPEG ,请参阅下图中的相机方向和重叠。

1x IMU 和 GPS(高级导航空间): 定位精度20mm ,使用 GNSS 时的航向精度为 0.2°, 滚动和俯仰精度为 0.1° ,定位考虑到 IMU、GPS 和高清激光雷达地图(有关详细信息,请参阅我们的论文)。

传感器校准

为了获得高质量的多传感器数据集,校准每个传感器的外部和内部是必不可少的。我们表示相对于自我框架的外部坐标,即后车轴的中点。最相关的步骤如下所述:

激光雷达外在: 我们使用激光线精确测量激光雷达与自我框架的相对位置。

相机外在因素: 我们在相机和激光雷达传感器前面放置了一个立方体形状的校准目标。校准目标由三个具有已知图案的正交平面组成。在检测到模式后,我们通过对齐校准目标的平面来计算从相机到 LIDAR 的变换矩阵。鉴于上面计算的 LIDAR 到 ego 帧的变换,我们可以计算相机到 ego 帧的变换以及由此产生的外部参数。

雷达外在:我们将雷达安装在水平位置。然后我们通过在城市环境中驾驶来收集雷达测量值。在过滤运动物体的雷达回波后,我们使用蛮力方法校准偏航角,以最小化静态物体的补偿距离率。

相机内在校准:我们使用具有一组已知模式的校准目标板来推断相机的内在和失真参数。

传感器同步

为了在 LIDAR 和摄像头之间实现良好的跨模态数据对齐,当顶部 LIDAR 扫过摄像头 FOV 的中心时,会触发摄像头的曝光。图像的时间戳为曝光触发时间;而激光雷达扫描的时间戳是当前激光雷达帧实现全旋转的时间。鉴于相机的曝光时间几乎是瞬时的,这种方法通常会产生良好的数据对齐。请注意,相机以 12Hz 运行,而 LIDAR 以 20Hz 运行。 12 次相机曝光尽可能均匀地分布在 20 次激光雷达扫描中,因此并非所有激光雷达扫描都有相应的相机帧。将摄像头的帧速率降低到 12Hz 有助于降低感知系统的计算、带宽和存储需求。

隐私保护

保护第三方的隐私是我们的首要任务。为此,我们使用最先进的对象检测技术来检测车牌和人脸。我们的目标是实现高召回率并消除与已知人和车厢的重投影不重叠的误报。最终,我们使用目标检测器的输出来模糊 nuScenes 图像中的人脸和车牌。

数据格式

本文档描述了 nuScenes 中使用的数据库模式。所有注释和元数据(包括校准、地图、车辆坐标等)都包含在关系数据库中。下面列出了数据库表。每一行都可以通过其唯一的key token来标识。诸如 sample_token 之类的外键可用于链接到表样本的令牌。有关最重要的数据库表的介绍,请参阅教程)

 属性

属性是实例的属性,在类别保持不变的情况下可以更改。示例:正在停放/停止/移动的车辆,以及自行车是否有骑手。

属性 {

        "token":                 <str> -- 唯一的记录标识符。

        "name":                 <str> -- 属性名称。

        "description":         <str> -- 属性描述。

}

校准传感器

在特定车辆上校准的特定传感器(激光雷达/雷达/相机)的定义。所有外在参数都是相对于自我车身框架给出的。所有相机图像都没有失真和校正。

校准传感器{

        "token":                             <str> -- 唯一的记录标识符。

        "sensor_token":                <str> -- 指向传感器类型的外键。

        "translation":                     <float> [3] -- 以米为单位的坐标系原点:x、y、z。

        "rotation":                          <float> [4] -- 坐标系方向为四元数:w, x, y, z。

        "camera_intrinsic":            <float> [3, 3] -- 相机内在校准。对于不是相机的传感器为空。

}

类别

对象类别的分类(例如车辆、人类)。子类别由句号划分(例如human.pedestrian.adult)。

类别 {

        "token":                 <str> -- 唯一的记录标识符。

        "name":                 <str> -- 类别名称。按期间表示的子类别。

        "description":         <str> -- 类别描述。

        "index":                 <int> -- 在 nuScenes-lidarseg 的 .bin 标签文件中出于效率原因使用的标签的索引。该字段以前不存在。

}

自我姿势

自我车辆在特定时间戳的姿势。相对于日志地图的全局坐标系给出。 ego_pose 是我们论文中描述的基于激光雷达地图的定位算法的输出。定位在 x-y 平面上是二维的。

自我姿势{

        "token":                         <str> -- 唯一的记录标识符。

        "translation":                 <float> [3] -- 以米为单位的坐标系原点:x、y、z。请注意,z 始终为 0。

        "rotation":                      <float> [4] -- 坐标系方向为四元数:w, x, y, z。

        "timestamp":                 <int> -- Unix 时间戳。

}

实例

一个对象实例,例如特定车辆。该表是我们观察到的所有对象实例的枚举。请注意,不会跨场景跟踪实例。

实例 {

        "token":                                    <str> -- 唯一的记录标识符。

        "category_token":                    <str> -- 指向对象类别的外键。

         "nbr_annotations":                  <int> -- 此实例的注释数。

        "first_annotation_token":          <str> -- 外键。指向此实例的第一个注释。

        "last_annotation_token":          <str> -- 外键。指向此实例的最后一个注释。

}

激光雷达

nuScenes-lidarseg 注释和与关键帧关联的激光雷达点云对应的 sample_datas 之间的映射。

激光雷达{

        "token":                          <str> -- 唯一的记录标识符。

        "filename":                     <str> -- 包含 nuScenes-lidarseg 标签的 .bin 文件的名称。这些是使用 numpy 以二进制格式存储的 uint8 的 numpy 数组。

        "sample_data_token":    <str> -- 外键。 Sample_data 对应于 is_key_frame=True 的带注释的激光雷达点云。

}

日志

有关从中提取数据的日志的信息。

日志 {

        "token":                        <str> -- 唯一的记录标识符。

        "logfile":                       <str> -- 日志文件名。

        "vehicle":                     <str> -- 车辆名称。

        "date_captured":         <str> -- 日期 (YYYY-MM-DD)。

        "location":                    <str> -- 捕获日志的区域,例如新加坡-北方。

}

 地图

从自上而下的视图中映射存储为二进制语义掩码的数据。

地图 {

        "token":                      <str> -- 唯一的记录标识符。

        "log_tokens":             <str> [n] -- 外键。

        "category":                 <str> -- 地图类别,目前只有semantic_prior 用于可行驶的表面和人行道。

        "filename":                 <str> -- 带有地图掩码的文件的相对路径。

}

样本

样本是 2 Hz 的带注释的关键帧。数据是在(大约)与单个 LIDAR 扫描的一部分相同的时间戳收集的。

样本 {

        "token":                   <str> -- 唯一的记录标识符。

        "timestamp":           <int> -- Unix 时间戳。

         "scene_token":      <str> -- 指向场景的外键。

        "next":                    <str> -- 外键。紧随其后的样本。如果场景结束则为空。

         "prev":                   <str> -- 外键。时间上在此之前的样本。如果场景开始,则为空。

}

样本标签

定义样本中所见对象位置的边界框。所有位置数据都是相对于全局坐标系给出的。

样本注释{

        "token":                            <str> -- 唯一的记录标识符。

        "sample_token":              <str> -- 外键。注意:这指向一个样本而不是样本数据,因为注释是在样本级别完成的,并考虑了所有相关的样本数据。

         "instance_token":           <str> -- 外键。此注释是哪个对象实例。随着时间的推移,一个实例可以有多个注释。

         "attribute_tokens":         <str> [n] -- 外键。此注释的属性列表。属性会随着时间而改变,所以它们属于这里,而不是在实例表中。

        "visibility_token":            <str> -- 外键。能见度也可能随时间而改变。如果没有注释可见性,则标记为空字符串。

        "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> -- 外键。来自在此之前的同一对象实例的示例注释。如果这是此对象的第一个注释,则为空。

}

样本数据

传感器数据,例如图像、点云或雷达回波。对于 is_key_frame=True 的 sample_data,时间戳应该非常接近它指向的样本。对于非关键帧,sample_data 指向时间最近的样本。

样本数据 {

        "token":                               <str> -- 唯一的记录标识符。

        "sample_token":                 <str> -- 外键。此 sample_data 关联的样本。

        "ego_pose_token":                     <str> -- 外键。

        "calibrated_sensor_token":         <str> -- 外键。

        "filename":                          <str> -- 磁盘上数据 blob 的相对路径。

        "fileformat":                         <str> -- 数据文件格式。

        "width":                               <int> -- 如果样本数据是图像,这是图像宽度(以像素为单位)。

        "height":                              <int> -- 如果样本数据是图像,这是图像高度(以像素为单位)。

        "timestamp":                        <int> -- Unix 时间戳。

         "is_key_frame":                 <bool> -- 如果 sample_data 是 key_frame 的一部分,则为 True,否则为 False。

        "next":                                 <str> -- 外键。来自同一个传感器的采样数据及时跟进。如果场景结束则为空。

        "prev":                                 <str> -- 外键。来自在此之前的同一传感器的采样数据。如果场景开始,则为空。

}

场景

场景是从日志中提取的 20 秒长的连续帧序列。多个场景可以来自同一个日志。请注意,对象身份(实例标记)不会跨场景保留。

场景 {

        "token":                               <str> -- 唯一的记录标识符。

        "name":                               <str> -- 短字符串标识符。

        "description":                       <str> -- 场景的更长描述。

        "log_token":                         <str> -- 外键。提取数据的日志点。

        "nbr_samples":                    <int> -- 该场景中的样本数。

         "first_sample_token":          <str> -- 外键。指向场景中的第一个样本。

        "last_sample_token":           <str> -- 外键。指向场景中的最后一个样本。

}

传感器

特定的传感器类型。

传感器 {

        "token":                      <str> -- 唯一的记录标识符。

         "channel":                 <str> -- 传感器通道名称。

        "modality":                 <str> {camera,lidar,radar} -- 传感器模态。支持括号中的类别。

}

能见度

实例的可见性是在所有 6 个图像中可见的注释部分。分为 0-40%、40-60%、60-80% 和 80-100% 的 4 个容器。

能见度{

         "token":                 <str> -- 唯一的记录标识符。

        "level":                   <str> -- 可见性级别。

        "description":         <str> -- 可见性级别的描述。

}

数据标注

收集驾驶数据后,我们以 2Hz 采样同步良好的关键帧(图像、激光雷达、雷达),并将它们发送给我们的标注合作伙伴 Scale 进行标注。使用专家注释器和多个验证步骤,我们实现了高度准确的注释。 nuScenes 数据集中的所有对象都带有一个语义类别,以及一个 3D 边界框和它们出现的每一帧的属性。与 2D 边界框相比,这使我们能够准确地推断出对象在空间中的位置和方向。 我们为 23 个对象类别提供了真实标签。有关每个类和示例图像的详细定义,请参阅注释器说明。对于完整的 nuScenes 数据集,我们为以下类别提供注释(不包括测试集): 对于 nuScenes-lidarseg,我们用语义标签注释激光雷达点云中的每个点。除了来自 nuScenes 的 23 个前景类(事物)之外,我们还包括 9 个背景类(事物)。有关每个类和示例图像的详细定义,请参阅 nuScenes 和 nuScenes-lidarseg 的注释器说明。我们为以下类别提供注释(不包括测试集):(见官网图)

教程

我们在 devkit 中提供了许多 nuScenes 作为交互式 Jupyter Notebooks 的教程。对于不想下载数据集的用户,教程在此处显示为静态页面。这些教程涵盖了 nuScenes、nuScenes-lidarseg、地图和 CAN 总线扩展的基本用法,以及预测挑战。使用下面的下拉菜单选择您要查看的教程。 或者,您可以在 Colab 上以交互方式运行教程。

探索

在此页面上,我们提供了工具来预览 nuScenes 数据集的一些场景,而无需下载整个数据集。

用法

下面是 nuScenes 中示例场景的 LIDAR 点云。要进行导航,请使用 SW 键前后移动,AD 键左右移动,QE 键上下移动,箭头键用于旋转,+- 用于在关键帧之间及时前后移动。您还可以使用底部的滑块跳转到不同的关键帧。加载场景可能需要 5-20 秒。要链接到特定场景或帧,请使用链接 nuScenes,其中 scene-0011 标识场景,0 是第一帧。您的浏览器必须支持 WebGL。如果您遇到技术问题,请联系 nuScenes@motional.com。请注意,该工具可能会在某些版本的 Chrome 上崩溃。(去官网自己试

激光雷达

在第一个 nuScenes 版本中,边界框或长方体用于表示 3D 对象。虽然在许多情况下很有用,但长方体缺乏捕捉关节物体精细形状细节的能力。 nuScenes-lidarseg 代表激光雷达语义分割,它具有更高级别的粒度,它为 nuScenes 数据集的 40,000 个关键帧中的每个激光雷达点包含一个带有语义标签的注释——一个惊人的 1,400,000,000 个激光雷达点,用 32 个标签之一进行注释。除了来自 nuScenes 的 23 个前景类(事物)之外,我们还包括 9 个背景类(事物)。有关每个类和示例图像的详细定义,请参阅 nuscenes 和 nuScenes-lidarseg(github.com) 的注释器说明。

nuScenes-lidarseg 的分类与其他 nuScenes 和 nuImage 兼容,因此可以跨多种传感器模式进行广泛的研究。这对于工业界和学术界来说都是向前迈出的重要一步,因为它允许研究人员研究和量化新问题,例如激光雷达点云分割、前景提取、传感器校准和使用点级语义的映射。未来,我们计划围绕这些任务组织各种公共挑战。

nuScenes-lidarseg 站在巨人的肩膀上。学术 SemanticKITTI 数据集使用 28 个类的激光雷达分割标签注释著名的 KITTI 数据集。 KITTI 主要由交通密度低且交通状况挑战较少的郊区街道组成。它的注释只覆盖了前置摄像头,而不是整个 360 度视图。此外,它不包含雷达,并且严格用于非商业用途。 nuScenes 着手改进这些方面,包括来自新加坡和波士顿的城市和郊区场景的密集数据。它是一个覆盖整个 360 度视图的多模式数据集,可供商业实体使用。继 2019 年 10 月首次发布 nuScenes-lidarseg 之后,我们看到了许多其他激光雷达分割数据集的出现,例如 Hesa​​i 的 Pandaset,我们期待更多的公司与社区分享他们的数据。

就像 nuScenes 一样,nuScenes-lidarseg 注释可免费用于非商业用途。非商业手段主要不是为了或直接用于商业利益或金钱补偿。非商业用途的例子包括但不限于个人用途、教育用途,例如在学校、学院、大学等,以及一些研究用途。如果您打算将 nuScenes 数据集用于商业目的,我们鼓励您通过发送电子邮件至 nuScenes@motional.com 与我们联系以获取商业许可选项。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/620642
推荐阅读
相关标签
  

闽ICP备14008679号