NeRF

556 阅读2分钟

简介

NeRF的研究目的是合成同一场景不同视角下的图像。方法很简单,根据给定一个场景的若干张图片,重构出这个场景的3D表示,然后推理的时候输入不同视角就可以合成(渲染)这个视角下的图像了。

整体过程

因为神经网络是可微分的,选取的体渲染方法是可微分;体渲染得到的图片和原图计算MSE Loss。整个过程可端到端地用梯度回传来优化非常漂亮。整个训练Pipeline如下图所示:

image.png

神经辐射场

NeRF使用的是辐射场,然后用「体渲染」(Volume Rendering)技术,给定一个相机视角,把辐射场渲染成一张图像。选用辐射场+体渲染的原因很简单,全程可微分。这个过程很有意思,可以理解为把一个空间朝一个方向上拍扁,空间中的颜色加权求和得到平面上的颜色。

理论:辐射场描述了场景中每个点和每个观看方向的颜色和体积密度,函数为:

image.png

其中𝑥=(𝑥,𝑦,𝑧) 是场景内坐标,(θ,φ) 表示方位角和极视角,𝑐=(𝑟,𝑔,𝑏) 表示颜色,σ 表示体积密度。该5D函数由一个或多个多层预加速器 (MLP) 近似,有时表示为f Θ。两个视角 (θ,φ) 通常由𝑑=(𝑑𝑥,𝑑𝑦,𝑑𝑧) 表示,这是一个3D笛卡尔单位向量。通过将 σ (体积密度 (即场景的内容) 的预测限制为与观看方向无关),该神经网络表示被约束为多视图一致,而允许颜色 𝑐 取决于观看方向和场景内坐标。在基线NeRF模型中,这是通过将MLP设计为两个阶段来实现的。

参考资料:www.cnblogs.com/ACxz/p/1688…

体渲染

所谓体渲染,直观地说,我们知道相机的焦点,焦点和像素的连线可以连出来一条射线,我们可以对这条射线上所有的点的颜色做某种求和就可以得到这个像素的颜色值。

理论上,我们可以对这条射线经过空间上的每个点的密度(只和空间坐标相关)和颜色(同时依赖空间坐标和入射角)进行某种积分就可以得到每个像素的颜色。当每个像素的颜色都计算出来,那么这个视角下的图像就被渲染出来了。