本文经自动驾驶之心公众号授权转载,转载请联系出处。
神经辐射场究竟是什么
辐射场:由光源发出的光线在场景中的传播和反射过程中所形成的能量分布。通俗来说就是一个函数,记录了空间某个位置处向某个方向的辐射信息,辐射信息(或者说能量分布)其实就是颜色、亮度、阴影等信息。这里的方向需要额外留意,它是NeRF实现真实重建的重要因素之一!
由此引出神经辐射场的概念。
神经辐射场:用神经网络储存空间位置向任意方向的辐射。原文中的描述如下:
更加规范的公式表达如下:
输入3D位置(x,y,z)和2D的视角方向(),输出是颜色和体密度
NeRF具体的网络结果参考原文如下:
- 3D坐标x输入第一个网络fσ,包含8层全连接层,每层256个神经元,ReLU激活;
- 网络fσ输出体密度σ和一个256维向量,该向量与视角方向d送入fc(一层,128通道,ReLU激活)预测RGB;
由上面可知,NeRF是隐式建模,因为模型是储存在MLP里面的,模型就是MLP的参数,这和以往点云和mesh建模不同(点云/mesh是可以直接看到模型的)。NeRF必须查询一个个的三维点,然后渲染成一章图像。这种查看方式或者说渲染方式就叫体渲染。
在看体渲染之前。我们先看一下网络的效果如何:
可以看出,不同视角下颜色是不同的!这是NeRF相对于传统重建非常重要的优势之一~
NeRF的核心:体渲染
下面进入NeRF的第二个核心要点——体渲染。体渲染就是用来将颜色和密度渲染成2D图像的方法!
示意图如下:图a展示了从相机光心位置发出射线,射线上有采样点,将采样点和方向送入MLP获得颜色和体密度。图c展示的的就是沿射线的体密度分布曲线,是通过采样获得的,对曲线进行积分就能获得像素的颜色。这个过程就是体渲染
总结一下体渲染步骤:
- 从相机光心发出穿透每个像素的射线,射线上取三维采样点;
- 将采样点坐标和视角方向送入MLP计算颜色和体密度;
- 按体密度积分(堆叠)颜色信息,形成2D图像
体渲染的公式如下:
当然实际使用的是离散版本公式:
隐式重建流程
在讲完神经辐射场和体渲染后,现在开始完整的重建流程~
在形成一个完成的pipeline之前,还有以下两个问题需要解决:
为了解决上述两个问题,NeRF提出了位置编码和分层采样过程
位置编码:
论文直观展示了位置编码的效果对比:
可以看出,去掉位置编码,模型无法表达高频的几何和纹理信息~
多层采用:
训练流程如下:
实验和总结
评价指标:
实验设置:
实验结果可以看出,各种材质的小球上面的散光也可以很好的表现出来~
消融实验:
总结
文提出的神经辐射场,从相机光心发出穿过像素的采样射线,在射线上取点,将其三维位置和视角方向用一个MLP映射到体密度和颜色,然后用体渲染堆叠采样射线上的体密度和颜色,获得像素值。像素值与GT图像求误差后反向传播,优化MLP参数。本文用这样的隐式重建方法实现了照片级的具有真实感的模型重建和渲染。
缺陷:
- 渲染、训练速度慢;
- 对视角数量和分布有较高要求;
- 难以拓展到有背景的或者较大的场景。
原文链接:https://mp.weixin.qq.com/s/ctDBTaLWuHTM9MONrAor4g