目录
论文地址:https://dl.acm.org/doi/pdf/10.1145/3503250
代码地址:https://github.com/yenchenlin/nerf-pytorch
得到模型的输出后,需要利用这些信息进行体渲染,得到一张新的图片,这个过程为了便于理解我们称为后处理过程,那么后处理过程包括:层次采样+体渲染。
1、体渲染
模型输出4D向量后,通过体渲染得到图片,下面进行体渲染理解。
论文将体渲染这一过程抽象为如下公式:
该公式最后得到是物体的颜色,从前面分析我们可以明确感知到,物体颜色就是同一条射线上所有粒子的求和。那么反应到数学公式中,对于连续场景来说,数学形式上来说应该是积分形式;其次,看到论文中的这个公式我们需要明白已知量是什么?的形式为什么是这样?
让我们逐个来解答:
公式中密度概率和颜色都是模型输出的,是已知的量。
那么现在又是如何的得到的呢?
我们先来看论文中关于和的定义:
:在该段时间内没有撞击到粒子的概率;
体密度函数:撞击到粒子的概率密度,注意是概率密度,不是概率,二者不等价,忘记的可以回顾一下PDF,概率,CDF知识。
表示的是在距离未被碰撞的概率,那么在处未被碰撞的概率为:
怎么理解?回顾概率密度为碰撞的概率密度,那么在段距离内,面积的积分即为碰撞的概率,那么j就是没有碰撞的概率。
继续展开得到如下微分方程:
两边同时积分,得到:
化简后得到论文中公式:
最后,通过离散化这个过程,应用到实际代码中:
如何将连续积分变换为离散形式:
对距离进行离散化,取为大小为,因为取得距离十分小,所以这一小段内的体密度和颜色都是相同的,我们对这一段进行分析:
一小段内的体密度和颜色都是相同的,所以这两部看为不变的常数:
继续化简:
继续化简:
继续化简:
继续化简:
其中:
2、层次采样
前面提到过,模型需要被调用两次: 【NeRF系列文章三】模型讲解-CSDN博客。
在第一次对射线进行64点均匀采样后,经过模型输出会得到第一次的概率密度,对于学习到的粒子颜色的权重进行softmax,得到和为1的PDF,生成CDF后,在生成CDF反函数,通过随机生成带入反函数中,重新采样128点,其概率密度仍旧符合PDF。
人话:
64均匀采样得到的粒子经过模型处理后,得到概率密度。在以概率密度权重进行逆变换采样,采样点为128,再将之前采样点一起送到模型中,即总共192采样点,得到最后输出,并进行体渲染重建。