DualDiff3D:双扩散先验增强3D高斯泼溅的稀疏视角重建

发布时间:2026/9/6 11:16:16
DualDiff3D:双扩散先验增强3D高斯泼溅的稀疏视角重建 三维重建与新视角合成领域这两年最火的三个词是什么Diffusion、3D Gaussian Splatting3DGS以及把两者结合起来的各类“扩散先验引导重建”方法。最近看到一篇很有意思的工作标题叫DualDiff3D: Dual Structure-Appearance Diffusion Priors for Reliability-Enhanced 3D Gaussian Splatting直译过来就是“面向可靠性增强 3DGS 的双结构-外观扩散先验”。对于做 NeRF、3DGS、AIGC 三维内容生成的同学来说这个方向算得上当前最值得跟进的技术路线之一。原始 3DGS 虽然渲染速度快、画质高但在视角稀疏、纹理缺失、环境复杂的情况下很容易出现几何坍塌、浮游物、过拟合训练视图等问题。DualDiff3D 的核心思路是给 3DGS 的训练过程加上“双重保险”一个扩散先验管结构几何、深度、法线另一个扩散先验管外观颜色、纹理、光照从而显著提升重建结果的可靠性。这篇文章我会从问题背景讲起逐步拆解 DualDiff3D 的核心思路、它与普通 Diffusion-Guided 3DGS 的区别、关键模块的作用然后给出可落地的工程实践思路包括伪代码、训练流水线、环境配置建议。同时也会把之前做相关项目时踩过的坑、调参经验、常见问题一并整理出来方便你在自己的实验里快速避开雷区。1. 背景与问题为什么 3DGS 需要“扩散先验”1.1 3D Gaussian Splatting 解决了什么3D Gaussian Splatting 是一种显式三维场景表示方法核心思想是用大量带协方差、颜色、不透明度的高斯椭球体来描述场景。渲染时这些高斯体被投影到 2D 图像平面并按深度排序、逐像素混合最终生成一张高质量图片。相比传统 NeRF 的隐式神经辐射场3DGS 的优势非常明显训练速度快几分钟到几十分钟就能完成一个场景的优化。渲染速度极快支持实时 1080P 甚至 4K 渲染。显式点云结构便于编辑、分割、组合。但 3DGS 并不是没有短板。最典型的问题出现在输入视角不足的时候。1.2 稀疏视角下的巨大痛点假设你只有 5 到 10 张不同角度的照片想让 3DGS 重建出一个完整场景。这个时候3DGS 会怎么做它会尽可能把每个高斯体的颜色和位置调成“刚好满足这几张训练图”结果就是未观察区域出现大面积“浮空云”漂浮的高斯体。几何形状完全不连续深度图、法线图崩坏。新视角渲染出现严重伪影、模糊或颜色漂移。训练 loss 很低但换一个角度就彻底露馅。这是典型的过拟合3DGS 只记住了训练视图没有理解场景的真实三维结构。1.3 为什么需要扩散先验扩散模型Diffusion Model包含 Stable Diffusion、DeepFloyd IF 等在 2D 图像生成上已经被验证得非常成熟。它学习了海量真实图像的概率分布因此“见多识广”——当给它一张残缺、畸变、伪影严重的渲染图时扩散模型能够判断出“这不像真实照片”并给出降噪方向。把这个能力用到 3DGS 训练中就形成了Diffusion-Guided 3D Gaussian Splatting的范式在每一轮优化中把当前渲染结果喂给扩散模型计算出先验损失比如 SDS 损失再把损失回传到高斯体参数上。这样扩散模型就像一个“看不见的训练监督器”不断纠正 3DGS 的几何和外观错误。DualDiff3D 正是在这条技术路线上做了进一步深化它不再用单个扩散模型同时管结构和外观而是拆成两个先验各司其职分工合作。1.4 DualDiff3D 的技术定位从论文标题可以看出几个关键信息Dual双先验结构引入两个独立扩散先验。Structure-Appearance结构先验负责几何合理性外观先验负责颜色与纹理真实性。Reliability-Enhanced最终目标是提升重建结果在未知视角下的可靠性而不是仅仅降低训练视图上的损失。可以说DualDiff3D 是在“可泛化的三维重建”这个目标上做文章。它不是要替换 3DGS而是给 3DGS 加一个更科学、更稳定的优化约束。2. 核心概念拆解Diffusion、SDS 与 3DGS在深入 DualDiff3D 的方法之前有必要把几个前置概念讲清楚否则后面读代码和论文会非常吃力。2.1 Diffusion Model扩散模型的工作原理简述扩散模型分两个过程前向过程对一张真实图像不断加噪声直到变成纯高斯噪声。反向过程训练一个 U-Net 或者 DiT 网络学习如何从带噪声图像一步步去噪还原原图。训练完成后这个去噪网络其实就是一个“图像分布判官”。给它一张图它能告诉你“这张图在哪个噪声尺度上需要往哪个方向去噪才能更像真实图。”Stable Diffusion 是当前应用最广的文生图扩散模型之一基于 Latent Diffusion 架构在 VAE 的隐空间中进行去噪计算成本更低也更容易作为先验嵌入到其他三维生成流程中。在三维重建/生成领域扩散模型最常见的用法是作为 2D 先验。因为我们没有大量配套的三维标注数据所以只能通过“渲染 2D 图像 2D 扩散模型评估”来间接约束三维表征。2.2 SDSScore Distillation Sampling损失SDS 最早由 DreamFusion 提出是连接扩散模型和三维表示优化的核心桥梁。它的思想非常巧妙从当前三维表示比如 3DGS渲染出一张 2D 图 x。给 x 加上随机噪声得到带噪图 x_t。把 x_t 输入扩散模型 U-Net让网络预测噪声 ε_phi(x_t, t, condition)。计算预测噪声与真实噪声的差作为梯度信号回传到三维表示参数上。SDS 损失可以用下面这个简化公式表达L_SDS w(t) * ( ε_phi(x_t, t, condition) - ε )其中w(t) 是当前时间步 t 的权重。ε_phi 是扩散模型预测的噪声。ε 是随机采样的真实噪声。condition 可以是文本提示、参考图像或者 ControlNet 控制条件。在 DualDiff3D 中condition 可以是深度图、法线图、参考视角图像等具体看结构分支还是外观分支。为什么 SDS 有效因为扩散模型经过海量数据训练后它知道“自然图像的结构是什么样”“自然图像的纹理是什么样”。当 3DGS 渲染出的图在结构或纹理上违反这些规律时SDS 会产生较大的梯度推动渲染结果朝更真实的方向演化。2.3 3D Gaussian Splatting 的核心参数3DGS 的核心是可微的高斯体参数位置means协方差矩阵covariance通常用四元数 缩放表示颜色SH 球谐系数通常 3 阶不透明度opacity训练过程中除了优化这些参数还会动态控制高斯体的数量克隆clone和分裂split。克隆用于补充欠采样区域的高斯体分裂用于细分过大的高斯体。理解了这些你就知道 DualDiff3D 最终优化的是什么还是这些高斯体参数只是损失函数里多了两个扩散先验项。3. DualDiff3D 方法拆解双先验机制详解这一节是全文的核心我会把 DualDiff3D 的整体框架、两条先验分支、损失组成和优化策略逐层拆开讲。3.1 整体框架两条分支并行约束DualDiff3D 的整体流程可以概括为输入稀疏视角图像集 相机位姿 ├─ 初始化 3DGS可用 COLMAP 稀疏点云初始化 ├─ 结构分支渲染深度图/法线图 - 结构扩散先验 - SDS 结构损失 ├─ 外观分支渲染 RGB 图 - 外观扩散先验 - SDS 外观损失 └─ 基础分支渲染 RGB 图 - 真实视角监督 - L1 SSIM 损失 ↓ 所有损失加权求和更新 3DGS 参数下面解释每一个分支的作用。3.2 结构先验Structure Prior结构先验是 DualDiff3D 中最有辨识度的部分。它专门约束 3DGS 的几何属性。怎么“看到”几何答案是渲染深度图或法线图。3DGS 渲染深度图并不复杂每个高斯体本身有 3D 位置投影后会形成一个深度值按照 alpha 混合就能得到深度图根据高斯基元在相机坐标系下的空间关系也能估计出法线图。接下来这个深度图/法线图不会被直接拿去和某个真值计算 L2而是输入一个针对结构数据训练的扩散先验模型。这个模型见过大量真实场景的深度分布、法线连续性模式所以能判断当前几何是否“异常”。比如在稀疏视角条件下3DGS 可能把远处的天空区域错误地填充一个孤立的漂浮高斯体导致深度图中出现突变。结构扩散先验检测到这个突变后会通过 SDS 梯度告诉 3DGS“这里不像是连续的真实表面把几何理顺。”于是漂浮物会被压缩、消除。这种做法的优势是不依赖稠密深度真值。对浮游物、几何断裂、空洞有直接抑制作用。不受光照纹理干扰因为输入的是几何属性而非颜色。3.3 外观先验Appearance Prior外观先验约束的才是渲染图的颜色纹理合理性。即使几何已经完全正确颜色也可能出问题。比如纹理模糊、颜色渗漏、光照不自然、重复纹理区域“糊成一团”。外观先验让渲染图尽可能地符合真实图像的统计规律。这里使用的扩散先验可以是 Stable Diffusion 这类大模型也可以是针对特定场景微调过的图像扩散模型。它的输入是 3DGS 渲染出的 RGB 图输出则是 SDS 梯度。外观先验与结构先验最大的区别在于监督信号所在的空间不同一个在几何空间一个在图像空间。两者互补缺一不可。3.4 双先验如何协作双先验的核心价值在于“解耦”这比用一个扩散模型同时监督颜色和几何要好得多。原因可以这样理解如果只用一个扩散模型它收到的是渲染 RGB 图同时要判断结构和外观。但 RGB 图里的结构信息和外观信息是纠缠在一起的。纹理多、光照复杂的区域几何错误容易被纹理掩盖几何混乱的区域外观又容易被误判。拆成两个分支后结构分支只看深度/法线不会被纹理干扰外观分支只看 RGB但也无需分心去猜测几何合理不合理。从优化角度看两条分支对应的扩散模型可以分别选择适合的架构、输入分辨率和噪声调度参数调整空间更大。3.5 损失函数组成DualDiff3D 的总损失可以简写为L_total L_rgb λ_s * L_struct λ_a * L_appear其中L_rgb 是常规 RGB 监督损失一般用 L1 SSIM确保 3DGS 不偏离真实输入视图。L_struct 是结构分支的 SDS/扩散先验损失约束深度图、法线图分布。L_appear 是外观分支的 SDS/扩散先验损失约束渲染 RGB 图的真实性。λ_s 和 λ_a 是权重系数用于控制两个先验的强度。在实际工程中λ_s 和 λ_a 通常会设计成随训练进度动态调整。训练早期几何问题更突出结构先验权重应该偏大训练后期几何逐渐稳定外观先验比例可以适当提高。3.6 可靠性增强体现在哪里“Reliability-Enhanced”到底增强在哪些方面根据论文思路和实验现象主要体现在几个维度陌生视角渲染质量只用了少量训练视角但渲染新视角时几乎不退化成伪影图。几何一致性深度图和法线图连续自然不出现大面积断裂。训练稳定性不容易在优化中途崩溃因为扩散先验提供了一个全局的、柔性的先验约束而不是纯靠拟合有限数据。抗过拟合能力即便训练集覆盖不足模型也能“脑补”出合理的结构和纹理而不是固化为几个颜色斑块。4. 实战思路从环境配置到核心代码示意这一节给出工程落地的思路。注意DualDiff3D 属于研究型方法官方代码可能仍在调整中下面给出的是通用的实现思路和核心伪代码你可以结合自己的 3DGS 工程进行适配。4.1 环境准备与算力说明配置深度学习的 3DGS Diffusion 先验环境建议如下组件建议配置GPUNVIDIA RTX 3090/409024GB 显存起步CUDA11.8 或 12.1Python3.8 ~ 3.10PyTorch1.13 ~ 2.13DGS 基础代码gaussian-splatting 官方代码或 gsplat 库扩散模型库diffusers Stable Diffusion 权重工具库opencv、numpy、tqdm、tensordict如果显存不足可以考虑降低渲染图像分辨率例如从 512×512 降到 320×320。减少扩散先验的推理步数。使用 offload 机制将扩散模型放到 CPU 或按需加载。这里要特别提醒一句扩散模型先验的显存开销主要来自 U-Net 的前向推理。如果你的总显存只有 16GB建议先用分辨率减半的方式跑通流程再逐步提高图像分辨率。4.2 项目结构规划建议把工程结构规划成下面这样DualDiff3D-Demo/ ├── configs/ │ └── dualdiff3d.yaml ├── data/ │ ├── images/ # 稀疏视角图像 │ └── sparse/ # COLMAP 稀疏重建结果 ├── src/ │ ├── gaussian_model.py │ ├── renderer.py │ ├── loss.py │ ├── structure_prior.py │ ├── appearance_prior.py │ └── trainer.py ├── output/ └── requirements.txt这样的结构让你能清晰区分不同模块的职责也方便后续做消融实验去掉结构先验、去掉外观先验分别对比。4.3 核心代码示意SDS 损失实现先看最关键的一段SDS 损失。# 文件路径src/loss.py # 说明下面是 SDS 损失核心逻辑的示意代码需结合实际扩散模型接口调整 import torch def compute_sds_loss( renderer_output: dict, diffusion_unet, scheduler, text_embeddings: torch.Tensor, guidance_scale: float 7.5, t_range(0.2, 0.98) ): 通过 Diffusion 模型计算 SDS 损失。 参数 renderer_output: 包含渲染得到的 RGB 图和可选深度图。 diffusion_unet: 扩散模型的 U-Net。 scheduler: DDIM/DPM-Solver 等调度器。 text_embeddings: 文本条件向量如果使用了 Text-to-Image 先验。 guidance_scale: 无分类器指导强度CFG。 # 1. 拿到渲染图像像素值归一到 [-1, 1] 区间 render_rgb renderer_output[rgb].unsqueeze(0) # [1, 3, H, W] render_rgb render_rgb * 2.0 - 1.0 # 2. 随机采样时间步 t t torch.randint( int(t_range[0] * 1000), int(t_range[1] * 1000), (1,), devicerender_rgb.device, ).long() # 3. 对渲染图添加噪声 noise torch.randn_like(render_rgb) noisy_latent scheduler.add_noise(render_rgb, noise, t) with torch.no_grad(): # 条件 embedding文本提示可为空字符串 cond_emb text_embeddings # 4. U-Net 预测噪声 noise_pred diffusion_unet( noisy_latent, t, encoder_hidden_statescond_emb ).sample # 5. 计算 SDS 损失用预测噪声与采样噪声之间的差作为梯度 loss_sds ((noise_pred - noise) * noise).mean() return loss_sds这段代码的核心逻辑可以总结为三步噪声化渲染图、扩散模型预测噪声、用预测噪声与采样噪声的差作为指导梯度。实际落地时U-Net 输入通常是 VAE 编码后的隐向量Latent所以还应该在外面包一层 VAE Encoder/Decoder。上面代码为了直观省略了 VAE 环节属于核心思想示意。4.4 结构分支深度/法线提取与扩散先验结构分支的关键在于怎么从 3DGS 中提取出适合扩散模型的深度/法线信号。# 文件路径src/structure_prior.py # 说明结构先验分支示意代码 import torch class StructurePrior: def __init__(self, structure_diffusion_model, devicecuda): self.model structure_diffusion_model self.device device def get_depth_map(self, gaussians, camera): 从 3DGS 渲染深度图。 实际实现可参考 gaussian-splatting 的深度渲染逻辑。 # 示意调用渲染器输出深度图 depth render_depth(gaussians, camera) # [1, 1, H, W] return depth def compute_structure_sds(self, gaussians, camera, text_embedding): depth self.get_depth_map(gaussians, camera) # 归一化到 [-1, 1] 或者使用对数深度表示 depth_normalized normalize_depth(depth) # 用结构先验计算 SDS 损失 loss compute_sds_loss( renderer_output{rgb: depth_normalized.repeat(1, 3, 1, 1)}, diffusion_unetself.model.unet, schedulerself.model.scheduler, text_embeddingstext_embedding, ) return loss这里有个实现细节深度图是单通道的但扩散模型通常处理三通道 RGB。最常见的做法是把深度图复制成三通道。或者用伪彩色映射如 Jet 色图把深度变成三通道。伪彩色映射在视觉上更接近自然图像某些场景下先验效果更好但也会引入颜色编码带来的额外信息干扰。建议两种方式都实验一下不同数据集的结论可能不同。4.5 训练主循环下面给出 DualDiff3D 的训练主循环框架。# 文件路径src/trainer.py # 说明训练主循环示意 for iteration in range(max_iterations): # 1. 采样一个训练相机视角 camera dataset.sample_camera() # 2. 渲染 RGB、深度图 render_pkg renderer.render(gaussians, camera) rgb render_pkg[rgb] depth render_pkg[depth] # 3. 基础 RGB 监督损失确保不偏离真实输入 gt_img dataset.get_gt_image(camera.id) loss_rgb l1_loss(rgb, gt_img) 0.2 * (1.0 - ssim(rgb, gt_img)) # 4. 结构分支 SDS loss_struct structure_prior.compute_structure_sds( gaussians, camera, text_embeddingstructure_prompt ) # 5. 外观分支 SDS loss_appear appearance_prior.compute_appearance_sds( gaussians, camera, text_embeddingappearance_prompt ) # 6. 加权求和 lambda_s get_adaptive_weight(iteration, structure) lambda_a get_adaptive_weight(iteration, appearance) total_loss loss_rgb lambda_s * loss_struct lambda_a * loss_appear # 7. 反向传播更新 3DGS 参数 total_loss.backward() optimizer.step() optimizer.zero_grad() # 8. 调整高斯体数量克隆/分裂/剪枝 gaussians.densify_and_prune(max_grad0.0002)4.6 运行验证与观测指标整个训练过程中不能只看训练集上的 PSNR。既然重点是“可靠性增强”至少要看以下几项新视角 PSNR/SSIM/LPIPS在预留的测试视角上评估这是最核心的指标。深度图一致性比较不同视角下深度图的重投影误差。法线图连续性观察法线图是否有突兀跳变。浮游物数量通过点云可视化看远处是否有孤立悬浮点。训练稳定性统计 loss 曲线是否有反复震荡、发散。论文实验里通常会强调在相同稀疏视角条件下DualDiff3D 的新视角渲染质量显著高于原版 3DGS也高于单扩散先验的版本。这种对比实验非常值得自己复现一遍能加深对双先验机制的理解。5. 常见问题与排查思路在实际复现和工程化调整时几乎肯定会遇到下面这些问题。这里整理一张检查表问题现象常见原因解决思路训练 loss 不下降扩散先验权重过大梯度方向与渲染监督冲突降低 λ_s 和 λ_a先用基础 RGB 损失稳定训练渲染图过平滑外观扩散先验过度“规整”抹掉了真实细节降低外观先验权重或提高 SDS 噪声时间步采样下限几何仍然有漂浮物结构先验没有生效检查深度图是否归一化正确结构扩散模型是否训练充分训练速度太慢每步都跑两个扩散模型的前向推理可以隔 N 步计算一次先验损失或降低扩散模型推理分辨率梯度爆炸扩散模型输出尺度不稳定对 SDS 梯度做截断grad clip颜色漂移外观先验使用文本提示过于抽象模型“脑补”过度改用图像条件扩散模型或者更具体的文本描述显存不足渲染图和扩散模型同时占显存开启梯度检查点、减少 batch、降低分辨率5.1 结构先验不生效的排查步骤这是最常见也最让人头疼的问题。建议按照下面顺序排查第一步确认深度图是否合理。把渲染出的深度图直接保存成图片肉眼观察有没有大面积黑色、白色断层。第二步确认深度归一化范围。深度图的值范围差异很大如果直接当作 RGB 输入扩散模型模型完全不知道这个数值代表什么意思。需要统一归一化到 [-1, 1] 或者 [0, 1]并且要保持尺度稳定。第三步确认结构扩散模型的输入分布与训练分布是否匹配。结构先验模型如果是用合成深度图训练的对真实 3DGS 渲染深度图的泛化可能有限。这时可以加入少量真实深度图进行微调。第四步把结构先验的梯度单独可视化看它到底在推着 3DGS 往哪个方向变。梯度方向混乱大概率是条件输入不匹配或噪声时间步采样不合适。5.2 两个扩散先验权重如何配比权重配比没有通解但有一个可参考的初始化策略先用纯 3DGS 训练几百步让几何有个初步雏形。前 20% 训练阶段λ_s 明显大于 λ_a重点修结构。中间 50% 阶段λ_s 和 λ_a 接近同步优化。最后 30% 阶段略微降低 λ_s增大 λ_a把纹理细节磨好。如果你用的是 30k 步的完整训练可以参考这个比例去推每个阶段的轮数。在实际项目中我一般会把 λ_s 初始设为 0.1~0.3λ_a 初始设为 0.05~0.1然后用验证集的新视角 PSNR 做一次网格搜索成本在可接受范围内。6. 工程实践与最佳建议6.1 数据准备阶段的建议稀疏视角重建中视角覆盖比视角数量更重要。即使只有 10 张图也要确保它们覆盖了场景的各个侧面而不是集中在同一角度。建议先用 COLMAP 跑一遍稀疏重建确认相机位姿解算没有大问题。位姿错误时任何先验都救不回来。6.2 扩散先验的选型建议结构分支和外观分支都可以灵活替换扩散模型不必死磕某一个。外观分支的底座可以是 Stable Diffusion 1.5 / 2.1 / XL也可以换成更轻量的小模型以节省显存。结构分支则推荐使用针对深度估计预训练的扩散模型如基于 Depth Anything 蒸馏特征做条件控制的模型因为这类模型对几何的理解更专业。ControlNet 也是非常实用的工具。如果想让外观扩散先验严格保持输入渲染图的构图可以在 U-Net 旁边加一个 ControlNet用渲染图的边缘/深度作为控制信号这样 SDS 在修正纹理时不容易把整体构图也改掉。6.3 训练稳定性的工程技巧从我自己的实战经验来看以下技巧对稳定训练非常关键梯度裁剪。SDS 损失的梯度波动比较大不裁剪容易让高斯体参数发生剧烈跳跃导致画面中出现大量黑色/白色噪点。一般 clip 到 [-1, 1] 就够用。噪声时间步 t 的范围控制。t 太小扩散模型相当于在恢复高频细节容易引入噪声t 太大扩散模型对图像结构的改动也大可能破坏真实细节。常用区间是 [0.2, 0.98] 或者 [0.02, 0.98]建议先从窄区间开始稳定后再放宽。延迟启动扩散先验。训练前 500~1000 步先不开扩散先验让 3DGS 完成基本初始化。否则几何还没成形扩散模型就开始疯狂“指导”两个信号互相打架很容易发散。定期保存检查点。双扩散先验的计算量不小跑崩一次重新来成本很高。建议每 2000 步保存一次模型方便回退。使用早停策略。如果发现验证集 PSNR 已经开始下降说明产生了过拟合此时可以停止继续优化或者增强扩散先验的权重来压制过拟合。6.4 消融实验怎么做如果你打算基于 DualDiff3D 发论文或者做项目验证强烈建议做这样几组消融无先验原始 3DGS。仅结构先验。仅外观先验。双先验完整 DualDiff3D。双先验但没有解耦即用一个扩散模型同时监督 RGB 和深度拼接图。最后这一组往往很有意思它会证明“解耦”这一步的重要性也让文章的故事线更加完整。6.5 生产环境部署时的注意点如果要把 DualDiff3D 用到实际业务中还需要考虑推理阶段是否保留扩散模型。扩散先验只是在训练阶段提供约束推理时只需要 3DGS 本身这样可以大幅降低上线资源成本。场景类型适配。DualDiff3D 对室外大规模场景和室内物体级场景的适用性不同通常物体级重建效果更可控。室外场景需要谨慎处理天空区域、动态物体和曝光差异。隐私与版权合规。如果扩散先验是 Stable Diffusion 等开源模型需要检查模型 license 是否允许商用特别是涉及生成内容的版权边界时要格外审慎。7. 总结与学习路线DualDiff3D 是一个非常有代表性的工作它的核心贡献在于把“扩散先验引导 3DGS”的通用思路做了一个清晰的分工升级。过去人们更习惯用一个扩散模型同时负责所有约束DualDiff3D 把约束拆成结构、外观两路让每个专家模型只专注自己擅长的领域最终提升重建的可靠性。如果你对这篇论文感兴趣建议按照下面的路线深入学习第一步跑通原版 3DGS 代码理解高斯参数、渲染流程、稠密化策略这是基础中的基础。第二步跑通一个最简的 Diffusion-Guided 3DGS 示例比如用 Stable Diffusion 实现 SDS 损失感受扩散先验对重建质量的影响。第三步在此基础上实现 DualDiff3D 的双分支架构先不用追求完全复现论文指标关键是理解结构先验和外观先验各自的作用。第四步设计自己的对比实验用不同稀疏程度的输入验证双先验的增益记录不同 λ 系数下的表现差异。第五步尝试扩展。比如把结构先验输出从深度扩展为语义分割图让先验同时约束“场景中有什么物体”这也许能进一步增强复杂场景的语义一致性。如果这篇文章对你有帮助建议先收藏再慢慢实验。dual-diffusion 与 3DGS 的结合是这个方向的发展趋势之后肯定还会出现更多变体和优化把 DualDiff3D 的基础原理吃透后续再读相关论文、复现代码都会快很多。