一句话定位
扩散式 4D occupancy 生成世界模型:用 3D VQ-VAE 式 tokenizer 把 nuScenes-Occupancy 的长序列体素占据压缩成时空 token,再用条件扩散 Transformer(DiT-XL/2)在轨迹提示下去噪生成,用”整段时空 diffusion”替换”逐帧自回归 next-token”,把 OpenAI Sora 的思路搬到 3D occupancy 领域。
背景与定位
自动驾驶世界模型的主线是:GAIA-1、DriveDreamer 等在图像/BEV 空间做条件生成,OccWorld 把这条路线搬进 3D occupancy 空间但仍用自回归 next-token 预测未来占据和自车 token。OccSora 直接对标 OccWorld(同一作者 Wenzhao Zheng 团队的前作,论文正文引用为 zheng2023occworld,库内暂无独立页面故不做 wikilink),指出自回归框架在长时序生成上效率低、误差易累积,转而借鉴 OpenAI Sora(视频扩散世界模拟器)的思路,提出用扩散 Transformer 直接对整段时空占据 token 做去噪生成,条件是任意自车轨迹而非历史帧或 3D 检测框。论文自称是”the first 4D occupancy generation model”(4D occupancy 生成模型的首个工作)。与其后的 Drive-OccWorld、DOME 等 occupancy world model 相比,OccSora 更早验证”扩散替代自回归”这条路线,但代价是压缩率极高、重建保真度大幅下降(见评测部分)。
模型架构
两阶段:(1) 4D occupancy scene tokenizer(VQ-VAE 式 3D 卷积编解码器 + codebook),(2) diffusion-based world model(DiT 结构扩散 Transformer)。
4D occupancy scene tokenizer
- 输入 R_in ∈ R^{B×D×H×W×T}(体素占据栅格,D 为高度维、H×W 为 BEV 平面、T 为帧数)。先对每个语义类别做可学习的 category embedding b∈R^{c′},把 R_in reshape 为 R_in′ ∈ R^{B×(D·c′)×T×H×W}。
- 3D 编码器:一系列 3D 下采样卷积层,论文原文表述为对输入做”three times”下采样,累计把时间 T 与空间 H×W 都压缩到 1/8、通道提升到 8·D·c′,得到 R_in″ ∈ R^{B×(8·D·c′)×T/8×H/8×W/8}(论文未逐轮给出单轮压缩比);下采样后在前馈/注意力层间加 dropout 正则,并引入 cross-channel attention——把 8·D·c′ 通道维切段后做跨段注意力,用于捕捉不同轴特征之间的关系,reshape 回原形状得到 R_mi。
- 量化:codebook ζ_token ∈ R^{N×D},逐位置对特征做最近邻量化(L2 距离),得到离散场景 token R_mi。
- 3D 解码器:cross-channel attention + 残差块 + 一系列 3D 反卷积,做时间/空间上采样,重建体素占据 R_o。
- 具体配置(nuScenes-Occupancy):对 32 连续帧做三轮压缩,通道维提升到 128;对应消融表里 Input Size 32×200×200 → Token Size 128×4×25×25(时间 32→4、空间 200→25,均 ×8 压缩,通道 128)。
diffusion-based world model
- 把 R_mi flatten 成 R_re,用 sin/cos 函数做位置编码得到 R_re^(emb);轨迹条件 T_r ∈ R^{B×t×2}(自车 x/y 绝对坐标序列)先 reshape 再经 MLP δ(T_r) 编码,与去噪时间步嵌入 ν(t) 相加得到条件 g,与 token 嵌入一起送入 Transformer block。
- 标准 DDPM 前向加噪 q(R_re^g|R_re) = N(√σ̄ᵍ R_re, (1-σ̄ᵍ)I),反向去噪 p_θ(R_re^{g-1}|R_re^g) 由网络预测均值/协方差;训练先用简单噪声 MSE(L_simple)预训练,再联合完整 KL 变分下界 L 训练协方差,遵循 Dhariwal & Nichol (2021) 的两阶段做法。
- 主干为 DiT-XL/2:论文正文未给出具体层数/隐藏维等超参,但官方 GitHub 训练脚本
torchrun ... train_2.py --model DiT-XL/2明确采用 Facebook DiT 代码库的 XL/2 规格(该细节来自代码仓库而非论文正文)。 - 推理:从纯高斯噪声 R_re^g ~ N(0,I) 出发,配合任意轨迹条件迭代采样 R_re^{g-1},最终解码得到 4D occupancy 视频 R_o。
数据
- 数据集:nuScenes-Occupancy(Occ3D 语义占据标注),train/val 切分沿用 TPVFormer 仓库提供的 pickle 索引文件(
nuscenes_infos_train/val_temporal_v3_scene.pkl)。 - 序列长度:每次处理 32 连续帧;摘要、GitHub README、项目页三处均一致表述为可生成”16s-videos”(32 帧与 16 秒的换算关系论文未在正文中显式给出,此处不做推算,仅如实转述三处一致的表述)。
- 空间分辨率:BEV 平面 200×200(消融表 Input Size 直接给出),高度维 D 的具体取值论文未单独列出。
- 未披露:训练/验证场景数、总体素/帧总量、是否有数据增强或额外过滤、动作(轨迹)标签是否经平滑/插值处理。
- 单一数据来源,无仿真数据、无跨数据集混合或跨具身泛化设计。
训练方法
- 两阶段串行、非联合训练:先训 tokenizer(VQ-VAE),固定后用其把训练集全部编码为离散 token,再单独训扩散模型。
- Tokenizer 训练:AdamW,初始学习率 1×10⁻⁵,weight decay 0.01;8×NVIDIA A100,每卡 batch size 2;每卡显存约 42GB;训练 150 epoch,耗时 50.6 小时。
- 扩散模型训练:同样 8×A100、每卡 batch size 2(论文用同一超参描述覆盖两阶段);每卡显存约 47GB;训练 1,200,000 步,耗时 108 小时。
- 训练目标:tokenizer 阶段为 VQ 最近邻量化 + 编解码重建(具体重建/commitment loss 权重未披露);扩散阶段为 DDPM 噪声预测 MSE(L_simple)+ 完整 KL 变分下界 L 两阶段训练。
- 条件信号为真实自车轨迹(ego trajectory),推理时可替换为任意轨迹(直行/右转/静止等)以实现轨迹可控生成;未使用强化学习或额外蒸馏。
Infra(训练 / 推理工程)
- 训练硬件:8×NVIDIA A100(80GB,GitHub README 明确要求”on A100 with 80G GPU memory”)。
- 并行方式:GitHub 训练命令为单机 8 卡
torchrun --nnodes=1 --nproc_per_node=8,即数据并行;未披露张量并行/FSDP 等高级并行策略。 - 显存占用:tokenizer 阶段每卡约 42GB,扩散阶段每卡约 47GB。
- 训练时长:tokenizer 150 epoch / 50.6 小时;扩散模型 1,200,000 步 / 108 小时(均为 8×A100 累计墙钟时间,论文未给出总 GPU-hours)。
- 精度(FP16/BF16/FP32):未披露。
- 推理 FPS / 控制频率 / 端上延迟:未披露——论文仅在消融中给出去噪步数(10/100/1000)与去噪完成比例对 FID 的影响(见评测),未报告生成一段 16s 视频的实际采样耗时。
评测 benchmark
4D occupancy 重建(Table 1,vs OccWorld,同为 nuScenes-Occupancy)
| Method | 压缩比 | IoU | mIoU |
|---|---|---|---|
| OccWorld | 16 | 62.2 | 65.7 |
| OccSora | 512 | 37.0 | 27.4 |
论文原话:尽管压缩率是 OccWorld 的 32 倍,OccSora 仍”maintains over half of / nearly 50% of”OccWorld 的重建精度(实际 27.4/65.7 ≈ 41.7%,为论文原文表述,未做数值修正)。
4D occupancy 生成 FID 对比(Table 2,跨数据集/模态,作者自陈仅供参考,非严格同基准对比)
| Method | Type | Dim | Dataset | FID |
|---|---|---|---|---|
| DiT | Image | 2D | ImageNet | 12.03 |
| MagicDriver | Video | 3D | nuScenes | 14.46 |
| DriveDreamer | Video | 3D | nuScenes | 14.9 |
| DriveGAN | Video | 3D | nuScenes | 27.8 |
| SemCity | Occupancy | 3D | KITTI | 40.63 |
| OccSora | Occupancy Video | 4D | nuScenes | 8.348 |
组件消融(Table 3)
| Input Size | Token Size | Channel | T embed. | Trajectory | IoU | mIoU | FID |
|---|---|---|---|---|---|---|---|
| 32×200×200 | 128×4×25×25 | 8 | ✓ | ✓ | 37.03 | 27.42 | 8.34(基线) |
| 32×200×200 | 128×4×25×25 | 8 | ✗ | ✓ | 37.03 | 27.42 | 87.26 |
| 32×200×200 | 128×4×25×25 | 8 | ✓ | ✗ | 37.03 | 27.42 | 17.48 |
| 32×200×200 | 128×4×25×25 | 4 | ✓ | ✓ | 29.67 | 23.21 | 34.24 |
| 32×200×200 | 128×8×50×50 | 8 | ✓ | ✓ | 32.91 | 24.4 | 72.32 |
| 12×200×200 | 64×3×50×50 | 8 | ✓ | ✓ | 26.73 | 14.12 | 187.78 |
| 12×200×200 | 64×3×25×25 | 8 | ✓ | ✓ | 22.42 | 9.27 | 270.23 |
| 12×200×200 | 32×3×25×25 | 8 | ✓ | ✓ | 13.60 | 3.85 | 465.18 |
去掉时间步嵌入 FID 从 8.34 骤增到 87.26;去掉轨迹条件 FID 升到 17.48,且论文描述”生成场景失去运动控制,呈现近乎线性的、由数据分布主导的运动模式”;class 通道数 8→4 时 mIoU 27.42→23.21(论文正文称重建精度”下降约 18%”)、FID 恶化到 34.24;降低压缩率(token 变大到 8×50×50)时 IoU/mIoU 略升但 FID 反而恶化到 72.32;进一步缩小输入/加大压缩(12×200×200 系列)时 IoU/mIoU/FID 全面恶化。
去噪步数与去噪比例(Table 4):在 10/100/1000 三种总去噪步数下,FID 随”去噪完成比例”(10%→100%)大幅下降,例如 token 128×4×25×25、1000 步配置下 FID 从 32171(10%)降到 8.94(100%);64×3×50×50 配置同样趋势但绝对值更差(1000 步 100% 时 FID=353)。论文结论:去噪步数对结果影响相对较小,去噪比例与 token 规模/通道数才是生成质量的主导因素。
无闭环规划或下游控制任务评测(论文将此列为未来工作)。
创新点与影响
- 提出(作者自称)首个扩散式 4D occupancy 生成模型,把 occupancy world model 从”自回归 next-token”(OccWorld 路线)换成”扩散去噪整段时空 token”,无需先验 3D 框、地图或历史帧输入,仅用随机噪声 + 任意轨迹即可生成 16 秒时长、具时空一致性的 3D occupancy 视频。
- 具体方法设计:(1) tokenizer 中的 cross-channel attention,用于建模压缩后不同通道段(对应语义/空间/时间轴)之间的关系;(2) 轨迹条件经 MLP 编码后与去噪时间步嵌入相加,一并作为 DiT 的条件输入,实现轨迹可控场景生成。
- 论文自陈局限(原文 Limitations):受体素粒度限制,无法构建更精细的 4D 场景;生成结果对运动物体的细节表现不一致,推测与训练数据规模较小有关。未来方向:更精细的 4D occupancy 世界模型,以及闭环设定下的端到端自动驾驶探索。
- 客观影响:重建精度相对 OccWorld 大幅下降(mIoU 约打四折),换来生成 FID 数值上的优势和”非逐帧自回归”的生成范式——是”生成效率/质量 vs. 重建保真度”权衡的一个早期数据点,为后续 occupancy world model(如 Drive-OccWorld、DOME 等)提供了扩散路线的参照。
原始链接
- arXiv 摘要:https://arxiv.org/abs/2405.20337
- arXiv PDF:https://arxiv.org/pdf/2405.20337
- GitHub(代码 + 训练/评测文档):https://github.com/wzzheng/OccSora
- 项目主页:https://wzzheng.net/OccSora/
一手源存档(sources/)
- occsora—github-readme — GitHub README 快照(作者/单位、新闻时间线、演示 GIF 说明、安装/数据/训练/评测命令、DiT-XL/2 训练脚本、致谢、BibTeX),来源 https://github.com/wzzheng/OccSora
- occsora—project-page — 项目主页快照(贡献概览、架构图说明、生成结果展示文字),来源 https://wzzheng.net/OccSora/
- 论文全文:arXiv:2405.20337(arXiv 原文 HTML/PDF,不入 git;正文数字取自 v1 全文,含 Appendix A 前的全部正文与表格)