社区计算机视觉课程文档

新视角合成

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

新视角合成

我们已经在 NeRF 章中看到,给定一组大量的图像,我们可以生成一个对象的三维表示。但有时我们只有少量甚至一张图像。新视角合成 (NVS) 是一系列方法,用于生成与一组图像合理一致的新相机角度的视图。一旦我们拥有大量一致的图像,我们就可以使用 NeRF 或类似的算法来构建 3D 表示。

最近为此任务开发了许多方法。然而,它们可以分为两大类——那些生成中间三维表示,然后从新的视角方向渲染,以及那些直接生成新图像的方法。

一个关键的难点是这项任务几乎总是欠定的。例如,对于一个招牌背面的图像,正面可能有许多不同的东西。类似地,对象可能存在被遮挡的部分,其中一个部分位于另一个部分的前面。如果模型被训练直接预测(回归)未见部分,并对重建保留视图中的误差进行惩罚,那么当不清楚应该有什么时,模型必然会预测一个模糊的灰色区域,如 NerfDiff 中所述。这激发了人们对使用生成式、基于扩散的模型来采样的兴趣,这些模型能够从未见区域的多种合理可能性中进行采样。

在这里,我们将简要讨论两种代表这两类的方法。PixelNeRF 直接从输入图像预测场景的 NeRF。Zero123 调整 Stable Diffusion 潜在扩散模型,直接生成新视图而无需中间 3D 表示。

PixelNeRF

PixelNeRF 是一种直接从一张或多张图像生成 NeRF 参数的方法。换句话说,它以输入图像为条件来生成 NeRF。与原始 NeRF 训练一个将空间点映射到密度和颜色的 MLP 不同,PixelNeRF 使用从输入图像生成的空间特征。

PixelNeRF diagram

图片来源:PixelNeRF

该方法首先将输入图像通过一个卷积神经网络 (ResNet34),将来自多个层的特征双线性上采样到与输入图像相同的分辨率。
与标准 NeRF 一样,新视图是通过体渲染生成的。然而,NeRF 本身具有略微不寻常的结构。在渲染体积中的每个查询点x x 处,会找到输入图像中的对应点(通过使用输入图像相机变换π \pi 进行投影)。然后通过双线性插值找到该点的输入图像特征,W(πx) W(\pi x) 与原始 NeRF 类似,查询点x x 进行位置编码,并与视角方向d d拼接。NeRF 网络由一组 ResNet 块组成;输入图像特征W(π(x)) W(\pi(x)) 通过一个线性层,并被添加到前三个残差块开始处的特征中。然后还有两个残差块进一步处理这些特征,之后一个输出层将通道数减少到四个(RGB+密度)。当提供多个输入视图时,这些视图在前三个残差块中独立处理,然后在最后两个块之前对特征进行平均。

原始的 PixelNeRF 模型是在来自 ShapeNet 数据集相对较小的一组渲染图像上训练的。该模型使用一张或两张输入图像进行训练,并尝试从新的相机角度预测单个新视图。损失是渲染视图和预期新视图之间的均方误差。每个对象类别(例如飞机、长椅、汽车)都分别训练了一个模型。

结果(来自 PixelNeRF 网站)

Input image of a chair
Rotating gif animation of rendered novel views

图片来源:PixelNeRF

PixelNeRF 代码可以在 GitHub 上找到。

相关方法

ObjaverseXL 论文中,PixelNeRF 在一个*大得多的*数据集 allenai/objaverse-xl 上进行了训练。

另请参阅 - 生成查询网络 (Generative Query Networks), 场景表示网络 (Scene Representation Networks), LRM

Zero123 (或 Zero-1-to-3)

Zero123 采用不同的方法,它是一个扩散模型。它不试图生成三维表示,而是直接从新视图预测图像。该模型接受单个输入图像,以及输入和新视图方向之间的相对视点变换。它试图从新视图方向生成一个合理、3D 一致的图像。

Zero123 基于 Stable Diffusion 架构构建,并通过微调现有权重进行训练。
然而,它添加了一些新的功能。该模型实际上从 Stable Diffusion Image Variations 的权重开始,后者使用输入图像的 CLIP 图像嵌入(最终隐藏状态)来调节扩散 U-Net,而不是文本提示。然而,在这里,这些 CLIP 图像嵌入与输入和新视图之间的相对视点变换(以球面极坐标表示)进行拼接。

其余架构与 Stable Diffusion 相同。然而,输入图像的潜在表示与噪声潜在表示在通道维度上进行拼接,然后输入到去噪 U-Net。

要进一步探索此模型,请参阅 实时演示

相关方法

3DiM - X-UNet 架构,输入帧和噪声帧之间存在交叉注意力。

Zero123-XL - 在更大的 objaverseXL 数据集上进行训练。另请参阅 Stable Zero 123

Zero123++ - 生成 6 个新的固定视图,这些视图相对于输入视图处于固定的相对位置,并且在输入图像和生成图像之间具有参考注意力。

< > 在 GitHub 上更新