神经辐射场(Neural Radiance Field,NeRF)的简单介绍

参考文章:https://arxiv.org/abs/2210.00379

1. 概述

  神经辐射场(NeRF)模型是一种新视图合成方法,它使用体积网格渲染,通过MLP进行隐式神经场景表达,以学习3D场景的几何和照明。
  应用:照片编辑、3D表明提取、人体建模、3D表达和视图合成等。
  特点:模型自监督。对于一个场景,只需要多视图图像及其姿态,而无需3D或深度监督。

2. NeRF模型

  NeRF模型将3D场景表达为用神经网络表示的辐射场。辐射场描述了各点在各视角下的颜色密度。即 F ( x , θ , ϕ ) → ( c , σ ) F(x,\theta,\phi)\rightarrow(c,\sigma) F(x,θ,ϕ)(c,σ)其中 x x x为点的3D坐标, ( θ , ϕ ) (\theta,\phi) (θ,ϕ)为视线的水平角与俯仰角, c c c表示颜色, σ \sigma σ表示体积网格密度。该函数使用MLP(记为 F Θ F_\Theta FΘ)进行近似。 ( θ , ϕ ) (\theta,\phi) (θ,ϕ)也可表达为3维的单位方向向量 d d d
  该表达需要满足多视图一致性,即 σ \sigma σ(场景的内容)与视角无关,而 c c c与坐标和视角均相关。通常来说,会设计两个MLP,第一个MLP输入 x x x,输出 σ \sigma σ与高维特征向量 h h h σ , h = σ-MLP ( x ) \sigma,h=\text{σ-MLP}(x) σ,h=σ-MLP(x)高维特征向量 h h h与视线方向 d d d拼接后输入第二个MLP得到 c c c c = c-MLP ( [ h ; d ] ) c=\text{c-MLP}([h;d]) c=c-MLP([h;d])由于密度和颜色都完全被MLP表达,因此这种方法被称为隐式场景表达

3. 新视图合成

神经辐射场(Neural Radiance Field,NeRF)的简单介绍_第1张图片

  1. 对于待合成图像的每个像素,使用相机射线穿过场景并生成采样点(上图(a))。
  2. 对每个采样点,使用射线方向和采样位置,输入NeRF MLP计算局部颜色与密度(上图(a)与(b)之间的连接处)。
  3. 使用体积网格渲染,从采样点的色彩和密度生成图像。

4. 体积网格渲染

  设相机射线为 r ( t ) = o + t d r(t)=o+td r(t)=o+td,其中 o o o为相机位置, d d d为射线方向。则可按下式得到色彩 C ( r ) C(r) C(r) C ( r ) = ∫ t 1 t 2 T ( t ) ⋅ σ ( r ( t ) ) ⋅ c ( r ( t ) , d ) ⋅ d t C(r)=\int_{t_1}^{t_2}T(t)\cdot\sigma(r(t))\cdot c(r(t),d)\cdot dt C(r)=t1t2T(t)σ(r(t))c(r(t),d)dt其中 σ ( r ( t ) ) \sigma(r(t)) σ(r(t)) c ( r ( t ) , d ) c(r(t),d) c(r(t),d)为射线 r ( t ) r(t) r(t)处的体积网格密度和颜色。
   T ( t ) T(t) T(t)为累积透明度,表示射线从 t 1 t_1 t1 t t t不被拦截的概率: T ( t ) = exp ⁡ ( − ∫ t 1 t σ ( r ( u ) ) ⋅ d u ) T(t)=\exp\left(-\int_{t_1}^t\sigma(r(u))\cdot du\right) T(t)=exp(t1tσ(r(u))du)  通过追踪待合成图像的像素对应的相机射线,可计算积分。但是通常会通过分层抽样法来计算其近似值。具体来说,射线会被分为等长的 N N N段,然后在各段内均匀抽样一个点,并用求和近似上面的积分: C ^ ( r ) = ∑ i = 1 N α i T i c i , 其中 T i = exp ⁡ ( − ∑ j = 1 i − 1 σ j δ j ) \hat{C}(r)=\sum_{i=1}^N\alpha_iT_ic_i,其中T_i=\exp\left(-\sum_{j=1}^{i-1}\sigma_j\delta_j\right) C^(r)=i=1NαiTici,其中Ti=exp(j=1i1σjδj)其中 δ i \delta_i δi为采样点 i i i i + 1 i+1 i+1的距离; ( σ i , c i ) (\sigma_i,c_i) (σi,ci)为射线上采样点 i i i的密度和颜色(使用NeRF MLP计算)。 α i \alpha_i αi为采样点 i i i处alpha合成的透明度/不透明度: α i = 1 − exp ⁡ ( σ i δ i ) \alpha_i=1-\exp(\sigma_i\delta_i) αi=1exp(σiδi)

5. 期望深度计算

  期望的深度可使用积累透明度沿射线计算: d ( r ) = ∫ t 1 t 2 T ( t ) ⋅ σ ( r ( t ) ) ⋅ t ⋅ d t d(r)=\int_{t_1}^{t_2}T(t)\cdot\sigma(r(t))\cdot t\cdot dt d(r)=t1t2T(t)σ(r(t))tdt上式同样可使用求和近似: D ^ ( r ) = ∑ i = 1 N α i t i T i \hat{D}(r)=\sum_{i=1}^N\alpha_it_iT_i D^(r)=i=1NαitiTi某些深度正则化方法会使用期望深度将密度限制为类似(在场景表面取峰值的)delta函数的形式,或是保证深度的平滑性。

6. 损失函数

  对每个像素,考虑其平方误差光度损失,以优化MLP参数。总损失为: L = ∑ r ∈ R ∥ C ^ ( r ) − C g t ( r ) ∥ 2 2 L=\sum_{r\in R}\|\hat{C}(r)-C_{gt}(r)\|_2^2 L=rRC^(r)Cgt(r)22其中 C g t ( r ) C_{gt}(r) Cgt(r)是与射线 r r r关联像素的真实颜色, R R R是待合成图像的相机射线集合。

7. 位置编码

  NeRF模型通常会使用位置编码,因其有利于渲染图像的细节重建。原始的位置编码 γ \gamma γ是在点 x x x的坐标(归一化到 [ − 1 , 1 ] [-1,1] [1,1])以及射线单位方向向量 d d d的每个分量 v v v上进行的: γ ( v ) = ( sin ⁡ ( 2 0 π v ) , cos ⁡ ( 2 0 π v ) , sin ⁡ ( 2 1 π v ) , cos ⁡ ( 2 1 π v ) , ⋯   , sin ⁡ ( 2 N − 1 π v ) , cos ⁡ ( 2 N − 1 π v ) ) \gamma(v)=(\sin(2^0\pi v),\cos(2^0\pi v),\sin(2^1\pi v),\cos(2^1\pi v),\cdots,\sin(2^{N-1}\pi v),\cos(2^{N-1}\pi v)) γ(v)=(sin(20πv),cos(20πv),sin(21πv),cos(21πv),,sin(2N1πv),cos(2N1πv))其中 N N N为用户定义的维度参数。

你可能感兴趣的:(NeRF与3D目标检测,计算机视觉,深度学习)