【NeRF系列文章四】后处理过程

       

目录

1、体渲染

2、层次采样


论文地址:https://dl.acm.org/doi/pdf/10.1145/3503250

代码地址:https://github.com/yenchenlin/nerf-pytorch

         得到模型的输出后,需要利用这些信息进行体渲染,得到一张新的图片,这个过程为了便于理解我们称为后处理过程,那么后处理过程包括:层次采样+体渲染。

1、体渲染

        模型输出4D向量后,通过体渲染得到图片,下面进行体渲染理解。

        论文将体渲染这一过程抽象为如下公式:

        该公式最后得到是物体的颜色,从前面分析我们可以明确感知到,物体颜色就是同一条射线上所有粒子的求和。那么反应到数学公式中,对于连续场景来说,数学形式上来说应该是积分形式;其次,看到论文中的这个公式我们需要明白已知量是什么?T\left ( t \right )的形式为什么是这样?

        让我们逐个来解答:

        公式中密度概率和颜色都是模型输出的,是已知的量

        那么现在T\left ( t \right )又是如何的得到的呢?

        我们先来看论文中关于T\left ( t \right )\sigma \left ( t \right )的定义:

        T\left ( t \right ):在该段时间内没有撞击到粒子的概率;

        \sigma \left ( t \right )体密度函数:撞击到粒子的概率密度,注意是概率密度,不是概率,二者不等价,忘记的可以回顾一下PDF,概率,CDF知识。

        T\left ( s \right )表示的是在距离s未被碰撞的概率,那么在s+ds处未被碰撞的概率为:

T\left ( s+ds \right )=T\left ( s \right )\left ( 1-\sigma \left ( s \right ) ds\right )

        怎么理解1-\sigma \left ( s \right )ds?回顾概率密度\sigma \left ( s \right )为碰撞的概率密度,那么在ds段距离内,面积的积分即为碰撞的概率,那么1-\sigma \left ( s \right )dsj就是没有碰撞的概率。

        继续展开得到如下微分方程:

T\left ( s+ds \right )=T\left ( s \right )-T\left ( s \right )\sigma \left ( s \right )ds

T\left ( s+ds \right )-T\left ( s \right )=-T\left ( s \right )\sigma \left ( s \right )ds

\frac{T\left ( s+ds \right )-T\left ( s \right )}{T\left ( s \right )}=-\sigma \left ( s \right )ds

        两边同时积分,得到:

lnT\left ( s \right )=-\int \sigma \left ( s \right )ds

        化简后得到论文中公式:

T\left ( s \right )=e^{-\int \sigma \left ( s \right )ds}

        最后,通过离散化这个过程,应用到实际代码中:

        如何将连续积分变换为离散形式:

        对距离t进行离散化,取为大小为\delta _{n},因为取得距离十分小,所以这一小段内的体密度和颜色都是相同的,我们对t_{n}\rightarrow t_{n+1}这一段进行分析:

C\left ( t_{n}\rightarrow t_{n+1} \right )=\int_{t_{n}}^{t_{n+1}}T\left ( t \right )\sigma_{n} c_{n}dt

一小段内的体密度和颜色都是相同的,所以这两部看为不变的常数:

C\left ( t_{n}\rightarrow t_{n+1} \right )=\sigma_{n} c_{n}\int_{t_{n}}^{t_{n+1}}e^{-\int_{0}^{t}\sigma \left ( s \right )ds}

继续化简:

C\left ( t_{n}\rightarrow t_{n+1} \right )=\sigma_{n} c_{n}\int_{t_{n}}^{t_{n+1}}e^{-\int_{0}^{t_{n}}\sigma \left ( s \right )ds-\int_{t_{n}}^{t}\sigma \left ( s \right )ds}

继续化简:

C\left ( t_{n}\rightarrow t_{n+1} \right )=\sigma_{n} c_{n}T\left ( 0\rightarrow t_{n} \right )\int_{t_{n}}^{t_{n+1}}e^{-\left ( t-t_{n} \right )\sigma _{n}}dt

继续化简:

C\left ( t_{n}\rightarrow t_{n+1} \right )=\sigma_{n} c_{n}T\left ( 0\rightarrow t_{n} \right )\cdot -\frac{1}{\sigma _{n}}\left ( e^{-\delta _{n}\sigma _{n}}-1 \right )

继续化简:

C\left ( t_{n}\rightarrow t_{n+1} \right )=c_{n}T\left ( 0\rightarrow t_{n} \right )\cdot\left (1- e^{-\delta _{n}\sigma _{n}} \right )

其中:

T\left ( 0\rightarrow t_{n} \right )=e^{\left ( -\sum_{j=1}^{i-1}\sigma _{j}\delta _{j} \right )}

2、层次采样

       前面提到过,模型需要被调用两次: 【NeRF系列文章三】模型讲解-CSDN博客

        在第一次对射线进行64点均匀采样后,经过模型输出会得到第一次的概率密度,对于学习到的粒子颜色的权重进行softmax,得到和为1的PDF,生成CDF后,在生成CDF反函数,通过随机生成带入反函数中,重新采样128点,其概率密度仍旧符合PDF。

        人话:

        64均匀采样得到的粒子经过模型处理后,得到概率密度。在以概率密度权重进行逆变换采样,采样点为128,再将之前采样点一起送到模型中,即总共192采样点,得到最后输出,并进行体渲染重建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ranran是前鼻音

你的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值