BEV学习--Nuscenes数据集解读

一、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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文(六):Fire-Net: A Deep Learning Framework for Active Forest Fire Detection

文章目录 1.Introduction2.Study Area2.1Landsat-8 Dataset2.2Inventory data 3.Methodology3.1Image Pre-processing3.2Proposed Deep Learning Architecture (Fire-Net)3.2.1Convolution Layers3.2.2 Evaluation Indices/methods or accuracy assessment. 4.Results4.1 Austr…

新一代图像生成E2E FT:深度图微调突破

文章地址:Fine-Tuning Image-Conditional Diffusion Models is Easier than You Think 项目主页:https://gonzalomartingarcia.github.io/diffusion-e2e-ft/ 代码地址:https://github.com/VisualComputingInstitute/diffusion-e2e-ft 机构&am…

SpringBoot 整合 apache fileupload 轻松实现文件上传与下载(通用版)

我们以Thymeleaf页面模板引擎为例,简单介绍利用 apache fileupload 工具实现文件上传的功能。 2.1、添加相关依赖包 首先创建一个基础的 Spring Boot 项目,并引入相关的依赖包。 2.2、添加相关配置参数 2.3、文件上传示例 对应文件上传的Controller类&…

传知代码-基于多尺度动态卷积的图像分类

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 在计算机视觉领域,图像分类是非常重要的任务之一。近年来,深度学习的兴起极大提升了图像分类的精度和效率。本文将介绍一种基于动态卷积网络(Dynamic Convolutional Netw…

计算机网络17——IM聊天系统——客户端核心处理类框架搭建

目的 拆开客户端和服务端,使用Qt实现客户端,VS实现服务端 Qt创建项目 Qt文件类型 .pro文件:配置文件,决定了哪些文件参与编译,怎样参与编译 .h .cpp .ui:画图文件 Qt编码方式 Qt使用utf-8作为编码方…

【delphi】正则判断windows完整合法文件名,包括路径

在 Delphi 中&#xff0c;可以使用正则表达式来检查 Windows 文件名称或路径是否合法。合法的文件名和路径要求符合以下几点&#xff1a; 禁止的字符&#xff1a;文件名和路径不能包含以下字符&#xff1a;<, >, :, ", /, \, |, ?, *。文件名不能以空格或点结束。…

idea多模块启动

文章目录 idea多模块启动2018版本的idea2019版本的idea idea多模块启动 2018版本的idea 1.首先看一下view> Tool Windows下有没有Run Dashboard 如果有&#xff0c;点击一下底部的窗口就会出现 如果不存在&#xff0c;执行下一步 2.查看自己项目的工作空间位置 点击 File&…

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

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

Android WebView H5 Hybrid 混和开发

对于故乡&#xff0c;我忽然有了新的理解&#xff1a;人的故乡&#xff0c;并不止于一块特定的土地&#xff0c;而是一种辽阔无比的心情&#xff0c;不受空间和时间的限制&#xff1b;这心情一经唤起&#xff0c;就是你已经回到了故乡。——《记忆与印象》 前言 移动互联网发展…

Python | Leetcode Python题解之第415题字符串相加

题目&#xff1a; 题解&#xff1a; class Solution:def addStrings(self, num1: str, num2: str) -> str:res ""i, j, carry len(num1) - 1, len(num2) - 1, 0while i > 0 or j > 0:n1 int(num1[i]) if i > 0 else 0n2 int(num2[j]) if j > 0 e…

Dify创建自定义工具,调用ASP.NET Core WebAPI时的注意事项(出现错误:Reached maximum retries (3) for URL ...)

1、要配置Swagger using Microsoft.AspNetCore.Mvc; using Microsoft.OpenApi.Models;var builder WebApplication.CreateBuilder(args);builder.Services.AddCors(options > {options.AddPolicy("AllowSpecificOrigin",builder > builder.WithOrigins("…

SpringSecurity6.x整合手机短信登录授权

前言&#xff1a;如果没有看过我的这篇文章的Springboot3.x.x使用SpringSecurity6(一文包搞定)_springboot3整合springsecurity6-CSDN博客需要看下&#xff0c;大部分多是基于这篇文章的基础上实现的。 明确点我们的业务流程&#xff1a; 需要有一个发送短信的接口&#xff0…

【C++】10道经典面试题带你玩转二叉树

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Leetcode/牛客网 目录 一.根据二叉树创建字符串 二.二叉树的层序遍历 三.二叉树的层序遍历 II 四.二叉树的最近公共祖先 五.二叉搜索树与双向链表 六.从前序与中序遍历序列构造二叉树 七.从中序与后序遍历…

基于yolov8的无人机检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的无人机检测系统是一项前沿技术&#xff0c;结合了YOLOv8深度学习模型的强大目标检测能力与无人机的灵活性。YOLOv8作为YOLO系列的最新版本&#xff0c;在检测精度和速度上均有显著提升&#xff0c;特别适用于复杂和高动态的场景。 该系统通过捕获实…

【QML 基础】QML ——描述性脚本语言,用于用户界面的编写

文章目录 1. QML 定义2. QML 1. QML 定义 &#x1f427; QML全称为Qt Meta-Object Language&#xff0c;QML是一种描述性的脚本语言&#xff0c;文件格式以.qml结尾。支持javascript形式的编程控制。QML是Qt推出的Qt Quick技术当中的一部分&#xff0c;Qt Quick是 Qt5中用户界…

C++笔记---set和map

1. 序列式容器与关联式容器 前面我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间一般没有紧密的关联关…

U盘格式化了怎么办?这4个工具能帮你恢复数据。

如果你思维U盘被格式化了&#xff0c;也不用太过担心&#xff0c;其实里面的数据并没有被删除&#xff0c;只是被标记为了可覆盖的状态。只要我们及时采取正确的数据恢复措施&#xff0c;就有很大的机会可以将数据找回。比如使用专业得的数据恢复软件&#xff0c;我也可以跟大家…

缓存的思考与总结

缓存的思考与总结 什么是缓存缓存命中率数据一致性旁路模式 Cache aside双写模式直写模式 write through异步写 Write Behind 旁路和双写 案例 新技术或中间的引入&#xff0c;一定是解决了亟待解决的问题或是显著提升了系统性能&#xff0c;并且这种改变所带来的增幅&#xff…

python新手的五个练习题

代码 # 1. 定义一个变量my_Number,将其设置为你的学号&#xff0c;然后输出到终端。 my_Number "20240001" # 假设你的学号是20240001 print("学号:", my_Number) # 2. 计算并输出到终端:两个数(例如3和5)的和、差、乘积和商。 num1 3 num2 5 print(&…

nodejs基于vue电子产品商城销售网站的设计与实现 _bugfu

目录 技术栈具体实现截图系统设计思路技术可行性nodejs类核心代码部分展示可行性论证研究方法解决的思路Express框架介绍源码获取/联系我 技术栈 该系统将采用B/S结构模式&#xff0c;开发软件有很多种可以用&#xff0c;本次开发用到的软件是vscode&#xff0c;用到的数据库是…