NeRF:Representing Scenes as Neural Radiance Fields for View Synthesis

目录

简介

Pipeline

细节讲解

 结果


简介

什么是NeRF?NeRF翻译为神经辐射场。

下面两句话取自于Neural Fields in Visual Computing and Beyond。

A field is a quantity defined for all spatial and/or temporal coordinates.

场是为所有空间和/或时间坐标定义的量。 

A neural field is a field that is parameterized fully or in part by a neural network.

神经场是完全或部分由神经网络参数化的场。

他要解决的问题是给定一些角度的拍摄视图,如何生成新视图下的图。

Pipeline

总体的Pipeline如下图所示:

        

         首先输入已知相机位置(已知视角)的图片,通过SFM技术提取点的3D坐标和2D观察角度。Structure from Motion(SfM)是一个估计相机参数及三维点位置的问题。之后通过hierarchical asmpling 和 positional encoding操作后,输入进NeRF中,得到对应的体素密度和RGB颜色,最后通过渲染得到相应的视图。

细节讲解

对于在空间中的每个点。我们有:

        1、RGB颜色

        2、不透明度

        如上图所示,本文的体渲染技术使用的是ray matching。ray marching 算法的思想是首先有一个3D的体纹理,然后从相机发射n条射线,射线有一个采样的步长,当涉嫌在体纹理中时,每个步长采一次样,获得纹理值,计算光照,然后和该条射线当前积累的颜色值进行混合。具体的颜色计算公式在下文中会有介绍。

        有一个问题值得思考,为什么这种方法是有效的呢,为什么就可以选染成正确的颜色,正确的图案呢?这个道理很简单,因为光路是可逆的,从光源射出的光线经过散射,最终进入摄像机的效果等同于从摄像机发出的射线进行着色和采样。

        Rendering model for ray r(t) = o + td

        r(t) 是射线公式,其中的o是原点,是相机的位置,d是射线的方向,而t是步长,t是有范围的,如图中的t1和tN。

        对于颜色计算,公式如下:

        

         其中T是权重,表示的是某个点之前被遮挡的多少,或者说是,现在的这个点对于该方向颜色还可以贡献多少。

         α表示某点对该条射线上的颜色所做的贡献:

        想要得到空间中某个点的颜色和透明度。输入空间中的这个点它的坐标,输出是一个点它的颜色是多少,透明度是多少。本质上需要维护一个映射的关系,把空间的坐标映射成这个rgb的值,为了实现这个映射,最简单的方法就是在计算机里存一个大的tensor,覆盖这个物体的范围,如右上图所示,需要很大的空间。本文提出用一个网络来替代之前的tensor.

        NeRF的框架如下:

 该图的总体流程为首先输入体素的三维坐标,通过八个全连接层后,得到Volume density体素密度和深度特征,由于尚未输入2D的观察角度,所以空间中某点的不透明度是跟观察角度无关。之后输入2D观察角度,与深度特征一并进入全连接层得到最后的颜色RGB,所以可以得出结论,颜色是与观察角度有关系的。关于颜色跟观察角度有关系是很容易想象到的,就像我们现实生活中,由于光线角度的问题会有颜色差异,如下图所示:

 我们可以到,两个不同的视角View1和View2,对于图中的观测点,颜色是不一样的。

NeRF结构的其他表示:

 

         该图与上面的所给的结构是同一个意思,黄色是输入,红色是输出。不同的是,可以到,黄色框里的数字改成了60和24。这是因为加入了位置信息。Rahaman等人提出将输入传递到网络之前,使用高频函数将输入映射到高维空间,可以更好的拟合包含高频变化的数据。因此通过Positional encoding 将5D信号变成高维度信号。公式如下:

加入了位置信号后,其结果也是比较明显的。效果图如下所示:

 Hierarchical sampling strategy

Volume Rendering中是在每条相机光线上的N个查询点密集地评估神经辐射场网络,这是低效的(仍然重复采样与渲染图像无关的自由空间和遮挡区域),于是提出一种分层体积采样的做法,同时优化一个“粗糙”的网络和一个“精细”的网络。 做法是:首先使用分层抽样对第一组Nc位置进行采样,并在这些位置评估“粗糙”网络。给出这个“粗糙”网络的输出,然后我们对每条射线上的点进行更明智的采样,即利用反变换采样从这个分布中采样第二组Nf位置,然后将Nc+Nf采样得到的数据输入“精细”网络,并计算最终渲染的光线颜色C。 核心操作即先通过第一次采样把大概的分布采出来,然后第二次采样利用反变换采样(用的是概率论中的拒绝采样),对第一次采到的大概的分布再采一次,达到了重要性采样的目的。新的合成颜色函数:

 结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值