自动驾驶---学术论文的常客:nuScenes数据集的使用
1 前言
nuScenes 数据集在大模型训练中应用广泛,在很多CVPR或者其它论文中经常能看到使用nuScenes 数据集达到SOTA水平。
在之前的博客《自动驾驶---学术论文的常客:nuScenes 数据集》中,笔者主要介绍了nuScenes数据集的来源和下载方式,本篇博客主要介绍如何使用nuScenes数据集。

2 nuScenes devkit 教程
主要内容来源于官方教程。假定nuscenes数据集的文件目录为:data/sets/nuscenes,并加载完整数据集的一个mini版(完整的数据集太大了)。
2.1 整体架构
数据集按数据库组织,由下面13个基础表(每个表也是一个json文件)构成:
| 表名 | 说明 |
|---|---|
| log | 日志信息,用于提取数据。 |
| scene | 车辆行驶 20 秒的片段。 |
| sample | 特定时间戳下场景的标注快照,按 2Hz 采样的关键帧,一个场景有 40 个样本。 |
| sample_data | 特定传感器收集的数据,包含图像、点云、雷达数据,有关键帧的 sample 和非关键帧的 sweep。 |
| ego_pose | 特定时间戳下车辆的姿态。 |
| sensor | 特定的传感器类型。 |
| calibrated sensor | 特定车辆上特定传感器的标定定义,含传感器(激光雷达、雷达、相机)外参和相机内参。 |
| instance | 观察到的所有对象实例的枚举。 |
| category | 对象类别的分类体系(如车辆、人类)。 |
| attribute | 实例在类别不变时可改变的属性。 |
| visibility | 从 6 个不同相机收集的所有图像中像素的可见比例。 |
| sample_annotation | 感兴趣对象的标注实例。 |
| map | 以俯视图二进制语义掩码形式存储的地图数据。 |
整个nuScenes数据集的文件架构及相互关系如下图所示:

2.2 使用说明
按步骤说明如何通过python使用nuScenes数据集,一般会使用mini版本,完整的数据集版本是非常大的。
(1)创建文件夹,运行下面代码将设置好数据集和工具集。
mkdir -p data/sets/nuscenes # Make the directory to store the nuScenes dataset in.#wget https://www.nuscenes.org/data/v1.0-mini.tgz # Download the nuScenes mini split.tar -xf data/data57268/v1.0-mini.tgz -C data/sets/nuscenes # Uncompress the nuScenes mini split.pip install nuscenes-devkit &> /dev/null # Install nuScenes.
(2)初始化
%matplotlib inline
from nuscenes.nuscenes import NuScenesnusc = NuScenes(version='v1.0-mini', dataroot='data/sets/nuscenes', verbose=True)
(3)nuScenes是一个大规模数据集,有1000 个场景,每个约20秒。我们加载的mini版数据集有10 个场景。让我们看看加载在数据集中的场景。
nusc.list_scenes()my_scene = nusc.scene[0]
(4)sample 样本
在场景中,我们每0.5秒标注一个数据 (2 Hz)。我们定义样本为一个场景在给定时间戳标注的关键帧。让我们看下这个场景中第一个标注样本。
first_sample_token = my_scene['first_sample_token']# The rendering command below is commented out because it tends to crash in notebooks
nusc.render_sample(first_sample_token)
(5)让我们看下它的元数据,通过 token 使用get 方法
my_sample = nusc.get('sample', first_sample_token)
(6)sample_data 样本数据
nuScenes数据集包含完整传感器套件收集的数据。因此,对每一个场景快照,我们提供对这些传感器数据的引用。
让我们看看取自 CAM_FRONT 的 sample_data 元数据。
sensor = 'CAM_FRONT'
cam_front_data = nusc.get('sample_data', my_sample['data'][sensor])
cam_front_data
我们也可以画出特定传感器的 sample_data。
nusc.render_sample_data(cam_front_data['token'])
2.3 应用举例
下面这段代码主要作用:取每一个场景下前视相机的数据以及自车姿态的数据。当然还有其它模块的使用,这里就不一一举例了。
# Load the datasetnusc = NuScenes(version=args.version, dataroot=args.dataroot)# Iterate the scenesscenes = nusc.scenefor scene in scenes:token = scene['token']first_sample_token = scene['first_sample_token']last_sample_token = scene['last_sample_token']name = scene['name']description = scene['description']# Get all image and pose in this scenefront_camera_images = []ego_poses = []camera_params = []curr_sample_token = first_sample_tokenwhile True:sample = nusc.get('sample', curr_sample_token)# Get the front camera image of the sample.cam_front_data = nusc.get('sample_data', sample['data']['CAM_FRONT'])# nusc.render_sample_data(cam_front_data['token'])# Get the ego pose of the sample.pose = nusc.get('ego_pose', cam_front_data['ego_pose_token'])ego_poses.append(pose)# Get the camera parameters of the sample.camera_params.append(nusc.get('calibrated_sensor', cam_front_data['calibrated_sensor_token']))# Advance the pointer.if curr_sample_token == last_sample_token:breakcurr_sample_token = sample['next']scene_length = len(front_camera_images)print(f"Scene {name} has {scene_length} frames")
其中scene.json中的内容如下,可通过里面的token信息,可以找到当前场景下其它标注信息,如位置,传感器等信息。
{
"token": "cc8c0bf57f984915a77078b10eb33198",
"log_token": "7e25a2c8ea1f41c5b0da1e69ecfa71a2",
"nbr_samples": 39,
"first_sample_token": "ca9a282c9e77460f8360f564131a8af5",
"last_sample_token": "ed5fc18c31904f96a8f0dbb99ff069c0",
"name": "scene-0061",
"description": "Parked truck, construction, intersection, turn left, following a van"
},
上述json文件中的字段解析如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| token | string | 场景的唯一标识符(UUID4 格式)。 |
| log_token | string | 关联的日志文件的 token,用于追溯数据来源。 |
| nbr_samples | integer | 该场景包含的样本数量(每个场景按 2Hz 采样,20 秒共 40 个样本,但此处为 39,可能因数据截断或异常导致)。 |
| first_sample_token | string | 场景中第一个样本的 token。 |
| last_sample_token | string | 场景中最后一个样本的 token。 |
| name | string | 场景的名称(通常为 scene-<编号>格式)。 |
| description | string | 场景的简短描述,包含关键交通元素和驾驶行为。 |
再比如,我们可以画lidar的数据。在原始的 nuScenes 开发工具包中,可以将一个样本数据令牌传递给 render_sample_data 函数,以渲染点云的鸟瞰图。不过,这些点会根据与自车的距离来着色。而现在使用扩展后的 nuScenes 开发工具包,只需将 show_lidar_seg 参数设置为 True,就可以可视化点云的类别标签。
my_sample = nusc.sample[87]
sample_data_token = my_sample['data']['LIDAR_TOP']
nusc.render_sample_data(sample_data_token, with_anns=False, show_lidarseg=True)

相关文章:
自动驾驶---学术论文的常客:nuScenes数据集的使用
1 前言 nuScenes 数据集在大模型训练中应用广泛,在很多CVPR或者其它论文中经常能看到使用nuScenes 数据集达到SOTA水平。 在之前的博客《自动驾驶---学术论文的常客:nuScenes 数据集》中,笔者主要介绍了nuScenes数据集的来源和下载方式&#…...
使用大语言模型进行Python图表可视化
Python使用matplotlib进行可视化一直有2个问题,一是代码繁琐,二是默认模板比较丑。因此发展出seaborn等在matplotlib上二次开发,以更少的代码进行画图的和美化的库,但是这也带来了定制化不足的问题。在大模型时代,这个…...
C#调用ACCESS数据库,解决“Microsoft.ACE.OLEDB.12.0”未注册问题
C#调用ACCESS数据库,解决“Microsoft.ACE.OLEDB.12.0”未注册问题 解决方法: 1.将C#采用的平台从AnyCpu改成X64 2.将官网下载的“Microsoft Access 2010 数据库引擎可再发行程序包AccessDatabaseEngine_X64”文件解压 3.安装解压后的文件 点击下载安…...
el-select+el-tree实现下拉树形选择
主要实现el-select下使用树结构,支持筛选功能 封装的组件 composeTree.vue <template><el-select :popper-class"popperClass"v-model"selectedList"placeholder"请选择"filterable:filter-method"handleFilter" multiple:c…...
android studio 安装flutter插件
在 Android Studio 中安装 Flutter 插件 Flutter 是 Google 开发的一个开源 UI 软件开发工具包,主要用于构建高质量的跨平台应用。然而,要在 Android Studio 中开发 Flutter 应用,首先需要安装 Flutter 插件。本文将详细介绍安装 Flutter 插…...
利用 Excel 函数随机抽取(附示例)
RANDARRAY 是 Excel 365 和 Excel 2021 引入的一个函数,用于生成一个随机数数组。它的语法如下: RANDARRAY([rows], [columns], [min], [max], [whole_number])参数详解 rows(可选) 要生成的行数(默认值为 1ÿ…...
部分国产服务器CPU及内存性能测试情况
近日对部分国产服务器进行了CPU和内存的性能测试, 服务器包括华锟振宇、新华三和中兴三家,CPU包括鲲鹏、海光和Intel,初步测试结果如下: 服务器厂商四川华锟振宇新华三中兴中兴服务器HuaKun TG225 B1R4930 G5R5930 G2R5300 G4操作…...
DM数据迁移工具
DM数据迁移工具 一、概述二、迁移准备三、启动迁移工具1.Windows 环境启动 DM 数据迁移工具2.Linux 环境启动 DM 数据迁移工具2.1启用图形化安装界面前需要通过如下命令将图形界面权限放开:2.2进入数据库安装路径 /tool 目录下,运行 ./dts 即可启动 DM 数…...
关于React Redux
官网:👉详情一 👉详情二 👉关于redux 使用原因:👉详情 /** 2-1、随着javascript单页应用程序的发展,需要在代码中管理更多的状态(包括服务器响应数据、缓存数据、本地创建还未发送…...
典范硬币系统(Canonical Coin System)→ 贪心算法
【典范硬币系统】 ● 典范硬币系统(Canonical Coin System)是指使用贪心算法总能得到最少硬币数量解的货币面值组合。 ● 给定一个硬币系统 ,若使其为典范硬币系统,则要求其各相邻面值比例 ,及各开区间 内各金额…...
「HTML5+Canvas实战」星际空战游戏开发 - 纯前端实现 源码即开即用【附演示视频】
纯前端实现星际空战游戏【简易版】 博主上次分享的简易版飞机大战收到了不少建议,今天再给大家来一波福利!带来全新升级的飞机大战进阶版!不仅拥有更丰富的游戏机制和更精美的游戏画面,还加入了超燃的BOSS战斗系统。源码完全免费开放,拿来即用无门槛,欢迎感兴趣的小伙伴…...
【江协科技STM32】PWR电源控制(学习笔记)
PWR简介 PWR(Power Control)电源控制PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值…...
在 RK3588 多线程推理 YOLO 时,同时开启硬件解码和 RGA 加速的性能分析
一、前言 本文是基于RK3588的YOLO多线程推理多级硬件加速引擎框架设计项目的延申与拓展,单独分析所提出的方案4的性能和加速原理,即同时开启 RKmpp 硬件视频解码和 RGA 硬件图像缩放、旋转。 二、实验结果回顾 在项目的总览篇中,给出了该方案…...
多账号安全登录与浏览器指纹管理的实现方案
随着跨境电商、社交媒体运营等场景的普及,用户对多账号管理与反检测技术的需求日益增长。指纹浏览器作为一款专注于多账号安全登录与浏览器指纹管理的工具,通过虚拟浏览器环境隔离、动态指纹模拟等技术,解决了账号关联封禁的痛点。本文将从技…...
C++ ---- 虚继承
一、什么是虚继承 虚继承就是子类中只有一份间接父类的数据。用于解决多继承中的父类为非虚继承时出现的二义性问题,即菱形继承问题。继承方式需要加上virtual关键字。 二、虚继承的特性 以菱形继承为例: 1.不使用虚继承 根据输出的大小和关系图&…...
Day48 | 657. 机器人能否返回原点、31. 下一个排列、463. 岛屿的周长、1356. 根据数字二进制下 1 的数目排序
657. 机器人能否返回原点 题目链接:657. 机器人能否返回原点 - 力扣(LeetCode) 题目难度:简单 代码: class Solution {public boolean judgeCircle(String moves) {int x 0;int y 0;for (char c : moves.toCharA…...
启幕数据结构算法雅航新章,穿梭C++梦幻领域的探索之旅——堆的应用之堆排、Top-K问题
人无完人,持之以恒,方能见真我!!! 共同进步!! 文章目录 一、堆排引入之使用堆排序数组二、真正的堆排1.向上调整算法建堆2.向下调整算法建堆3.向上和向下调整算法建堆时间复杂度比较4.建堆后的排…...
forms实现俄罗斯方块
说明: 我希望用forms实现俄罗斯方块 效果图: step1:C:\Users\wangrusheng\RiderProjects\WinFormsApp2\WinFormsApp2\Form1.cs using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms;namespace WinFor…...
PHP回调后门
1.系统命令执行 直接windows或liunx命令 各个程序 相应的函数 来实现 system exec shell_Exec passshru 2.执行代码 eval assert php代码 系统 <?php eval($_POST) <?php assert($_POST) 简单的测试 回调后门函数call_user_func(1,2) 1是回调的函数 2是回调…...
QwQ-32B-GGUF模型部署
由于硬件只有两张4090卡,但是领导还想要满血版32b的性能,那就只能部署GGUF版。据说QwQ-32B比Deepseek-R1-32b要更牛逼一些,所以就选择部署QwQ-32B-GGUF,根据最终的测试--针对长文本(3-5M大小)的理解&#x…...
实操自动生成接口自动化测试用例
这期抽出来的问题是关于如何使用Eolinker自动生成接口自动化测试用例,也就是将API文档变更同步到测试用例,下面是流程的示例解析。 导入并关联API文档和自动化测试用例 首先是登陆Eolinker,可以直接在线使用。 进入流程测试用例详情页&am…...
Python数据类型-dict
Python数据类型-dict 字典是Python中一种非常强大且常用的数据类型,它使用键-值对(key-value)的形式存储数据。 1. 字典的基本特性 无序集合:字典中的元素没有顺序概念可变(mutable):可以动态添加、修改和删除元素键必须唯一且不可变&…...
0301-组件基础-react-仿低代码平台项目
文章目录 1 组件基础2 组件props3 React开发者工具结语 1 组件基础 React中一切都是组件,组件是React的基础。 组件就是一个UI片段拥有独立的逻辑和显示组件可大可小,可嵌套 组件的价值和意义: 组件嵌套来组织UI结构,和HTML一…...
18-背景渐变与阴影(CSS3)
知识目标 理解背景渐变的概念和作用掌握背景渐变样式属性的语法与使用理解阴影效果的原理和应用场景掌握阴影样式属性的语法与使用 1. 背景渐变 1.1 线性渐变 运用CSS3中的“background-image:linear-gradient(参数值);”样式可以实现线性渐变效果。 …...
分享一个Drools规则引擎微服务Docker部署
通常我们都是把Drools作为嵌入式使用,但在微服务泛滥时代,还在老套的嵌入式显然不符合微服务架构要求,本文分享一个把Drools作为微服务独立部署的方案。 本方案基于Drools引擎微服务,提供REST接口。 1、可以动态部署Drools规则2…...
PHP开发者2025生存指南
PHP,这个曾经被戏称为“世界上最好的语言”的脚本语言,依旧在网络世界占据着重要的地位。然而,技术发展日新月异,面向2025年,PHP开发者要想保持竞争力甚至实现职业生涯的飞跃,需要不断学习和提升自身技能。…...
UE5学习记录part12
第15节: treasure 154 treasure: spawn pickups from breakables treasure是items的子类 基于c的treasure生成蓝图类 155 spawning actors: spawning treasure pickups 设置treasure的碰撞 蓝图实现 156 spawning actors from c : spawning our treas…...
鸿蒙开发03样式相关介绍(一)
文章目录 前言一、样式语法1.1 样式属性1.2 枚举值 二、样式单位三、图片资源3.1 本地资源3.2 内置资源3.3 媒体资源3.4 在线资源3.5 字体图标3.6 媒体资源 前言 ArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法&a…...
一周掌握Flutter开发--9. 与原生交互(上)
文章目录 9. 与原生交互核心场景9.1 调用平台功能:MethodChannel9.1.1 Flutter 端实现9.1.2 Android 端实现9.1.3 iOS 端实现9.1.4 使用场景 9.2 使用社区插件9.2.1 常用插件9.2.2 插件的优势 总结 9. 与原生交互 Flutter 提供了强大的跨平台开发能力,但…...
鸿蒙阔折叠Pura X外屏开发适配
首先看下鸿蒙中断点分类 内外屏开合规则 Pura X开合连续规则: 外屏切换到内屏,界面可以直接接续。内屏(锁屏或非锁屏状态)切换到外屏,默认都显示为锁屏的亮屏状态。用户解锁后:对于应用已适配外屏的情况下,应用界面可以接续到外屏。折叠外屏显示展开内屏显示折叠状态…...
