BEV学习--Nuscenes数据集解读

news2024/9/23 23:35:53

一、Nuscenes数据集简介

Nuscenes数据的采集来自不同城市的1000个场景中,采集车上配备了完善的传感器,包括6个相机(CAM)、1个激光雷达(LIDAR)、5个毫米波雷达(RADAR)、IMU和GPS,传感器在采集车上的布置如下所示:

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

二、数据下载

mini版下载链接:

https://www.nuscenes.org/download

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

2.1 maps文件夹

打开map文件夹,其中有4个包含地图信息的图片,

2.2 samples文件夹

samples文件夹目录如下:

文件夹名代表了每个传感器所采集到的信息(6个相机、1个激光雷达、5个毫米波雷达),只是激光雷达和毫米波雷达所采集的信息,不能像相机一样支持图片直接打开。

2.3 sweeps文件夹

sweeps文件夹打开后,其结构和samples一样,二者区别可理解为:samples中存储的信息比较重要,sweeps文件夹的内容重要程度相对较低。

2.4 v1.0-mini文件夹

v1.0-mini文件夹结构如下所示:

打开其中一个json文件:

如图 中箭头所示:表示目标对象是一个adult,图中的种类显示的是human.pedestrian.adult,表示一种所属关系,即adult属于pedestrian,pedestrian属于human。

三、数据读取

2.1 安装库

安装nuscenes-devkit库,使用pip安装即可。

pip install nuscenes-devkit

2.2 导入相关模块和数据集

from nuscenes.nuscenes import NuScenes
nusc = NuScenes(version='v1.0-mini', dataroot='E:/数据集集合/v1.0-mini', verbose=True)

这里的dataroot为下载的mini数据集的路径,运行成功后应出现如下的信息:

图中红框中的文件夹名字,跟2.4中v1.0-mini下文件的名字一样,

如下为中文解释:

2.3 场景scene

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

nusc.list_scenes()

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

my_scene = nusc.scene[0]
print(my_scene)

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

2.4 样本sample

sample和scene的关系:

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

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

first_sample_token = my_scene['first_sample_token']  #获取第一个sample的token值
print(first_sample_token)

输出结果:ca9a282c9e77460f8360f564131a8af5

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

my_sample = nusc.get('sample', first_sample_token)
print(my_sample)

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

2.5 样本数据 sample_data

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

my_sample['data']
print(my_sample['data'])

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

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

sensor_radar = 'RADAR_FRONT'  #这里选择的传感器为前方的毫米波雷达传感器
radar_front_data = nusc.get('sample_data',my_sample['data'][sensor_radar])  
print(radar_front_data)

输出结果:

nusc.render_sample_data(radar_front_data['token'])

输出结果:

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

2.6 样本标注 sample_annotation

上节提到my_sample中包含了传感器采集到的信息标注信息,在sample_data.json中已经展示了传感器采集到的信息,这一部分将展示样本标注的信息,方法与之前是类似的。

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'])

2.7 实例 instance

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

my_instance = nusc.instance[0]
my_instance

输出结果:

也可以可视化这个实例:

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

2.8 类别categories

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

nusc.list_categories()

输出结果:

nusc.category[i]表示获取第i个类别的信息:

2.9 属性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

输出结果:

 

2.10 可视化 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)

输出结果:

2.11 传感器 sensor

1)可以通过nusc.sensor来查看传感器:

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

2)校准传感器 calibrated_sensor

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

sensor_token = nusc.calibrated_sensor[0]
sensor_token

输出结果:

2.12 车辆姿态 ego_pose

nusc.ego_pose[0]

输出:

2.13 地图 map

nusc.map[0]

输出:

2.14 整体模式

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

最后,推荐nuSenes数据集的渲染可视化教程:

手把手带你玩转Nusences数据集2——nuScenes lidarseg and panoptic教程-云社区-华为云手把手带你玩转Nusences数据集2——nuScenes lidarseg and panoptic教程icon-default.png?t=O83Ahttps://bbs.huaweicloud.com/blogs/349393

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2158767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【RabbitMQ】RabbitMQ 的概念以及使用RabbitMQ编写生产者消费者代码

目录 1. RabbitMQ 核心概念 1.1生产者和消费者 1.2 Connection和Channel 1.3 Virtual host 1.4 Queue 1.5 Exchange 1.6 RabbitMO工作流程 2. AMQP 3.RabbitMO快速入门 3.1.引入依赖 3.2.编写生产者代码 ​3.3.编写消费者代码 4.源码 1. RabbitMQ 核心概念 在安装…

Java中的事件(动作监听-ActionListener)

(一)、ActionListener接口 ActionListener接口用于处理用户界面上的动作事件,例如:按钮点击、菜单选择等。实现ActionListener接口需要重写actionPerformed(ActionEvent e)方法,该方法会在动作发生时被调用。 &#…

苍穹外卖上半部分总结

苍穹外卖一个很经典的项目 虽然已经烂大街,但项目依旧是很优秀,并且代码十分规范,很值得学习。 前置介绍 niginx反向代理 前端和后端的url请求不一致的原因:前端是请求到nginx服务器,再由nginx服务器转发到后端 ngi…

个人防护装备检测系统源码分享

个人防护装备检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

字母与符号检测系统源码分享

字母与符号检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

全国职业院校技能大赛(大数据赛项)-平台搭建Spark、Scala笔记

Spark作为一个开源的分布式计算框架拥有高效的数据处理能力、丰富的生态系统、多语言支持以及广泛的行业应用。Scala是一种静态类型的编程语言,它结合了面向对象编程和函数式编程的特性,被誉为通用的“大数据语言”。而二者的结合更能迸发出新奇的化学反…

深度学习之微积分预备知识点(2)

极限(Limit) 定义:表示某一点处函数趋近于某一特定值的过程,一般记为 极限是一种变化状态的描述,核心思想是无限靠近而永远不能到达 公式: 表示 x 趋向 a 时 f(x) 的极限。 知识点口诀解释极限的存在左…

itextsharp报错 PdfReader not opened with owner password

itextsharp报错 PdfReader not opened with owner password itextsharp读取PDF时报错: PdfReader not opened with owner password 报错原因(据说是):pdf 文件设置了加密。 网上搜索了一下,查到大多数答案是: 在创建pdfReader…

JDK7u21 HashMap版

今天在搞ROME HotSwappableTargetSource链的时候突然发现,JDK7U21反序列化链不仅HashMap.put触发了key.equals putForCreate也调用了 而且HashMap.readObject直接调用了putForCreate来还原 what?直接向HashMap两个put不就完了,还搞什么HashSet 开弄&am…

闪回科技再冲刺上市:曾夸大融资规模,毛利率下滑,有股东退出

近日,闪回科技有限公司(下称“闪回科技”)递交招股书,准备在港交所主板上市。据贝多财经了解,该公司曾于2024年2月递表,此次是“失效”后的更新版本,清科资本为其独家保荐人。 闪回科技在招股书…

5款好用的电脑软件,个个良心实用

分享5款好用但冷门的windows软件,个个良心实用,而且大部分免费,值得统统装进电脑里! 1、EagleGet——高速下载器 一款免费的高速下载软件,页面设计简洁,没有广告,支持 HTTP、HTTPS、FTP、MMS、…

​数据库: MyBatis-Plus

MyBatis-Plus MyBatis-Plus 是 MyBatis 的增强工具,核心作用是简化 CRUD 操作和提升开发效率。它提供基础的增删改查方法、分页插件、条件构造器以及代码生成器,帮助减少重复代码量。MyBatis-Plus 不支持自动建表,专注于简化数据库操作&…

QT中添加资源文件

什么是资源文件 项目中经常需要添加图片、‌音频、‌视频、翻译文件等文件,在QT中,这些文件会放在 .qrc 文件中来被使用。 .qrc 文件是一个XML格式的资源集合描述文件,是Qt中用于定义和管理资源的关键文件 如何使用 创建资源文件 在你的Qt项…

面试真题:谈一谈Mysql的分库分表

分表和分库是什么?有什么区别? 分库是一种水平扩展数据库的技术,将数据根据一定规则划分到多个独立的数据库中。每个数据库只负责存储部分数据,实现了数据的拆分和分布式存储。分库主要是为了解决并发连接过多,单机 my…

一行命令,一分钟轻松搞定SSL证书自动续期

httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx 服务器设计。已服务众多中小企业,稳定、安全、可靠。现在的网站SSL免费证书有效期只有3个月,所以就会有经常更快SSL证书的需求,如果手上需要更换的SSL证书比较多的情况下…

DoppelGanger++:面向数据库重放的快速依赖关系图生成

doi:DoppelGanger: Towards Fast Dependency Graph Generation for Database Replay,点击前往 文章目录 1 简介2 架构概述3 依赖关系图3.1 符号和问题定义3.2 无 IT(k) 图3.3 无 OT 图表3.4 无 OTIT 图表3.5 无 IT[OT] 图表3.6 输出确定性保证 4 重复向后…

win10 win11 设置文件权限以解决Onedrive不能同步问题

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

蓝牙AOA基站助力打造智慧医院管理系统

随着科技的飞速发展,智慧医院的概念逐渐深入人心。其中,蓝牙AOA(到达角)定位技术以其高精度、低功耗、低成本等优势,在智慧医院建设中扮演着重要角色。本文将深入探讨蓝牙AOA基站如何助力智慧医院的建设与发展。 一、蓝…

CVE-2024-4956实战

一、访问网页 二、公司信息域名收集 三、抓包读取敏感文件 Burpsuite抓包,修改GET请求即可(GET /%2F%2F%2F%2F%2F%2F%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd HTTP/1.1 )

点赞系统实现

点赞功能是社交、电商等几乎所有的互联网项目中都广泛使用。虽然看起来简单,不过蕴含的技术方案和手段还是比较多的。 下面将分享之前做的判题OJ系统的点赞系统的思路。 1.需求分析 点赞功能与其它功能不同,没有复杂的原型和需求,仅仅是一…