在知乎阅读
NeRF是2020年ECCV论文。仅仅过去1年,关于NeRF的论文数量已经十分可观。相比于计算机视觉,尤其是相比于基于深度学习的计算机视觉,计算机图形学是比较困难、比较晦涩的。被深度学习席卷的计算机视觉任务非常之多,但被深度学习席卷的计算机图形学任务仍然尚少。
由于NeRF及其众多follow-up工作在图形学中非常重要的3D渲染任务上给出了优秀的结果,可以预见未来用深度学习完成图形学任务的工作会快速增长。今年的GIRAFFE是NeRF的follow-up工作之一,它摘下2021CVPR的最佳论文奖对整个方向的繁荣都起到极积极的推动作用。
本文希望讨论以下问题:
本质上,NeRF做的事情就是用深度学习完成了图形学中的3D渲染任务。那么我们提两个问题。
问题1:3D渲染是要干什么?
看2个比较官方的定义。
MIT计算机图形学课程EECS 6.837对渲染(Rendering)的定义:
“Rendering” refers to the entire process that produces color values for pixels, given a 3D representation of the scene.
优秀综述论文State of the Art on Neural Rendering对渲染(Rendering)的定义:
The process of transforming a scene definition including cameras, lights, surface geometry and material into a simulated camera image is known as rendering.
也就是说,渲染就是用计算机模拟用照相机拍照,它们的结果都是生成一张照片。
用照相机拍照是一个现实世界的物理过程,主要是光学过程,拍照对象是现实世界中真实的万事万物,形成照片的机制主要就是光经过镜头到传感器被记录下来。
而渲染就是用计算机模拟这一过程,拍照对象是已存在的某种三维场景表示(3D representation of the scene),形成照片的机制是图形学研究人员精心设计的算法。
关键前提:渲染的前提是某种三维场景表示已经存在。渲染一词本身不包办生成三维场景表示,但是的确与三维场景表示的形式息息相关;因此研究渲染的工作通常包含对三维场景表示的研究。
问题2:3D渲染是图形学问题,那么原先大家是用什么传统图形学方法实现3D渲染的呢?
主要就两种算法:光栅化(rasterization),光线追踪(ray tracing);都是对照相机拍照的光学过程进行数学物理建模来实现的。
传统渲染的详细原理参阅此教材。
光栅化是一种前馈过程,几何体被转换为图像域,是上世纪比较早的算法。光线追踪则是将光线从图像像素向后投射到虚拟三维场景中,并通过从与几何体的交点递归投射新光线来模拟反射和折射,有全局光照的优势(能模拟光线的多次反射或折射)。
当下,关于传统图形学的渲染算法的少量学术研究应该主要在搞优化加速,怎么用GPU实时渲染更复杂的场景之类的事儿。而在工业界,不少游戏重度依赖渲染技术,所以应该有不少游戏公司在研究更逼真、更快速、更省算力的渲染算法。去年虚拟引擎出的新款“虚拟引擎5”效果很是震撼,光照、纹理、流体的实时渲染模拟都逼真到了前所未有的新高度,可以看下虚拟引擎官方的宣传视频,真的很不错。
基于深度学习的渲染的先驱是使用神经网络隐式表示三维场景。 许多3D-aware的图像生成方法使用体素、网格、点云等形式表示三维场景,通常基于卷积架构。 但在 CVPR 2019 上,开始出现使用神经网络拟合标量函数来表示三维场景的工作。
2019年CVPR的DeepSDF或许是最接近NeRF的前驱工作了。SDF是Signed Distance Function的缩写。DeepSDF通过回归(regress)一个分布来表达三维表面的。如下图所示,SDF>0的地方,表示该点在三维表面外面;SDF<0的地方,表示该点在三维表面里面。回归这一分布的神经网络是多层感知机(Multi-Layer Perceptron,MLP),非常简单原始的神经网络结构。
NeRF比DeepSDF进步的地方就在于,NeRF用RGBσ代替了SDF,所以除了能推理一个点是否在物体表面,还能推理RGB颜色和透明度,且颜色是view-dependent的(观察视角不同,同一物点的颜色不同),从而实现功能更强大的渲染。
建议前往NeRF项目网站查看视频效果图。
2020年ECCV会议 NeRF论文效果图
NeRF是Neural Radiance Fields的缩写。其中的Radiance Fields是指一个函数、或者说映射 g θ g_\theta gθ。
( σ , c ) = g θ ( x , d ) (σ,\bold{c})=g_θ (\bold{x},\bold{d}) (σ,c)=gθ(x,d)
映射的输入是 x \bold{x} x和 d \bold{d} d。 x ∈ R 3 \bold{x}∈\mathbb{R}^3 x∈R3是三维空间点的坐标, d ∈ S 2 \bold{d}∈\mathbb{S}^2 d∈S2是观察角度。
映射的输出是 σ σ σ和 c \bold{c} c。 σ ∈ R + σ∈\mathbb{R}^+ σ∈R+是volume density(可以简单理解为透明度), c ∈ R 3 \bold{c}∈\mathbb{R}^3 c∈R3是color,即RGB颜色值。
Radiance Fields,或者说映射 g θ g_\theta gθ,能对三维场景进行隐式表示(implicit scene representation)。在上一节,我们说过某种三维场景表示正是渲染的前提。实现渲染也是 作者提出Radiance Fields这一新型三维场景表示方法 的目的所在。
Radiance Fields是映射 g θ g_\theta gθ 。那么Neural Radiance Fields则是指用神经网络拟合Radiance Fields g θ g_\theta gθ。论文中,该神经网络具体是多层感知机(与DeepSDF一样)。
NeRF(Neural Radiance Fields)其实是一种三维场景表示(scene representation),而且是一种隐式的场景表示(implicit scene representation),因为不能像point cloud、mesh、voxel一样直接看见一个三维模型。
NeRF将场景表示为空间中任何点的volume density σ σ σ和有向的颜色值 c \bold{c} c。 有了以NeRF形式存在的场景表示后,可以对该场景进行渲染,生成新视角的模拟图片。论文使用经典体积渲染(volume rendering)的原理求解穿过场景的任何光线的颜色,从而渲染合成新的图像。
Volume density σ ( x ) σ(\bold{x}) σ(x)的严谨解释是:射线在位置 x \bold{x} x处的无穷小粒子处终止的微分概率。 于是,具有近边界 t n t_n tn 、远边界 t f t_f tf的相机光线 r ( t ) = o + t d r(t) = \bold{o} + t\bold{d} r(t)=o+td的颜色 C ( r ) C(\bold{r}) C(r)是
C ( r ) = ∫ t n t f T ( t ) σ ( r ( t ) ) c ( r ( t ) , d ) d t C(\bold{r})= \int^{t_f}_{t_n}{T(t)σ(\bold{r}(t))\bold{c}(\bold{r}(t),\bold{d})}{\rm d}t C(r)=∫tntfT(t)σ(r(t))c(r(t),d)dt
其中 T ( t ) T(t) T(t)表示沿光线从 t n t_n tn到 $t 的 累 积 透 射 率 , 也 就 是 光 线 从 的累积透射率,也就是光线从 的累积透射率,也就是光线从t_n 传 播 到 传播到 传播到t$而没有碰到任何其他粒子(仍存活)的概率。
T ( t ) = e x p ( − ∫ t n t f σ ( r ( s ) ) d s ) T(t) = \rm{exp} ( -\int^{t_f}_{t_n} {σ(\bold{r}(s))}{\rm d}s ) T(t)=exp(−∫tntfσ(r(s))ds)
那么,从NeRF渲染合成一张完整的图片,就需要为通过虚拟相机的每个像素的光线计算这个积分 C ( r ) C(\bold{r}) C(r),得到该像素的颜色值。
使用计算机求积分,必然是离散的采样,作者deterministic quadrature对这个连续积分进行数值估计。 算积分的具体细节就不写了。
(插一句话,这个渲染问题formulation个人感觉很像物理学里的比尔朗伯定律,volume density实际上很像物理里面的吸收系数 μ a μ_a μa,比尔朗伯定律也正是物理学描述光在介质中传播的定律,如果学过这个定律也许会有所共鸣。)
训练NeRF的输入数据是:从不同位置拍摄同一场景的图片,拍摄这些图片的相机位姿、相机内参,以及场景的范围。若图像数据集缺少相机参数真值,作者便使用经典SfM重建解决方案COLMAP估计了需要的参数,当作真值使用。
在训练使用NeRF渲染新图片的过程中,
这样的一个NeRF训练完成后,就得到一个以多层感知机权重表示的模型,这一个模型只含有该场景的信息,不具有生成别的场景的图片的能力。
除此之外,NeRF还有两个优化的trick:
2021CVPR的最佳论文奖得主GIRAFFE是NeRF、GRAF工作的延申。
在NeRF之后,有人提出了GRAF(Generative Radiance Fields),关键点在于引入了GAN来实现Neural Radiance Fields;并使用conditional GAN的技术来实现对渲染图像的可控性。
在GRAF之后,GIRAFFE实现了composition。GIRAFFE中的一个Neural Radiance Fields代表一个物体,而不是代表一个场景。这样做的妙处在于可以在场景里添加物体,可以将场景1的物体与场景2的物体替换组合,渲染生成更多全新的训练数据中没有的图像。
2021年CVPR还有许多相关的精彩工作发表。例如,提升网络的泛化性:
针对动态场景的NeRF:
其他创新点:
Neural Radiance Fields的外面是Neural Rendering;换句话说,NeRF(Neural Radiance Fields)是Neural Rendering方向的子集。
在针对这个更宽泛的概念的综述State of the Art on Neural Rendering中,Neural Rendering的主要研究方向被分为5类,NeRF在其中应属于第2类“Novel View Synthesis”(不过这篇综述早于NeRF发表,表中没有NeRF条目)。
表中彩色字母缩写的含义:
在这篇综述中,Neural Rendering被定义为:
Deep image or video generation approaches that enable explicit or implicit control of scene properties such as illumination, camera parameters, pose, geometry, appearance, and semantic structure.
Neural Rendering包含所有使用神经网络生成可控(且photo-realistic)的新图片的方法。“可控”指人可以显式或隐式地控制生成新图片的属性,常见的属性包括:光照,相机内参,相机位姿(外参),几何关系,外观,语义分割结构。在这个大框架下,NeRF是一种比较受欢迎的可控相机位姿的Neural Rendering算法。但Neural Rendering这个方向不止于此。
在目前的Neural Rendering方向,最火的子方向就是“Novel View Synthesis”,这与NeRF的强势蹿红密不可分;第二火的子方向是“Semantic Photo Synthesis”,个人认为这主要归功于语义分割以及相关的GAN领域的成熟度。看看2019年CVPR的Semantic Image Synthesis with Spatially-Adaptive Normalization的效果就可见一斑,“Semantic Photo Synthesis”方向也是成果颇丰的。
小仓库(仅限于NeRF):
https://github.com/yenchenlin/awesome-NeRF
大仓库(neural rendering):
https://github.com/weihaox/awesome-neural-rendering
个人认为Neural Rendering迄今最棒的综述,入门必看,唯一可惜的是2020年4月的,2021新出的很多精彩工作不在里面:
State of the Art on Neural Rendering
范围限定为可微渲染方法的综述:
Differentiable Rendering: A Survey
上面大仓库的库主(MIT博士生Yen-Chen Lin)写的综述:
Neural Volume Rendering: NeRF And Beyond
列论文实在挂一漏万,象征性地放上本文标题提到的这2篇很重要的论文吧。
NeRF项目主页:
NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
GIRAFFE项目主页:
GIRAFFE: Representing Scenes as Compositional Generative Neural Feature Fields
传统图形学渲染技术:
Real-Time Rendering 3rd
计算机视觉经典教材,含有image-based rendering章节:
Computer Vision: Algorithms and Applications0
传统图形学渲染技术:
Real-Time Rendering 3rd
计算机视觉经典教材,含有image-based rendering章节:
Computer Vision: Algorithms and Applications
NeRF Explosion 2020 - Prof. Frank Dellaert