NeRFの入门教程(原理向)

来源:kun

作者:kunkun0v0

链接:

https://zhuanlan.zhihu.com/p/481275794

NeRF 作为 ECCV2020 Best Paper Honorable Mention,影响力巨大。如今各大CV&CG会议中都是此类工作(又一个大坑)。这个 method 使用隐式表达,以 2d posed images 为监督完成 novel view synthesis。通俗来说,就是用多张 2d 图片隐式重建三维场景,其展示的生成效果让人十分震撼。

希望本文能让大家快速了解这项工作~

原文地址: NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
项目主页: NeRF: Neural Radiance Fields

pipeline

NeRF训练管线

首先NeRF的想法是将三维场景隐式存储在神经网络中,我们只需要通过输入一个相机位姿,就可以获得场景图片。NeRF将场景建模成一个连续的5D辐射场(其实感觉就可以理解为隐式的体素描述)。

The expected color C(r) of camera ray r(t) = o + td with near and far bounds tn and tf
The function T(t) denotes the accumulated transmittance along the ray from tn to t, i.e., the probability that the ray travels from tn to t without hitting any other particle.

我们就可以得到输入相机位姿条件下的视角图片,然后和 ground truth 做损失即可完成可微优化。

其实思路总结下来十分简单:

  1. 用network存体素信息:

  2. 然后用体素渲染方程获得生成视角图片:光线采样+积分

  3. 最后与原视角图片计算损失更新网络

需要注意的是:体素在不同方向的自发光颜色是不一样的(view-dependent),具体效果参考原文 Fig.3 和 Fig.4 。view-dependent 可以表示各向异性的光学属性。

See Fig. 3 for an example of how our method uses the input viewing direction to represent non-Lambertian effects. As shown in Fig. 4, a model trained without view dependence (only x as input) has difficulty representing specularities.
一点疑问:如果体素密度 view-dependent 会怎么样?

Numerical estimation of volume rendering

在上一节我们介绍了NeRF生成图片的规则。注意到体素渲染方程是连续形式,而在实际神经网络训练过程中无法完成的。因此我们需要将其改为离散形式进行近似计算(Quadrature积分法):

其中:

通过将视线路径均分成 N 段,然后在每一段均匀地随机采样体素用于渲染计算。

文末给出了离散形式的证明

Hierarchical volume sampling

虽然前文我们使用离散的近似积分来进行体素渲染,但是在场景中难免会存在 free space 和 occluded regions 这种应该对渲染结果无贡献的区间,或者说没有意义的。为了更有效地采样,本文采用分级表征渲染的思想[1]提高渲染效率,即通过同时优化两个神经网络:"coarse"和"fine"。

作者先使用分层采样得到个点,通过 coarse 的渲染方程的计算:

逆变换采样:在分布 p 的 CDF 值域上均匀采样与原分布 p 中的采样同分布

通过第二次采样,我们所得到的采样点则会更多得使用对颜色计算贡献更有意义的体素进行计算。

最后的损失函数如下:

Positional encoding

虽然前文描述的“隐式表示+体素渲染”十分美好,但是我们通过下图(No Position Encoding)可知它的生成图片十分模糊(可以理解为一种高频信息丢失)。前人工作[2]指出神经网络倾向于学习低频信息,而NeRF需要重建高清的场景(对场景overfitting),所以我们需要让模型关注场景的高频细节。于是我们将位置向量和方向向量转化为高频变量:

可以理解为,这种表示方法,即便两个点在原空间中的距离很近,很难分辨,但通过Positional encoding后,我们还是可以很轻松的分辨两个点!

In our experiments, we set L = 10 for γ(x) and L = 4 for γ(d).

然后将Positional encoding后的和(\theta ,\varnothing)作为输入就可以生成更加清晰的图片。

Result

截取了原项目中的展示图片,更多图片可在项目主页查看。

效果确实惊艳,半透明物体的渲染效果也很好。

附录

体素渲染离散形式推导

个人思考,欢迎讨论

渲染方程连续形式如下:

通过前文介绍的均匀分段方法,上式可改写为:

其中

然后对每段内进行均匀采样:

我们假定在给定视线区间内的体素颜色和体素密度\sigma为定值,故用区间内采样点的值近似,则:

注意我们假定了整个辐射场内沿固定视线下的体素属性都是分段常函数,所以可以继续近似:

注意到我实际推出来的其实和论文不太一样,稍微观察一下即可发现,我们是假定分段内为常数,其实这样感觉也可以算,如果有大佬知道为什么不这样算的欢迎讨论!

原文应该是假定采样点之间为常数,我们将积分区间改为,则原式可写为:

其中

然后我们继续离散化,还是假定采样点之间的值为常数,如下所示:

就是最基础的无数小长方体面积求和近似积分的思想

综上即为体素渲染的离散形式积分的推导~

参考

On the Spectral Bias of Neural Networks 

Efficient ray tracing of volume data

 Efficient ray tracing of volume data | ACM Transactions on Graphics

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值