NeRF原理

NeRF是一种基于神经网络的三维重建方法,通过隐式表示实现照片级的视角合成。它利用多层感知机建模3D场景,结合体渲染和位置编码,以2D图像为输入,输出新视角图像。NeRF工作流程包括三维重建和渲染,其中三维重建涉及神经辐射场和位置编码,渲染采用体渲染和分层体积采样。在训练过程中,使用L2损失函数进行优化。
摘要由CSDN通过智能技术生成

参考:[1]NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
[2]NeRF及其发展https://zhuanlan.zhihu.com/p/512538748

1 NeRF的提出

NeRF是隐式表达进行三维重建的方法,不需要中间三维重建的过程,仅根据位姿内参和图像,直接合成新视角下的图像。
NeRF做到了利用”隐式表示“实现了照片级的视角合成效果,它选择了Volume作为中间3D场景表征,然后再通过Volume rendering实现了特定视角照片合成效果。可以说NeRF实现了从离散的照片集中学习出了一种隐式的Volume表达,然后在某个特定视角,利用该隐式Volume表达和体渲染得到该视角下的照片。

2 NeRF 工作的pipeline

NeRF的工作可简单分为两部分:1)三维重建;2)渲染。

2.1 三维重建

三维重建部分本质上是一个2D到3D的建模过程,利用3D点的位置(x,y,z)及方位视角(θ,φ)作为输入,通过多层感知机(MLP)建模该点对应的颜色color(c)及体素密度volume density(σ),形成了3D场景的”隐式表示“。(Neural Radiance Field Scene Representation部分,即下图的红框部分)
image.png
与直接使用x和d作为多层感知器 f θ ( . ) fθ(.) fθ(.)的输入相比,位置编码 γ ( ⋅ ) γ(\cdot) γ()能够更好地拟合高频信号。由于体积颜色c随观察方向的变化比随三维位置的变化更平稳,观察方向通常用较少的分量进行编码,即 L d < L x L_d < L_x Ld<Lx

2.png

2.1.1 Neural Radiance Field Scene Representation

该部分的输入是三维位置(x,y,z)和二维方位视角(θ,φ),输出是颜色c=(r,g,b)和体素密度σ,即利用一个MLP网络近似地表示这种映射F:(x,d) -> (c,σ),这个映射F就是一种3D场景的”隐式表示“。
该MLP网络先使用8个全连接层处理三维位置(x,y,z),输出体素密度σ和256维特征向量(因此体素密度σ仅是关于三维位置(x,y,z)的函数);然后将上面得到的256维特征向量与二维方位视角(θ,φ)concat,接着用4个全连接层处理,输出颜色c=(r,g,b)。
![6.png](https://img-blog.csdnimg.cn/img_convert/1390c87e70f888f355f11fb7d2c16325.png#averageHue=#f8f6f4&clientId=u1ff5de95-ade9-4&from=ui&id=ua7d6ca2a&name=6.png&originHeight=451&originWidth=924&originalType=binary&ratio=1&rotation=0&showTitle=true&size=43861&status=done&style=none&taskId=u05774b77-7174-4724-b163-e3415bdcb45&title=图 2 “图 2”)

2.1.2 positional Encoding

  尽管神经网络是通用的函数近似器,但是研究人员发现,让上图1的MLP网络(F:(x,d) -> (c,σ))直接操作 (x,y,z,θ,φ)输入会导致渲染在表示颜色和几何形状方面的高频变化方面表现不佳,表明深度网络偏向于学习低频函数。因此在将(x,y,z,θ,φ)输入传递给网络之前,使用高频函数将输入映射到更高维度的空间,可以更好地拟合包含高频变化的数据。该高频编码函数为:


这个高频编码函数有点类似傅里叶级数的方式,其中p就是(x,y,z,θ,φ)输入,并且输入均归一化于[-1,1],在实验中针对于(x,y,z)输入取L=10,针对于(θ,φ)输入取L=4,即:
image.png
7.png

2.2 渲染

渲染部分本质上是一个3D到2D的建模过程,渲染部分利用重建部分得到的3D点的颜色及不透明度沿着光线进行整合得到最终的2D图像像素值。(Volume Rendering with Radiance Fields部分,即下图的红框部分)
3.png

2.2.1 Volume Rendering with Radiance Fields

在有了3D空间的模型以后(即神经辐射场 F θ F_{\theta} Fθ),需要以神经辐射场为中间载体合成图像,这个过程就是渲染。Nerf使用Volume Rendering的方法来做渲染。具体过程为,假设当前相机光心的位置为 o ∈ R 3 o\in R^3 oR3,将图像上任意像素与光心连线,可得到视角方向 d ∈ R 3 d \in R^3 dR3,根据光心及视角方向可得到一条光线 r ( t ) = o + t d r(t)=o+td r(t)=o+td,根据体渲染公式,得到该像素上观测到的颜色为:
image.png
其中函数T(t)表示射线从tn到t沿射线累积透射率,即射线从tn到t不碰到任何粒子的概率。从2.1.1中建模的Neural Radiance Field中绘制视图,需要估计通过所需虚拟相机的每个像素跟踪的相机光线的积分C®,然而2.1.1中建模后选取了Volumn作为3D中间表示,势必会使用到离散求积法对这个连续积分进行数值估计,这会极大地限制表示的分辨率,因此可通过分层抽样方法(详细信息看2.2.2Hierarchical volume sampling部分)的方法,使得即使使用离散的样本估计积分,但

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值