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

相关推荐
新加坡内哥谈技术4 分钟前
Mistral推出“Le Chat”,对标ChatGPT
人工智能·chatgpt
GOTXX12 分钟前
基于Opencv的图像处理软件
图像处理·人工智能·深度学习·opencv·卷积神经网络
IT古董17 分钟前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习
CV学术叫叫兽32 分钟前
快速图像识别:落叶植物叶片分类
人工智能·分类·数据挖掘
WeeJot嵌入式1 小时前
卷积神经网络:深度学习中的图像识别利器
人工智能
糖豆豆今天也要努力鸭1 小时前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
脆皮泡泡1 小时前
Ultiverse 和web3新玩法?AI和GameFi的结合是怎样
人工智能·web3
机器人虎哥1 小时前
【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测
人工智能·机器学习
码银1 小时前
冲破AI 浪潮冲击下的 迷茫与焦虑
人工智能
飞哥数智坊1 小时前
使用扣子实现一个文章收集智能体(升级版)
人工智能