NeRF-Related Review 2020
2020 年,在 CV/CG 界,一篇叫做 NeRF 的论文爆火,“只需要输入少量静态图片,就能做到多视角的逼真3D效果。”但是实际上,在这篇论文之前,学术界已经有不少这方面的尝试,相关的研究也有不少,因此本文尝试做一个简单的综述,来简单看看这篇论文及其相关的研究。 〇、背景:建模(表面、体积) & 渲染 众所周知,计算机图形学中一个长期研究目标就是将虚拟的世界尽可能的渲染的真实。这里面包括了三个方面: 建模:通过表面建模、曲面建模等方式,将真实世界中的场景在虚拟世界中还原出来 渲染:按照物理中光照的规律,将虚拟世界中建好的模型绘制成人眼可见的画面 动画:通过仿真等方式,模拟出物体真实的运动轨迹等,使得动画看起来更加自然 NeRF 及相关工作所尝试解决的,主要是建模与渲染部分,也就是重建。建模的本质,其实是构造出一个空间中描述物体的函数:传统的建模大多采用显式的表示,比如曲线、曲面等等,或是球体、长方体;而近年来,随着神经网络的发展,有人提出能否使用神经网络来表示这一函数,毕竟神经网络本质上就是一个隐式函数,只不过其形式更加复杂、表示能力也更强。 在三维建模中,两个非常重要的通用建模方式是表面建模和体积建模:表面建模是通过描述表面曲面的方式构建模型,而体积建模则是通过描述空间点(体素)的方式构建模型;在表面建模里没有三维实体,实体只是闭合表面;在体积建模里没有二维表面,表面只是很薄的体素。学界在神经网络建模方面,也进行了类似的尝试,即使用神经网络来表示曲面(神经隐式曲面)和使用神经网络表示体积(神经隐式体积)。基于这两个大的思想,人们逐渐设计出各式各样的网络,并得到了越来越好的效果。 当然,建模之后,如果不能够进行渲染是没有意义的,因此如何高效地渲染出这些隐式表示的模型,也是学术界非常热门的话题。 一、序章:神经隐式曲面 1.1 基于分类的网络 第一大类的尝试,就是使用神经网络来表示曲面(Neural Implicit Surfaces)。前面提到,对于一个物体,实际上就是一个闭合的曲面,因此最直白的表示方法,就是给空间中的点进行分类,标记它在曲面内、还是曲面外。 Occupancy networks 和 IM-Net 都是基于这一思想的,两者主要是网络内部结构上不同,但是输入都是一个特征向量和一个空间点坐标,输出都是一个布尔值:在曲面内或在曲面外。下图是 IM-Net 的网络结构,以作示例: 另外还有将纹理特征一并结合的网络,如 PIFu:它除了编码了每个点是 inside 还是 outside,还将每个点的颜色信息也通过网络编码,从而实现了完整的高分辨率的着装人体数字化重建。 1.2 基于回归的网络 使用分类模型进行的表面建模确实是一个非常大的创新,但是一个很大的缺点就是这个模型所表示的函数并不可导——它不是连续的,毕竟物体内外这一输出本身就决定了函数的值域是一个离散的二值。因此,人们尝试使用一个连续的表示方式:有符号距离场,也就是大名鼎鼎的 SDF。 SDF 的定义很简单,其数值就是空间中的一个点距离曲面最近的距离,而符号表示其在闭合曲面的内部还是外部。这样通过一个有符号数,就将两个信息一起编码进去了,并且得到了一个在空间上可导的量。 SDF 的形式化定义如下: DeepSDF 那么这样一个函数,非常自然的想到使用神经网络的 regression 进行解决,这也是 DeepSDF 的主要思想 —— 将一个描述物体形状特征的 Code 和空间坐标一并放入网络,然后输出该点的 SDF,从而实现利用深度网络重建一系列同类的物体。 值得关注的一点是,这个特征 Code 的特征是利用 Auto-decoder (注意不是 Auto-encoder)优化提炼的,作者们称之为 Encoder-less Learning,因为他们觉得 encoder 在推导的时候并没有被用到,所以不如不要,实际的重建效果也是非常的好,感觉是个非常有意思的想法。 DeepSDF 的诞生彻底引爆了这个领域,此后涌现出了大量相关的工作,如达摩院的 Curriculum DeepSDF 以及伯克利的 Extending DeepSDF,DeepSDF 本身也成为了不少工作的 baseline。...