Nuscenes数据集简介

  1. Nuscenes数据集简介
  2. 准备工作
  3. 数据读取
    1. 安装库
    2. 导入相关模块和数据集
    3. 场景scene
    4. 样本sample
    5. 样本数据 sample_data
    6. 样本标注 sample_annotation
    7. 实例 instance
    8. 类别categories
    9. 属性attributes
    10. 可视化 visibility
    11. 传感器 sensor
    12. 校准传感器 calibrated_sensor
    13. 车辆姿态 ego_pose
    14. 日志 log
    15. 地图 map
    16. 小结
  4. 总结

   

Nuscenes数据集简介

  先来简单的介绍一下Nuscenes数据集,相信大家对Nuscenes数据集应该是有一些了解的,至少应该知道这是和自动驾驶相关的,知道这些就足够了,下面再来补充一些知识Nuscenes数据的采集来自不同城市的1000个场景中,采集车上配备了完善的传感器,包括6个相机(CAM)、1个激光雷达(LIDAR)、5个毫米波雷达(RADAR)、IMU和GPS。传感器在采集车上的布置如下图所示:

image-20220312150039102

  可以看出,相机(CAM)有六个,分别分布在前方(Front)、右前方(Front Right)、左前方(Front Left)、后方(Back)、右后方(Back Right)、左后方(Back Left);激光雷达(LIDAR)有1个,放置在车顶(TOP);毫米波雷达有五个,分别放置在前方(Front)、右前方(Front Right)、左前方(Front Left)、右后方(Back Right)、左后方(Back Left)。

准备工作

  数据才是王道,第一步我们当然是需要下载数据了。

        nuscenes数据集百度网盘下载:

        链接: https://pan.baidu.com/s/16N0u688ksA-_6mIMpc8ohQ?pwd=u7na 提取码: u7na         

        Nuscenes的官网下载链接如下:https://www.nuscenes.org/download

  下载完成进行解压后,应该有如下的文件结构:

​   接下来我们对上图中的4个文件进行分析:

  • maps文件夹

  打开map文件夹,可以看到4个地图的图片,这种图片信息的文件我们很容易理解,这里不过多叙述。

image-20220312152923179

  • samples文件夹

  打开samples文件夹,出现了这样的目录结构:传感器(6个相机、1个激光雷达、5个毫米波雷达)所采集到的信息。

  • sweeps文件夹

  打开sweeps文件夹,你会发现其结构和samples文件夹是完全一样的。可以这样理解,samples文件夹中存储的信息是较为关键、重要的,而sweeps文件夹中的信息则相对次要。

  • v1.0-mini文件夹

  打开v1.0-mini文件夹

image-20220312154720372

  【图中的种类显示的是human.pedestrian.adult,表示一种所属关系,即adult属于pedestrian,pedestrian属于human】

数据读取

安装库

  首先需要按照nuscenes-devkit库,使用pip安装即可。

pip install nuscenes-devkit

导入相关模块和数据集

  dataroot为数据集根目录,运行成功后应出现如下的信息:

from nuscenes.nuscenes import NuScenes
nusc = NuScenes(version='v1.0-mini',dataroot='/root/code/Fast-BEV/data/nuscenes',verbose=True)

  看到上图红框中的内容不知大家是否有种似曾相似的感觉,没错👉🏼👉🏼👉🏼就是之前v1.0-mini文件夹中的那些文件。下面对这些名词进行解释,英文为官方给出的解释,中文为自己总结的。

image-20220312164201023

场景scene

  使用nusc.list_scenes()可以查看数据中的所有场景。

nusc.list_scenes()

​ 输出结果 : mini数据集中只包含10个场景,每个场景大约持续20s【有的19s】,即每个场景有20秒采集到的信息。

可以使用下列命令来查看某个场景中的信息:

nusc.scene[0]

输出结果 :token为唯一标识,通过token可以获取对应信息。

样本sample

​  先来说说sample和scene的关系,前面说到,每个scene大约持续20s,那sample就是每0.5秒进行一次采样。也可以这样理解sample和scene,sence相当于20s的视频,sample就是每0.5s取一帧的图像。

  上文已经得到了某个场景的信息【scene-0061】,现可以通过my_scene得到某一个sample的token值。

sample_token = my_scene['first_sample_token']
sample_token

输出结果 :'ca9a282c9e77460f8360f564131a8af5'

  当我们得到第一个sample的token值后,我们可以通过 nusc.get命令来获取当前sample的信息:

my_sample = nusc.get('sample', sample_token)

  输出结果 :结果中包含了传感器采集到的信息、标注信息等等。

样本数据 sample_data

  使用my_sample['data']可以获取sample的数据sample_data。

my_sample['data']

​   输出结果 :这些传感器里包含了许多的样本数据。

  我们可以使用下列命令来将这些传感器中采集的进行可视化:

sensor_radar = 'RADAR_FRONT'  #前向毫米波雷达传感器
radar_front_data = nusc.get('sample_data',my_sample['data'][sensor_radar])  
radar_front_data

  输出结果 :

nusc.render_sample_data(radar_front_data['token'])

  输出结果 :

image-20220312193645187

  这里只展示了RADAR_FRONT,即前方毫米波雷达传感器的可视化结果,可视化其他传感器的方法和上文一致。

 
 

样本标注 sample_annotation

  标注信息查看

my_annotation_token = my_sample['anns'][18]
my_annotation_metadata = nusc.get('sample_annotation',my_annotation_token)
my_annotation_metadata

输出结果 :

nusc.render_annotation(my_annotation_metadata['token'])

image-20220312195032667

实例 instance

  通过nusc.instance可以获取实例:

my_instance = nusc.instance[0]
my_instance

  输出结果 :

  我们也可以可视化这个实例:

instance_token = my_instance['token']
nusc.render_instance(instance_token)

  输出结果 :

image-20220312195855926

类别categories

  通过nusc.list_categories可以获取类别:

nusc.list_categories()

  输出结果 :

属性attributes

  通过nusc.list_attributes可以获取属性:

nusc.list_attributes()

  输出结果 :

  属性在一个场景中是可以变换的,下列代码展示了行人从移动到站立,属性发生了变换。

my_instance = nusc.instance[27]
first_token = my_instance['first_annotation_token']
last_token = my_instance['last_annotation_token']
nbr_samples = my_instance['nbr_annotations']
current_token = first_token

i = 0
found_change = False
while current_token != last_token:
    current_ann = nusc.get('sample_annotation', current_token)
    current_attr = nusc.get('attribute', current_ann['attribute_tokens'][0])['name']
    
    if i == 0:
        pass
    elif current_attr != last_attr:
        print("Changed from `{}` to `{}` at timestamp {} out of {} annotated timestamps".format(last_attr, current_attr, i, nbr_samples))
        found_change = True

    next_token = current_ann['next']
    current_token = next_token
    last_attr = current_attr
    i += 1

输出结果 :image-20220312201920103

可视化 visibility

  可视化在前文中其实已经讲过了,这里再看看代码加深印象。

anntoken = my_sample['anns'][9]
visibility_token = nusc.get('sample_annotation', anntoken)['visibility_token']
print("Visibility: {}".format(nusc.get('visibility', visibility_token)))
nusc.render_annotation(anntoken)

  输出结果 :

image-20220312202902122
 
 

传感器 sensor

  传感器前文其实也或多或少的讲过了,可以通过nusc.sensor来查看传感器,部分结果如下:

[{'token': '725903f5b62f56118f4094b46a4470d8', 'channel': 'CAM_FRONT', 'modality': 'camera'}, 
{'token': 'ce89d4f3050b5892b33b3d328c5e82a3', 'channel': 'CAM_BACK', 'modality': 'camera'}, 
{'token': 'a89643a5de885c6486df2232dc954da2', 'channel': 'CAM_BACK_LEFT', 'modality': 'camera'}, 
{'token': 'ec4b5d41840a509984f7ec36419d4c09', 'channel': 'CAM_FRONT_LEFT', 'modality': 'camera'}, 
{'token': '2f7ad058f1ac5557bf321c7543758f43', 'channel': 'CAM_FRONT_RIGHT', 'modality': 'camera'}, 
{'token': 'ca7dba2ec9f95951bbe67246f7f2c3f7', 'channel': 'CAM_BACK_RIGHT', 'modality': 'camera'}, 
{'token': 'dc8b396651c05aedbb9cdaae573bb567', 'channel': 'LIDAR_TOP', 'modality': 'lidar'}, 
{'token': '47fcd48f71d75e0da5c8c1704a9bfe0a', 'channel': 'RADAR_FRONT', 'modality': 'radar'}, 
{'token': '232a6c4dc628532e81de1c57120876e9', 'channel': 'RADAR_FRONT_RIGHT', 'modality': 'radar'}, 
{'token': '1f69f87a4e175e5ba1d03e2e6d9bcd27', 'channel': 'RADAR_FRONT_LEFT', 'modality': 'radar'}, 
{'token': 'df2d5b8be7be55cca33c8c92384f2266', 'channel': 'RADAR_BACK_LEFT', 'modality': 'radar'}, 
{'token': '5c29dee2f70b528a817110173c2e71b9', 'channel': 'RADAR_BACK_RIGHT', 'modality': 'radar'}]

  因sample_data中就存储着传感器的信息,因此可以通过nusc.sample_data[i]来获取传感器的信息,结果如下:

{'token': '5ace90b379af485b9dcb1584b01e7212', 'sample_token': '39586f9d59004284a7114a68825e8eec', 'ego_pose_token': '5ace90b379af485b9dcb1584b01e7212', 'calibrated_sensor_token': 'f4d2a6c281f34a7eb8bb033d82321f79', 'timestamp': 1532402927814384, 'fileformat': 'pcd', 'is_key_frame': False, 'height': 0, 'width': 0, 'filename': 'sweeps/RADAR_FRONT/n015-2018-07-24-11-22-45+0800__RADAR_FRONT__1532402927814384.pcd', 'prev': 'f0b8593e08594a3eb1152c138b312813', 'next': '978db2bcdf584b799c13594a348576d2', 'sensor_modality': 'radar', 'channel': 'RADAR_FRONT'}

校准传感器 calibrated_sensor

  通过下列命令来得到某传感器的校准信息:

sensor_token = nusc.calibrated_sensor[0]
sensor_token

输出结果 :

{'token': 'f4d2a6c281f34a7eb8bb033d82321f79', 
'sensor_token': '47fcd48f71d75e0da5c8c1704a9bfe0a', 
'translation': [3.412, 0.0, 0.5], 
'rotation': [0.9999984769132877, 0.0, 0.0, 0.0017453283658983088], 'camera_intrinsic': []}

车辆姿态 ego_pose

nusc.ego_pose[0]

输出结果 :

{'token': '5ace90b379af485b9dcb1584b01e7212', 
'timestamp': 1532402927814384, 
'rotation': [0.5731787718287827, -0.0015811634307974854, 0.013859363182046986, -0.8193116095230444], 
'translation': [410.77878632230204, 1179.4673290964536, 0.0]}

日志 log

nusc.log[0]

输出结果 :

{'token': '7e25a2c8ea1f41c5b0da1e69ecfa71a2', 
'logfile': 'n015-2018-07-24-11-22-45+0800', 
'vehicle': 'n015', 
'date_captured': '2018-07-24', 
'location': 'singapore-onenorth', 
'map_token': '53992ee3023e5494b90c316c183be829'}


 

地图 map

nusc.map[0]

输出结果 :

{'category': 'semantic_prior', 
'token': '53992ee3023e5494b90c316c183be829', 
'filename': 'maps/53992ee3023e5494b90c316c183be829.png', 
'log_tokens': ['0986cb758b1d43fdaa051ab23d45582b', '1c9b302455ff44a9a290c372b31aa3ce', 'e60234ec7c324789ac7c8441a5e49731', '46123a03f41e4657adc82ed9ddbe0ba2', 'a5bb7f9dd1884f1ea0de299caefe7ef4', 'bc41a49366734ebf978d6a71981537dc', 'f8699afb7a2247e38549e4d250b4581b', 'd0450edaed4a46f898403f45fa9e5f0d', 'f38ef5a1e9c941aabb2155768670b92a', '7e25a2c8ea1f41c5b0da1e69ecfa71a2', 'ddc03471df3e4c9bb9663629a4097743', '31e9939f05c1485b88a8f68ad2cf9fa4', '783683d957054175bda1b326453a13f4', '343d984344e440c7952d1e403b572b2a', '92af2609d31445e5a71b2d895376fed6', '47620afea3c443f6a761e885273cb531', 'd31dc715d1c34b99bd5afb0e3aea26ed', '34d0574ea8f340179c82162c6ac069bc', 'd7fd2bb9696d43af901326664e42340b', 'b5622d4dcb0d4549b813b3ffb96fbdc9', 'da04ae0b72024818a6219d8dd138ea4b', '6b6513e6c8384cec88775cae30b78c0e', 'eda311bda86f4e54857b0554639d6426', 'cfe71bf0b5c54aed8f56d4feca9a7f59', 'ee155e99938a4c2698fed50fc5b5d16a', '700b800c787842ba83493d9b2775234a'], 
'mask': <nuscenes.utils.map_mask.MapMask object at 0x7f42a4928850>}

 

小结

  官网给出了描述了nuScenes的数据库模式。所有的注释和元数据(包括校准、地图、车辆坐标等)都包含在一个关系数据库中。下图即为数据库表。每一行都可以由其唯一的主键token标识。像sample_token这样的外键可以用来链接到sample表的token。
 
在这里插入图片描述

总结

  官方是给了参考的代码的,可以再Google colab上直接运行,这里给出官方的链接:Nuscenes使用教程。

参考链接:对Nuscenes数据集一无所知,手把手带你玩转Nusences数据集-云社区-华为云

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nuscenes数据集 devkit是为了帮助研究者和开发者更好地利用nuscenes数据集而开发的一套工具和库。nuscenes数据集是一个广泛使用的自动驾驶领域的开源数据集,其中包含了来自于纽约和新加坡的高质量传感器数据和注释。它提供了一个丰富的环境来进行自动驾驶相关的研究和开发。 nuscenes数据集devkit提供了一系列功能来处理、分析和可视化nuscenes数据集。它包括了Python API,可以用于读取和解析nuscenes数据集,提取有用的信息。研究者和开发者可以使用这些功能来快速访问和处理数据,为他们的研究和开发工作节省了大量的时间和精力。 除了数据处理外,nuscenes数据集devkit还包括了一些强大的视觉化工具。它提供了一个交互式的图形界面,可以用于可视化和浏览nuscenes数据集中的传感器数据、注释和场景信息。这对于研究者和开发者来说非常有用,可以帮助他们更好地理解数据,分析结果,并进行模型评估和验证。 此外,nuscenes数据集devkit还提供了一些实用的功能,如路线规划、物体检测和跟踪等。这些功能可以帮助研究者和开发者进行高级驾驶场景的仿真和测试,以及开发自动驾驶系统的算法和模型。 综上所述,nuscenes数据集devkit是一个强大的工具和库,它为研究者和开发者提供了便捷的数据处理、分析和可视化功能,帮助他们更好地利用nuscenes数据集进行自动驾驶相关的研究和开发工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值