Repurposing Diffusion Inpainters for Novel View Synthesis
University of Toronto; Snap Research
一句话总结
iNVS 把预训练的 2D 图像修复扩散模型改造成单图新视角合成器:先用单目深度把源图可见像素几何地重投到目标视角,再让扩散模型只补齐新出现的区域,从而在生成新内容的同时最大化复用源图像素。
研究背景
- 领域现状:单图新视角合成长期依赖多视角输入(如 NeRF)或特定类别的 3D 先验(人体、人脸);近年大规模文本到图像扩散模型展现出强大的通用物体先验,Zero-1-to-3 等工作已尝试把 Stable Diffusion 微调用于新视角生成。
- 核心痛点:这类”从零生成目标视角”的方法忽视了 U-Net 难以生成与源图对齐的输出,容易导致源视角与目标视角内容不一致,可见区域的外观得不到保持;而纯 2D 扩散模型本身缺乏对相机视角的精确控制。
- 本文 idea:与其从零生成整张目标图,不如把任务拆成”复用 + 修复”——把源图中可见像素通过单目深度反投影到 3D 再投影到目标视角,形成一张部分目标视图,剩下新暴露的区域交给一个专门微调过的修复扩散模型来补全,用几何线索保证一致性。
方法
整体 pipeline:给定单张源图与源、目标相机位姿,先用单目深度估计器把源图像素反投影(unproject)到 3D 世界坐标,再投影(reproject)到目标视角得到”部分目标视图”,同时基于极线几何生成一张标注待修复区域的掩码;把部分目标视图、极线掩码、以及源图的 CLIP 图像嵌入一起送入以 Inpainting Stable Diffusion(ISD)为骨干的模型,去噪生成完整目标视图。
flowchart LR
A["源图 + 相机位姿"] --> B["单目深度估计"]
B --> C["反投影到 3D 点云"]
C --> D["重投影到目标视角"]
D --> E["部分目标视图 + 极线掩码"]
F["源图 CLIP 嵌入"] --> G["ISD 修复扩散模型"]
E --> G
G --> H["完整目标视图"]
关键设计:
-
基于极线几何的平滑修复掩码:单纯把”目标视图里非物体的像素”当作修复区域会导致掩码过大、ISD 难以保持与源图一致。作者利用极线几何——源图某像素对应目标视图中的一条极线,重投影点 \(\boldsymbol{p}_w\) 精确划分该线的可见/遮挡部分。由此生成”极线掩码” \(M_{s \to t}\)。掩码取值不用非黑即白的 0/255,而是按源、目标相机光线夹角线性插值出平滑值(180 度为黑、0 度为白),告诉 ISD 每个点经历了多大视角变化,帮助它忽略/覆盖被翻转的像素。
-
用 CLIP 图像嵌入替代文本条件:把 Stable Diffusion 的 CLIP 文本编码器换成图像编码器,用源图的 CLIP 嵌入 \(X_s\) 作条件。由于源图与目标图在 RGB 空间并不对齐,条件通过交叉注意力注入而非通道拼接。核心去噪损失为 \(L_2 = \lVert \epsilon - \text{ISD}(I_t + \epsilon, M_{s \to t}, I_{s \to t}, X_s) \rVert^2\)。
-
更严格的边界损失:ISD 原本在真实多样背景上训练,难以生成纯白/纯黑背景,倾向于把物体边界扩大填满掩码。作者引入重加权系数:位于已知区域边界的像素 \(W[\boldsymbol{p}_t]=1\),需要发现物体边界的未知像素 \(W[\boldsymbol{p}_t]=2\),得到重加权损失 \(L_W = \lVert W(\epsilon - \text{ISD}(I_t + \epsilon, M_{s \to t}, I_{s \to t}, X_s)) \rVert^2\),促使模型专注于发现物体形状。
-
早期去噪步微调与推理引导:观察到形状边界在去噪早期就被确定、纹理较晚,作者额外在去噪调度前 10% 的噪声区间采样微调 ISD。推理时不从纯噪声开始,而是从部分目标视图 \(I_{s \to t}\) 的带噪版本开始反向去噪,显著减少伪影;同时因单目深度只有未知尺度,作者把投影点重心归零并缩放进立方体,与训练渲染设置对齐。
训练在 Objaverse(约 80 万个 3D 资产、渲染约 1900 万张图)上进行,从 Stable Diffusion v1.5 修复检查点初始化,分去噪、边界损失、早期步三阶段顺序训练,用 96 张 A100 各阶段各训 7 天。
实验结果
在 Google Scanned Objects(GSO)合成数据集上与四个基线的零样本新视角合成对比(mask 表示用真值掩码滤除背景后计算的指标):
| 方法 | PSNR↑ (mask) | SSIM↑ (mask) | LPIPS↓ |
|---|---|---|---|
| Point-E | 8.90 | 0.82 | 0.25 |
| Shap-E | 10.39 | 0.82 | 0.29 |
| Zero-1-to-3 | 14.74 | 0.84 | 0.25 |
| Original ISD | 15.03 | 0.49 | 0.38 |
| iNVS (ours) | 18.95 | 0.80 | 0.24 |
iNVS 在 PSNR 上显著领先所有基线,LPIPS 相当或更优,说明其在噪声抑制和感知相似度上表现良好。在 Ray-Traced Multiview(RTMV)与 Common Objects in 3D(CO3D,真实视频)上同样取得最高 PSNR;在 RTMV 上因光照分布外差异导致 SSIM/LPIPS 略逊。作者也指出 SSIM 指标在所有数据集上偏低,主因是单目深度在大视角变化下难以给出一致深度。
亮点与局限
- 亮点:
- 把新视角合成重构为”几何复用 + 扩散修复”两步,用几何线索显式保持源图可见区域的外观,缓解了从零生成方法的源-目标不一致问题。
- 极线几何驱动的平滑掩码把”视角变化量”编码进修复条件,是复用 2D 修复扩散先验的巧妙桥梁。
- 零样本泛化能力强,在合成与真实三个数据集上均取得有竞争力的结果。
- 局限:
- 强依赖单目深度估计器的质量,大视角变化下深度不一致会破坏结构,导致 SSIM 偏低。
- 尺度未知需要重心归一化/缩放的启发式对齐,稳健性有限。
- 对极端俯仰视角(如从底部看放在平台上的物体)本质缺信息,难以准确合成。
延伸思考
该工作体现了”最大化复用可见像素、只对新增区域调用生成先验”的思路,与后续把视频扩散模型用于新视角合成、以及”重建可见部分 + 修复隐藏部分”的分解式方法一脉相承。一个自然的追问是:把单目深度换成更强的几何先验(如多视一致的深度或前馈式 3D 表示)能否直接治好 SSIM 短板?此外,把极线掩码的”视角变化量”平滑编码推广到多帧/连续相机轨迹,或许能得到时序更一致的生成结果。