nuImages是一个具有图像级2d注释的大型自动驾驶数据集。它基于scale标注工具进行标记。
nuScenes相比于其他的数据集,例如kitti apollo scape等,增加了radar(毫米波雷达)传感器,对于传感器的对比,可参考Lidar vs Radar vs Camera。radar的引入,给自动驾驶系统提供了在恶劣条件下相机与激光雷达传感器失灵的解决方案,同时其具有良好的性价比。
nuScenes的主要特点:
1.完善的传感器配置:一个激光雷达,五个毫米波雷达,六个相机,IMU,GPS。
2.数据充足:1000个场景来自于不同的城市,特征复杂:引入了例如可见度信息等丰富了图像的特征信息可以用于其他任务,同时具有庞大的标注对象:1.1B的雷达点以及手工标注的32中分类信息。
车辆传感器布置如上图所示。对于传感器的数据融合和配准,必须要做的一步就是对传感器的校准,其中包括对相机内外参数的校准以及对雷达等传感器的外参校准。
nuScenes对于数据相比于其他数据集有着更加全面的标注,使用并且建立自己的数据集,参考作者的格式定义是个很好的方法。
数据集中基本定义:
log是所收集到的数据的日志信息;scene是20s的视频数据;sample是scene中某个时间戳代表的一帧图像;instance是某一帧图像中所观察到的所有目标实例;sample_annotation我们特意选出的已进行标注过的目标实例。token:数据集中对所有的内容进行编码,包括对数据集对象、传感器、场景、关键帧等进行token的赋值,每个token都是独特的编码。
attribute {
"token": <str> -- Unique record identifier.
"name": <str> -- Attribute name.
"description": <str> -- Attribute description.
}
calibrated_sensor {
"token": <str> -- Unique record identifier.
"sensor_token": <str> -- Foreign key pointing to the sensor type.
"translation": <float> [3] -- Coordinate system origin in meters: x, y, z.
"rotation": <float> [4] -- Coordinate system orientation as quaternion: w, x, y, z.
"camera_intrinsic": <float> [3, 3] -- Intrinsic camera calibration. Empty for sensors that are not cameras.
}
category {
"token": <str> -- Unique record identifier.
"name": <str> -- Category name. Subcategories indicated by period.
"description": <str> -- Category description.
"index": <int> -- The index of the label used for efficiency reasons in the .bin label files of nuScenes-lidarseg. This field did not exist previously.
}
ego_pose {
"token": <str> -- Unique record identifier.
"translation": <float> [3] -- Coordinate system origin in meters: x, y, z. Note that z is always 0.
"rotation": <float> [4] -- Coordinate system orientation as quaternion: w, x, y, z.
"timestamp": <int> -- Unix time stamp.
}
instance {
"token": <str> -- Unique record identifier.
"category_token": <str> -- Foreign key pointing to the object category.
"nbr_annotations": <int> -- 某个实例在一个scene中被标注的次数
"first_annotation_token": <str> -- Foreign key. Points to the first annotation of this instance.
"last_annotation_token": <str> -- Foreign key. Points to the last annotation of this instance.
}
lidarseg {
"token": <str> -- Unique record identifier.
"filename": <str> -- .bin格式的雷达标注文件名称,以uint8的数组数据类型,以二进制格式进行存储)
"sample_data_token": <str> -- Foreign key. Sample_data corresponding to the annotated lidar pointcloud with is_key_frame=True.
}
log {
"token": <str> -- Unique record identifier.
"logfile": <str> -- Log file name.
"vehicle": <str> -- Vehicle name.
"date_captured": <str> -- Date (YYYY-MM-DD).
"location": <str> -- Area where log was captured, e.g. singapore-onenorth.
}
map {
"token": <str> -- Unique record identifier.
"log_tokens": <str> [n] -- Foreign keys.
"category": <str> -- Map category, currently only semantic_prior for drivable surface and sidewalk.
"filename": <str> -- Relative path to the file with the map mask.
}
sample {
"token": <str> -- Unique record identifier.
"timestamp": <int> -- Unix time stamp.
"scene_token": <str> -- Foreign key pointing to the scene.
"next": <str> -- Foreign key. Sample that follows this in time. Empty if end of scene.
"prev": <str> -- Foreign key. Sample that precedes this in time. Empty if start of scene.
}
sample_annotation {
"token": <str> -- Unique record identifier.
"sample_token": <str> -- Foreign key. 说明来自哪个sample
"instance_token": <str> -- Foreign key. 指向某个instance,因为一个实例可以有很多次标注
"attribute_tokens": <str> [n] -- Foreign keys. 这次标注中对象的属性,因为一个目标的属性在不同时间一直在改变所以目标的属性归属于此处管理,而不是归于实例
"visibility_token": <str> -- Foreign key 目标的可见性特征,目标的可见性会一直会改变。
"translation": <float> [3] -- 标注框的中心坐标值
"size": <float> [3] -- 标注框的大小
"rotation": <float> [4] --标注框的方向四元数
"num_lidar_pts": <int> -- 一个雷达扫描期间在标注框内的雷达点
"num_radar_pts": <int> -- 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": <str> -- Foreign key. 同一个目标定的下一个sample_anatation
"prev": <str> -- Foreign key. Sample annotation from the same object instance that precedes this in time. Empty if this is the first annotation for this object.
}
sample_data {
"token": <str> -- Unique record identifier.
"sample_token": <str> -- Foreign key. 指向sample_data所关联的sample
"ego_pose_token": <str> -- Foreign key.
"calibrated_sensor_token": <str> -- Foreign key.
"filename": <str> -- Relative path to data-blob on disk.
"fileformat": <str> -- Data file format.
#如果数据是图片,以下内容生效
"width": <int> -- If the sample data is an image, this is the image width in pixels.
"height": <int> -- If the sample data is an image, this is the image height in pixels.
"timestamp": <int> -- Unix time stamp.
"is_key_frame": <bool> -- True if sample_data is part of key_frame, else False.
"next": <str> -- Foreign key. 来自同一传感器的在下一时刻的数据,如果是scene的末尾,赋值为空。
"prev": <str> -- Foreign key. Sample data from the same sensor that precedes this in time. Empty if start of scene.
}
scene {
"token": <str> -- Unique record identifier.
"name": <str> -- Short string identifier.
"description": <str> -- 例如,某一辆车正在某条路上靠右行驶等描述性词汇
"log_token": <str> -- Foreign key. 指向某个log
"nbr_samples": <int> -- 场景中的sample数量
"first_sample_token": <str> -- Foreign key. 场景中的第一个sample.
"last_sample_token": <str> -- Foreign key. Points to the last sample in scene.
}
sensor {
"token": <str> -- Unique record identifier.
"channel": <str> -- Sensor channel name.
"modality": <str> {
camera, lidar, radar} -- Sensor modality. Supports category(ies) in brackets.
}
visibility {
"token": <str> -- Unique record identifier.
"level": <str> -- Visibility level.
"description": <str> -- Description of visibility level.
}
作者使用nuScenes anacator进行数据的标记。
在收集完数据后,作者对采集的视频进行2hz的采样,并且使用scale进行标注,最后实现了高度精确的标注。对于所有数据集中的对象,作者都进行了语义标注,并且每个对象出现的每个场景中的每一帧都进行了3D框标注和属性注释。这使此数据集相比于2D的数据集拥有更精准推理目标方向和角度的能力。
在雷达点云方面,作者将每个雷达点都进行了语义标注,除了对于23个前景目标的标注,还有对于9个背景目标的标注。
以上为简介,具体标注方法,请看作者公布的标注细节。(待更新)
时间紧张,还没写,后期会补充,放下其他人链接(点击此处)
最后,因为编者刚入门多传感器融合相关领域,看了许多天相关文献,没有找到对于这个数据集比较好的翻译材料,就自己尝试地翻译+口述,最终目的是于大家交流自己的i心得,本篇博文肯定会有一些错误,麻烦大家指出。