nuScenes 数据模型
nuScenes 数据模型
Section titled “nuScenes 数据模型”类型 笔记 · 更新 2026-07-14
nuScenes 不是按“一个时间点一个完整文件夹”组织,而是把原始传感器文件与 token 关联的元数据表分开保存。sample 表示 2 Hz 标注关键时刻,sample_data 表示某个传感器的一次实际采集;二者不能当作同一个概念。[@caesar2020nuscenes]
scene -> first_sample_token -> sample <-> prev / next ^ +-- sample_data.sample_token | -> calibrated_sensor -> sensor | -> ego_pose +-- sample_annotation.sample_token <-> prev / next -> instance -> categoryscene是约 20 秒片段,使用首尾 token 进入 sample 链。- 原始
sample.json只保存场景、时间戳和前后 sample 等字段。官方 devkit 建立反向索引后,才在内存中的 sample 记录上增加按 channel 访问的data和 annotation token 列表anns。 sample_data保存自己的时间戳、文件路径、keyframe 标志、前后帧、标定和自车位姿引用。不同传感器不是严格同时曝光,坐标变换必须使用各自记录。sample_annotation保存全局坐标系中的 3D box、属性、点数和前后标注 token。它不直接保存类别名称或速度;类别经instance -> category获取,速度通常由相邻标注和时间差估计。
samples 与 sweeps
Section titled “samples 与 sweeps”samples/ 保存关键帧对应的传感器文件,sweeps/ 保存关键帧之间的中间采集。annotation 关联 sample,并不意味着每个 sweep 都有独立人工 3D 标注。
原始 LiDAR .pcd.bin 按每点 5 个 float32 排列;官方和下游加载器常 reshape 为 (-1, 5) 后选择所需维度。不能把文件直接描述成只有 4 个 float32。雷达文件是 PCD,相机文件是 JPEG。
传感器观测通常按以下链路转换:
sensor frame -- calibrated_sensor --> ego frame at sensor timestamp -- ego_pose ----------> global frame从历史 sweep 聚合到当前帧时,需要分别使用历史与当前的标定和 ego pose,不能只套用当前关键帧外参。相机投影还需要相机内参,并正确处理图像增强后的投影矩阵。
地图与车辆数据边界
Section titled “地图与车辆数据边界”- 核心数据包的
map表引用栅格 semantic prior;论文中的矢量地图扩展包含更丰富的道路语义层。 - CAN bus 是独立扩展资源,不应因为核心元数据包含
ego_pose就假定本机已经具备规划路线、转角或车辆监控消息。 - lidarseg、panoptic 和 prediction 等任务资源也有独立版本与下载条件。
- 23 个标注类别不等于检测 benchmark 的最终类别集合。
sample_annotation没有velocity和category_token字段。- 示例 JSON 中格式正确不代表 token、路径和值来自真实数据;构造示例必须明确标注。
- mini 能验证 schema、dataloader 和前向链路,不能支撑正式 benchmark 结论。
- nuScenes 文献笔记
- 本机 nuScenes mini 指南(内部项目资料)
- 自动驾驶数据集与评测矩阵(内部项目资料)
| 日期 | 变化 | 证据或原因 |
|---|---|---|
| 2026-07-14 | 从原始介绍稿提炼并重建数据关系 | 使用官方论文、实际 mini JSON 与本地代码加载方式交叉核验 |