社区计算机视觉课程文档

新视角合成

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

新视角合成

在 NeRF 章节中,我们已经了解了如何通过大量图像生成物体的三维表示。但有时我们只有少量图像,甚至只有一张。新视角合成 (NVS) 是一系列从新的相机角度生成视图的方法,这些视图与一组图像在合理程度上保持一致。一旦我们有了大量一致的图像,我们就可以使用 NeRF 或类似的算法来构建 3D 表示。

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

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

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

PixelNeRF

PixelNeRF 是一种直接从一张或多张图像生成 NeRF 参数的方法。换句话说,它将 NeRF 的条件设置为输入图像。与原始 NeRF 不同,原始 NeRF 训练一个 MLP,该 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 之前,在通道方向上与噪声潜在表示连接在一起。

要进一步探索此模型,请参阅 Live Demo

相关方法

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

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

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

< > 在 GitHub 上更新