安波福全面开放自动驾驶汽车开源数据集nuScens。是第一家向公众开放此类安全数据的公司此举填补了自动驾驶汽车行业的一个空白。
nuScenes数据集的灵感来自于开创性的KITTI数据集。 nuScenes是第一个大规模数据集,可提供来自自动驾驶车辆的整个传感器套件(6个摄像头,1个激光雷达,5个毫米波雷达,GPS,IMU)的数据。 与KITTI相比,nuScenes包含7倍多的对象注释。包括对于自动驾驶系统有挑战的复杂道路、天气条件等。
作为第一款通过自动驾驶汽车传感器套件提供信息的大型公共数据集,安波福的nuScens分为1000个场景。这些数据收集自波士顿和新加坡各地,代表了每个城市环境中一些最为复杂的驾驶场景。
其中包含140万幅图像、39万次激光雷达扫描(判断物体之间距离)和140万个人工3D物体边界框(用RGB相机、雷达和激光雷达组合检测的物体)。其他功能(地图图层、原始传感器数据等)将很快推出。
以前发布的大多数数据集都集中在基于相机的对象检测(Cityscapes,Mapillary Vistas,Apolloscapes,Berkeley Deep Drive)上,而nuScenes的目标是研究整个传感器套件。
车辆传感器分布
1x旋转激光雷达:
20Hz捕获频率
32个频道
360°水平FOV,+ 10°至-30°垂直FOV
80m-100m范围,可用返回高度达70米,精度为±2 cm
每秒高达139万点
5个远程RADAR传感器:
77GHz
13Hz捕获频率
使用调频连续波在一个周期内独立测量距离和速度
长达250m的距离
速度精度为±0.1 km / h
6个相机:
12Hz捕获频率
分辨率为1600x1200的1 / 1.8英寸CMOS传感器
Bayer8格式,每像素编码1个字节
从原始分辨率裁剪出1600x900 ROI(感兴趣区域),以减少处理和传输带宽
自动曝光,曝光时间最大为20毫秒
图像解压缩为BGR格式并压缩为JPEG
请参见相机方向和下图中的重叠部分。
传感器校准
为了获得高质量的多传感器数据集,必须校准每个传感器的外部和本征。 我们表示相对于自我框架的外在坐标,即后车轴的中点。 最相关的步骤如下所述:
相机外部特性:
我们在相机和LIDAR传感器的前面放置了一个立方体形的校准目标。 校准目标由三个具有已知图案的正交平面组成。 在检测到模式之后,我们通过对准校准目标的平面来计算从相机到激光雷达的转换矩阵。 给定上面计算的LIDAR到自我框架的转换,我们便可以计算摄像机到自我框架的转换以及由此产生的外部参数。雷达外部
雷达外部特性
我们将雷达水平安装。 然后,我们通过在城市环境中行驶来收集雷达测量值。 在对移动物体的雷达回波进行滤波之后,我们使用蛮力方法校准偏航角,以最大程度地减少静态物体的补偿距离率。
相机固有校准
我们使用具有一组已知图案的校准目标板来推断相机的固有参数和失真参数。
传感器同步
为了在LIDAR和相机之间实现良好的跨模态数据对齐,当顶部LIDAR扫过相机FOV的中心时,将触发相机的曝光。 图像的时间戳是曝光触发时间; LIDAR扫描的时间戳是当前LIDAR帧完全旋转的时间。 考虑到相机的曝光时间几乎是瞬时的,因此这种方法通常可以实现良好的数据对齐。 请注意,摄像头以12Hz运行,而LIDAR以20Hz运行。 12台相机的曝光会尽可能均匀地分布在20台LIDAR扫描中,因此并非所有LIDAR扫描都有对应的相机框架。 将摄像机的帧频降低到12Hz有助于减少感知系统的计算,带宽和存储需求。
二、数据库架构
本文档介绍了nuScenes中使用的数据库架构。 所有注释和元数据(包括校准,地图,车辆坐标等)都包含在关系数据库中。 下面列出了数据库表。 每行都可以通过其唯一的主键令牌进行标识。 诸如sample_token之类的外键可用于链接到表样本的令牌。 请参考该教程以了解最重要的数据库表。
类别
对象类别(例如车辆,人)的分类。 子类别以句点(例如human.pedestrian.adult)描绘。
category {
"token": -- Unique record identifier.
"name": -- Category name. Subcategories indicated by period.
"description": -- Category description.
}
属性
属性是实例的属性,可以在类别保持不变的情况下进行更改。 例如:停车/停止/移动的车辆,以及自行车是否有骑手。
attribute {
"token": -- Unique record identifier.
"name": -- Attribute name.
"description": -- Attribute description.
}
能见度
实例的可见性是在所有6张图像中可见的注释比例。 分为4个0-40%,40-60%,60-80%和80-100%。
visibility {
"token": -- Unique record identifier.
"level": -- Visibility level.
"description": -- Description of visibility level.
}
实例
对象实例,例如 特定的车辆。 该表是我们观察到的所有对象实例的枚举。 请注意,不会跨场景跟踪实例。
instance {
"token": -- Unique record identifier.
"category_token": -- Foreign key. Object instance category.
"nbr_annotations": -- Number of annotations of this instance.
"first_annotation_token":
-- Foreign key. Points to the first annotation of //
this instance.
"last_annotation_token":
-- Foreign key. Points to the last annotation of //
this instance.
}
传感器
特定的传感器类型。
sensor {
"token": -- Unique record identifier.
"channel": -- Sensor channel name.
"modality":
{camera, lidar, radar} -- Sensor modality. //
Supports category(ies) in brackets.
传感器
形态
。
在括号中支持类别。
}
传感器校正
在特定车辆上校准的特定传感器(激光雷达/雷达/摄像机)的定义。 给出了所有关于自我车身框架的外部参数。所有相机图像均未失真和校正。
calibrated_sensor {
"token": -- Unique record identifier.
"sensor_token": -- Foreign key pointing to the sensor type.
"translation": [3] -- Coordinate system origin in meters: x, y, z.
"rotation":
[4] -- Coordinate system orientation as quaternion: w, x, y, z. *
"camera_intrinsic":
[3, 3] -- Intrinsic camera calibration. Empty for sensors that are not cameras. //
摄像机固有校准。
对于不是相机的传感器为空。
}
ego_pose
在特定时间戳车辆姿势。相对于原木地图的全局坐标系。 ego_pose是本文中描述的基于激光雷达图的定位算法的输出。 定位在x-y平面上是二维的。
ego_pose {
"token": -- Unique record identifier.
"translation": [3] -- Coordinate system origin in meters: x, y, z. Note that z is always 0.
"rotation": [4] -- Coordinate system orientation as quaternion: w, x, y, z.
"timestamp": -- Unix time stamp.
}
log
有关从中提取数据的日志的信息。
log {
"token": -- Unique record identifier.
"logfile": -- Log file name.
"vehicle": -- Vehicle name.
"date_captured": -- Date (YYYY-MM-DD).
"location": -- Area where log was captured, e.g. singapore-onenorth.
}
scene
场景是从日志中提取的20帧长的连续帧序列。 多个场景可以来自同一日志。 注意,对象标识(实例标记)不会在场景之间保留。
scene {
"token": -- Unique record identifier.
"name": -- Short string identifier.
"description": -- Longer description of the scene.
"log_token": -- Foreign key. Points to log from where the data was extracted.
"nbr_samples": -- Number of samples in this scene.
"first_sample_token": -- Foreign key. Points to the first sample in scene.
"last_sample_token": -- Foreign key. Points to the last sample in scene.
}
sample
样本是作为单个LIDAR扫描的一部分(大约)在相同的时间戳收集的数据。
sample {
"token": -- Unique record identifier.
"timestamp": -- Unix time stamp.
"scene_token": -- Foreign key pointing to the scene.
"next": -- Foreign key. Sample that follows this in time. Empty if end of scene.
"prev": -- Foreign key. Sample that precedes this in time. Empty if start of scene.
}
Sample_data
传感器数据例如图像、点云或雷达返回数据。对于is_key_frame = True的sample_data,时间戳应该非常接近它所指向的样本。 对于非关键帧,sample_data指向时间上最接近的样本。
sample_data {
"token": -- Unique record identifier.
"sample_token":
-- Foreign key. Sample to which this //
sample_data is associated.
"ego_pose_token": -- Foreign key.
"calibrated_sensor_token": -- Foreign key.
"filename": -- Relative path to data-blob on disk.
"fileformat": -- Data file format.
"width": -- If the sample data is an image, this is the image width in pixels.
"height":
-- If the sample data is an image, this is the //
image height in pixels.
"timestamp": -- Unix time stamp.
"is_key_frame":
-- True if sample_data is part of key_frame, //
else False.
"next":
-- Foreign key. Sample data from the same //
sensor that follows this in time. Empty if end of scene.
"prev":
-- Foreign key. Sample data from the same //
sensor that precedes this in time. Empty if start of scene.
}
sample_annotation
一个边界框,用于定义在样本中看到的对象的位置。 所有位置数据都是相对于全局坐标系给出的。
sample_annotation {
"token": -- Unique record identifier.
"sample_token":
-- Foreign key. NOTE: this points to a sample //
NOT a sample_data since annotations are done on the sample level taking all
//
relevant sample_data into account.
"instance_token":
-- Foreign key. Which object instance is this //
annotating. An instance can have multiple annotations over time.
"attribute_tokens":
[n] -- Foreign keys. List of attributes for this //
annotation. Attributes can change over time, so they belong here, not in the
//
object table.
"visibility_token":
-- Foreign key. Visibility may also change over //
time. If no visibility is annotated, the token is an empty string.
"translation":
[3] -- Bounding box location in meters as //
center_x, center_y, center_z.
"size":
[3] -- Bounding box size in meters as width, //
length, height.
"rotation":
[4] -- Bounding box orientation as quaternion: //
w, x, y, z.
"num_lidar_pts":
-- Number of lidar points in this box. Points are //
counted during the lidar sweep identified with this sample.
"num_radar_pts":
-- Number of radar points in this box. Points //
are counted during the radar sweep identified with this sample. This number is
//
summed across all radar sensors without any invalid point filtering.
"next":
-- Foreign key. Sample annotation from the //
same object instance that follows this in time. Empty if this is the last annotation
//
for this object.
"prev":
-- Foreign key. Sample annotation from the //
same object instance that precedes this in time. Empty if this is the first
//
annotation for this object.
}
map
从顶向下视图存储作为二进制语义掩码存储的地图数据。
map {
"token": -- Unique record identifier.
"log_tokens": [n] -- Foreign keys.
"category": -- Map category, currently only semantic_prior for drivable surface and sidewalk.
"filename": -- Relative path to the file with the map mask.
}