社区计算机视觉课程文档

神经辐射场(NeRF)

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

神经辐射场(NeRF)

神经辐射场(Neural Radiance Fields, NeRFs)是一种在神经网络中存储3D场景的方式。这种存储和表示场景的方式通常被称为隐式表示,因为场景参数完全由底层的多层感知机(MLP)表示。(相比之下,显式表示将颜色或密度等场景参数明确存储在体素网格中。)这种新颖的场景表示方法在新视角合成任务中展现了非常令人印象深刻的结果,即从训练集中未包含的摄像机视角插值出新视角。此外,它允许我们以比显式表示更小的内存占用存储大型场景,因为我们只需要存储神经网络的权重,而体素网格的内存大小是立方增加的。

简史 📖

NeRF领域相对年轻,Mildenhall等人于2020年首次发表论文。自那时起,大量论文发表,并取得了快速进展。自2020年以来,已有超过620篇预印本和出版物发布,GitHub上有超过250个代码库。(截至2023年12月,数据来自paperswithcode.com)。

由于最初的NeRFs配方需要很长的训练时间(在强大的GPU上长达数天),因此在加快训练和推理方面取得了许多进展。一个重要的飞跃是NVIDIA于2022年发布的Instant-ngp。尽管该方法中使用的模型架构与现有架构相似,但作者引入了一种使用可训练哈希表的新型编码方法。由于这种编码方式,我们可以显著缩小MLP的规模而不会损失重建质量。这种新方法在训练和查询方面更快,同时在质量上与当时的SOTA方法不相上下。同样在2022年发布的Mipnerf-360也值得一提。同样,模型架构与大多数NeRFs相同,但作者引入了一种新颖的场景收缩,使我们能够表示在所有方向上都无限的场景,这对于实际应用非常重要。Zip-NeRF于2023年发布,结合了Instant-ngp的编码和Mipnerf-360的场景收缩等最新进展,以处理真实世界的情况,同时将训练时间缩短到一小时以内。(公平地说,这仍然是在强大的GPU上测量的)。

由于NeRF领域发展迅速,我们在文章末尾添加了一个部分,将介绍NeRF的最新研究和未来可能的发展方向。

但现在历史讲够了,让我们深入了解NeRF的内在机制吧!🚀🚀

基础方法(Vanilla NeRF)📘🔍

NeRF的基本思想是将场景表示为一个连续函数,该函数将一个位置,xR3 \mathbf{x} \in \mathbb{R}^{3} 和一个观察方向,θR2 \boldsymbol{\theta} \in \mathbb{R}^{2} 映射到一种颜色cR3 \mathbf{c} \in \mathbb{R}^{3} 和体积密度σR1 \sigma \in \mathbb{R}^{1}。由于神经网络可以作为通用函数逼近器,我们可以用一个简单的多层感知机(MLP)来逼近这个表示场景的连续函数。FΘ:(x,θ)(c,σ) F_{\mathrm{\Theta}} : (\mathbf{x}, \boldsymbol{\theta}) \to (\mathbf{c},\sigma) .

一个简单的NeRF流程可以用下图概括:

nerf_pipeline

图片来源:Mildenhall et al. (2020)

(a) 沿着摄像机射线采样点和观察方向,并将其通过网络。

(b) 网络输出是每个样本的颜色向量和密度值。

(c) 通过体积渲染将网络输出组合起来,从3D空间中的离散样本生成2D图像。

(d) 计算损失并通过反向传播更新网络梯度以表示场景。

这只是一个非常高层次的概述,为了更好地理解,我们来详细了解体积渲染和所使用的损失函数。

体积渲染

体积渲染过程背后的原理在经典的计算机图形学流程中已经很成熟,并非源于NeRF。对于NeRFs的用例来说,重要的是这一步是可微分的,以便允许反向传播。NeRFs中最简单的体积渲染形式可以表示如下:C(r)=tntfT(t)σ(r(t))c(r