当前位置: 首页 > news >正文

NeRF: Representing Scenes asNeural Radiance Fields for View Synthesis 论文解读

目录

一、导言

二、NeRF

1、渲染和反渲染

2、NeRF的基本原理

3、采样点

4、位置编码

5、NeRF网络结构

6、体渲染

三、分层采样 

1、均匀采样

2、基于σ的采样

四、损失函数


一、导言

        该论文来自于ECCV2020,主要提到一种NeRF的方法来合成复杂场景下的新视角图像,通过将场景表示为连续的5D神经辐射场函数,通过输入5D坐标,输出场景中采样点的体密度和颜色信息,使用体渲染技术渲染出新的视角图像。

(1)提出了一种新的场景表示方法NeRF。

(2)通过使用位置编码来使得MLP理解更高频的函数

(3)采用分层采样来提高采样点的利用率,减少无用采样点的数量。

二、NeRF

1、渲染和反渲染

       渲染: 将三维信息(包括几何形状、材质属性、光源信息、相机参数),转变为特定视角下的二维图像。

        反渲染:通过大量二维图像推断出三维信息中的几何形状、材质属性、光源信息。这也是三维重建中的重要步骤。

        下图为NeRF工作的图示:(通过输入同一物体的大量图片,生成该物体的一个隐式神经辐射场NeRF来存储相关信息,并渲染出不同视角下的新2维图像,NeRF并不懂得物体的真实三维结构,也不能估计出物体各表面的真实三维坐标,貌似有一个技术叫表面重建可以做)

2、NeRF的基本原理

        NeRF通过已知视角的图片,提取采样点的位置和观测角度(x,y,z,\theta ,\phi)作为输入,并通过神经网络输出所对应一组采样点颜色和不透明度(R,G,B,\sigma),而三维模型的信息就隐式存储在了神经网络中,并且由于只能针对单一物体的图片作为输入,该神经网络(权重)就只能表示这个三维模型的信息。

        对于(\theta ,\phi)分别为摄像机的俯仰角和偏航角,来自于极坐标系。

        对于不透明度σ,或者叫做体密度,体密度与物体的材质有关,对于空气和物体的体密度一定是不同的,空气的不透明度几乎为0。

        在论文中定义不透明度为,体密度为射线在位置x处无限小粒子处终止的微分概率。

3、采样点

        从下图可以看到对于一张2维图像,经过一道光线(由人眼/相机发出的虚拟的射线,人眼视角)穿过整个物体,,按照一定的距离分段,可以得到若干采样点。

        这些采样点有些还没有经过物体,所以他的不透明度σ几乎为0,有些点刚好穿过物体表面此时不透明度σ最大,但理论上一道光线会穿过物体两次,一次在正面一次在背面,那么就会产生两个不透明度的波峰,但由NeRF模型合成不同人眼视角下的图片过程中,我们不应该把这两个波峰都进行渲染,因为人眼看不到背面,所以在后续计算中通过指数函数的方法,指考虑第一个波峰,而尽量忽略第二个即以后的波峰。

        采样点位置表示:\mathbf{r}(t)=\mathbf{o}+t\mathbf{d} ,其中\mathbf{o}代表光线初始点,也就是摄像机的位置,\mathbf{}\mathbf{d}就是每一段的距离,t代表第几个点。(其实就是个直线的参数方程)

4、位置编码

        从transformer的位置编码类比看其实都是一样的,通过将采样点的三维坐标进行正弦余弦编码得到不同维数(正弦余弦各一半)的位置编码,在网络中使用了20维和8维的位置编码。通过位置编码的方式可以有效增加采样点和图片像素间的高频信息。

        在实验中也对比了有无位置编码的效果,对于无位置编码情况下会出现模糊的效果。 

                      

5、NeRF网络结构

        对于NeRF网络如下:

        首先输入采样点位置,以及采样点位置三个坐标分别20维共60维的位置编码(总共63维通道)。

        经过连续的5层全连接层(输出均256),与输入进行残差相连(此时319维通道)。

        再经过3层全连接层(输出均256),分别经过一个全连接(输出为1)得到σ,另外残差连接观测角度(观测角度提前球坐标转变为三维)和8维采样点位置编码(共287维)经过两个全连接层最后输出三维RGB(第一个全连接输出128维,第二个全连接输出3维)。

        代码如下:

6、体渲染

        体渲染:视线r上所有的点投影到图像上形成像素颜色C的过程。

        理想情况下体渲染计算公式:

        其中,t_n,t_f分别表示光线的近端和远端。

        T(t) :不透光率,在光线距离方向,从近端到t方向对σ进行积分得到不透光率,通过指数函数衰减,可以保证尽量针对第一个波峰。

        c(\boldsymbol{\mathbf{}r}({t}),\boldsymbol{\mathbf{}d}):采样点的颜色与采样点位置\boldsymbol{r}(t)和观测角度\mathbf{d}有关。\mathbf{}

        \sigma(\boldsymbol{r}(t)):不透明度对于采样点位置\boldsymbol{r}(t)有关,对于观测角度无关。

        C(\boldsymbol{r}):理解为不透光率,透明度,采样点颜色的乘积在光线近端到远端的积分

        真实情况下的体渲染计算公式:(使用求和来替代积分)

三、分层采样 

1、均匀采样

        对于一般的粗网络均匀采样64个点的方法,由于物体一般是在聚集在光线穿过的中心,而不是均匀分布,所以存在大量的点位浪费和欠采样的问题。

2、基于σ的采样

        首先通过粗网络采样,并计算64个点的像素颜色。之后在光线方向计算颜色的加权和,权重为基于粗网络的σ下的分段常数概率密度,并进行归一化。最后通过逆变换采样,在这个概率密度上采样128个点,并带上之前的64个点,构成精细网络。

        其中权重w_i公式中的\delta_i表示两个采样点之间的距离t_{i+1}-t_{i}

四、损失函数

        损失函数有两个部分构成,粗网络下生成的像素对比和精细网络下的像素对比。对比函数使用L2 Loss。

 论文参考:https://arxiv.org/abs/2003.08934

 视频参考:NeRF原理进阶——体渲染概念_哔哩哔哩_bilibili

 代码参考:nerf-pytorch


http://www.mrgr.cn/news/17177.html

相关文章:

  • 【电子通识】失效分析中的电测试技术——电阻测试方法及注意事项
  • C# 反射和特性练习代码
  • JVM内存模型简述
  • 【C++篇】~类和对象(上)
  • 浅谈C# 抽象类和抽象方法
  • 捷达千里江山首发亮相,捷达品牌2024成都车展继续宠粉不停
  • 【Android】Material Design编写更好的UI
  • 为什么越来越多的IT青年转行网络安全?
  • 台式机CPU温度90℃以上-排查思路
  • 快速了解Git 文件的四种状态及其操作指令、如何忽略文件
  • 考试知识点查缺补漏
  • docker实战基础四
  • codetest
  • 【5G PHY】5G循环前缀(CP)设计思路简述
  • 145. 利用 Redis Bitmap实践: 用户签到统计
  • World of Warcraft [CLASSIC][80][Grandel] Call to Arms: Arathi Basin
  • vue3+elementplus的表格展示和分页实战
  • 【Kubernetes知识点问答题】Kubernetes 部署(一)
  • 小柴带你学AutoSar系列三、标准和规范篇(3)ModeManagement
  • 存储系统总结