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通过已知视角的图片,提取采样点的位置和观测角度 作为输入,并通过神经网络输出所对应一组采样点颜色和不透明度,而三维模型的信息就隐式存储在了神经网络中,并且由于只能针对单一物体的图片作为输入,该神经网络(权重)就只能表示这个三维模型的信息。

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

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

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

3、采样点

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

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

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

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方向对σ进行积分得到不透光率,通过指数函数衰减,可以保证尽量针对第一个波峰。

:采样点的颜色与采样点位置和观测角度有关。

:不透明度对于采样点位置有关,对于观测角度无关。

:理解为不透光率,透明度,采样点颜色的乘积在光线近端到远端的积分

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

三、分层采样

1、均匀采样

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

2、基于σ的采样

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

其中权重公式中的表示两个采样点之间的距离

四、损失函数

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

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

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

代码参考:nerf-pytorch

相关推荐
张人玉1 小时前
人工智能——猴子摘香蕉问题
人工智能
草莓屁屁我不吃1 小时前
Siri因ChatGPT-4o升级:我们的个人信息还安全吗?
人工智能·安全·chatgpt·chatgpt-4o
小言从不摸鱼1 小时前
【AI大模型】ChatGPT模型原理介绍(下)
人工智能·python·深度学习·机器学习·自然语言处理·chatgpt
AI科研视界2 小时前
ChatGPT+2:修订初始AI安全性和超级智能假设
人工智能·chatgpt
霍格沃兹测试开发学社测试人社区2 小时前
人工智能 | 基于ChatGPT开发人工智能服务平台
软件测试·人工智能·测试开发·chatgpt
小R资源2 小时前
3款免费的GPT类工具
人工智能·gpt·chatgpt·ai作画·ai模型·国内免费
artificiali5 小时前
Anaconda配置pytorch的基本操作
人工智能·pytorch·python
酱香编程,风雨兼程5 小时前
深度学习——基础知识
人工智能·深度学习
Lossya6 小时前
【机器学习】参数学习的基本概念以及贝叶斯网络的参数学习和马尔可夫随机场的参数学习
人工智能·学习·机器学习·贝叶斯网络·马尔科夫随机场·参数学习
#include<菜鸡>6 小时前
动手学深度学习(pytorch土堆)-04torchvision中数据集的使用
人工智能·pytorch·深度学习