ScenDi: 3D-to-2D Scene Diffusion Cascades for Urban Generation¶
会议: CVPR 2026
论文: CVF Open Access
代码: 无(仅项目页 https://xdimlab.github.io/ScenDi)
领域: 扩散模型 / 3D视觉
关键词: 城市场景生成, 3D高斯泼溅, 级联扩散, 视频扩散, 相机可控性
一句话总结¶
ScenDi 把城市场景生成拆成「3D 粗生成 → 2D 细化」的级联扩散:先用 3D 隐扩散生成带粗糙外观的 3D 高斯场景(保证相机可控),再用视频扩散模型在渲染图上补细节、画远景,从而在 Waymo / KITTI-360 上同时拿到高保真画质和精确相机轨迹。
研究背景与动机¶
领域现状:从零生成城市 3D 场景(无条件,或给 text / layout 这类粗引导)是搭建游戏、自动驾驶仿真等开放世界的关键一步。它和「图生视频(I2V)」不同——I2V 只是给定视角延拓输入帧,而场景生成要造出几何一致、外观真实、可从任意视角自由渲染的整个环境。
现有痛点:两条主流路线各有硬伤。① 纯 3D 路线(直接在 3D 空间生成 occupancy / 语义体素)有显式空间结构、天然支持相机控制,但受限于 3D 表示的低分辨率,渲染出来的图细节糊;而且要拿到能直接渲染高保真图的 3D GT 数据极其稀缺。② 「3D 几何 + 2D 渲染」混合路线:先生成 3D 语义体素,再渲染出 depth / semantic map 作为条件喂给视频扩散——但最终外观全部由 2D 凭空合成,模型得学一个从深度 / 语义到 RGB 的复杂映射,训练低效,而且重访同一地点时缺乏一致性。
核心矛盾:生成过程里「多少该在 3D 空间做、多少该交给 2D」?纯 3D 牺牲画质、纯 2D(或 3D 只给几何)牺牲一致性与训练效率。
核心 idea:让 3D 阶段不止给几何,还要给粗糙的 RGB 外观——这是和此前「3D 只提供几何线索」方法的关键区别。2D 模型只需在这个粗外观上做细化(类似超分),而不是从零合成所有外观,由此同时提升训练效率和回环一致性;显式 3DGS 骨架则保住相机可控性。
方法详解¶
整体框架¶
ScenDi 是一条 3D→2D 的级联扩散管线(论文名 ScenDi 取意大利语 "descend",正对应从 3D 降到 2D 的级联),分两大阶段。3D 生成阶段:先用现成的单目深度估计器把若干 posed 输入图反投影、融合成全局彩色点云,离散化成带颜色的体素网格 \(V\);一个 Voxel-to-3DGS VQ-VAE 把 \(V\) 前馈映射成一组 3D 高斯基元 \(G\)(可低分辨率渲染多视一致图);再在 VQ-VAE 的隐空间训一个 3D 隐扩散模型,从纯噪声采样出粗糙 3D 场景,可选地受 3D bbox / road map / text 控制。2D 细化阶段:把 3DGS 渲染出的视频片段 \(\tilde{C}\) 作为条件,微调一个条件视频扩散模型,给前景补高频细节、并合成体素范围之外的远景背景;推理时用 Diffusion Forcing 保证跨片段一致。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["posed 输入图<br/>+ 单目深度"] --> B["Voxel-to-3DGS VQ-VAE<br/>彩色体素 V → 3D 高斯 G"]
B --> C["Latent 3D 扩散<br/>+ 可控条件 (bbox/road/text)"]
C -->|渲染粗糙 RGB 片段| D["条件 2D 视频扩散细化<br/>RGB 条件补细节+远景"]
D -->|Diffusion Forcing 推理| E["高保真城市场景视频"]
关键设计¶
1. Voxel-to-3DGS VQ-VAE:从 2D 监督学一个前馈的体素→3D高斯重建器
痛点是:训 3D 扩散需要海量 3D GT,但城市场景的 3D 高斯要逐场景优化、慢到没法规模化。ScenDi 绕开这点——不要 3D GT,改用现成单目深度估计器:给定体积内的 posed 图 \(\{I_i\}\),估深度 \(\{D_i\}\),反投影并按相机位姿融合到统一坐标系,配一个一致性检查模块滤掉不准的深度和离群点,得到全局 RGB 点云,再离散成彩色体素 \(V \in \mathbb{R}^{H\times W\times D\times 3}\)(落在网格外的点丢弃,记为前景)。VQ-VAE 把 \(V\) 编码、量化、解码成 3D 高斯:\(z^V = E^{3D}_\theta(V),\ z^V_q = Q^{3D}_\theta(z^V),\ G = D^{3D}_\theta(z^V_q)\)。解码器走两条支路——occupancy 支路预测每个体素是否占用 \(O\),feature 支路给出特征体 \(F\);被判占用的体素经各 MLP 头预测一颗高斯的属性:颜色 \(c\)、不透明度 \(\alpha\)、尺度与旋转 \(s,R\)、相对体素中心的偏移 \(\Delta o\),再用渲染函数 \(\pi\) 渲成图。这样把"获取 3D 表示"从逐场景优化变成一次前馈,且监督完全来自 2D 图,规模化才成立。
2. Latent 3D 扩散 + 显式可控条件:在 3D 隐空间里生成、用 3D 条件直接约束
VQ-VAE 训好后,在它的隐空间上训一个 DiT 风格的 3D 噪声估计器,前向加噪 \(z^V_t = \sqrt{\alpha_t}z^V_0 + \sqrt{1-\alpha_t}\epsilon\),采用 v-prediction,从网络输出反解干净隐码 \(\hat{z}^V_0 = \sqrt{\alpha_t}z^V_t - \sqrt{1-\alpha_t}\epsilon^{3D}_\theta(z^V_t;t,c)\),推理用 DDIM 从纯噪声去噪。可控性是这一设计的重点:因为生成发生在 3D 空间,layout 条件无需先渲成 2D——直接从语义基元构造一个 3D 条件体(每个体素一个 one-hot 语义标签,如车辆 / 道路 / 空),下采到隐分辨率后和初始隐码 \(z_0\) 拼接进扩散训练;text 条件则把场景标注成含天气 / 路型 / 背景的句子,文本嵌入经 cross-attention 注入。"在 3D 里生成 + 用显式 3D 表示"正是相机可控性的来源,2D-only 方法因为没有显式 3D 信息做不到这点。
3. 条件 2D 视频扩散细化:用渲染 RGB(而非 depth)做条件补细节、画远景
3D LDM 渲出的图跨视一致、相机解耦,但受分辨率所限发糊,远处区域也建模不了。ScenDi 借预训练视频扩散的先验来补——这是把 2D 当"细化器"而非"从零生成器"。设目标 RGB 视频片段 \(C\)、对应的 VQ-VAE 渲染片段 \(\tilde{C}\),用冻结 VAE 把两者映到隐空间得 \(z^C, z^{\tilde{C}}\),只对 \(z^C\) 加噪得 \(z^C_t\),再沿通道与 \(z^{\tilde{C}}\) concat 作为 U-Net 输入,学条件噪声估计器 \(\epsilon_\phi(z^C_t; t, z^{\tilde{C}})\)。关键在于条件用的是渲染 RGB 而不是 depth/semantic:RGB 直接给纹理信息,2D 模型只做超分式细化,训练更高效、重访一致性更好(消融 Tab.3 直接证明:KITTI-360 上 RGB 条件 FID 36.9 vs depth 条件 78.6)。
4. Diffusion Forcing 推理:让跨片段的远景背景不再突变
由于训练只在最多 5/17 帧的短片段上做,朴素的 replacement 拼接会让长序列里相邻片段的远景"跳变"。ScenDi 改用 Diffusion Forcing:微调时给片段内每帧独立采样不同噪声水平(而非整段共用一个 \(t\));采样时把前面已生成的 \(W\) 帧条件给后面 \(F-W\) 帧,整段时间嵌入设为 \(t=[\underbrace{t_\epsilon,\dots,t_\epsilon}_{W},\underbrace{t,\dots,t}_{F-W}]\),其中 \(t_\epsilon\) 是很小的时间步、\(t\) 来自标准调度器。这样后续帧以已生成帧为条件去噪,跨片段背景才连贯(消融图显示 w/o DF 背景会剧烈变化)。
损失函数 / 训练策略¶
训练分三阶段。① VQ-VAE 重建:几何用 BCE 约束预测 occupancy 与输入体素一致,外观沿用 3DGS 的 L1+SSIM、加前景掩码损失,每场景采 \(M\) 帧渲染算 2D 损失,\(L_{recon}=L_{3D}+\sum_m L^m_{2D}\),其中 \(L_{3D}=\lambda_{bce}L_{bce}+\lambda_{vq}L_{VQ}\)、\(L_{2D}=\lambda_{rgb}L_1+\lambda_{ssim}L_{ssim}+\lambda_{fg}L_{fg}\)(\(\lambda_{bce}=1,\lambda_{vq}=0.25,\lambda_{rgb}=0.8,\lambda_{ssim}=0.2,\lambda_{fg}=0.5\))。② 3D 扩散:MSE 监督干净样本 \(L^{3D}_{diff}=\|z^V_0-\hat{z}^V_0\|^2\)。③ 2D 扩散微调:沿用预训练 backbone 的损失 \(L^{2D}_{diff}=\|z^C_0-\hat{z}^C_0\|^2\)。2D 端训了两个变体(SVD 和 Wan2.1-1.3B-i2v);KITTI-360 与 Waymo 联合训练并注入 dataset ID 嵌入;用 8×A100,VQ-VAE ~2 天、3D 扩散 ~3 天、2D 微调 ~5 天。
实验关键数据¶
主实验¶
KITTI-360 上与 3D 生成 / I2V baseline 的对比(FID/KID/FVD 越低越好,TransErr/RotErr 衡量相机可控性):
| 方法 | 类型 | Backbone | FID↓ | KID↓ | FVD↓ | Met3R↓ | TransErr↓ | RotErr↓ |
|---|---|---|---|---|---|---|---|---|
| DiscoScene | 3D Gen | 3D GAN | 135.3 | 0.093 | 2025.9 | 0.544 | 5.45 | 2.07 |
| CC3D | 3D Gen | 3D GAN | 90.8 | 0.091 | 706.1 | 0.248 | 1.82 | 1.76 |
| UrbanGen | 3D Gen | 3D GAN | 33.0 | 0.017 | 300.1 | 0.220 | 0.21 | 0.25 |
| Ours | 3D Gen | SVD | 36.9 | 0.026 | 400.3 | 0.214 | 0.23 | 0.13 |
| Ours | 3D Gen | WAN2.1-1.3B | 22.9 | 0.016 | 262.6 | 0.125 | 0.06 | 0.23 |
| Vista | I2V | SVD | 25.6 | 0.016 | 234.0 | 0.091 | 2.33 | 0.74 |
| Gen3C | I2V | Cosmos | 24.1 | 0.012 | 426.1 | 0.148 | 0.04 | 0.11 |
WAN 变体在 3D 生成类里全面领先(FID 22.9 / Met3R 0.125),相机精度也远超纯 3D GAN baseline。与 I2V 方法比 FID/FVD 并不完全公平(它们生成帧常与 GT 重叠),但 ScenDi 给出相当画质,且在输入与当前视角重叠很小时不像 Gen3C 那样质量崩坏。
消融实验¶
| 配置 | 关键指标 | 说明 |
|---|---|---|
| w/o \(L_{bce}\), G=1 | PSNR 21.47 / SSIM 0.750 / LPIPS 0.327 | 去掉占用监督,几何变差 |
| w/ \(L_{bce}\), G=6 | PSNR 21.53 / SSIM 0.753 / LPIPS 0.317 | 每体素 6 颗高斯,仅小幅提升 |
| w/ \(L_{bce}\), G=1 (Ours) | PSNR 21.56 / SSIM 0.753 / LPIPS 0.321 | 平衡显存与性能的默认配置 |
2D 条件信号消融(同样训练步数):
| 条件 | KITTI-360 FID↓ | KITTI-360 KID↓ | Waymo FID↓ | Waymo KID↓ |
|---|---|---|---|---|
| Depth 条件 | 78.6 | 0.070 | 77.4 | 0.071 |
| RGB 条件 (Ours) | 36.9 | 0.026 | 41.3 | 0.030 |
关键发现¶
- RGB 条件碾压 depth 条件:相同训练步数下 FID 从 78.6 降到 36.9,因为 RGB 直接给纹理、2D 只需细化;depth 条件下房屋表面更糙、噪声更多,且重访同地点外观不一致——直接验证了"3D 也要给粗外观"的核心假设。
- 每体素多颗高斯收益不大:G 从 1 增到 6 仅微提升,作者推测从共享体素特征预测多样高斯本身就难;为省显存默认 G=1。
- BCE 占用监督有用:纯 2D 监督 VQ-VAE 也能收敛,但占用预测不准、性能略降。
- Diffusion Forcing 解决跨片段跳变:不用它远景背景会剧烈变化,用了相邻片段背景才连贯。
亮点与洞察¶
- 重新切分 3D 与 2D 的职责边界:核心洞见是"3D 阶段该输出粗 RGB 外观,而不只是几何"。这把 2D 模型的任务从"从语义/深度凭空造 RGB"降级为"在已有粗外观上做超分式细化",训练效率和一致性同时受益——一个朴素但效果显著的分工再设计。
- 用单目深度 + 一致性检查造伪 3D GT:绕开城市 3DGS 逐场景优化的规模化瓶颈,让 VQ-VAE 能完全从 2D 监督学到体素→高斯的前馈映射,这套"现成深度估计器当 3D 数据工厂"的思路可迁移到其他缺 3D GT 的生成任务。
- 3D 显式骨架 = 相机可控性的根:相比 I2V / 2D-only 方法,显式 3DGS 让大视角外推(OOD 平移 / 旋转轨迹)下相机精度依然稳,而纯 3D GAN 在大位移下直接画质崩坏、连 DUSt3R 都估不出位姿。
局限与展望¶
- 2D 质量被 3D 阶段卡脖子(作者承认):视频扩散的上限取决于前置 3D LDM,3D 生成不好时 2D 细化只能缓解部分伪影、补不回根本性的崩坏。
- 训练数据受限、靠空间重叠扩样:Waymo ~20k、KITTI-360 ~35k 样本,且要过滤大转弯 / 慢自车 / 大动态物体的场景,适用范围偏向前向行驶轨迹(虽然作者展示了一定的相机外推能力)。⚠️ 动态物体场景的表现论文未充分展开。
- 改进方向:扩大训练数据与模型规模以提升原生 3D 场景生成质量;尤其把 3D 阶段做强,整条级联的天花板才能抬高。
相关工作与启发¶
- vs 纯 3D 生成(DiscoScene / CC3D / UrbanGen / GaussianCity): 它们只靠 3D backbone,有显式空间结构和相机可控性,但受 3D 表示分辨率限制、细节糊;ScenDi 保留显式 3DGS 骨架的同时,用 2D 视频扩散先验补回高频细节,画质与一致性都更好。
- vs 「3D 几何 + 2D 渲染」混合(UrbanGen 类先生成语义体素再渲 depth/semantic 喂 2D): 它们的 3D 只给几何线索、外观全由 2D 凭空合成,映射复杂、重访不一致;ScenDi 让 3D 也产出粗 RGB,2D 只做细化,训练更高效、回环更一致(消融直接对比)。
- vs 图生视频(Vista / Gen3C): 它们靠 internet-scale 2D 先验画质高,但缺显式 3D 信息、相机控制弱(小角度弯道常被拉直成直行);ScenDi 用显式 3D 表示拿到更准的相机轨迹。
- vs SDS 蒸馏类(Urban Architect 等): 用 LG-VSD / VSD 把 2D 先验蒸馏进 3D 表示,单场景处理时间极长且易过饱和;ScenDi 是前馈采样 + 一次细化,速度与稳定性更优。
评分¶
- 新颖性: ⭐⭐⭐⭐ 「3D 出粗外观、2D 做细化」的职责再切分朴素但切中要害,3D-to-2D 级联框架完整
- 实验充分度: ⭐⭐⭐⭐ 两数据集、3D 与 I2V 双类 baseline、画质 + 相机可控性 + 一致性多维评测,消融清晰;但缺代码与动态场景的深入分析
- 写作质量: ⭐⭐⭐⭐ 动机与方法链路讲得清楚,公式与图表配合到位
- 价值: ⭐⭐⭐⭐ 为自动驾驶仿真 / 开放世界场景生成提供了兼顾画质与相机可控的实用路线