赞
踩
论文:Representing Scenes as Neural Radiance Fields for View Synthesis
代码:https://github.com/bmild/nerf
官网:https://www.matthewtancik.com/nerf
什么是神经辐射场:
在本文中,作者为了解决视觉合成任务中一个存在已久的问题,直接优化 5D 输入参数来最小化渲染图像和真实图像的误差
这里,作者是这样使用一个 5D 函数表达一个静态场景的:
方向被视为 2D 的是因为它通常由两个角度参数(例如,方位角和仰角)来定义。这两个参数足以描述空间中任何一个方向。
这里的神经辐射场是什么样的呢:
怎样才能将神经辐射场的输出渲染成对应视角的图像呢:
作者发现,使用很基础的优化方式来优化复杂场景的神经辐射场的话有两个问题:
作者怎么解决上面两个问题的呢:
NeRF 的特点:
什么是体积表征(Volumetric Representations):
神经辐射场的输入:
笛卡尔单位向量:
神经辐射场的输出:
所以神经辐射场就是一个 MLP 网络 F Θ F_{\Theta} FΘ,需要优化该网络的参数来学习正确的输入输出映射关系:
作者为了实现多视角连续性:
所以 MLP 的流程如下:
如图 3 展示了本文方法如何使用观察角度来表达 non-Lambertian effects
“非朗伯效应”(non-Lambertian effects)是指物体表面的反射特性不遵循朗伯定律(Lambert’s Law)。
朗伯定律是光学中的一个基本原理,它描述了当光线照射在理想的散射表面或者完全漫反射表面上时,出射光强度只与入射光强度和入射角有关,与观察角无关。然而,在现实生活中,许多物体并不符合这一规律。例如,镜子、金属等具有镜面反射特性的物体就会产生非朗伯效应。
如图 4 展示了当训练模型时不使用视觉方向,只使用空间位置的情况下,很难表示镜面反射(specularities)的效果:
本文中,使用 5D 神经辐射场来表达一个位置的透明度和颜色
作者使用经典的立体渲染[16] 方法来渲染一个光线 ray 穿过场景得到的颜色
透明度/立体密度 σ ( x ) \sigma(\text{x}) σ(x) 可以解释为在位置 x 处 ray 终止的微分概率。
当相机光线 ray r ( t ) = o + t d r(t) = o + td r(t)=o+td 的最近距离为 t n t_n tn, 最远距离为 t f t_f tf 时,预期颜色 C ( r ) C(r) C(r) 是:
确定性积分法通常用于渲染离散化的体素网格,会限制表示的分辨率,因为在固定的离散位置集合中只会查询 MLP(多层感知器)。
作者在数学角度使用数值积分法来估计这个连续积分,使用了一种分层抽样方法,在这种方法中,我们将 [ t n , t f ] [t_n, t_f] [tn,tf] 划分为 N 个等间隔的区间,并在每个区间内随机均匀地抽取一个样本,也就是在沿着这个 ray 经过的路线上均匀的采样,作为采样点来参与计算:
虽然这里使用的离散样本集合来估计积分,但这种分间隔的抽样能够表示连续的场景,所以能够使用这些采样点来估计 C ( r ) C(r) C(r) [26],这里的 (1-exp) 也称为 α \alpha α:
作者引入了两点优化来实现对高分辨率场景的优化:
之前的工作证明了,神经网络更偏向于学习低频的函数表达,所以对高频变化(如高频的颜色和几何形状的变化)的表现就不太好
之前的工作还证明了,使用高频函数将输入提前编码到更高维的空间,然后再送入神经网络学习的话,能够让网络更好的学习这些高频变化
所以,本文作者借鉴了这种思想,将神经辐射场函数 F Θ F_{\Theta} FΘ 分解为两个函数: F Θ = F Θ ′ ∘ γ F_{\Theta} = F'_{\Theta} \circ \gamma FΘ=FΘ′∘γ ,更有利于提升效果:
γ \gamma γ:是一个映射,表示从 R R R 空间映射到 R 2 L R^{2L} R2L 空间,会在 x \text{x} x 的三个坐标上使用(L=10),也会在笛卡尔空间方向向量 d d d 使用(L=4)
F Θ ′ F'_{\Theta} FΘ′:仍然是 MLP 结构
此外,作者还使用了 Transformer 中常用的位置编码,Transformer 使用位置编码来为离散序列标记顺序
而本文中使用的位置编码,是为了将 3D 连续输入坐标映射到更高维度的空间中,以便让 MLP 更容易地近似高频函数
为什么不能直接使用 3D 坐标来学习:
为什么要使用位置编码:
在传统的NeRF渲染中,每一条光线都会在多个位置进行采样,并对神经辐射场模型进行评估。但这种方法效率低下,因为它会重复采样那些对最终图像没有贡献或被遮挡的区域。
所以 NeRF 中提出了层级采样,也是 NeRF(神经辐射场)中用于提高渲染效率的关键技术。
首先,使用粗糙网络进行分层采样。这个过程会在每条光线上选择Nc个位置进行评估。
然后,根据粗糙网络的输出结果,在每条光线上选择更多具有潜在重要性的位置。这些位置是通过计算权重值来确定的,权重值反映了每个可能新采样点对最终图像可能产生影响的大小。在这些新选出来的位置(通常数量为Nf)上,再次评估神经辐射场模型。但这次使用更详细、更复杂(因此也更准确)的精细网络。
最后,将从所有采样点收集到的信息合并起来生成最终图像。具体来说,他们会利用从粗糙网路得到 alpha 复合颜色重新构造成沿着光线所有采样颜色 ci 的加权总和。通过这种方式,NeRF可以更有效地利用计算资源,在关键区域进行更密集的采样以获得更好的渲染结果。
在第一步粗略采样阶段,模型沿着每条视线均匀地取若干样本,并预测它们处于物体内部或外部(即其透明度)。然后在第二步精细采样阶段,模型会在那些预测为物体内部、且靠近物体表面区域内进行更密集地采样。这大大减少了需要处理数据量,并且能够更准确地表示复杂场景。
作者优化网络时使用了一个场景的多个角度采集到的图片,对这些真实图片,需要使用 COLMAP 这个开源的结构光软件包,来估计当时拍照时的相机姿态、内参、场景边界等。
合成图像时,给定真实的参数,包括需要的相机姿态、内参、场景边界,来生成该场景的图片
在每个 iter 中,随机采样 camera ray 作为一个 batch,然后使用层级采样来从 coarse 网络中查询 N c N_c Nc,从精细网络中查询 N c + N f N_c+N_f Nc+Nf
然后使用立体渲染来从这些采样点钟渲染出每个 ray 的颜色,loss 是渲染出的颜色和真实颜色的 MSE,需要同时计算 coarse 和 fine network:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。