NeRF Review V1.0

本文深入探讨了NeRF(神经辐射场)技术,包括其基本概念、3D场景的隐式表达、基于辐射场的体素渲染方法,以及与传统方法的比较。NeRF通过优化神经网络学习得到5D坐标到颜色和密度的映射,使用位置编码和分层采样提高细节和效率。此外,文章还介绍了FastNeRF、DS-NeRF和HashCodingNeRF等改进方法,以提高渲染速度和减少过拟合。
摘要由CSDN通过智能技术生成

NeRF Review v1.0

先验知识

小孔相机成像原理

参考:https://blog.csdn.net/WYXHAHAHA123/article/details/89186666

几种坐标系变换

参考:https://blog.csdn.net/iispring/article/details/27970937?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-1.pc_relevant_default&spm=1001.2101.3001.4242.2&utm_relevant_index=3

安装COLMAP

参考:https://blog.csdn.net/weixin_44217089/article/details/123401685

NeRF

论文地址:https://arxiv.org/abs/2003.08934

github:https://github.com/yenchenlin/nerf-pytorch

NeRF干了啥?

NeRF是3D场景的一种隐式表达

NeRF 将一个连续的场景表示为一个 5D 向量值函数(vector-valued function),其中:

  • 输入为:3D 位置 x = (x, y, z) 和 2D 视角方向 (θ, ϕ)
  • 输出为:发射颜色 **c **= (r, g, b) 和体积密度 σ

对于其中的 2D 视角方向可以用下图进行直观解释:

在实际实现中,视角方向表示为一个三维笛卡尔坐标系单位向量 dd,我们用一个 MLP 全连接网络表示这种映射:

F Θ : ( x , d ) → ( c , σ ) ( 1 ) \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad {\bf F_Θ:(x,d)→(c,\sigma)}\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad(1) FΘ:(x,d)(c,σ)(1)
通过优化这样一个网络的参数 Θ 来学习得到这样一个 5D 坐标输入到对应颜色和密度输出的映射。

为了让网络学习到多视角的表示,我们预测体积密度 σ 的网络部分输入仅仅是输入位置 x,而预测颜色*c*** 的网络输入是视角和方向 dd。在具体实现上:
1)MLP 网络 FΘ​ 首先用 8 层的全连接层(使用 ReLU 激活函数,每层有 256 个通道),处理 3D 坐标 x,得到
σ
和一个 256 维的特征向量。
2)将该 256 维的特征向量与视角方向 dd 与视角方向一起拼接起来,喂给另一个全连接层(使用 ReLU 激活函数,每层有 128 个通道),输出方向相关的 RGB 颜色。

本文中一个示意的网络结构如下:

Volume Rendering with Radiance Fields (基于辐射场的体素渲染)

经典体素渲染(volume rendering)

我们的 5D 神经辐射场将场景表示为:其所在空间中任意点的体素密度和有方向的辐射亮度。体素密度σ(x) 定义为光线停留在位置 x 处无穷小粒子的可导概率(或者也可以理解为光线穿过此点后终止的概率)。使用经典的立体渲染的原理,我们可以渲染出任意射线穿过场景的颜色。

因此对于某个视角 o 发出的方向为 d 的光线,其在 t 时刻到达点为:
KaTeX parse error: Undefined control sequence: \mit at position 83: …(t)} ={\bf o}+{\̲m̲i̲t̲ ̲t}{\bf d}\qquad…
那么沿这个方向在范围   ( t n , t f ) \ (t_n,t_f)  (tn,tf)对颜色积分,获得最终的颜色值 C ( r ) C(r) C(r) 为:
C ( r ) = ∫ t n t f T ( t ) σ ( r ( t ) ) c ( r ( t ) , d ) d t , w h e r e   T ( t ) = e x p ( ∫ t n t σ ( r ( s ) ) d s ( 3 ) \qquad\qquad\qquad\qquad C({\bf r})=∫_{tn}^{tf}T(t)σ({\bf r(t)})c({\bf r(t)},d)dt, \quad where \ T(t)=exp(∫_{tn}^{t}σ({\bf r(s)})ds \qquad\qquad\qquad\qquad(3) C(r)=tntfT(t)σ(r(t))c(r(t),d)dt,where T(t)=exp(tntσ(r(s))ds(3)
函数 T ( t ) T(t) T(t)表示光线从 t n t_n tn t t t 累积的透明度 (Accumulated Transmission ittance)。换句话说,就是光线从 $ t_n$ 到 t t t 穿过没有碰到任何粒子的概率。按照这个定义,视图的渲染就是表示成对于 C ( r ) C(r) C(r) 的积分,它是就是虚拟相机穿过每个像素的相机光线,所得到的颜色。

基于分段采样近似的体素渲染方法

不过在实际的渲染中,我们并不能进行连续积分,我们使用求积法(quadrature)进行积分的数值求解。通过采用分层采样 (stratified sampling) 的方式对 [ t f , t n ] [t_f,t_n] [tf,tn] 划分成均匀分布的小区间,对每个区间进行均匀采样,划分的方式如下:
t i ∼ U   [ t n + i − 1 N ( t f − t n ) , t n + i N ( t f − t ) ] ( 4 ) \qquad\qquad\qquad\qquad\qquad\qquad\qquad t_i∼\mathit U\ [t_n+\frac {i−1}N(t_f−t_n),t_n+\frac {i}N (t_f −t )] \qquad\qquad\qquad\qquad\qquad\qquad\qquad(4) tiU [tn+

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值