辐射神经场算法——Wild-NeRF / Mipi-NeRF / BARF / NSVF / Semantic-NeRF / DSNeRF

Posted Leo-Peng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了辐射神经场算法——Wild-NeRF / Mipi-NeRF / BARF / NSVF / Semantic-NeRF / DSNeRF相关的知识,希望对你有一定的参考价值。

辐射神经场算法——NeRF++ / Wild-NeRF / Mipi-NeRF / BARF / NSVF / Semantic-NeRF

辐射神经场算法——NeRF++ / Wild-NeRF / Mip-NeRF / BARF /NSVF / Semantic-NeRF / DSNeRF

原始的NeRF虽然效果很惊艳,但是其一个场景少则一两天的训练速度,以及对于输入图像质量和位姿的要求却不尽人意,因此,在NeRF提出来很短的时间内就衍生出了各种基于NeRF优化的方法,本文主要是对这些方法进行一个简单总结,但是建议先了解原始NeRF的算法原理再来阅读本博客,对于原始NeRF算法的介绍可以参考博客辐射神经场算法——NeRF算法详解

1. NeRF++

NeRF++原论文名为《NeRF++: Analyzing and Improving Nerual Radiance Fileds》,该论文主要包括两部分:一部分是分析了原始NeRF具备的Shape-Radiance Ambiguity问题,另一部分是提出了一个解决室外360度开放场景的渲染方案

首先针对Shape-Radiance Ambiguity问题,作者做了如下一个实验:

作者先使用一个球形的模型去训练NeRF中的 σ \\sigma σ,然后再使用上左中的GT training view去训练NeRF中的 c \\boldc c,在相同视角下进行预测时发现即使在错误的 σ \\sigma σ分布下仍然能输出较好的图像质量,但是一旦更换视角(GT test view)就会输出如上左图的结果。造成该现象的原因正是View-Dependent的网络设计。但是如果我们一旦修改网络设计,将采样点的位置 x x x和方向 d \\boldd d都从网络的第一层输入的话,网络整体效果就会下降,如下图所示:

文章的第二部分介绍的室外360度开放场景的一种解决方案,在原始NeRF中,对于Front-View的开放场景,使用的一种名为NDT坐标系的方式(可以简单理解为逆深度),但是对于360度的开放场景NDT坐标系是搞不定的,因此作者提出了将360度开放场景的渲染分为两部分通过两个NeRF进行渲染,如下所示:

规定一个球体 B = ( x , y , z ) : x 2 + y 2 + z 2 = 1 B=\\left\\(x, y, z): \\sqrtx^2+y^2+z^2=1\\right\\ B=(x,y,z):x2+y2+z2 =1:
球体内保持欧拉坐标系 ( x , y , z ) (x, y, z) (x,y,z),使用原始的NeRF用于渲染前景部分;
球体外通过一个四维向量 ( x ′ , y ′ , z ′ , 1 / r ) \\left(x^\\prime, y^\\prime, z^\\prime, 1 / r\\right) (x,y,z,1/r)表示,用于渲染背景部分,其中 x ′ 2 + y ′ 2 + z ′ 2 = 1 x^\\prime 2+y^\\prime 2+z^\\prime 2=1 x2+y2+z2=1用于表示方向, 0 < 1 / r < 1 0<1 / r<1 0<1/r<1用于表示距离,并且 x ′ , y ′ , z ′ ∈ [ − 1 , 1 ] , 1 / r ∈ [ 0 , 1 ] x^\\prime, y^\\prime, z^\\prime \\in[-1,1], 1 / r \\in[0,1] x,y,z[1,1],1/r[0,1],用于进行背景渲染的NeRF输入为 ( x ′ , y ′ , z ′ , 1 / r ) \\left(x^\\prime, y^\\prime, z^\\prime, 1 / r\\right) (x,y,z,1/r),输出则是 σ out  , c out  \\sigma_\\text out , \\mathbfc_\\text out σout ,cout .

那么接下来的问题就是当我们给定一个像素的射线 r = o + t d \\mathbfr=\\mathbfo+t \\mathbfd r=o+td,当采样点位于球体外时如何求得四维向量 ( x ′ , y ′ , z ′ , 1 / r ) \\left(x^\\prime, y^\\prime, z^\\prime, 1 / r\\right) (x,y,z,1/r)呢?如下图所示:

我们给定不同采样点 p \\mathbfp p得到不同的半径 r r r,那么如果获得 x ′ , y ′ , z ′ x^\\prime, y^\\prime, z^\\prime x,y,z呢?上图中点 a = o + t a d \\mathbfa=\\mathbfo+t_a \\mathbfd a=o+tad,我们令 ∣ o + t a d ∣ = 1 \\left|\\mathbfo+t_a \\mathbfd\\right|=1 o+tad=1就可以求得点 a \\mathbfa a的坐标,同理点 b = o + t b d \\mathbfb=\\mathbfo+t_b \\mathbfd b=o+tbd可以通过 d T ( o + t b d ) = 0 \\mathbfd^T\\left(\\mathbfo+t_b \\mathbfd\\right)=0 dT(o+tbd)=0求得,那么我们根据 ω = arcsin ⁡ ∣ b ∣ − arcsin ⁡ ( ∣ b ∣ ⋅ 1 r ) \\omega=\\arcsin |\\mathbfb|-\\arcsin \\left(|\\mathbfb| \\cdot \\frac1r\\right) ω=arcsinbarcsin(br1)即可以对点 a \\mathbfa a方向进行渲染既可以得到点 p \\mathbfp p的方向 x ′ , y ′ , z ′ x^\\prime, y^\\prime, z^\\prime x,y,z,其实就是一个很简单的几何求解。解决了这个问题后就可以给出最后NeRF++的计算公式:
C ( r ) = ∫ t = 0 t ′ σ ( o + t d ) ⋅ c ( o + t d , d ) ⋅ e − ∫ s = 0 t σ ( o + s d ) d s d t ⏟ (i)  + e − ∫ s = 0 t ′ σ ( o + s d ) d s ⏟ (ii)  ⋅ ∫ t = t ′ ∞ σ ( o + t d ) ⋅ c ( o + t d , d ) ⋅ e − ∫ s = t ′ t σ ( o + s d ) d s d t ⏟ (iii)  . \\beginaligned \\mathbfC(\\mathbfr)=& \\underbrace\\int_t=0^t^\\prime \\sigma(\\mathbfo+t \\mathbfd) \\cdot \\mathbfc(\\mathbfo+t \\mathbfd, \\mathbfd) \\cdot e^-\\int_s=0^t \\sigma(\\mathbfo+s \\mathbfd) d s d t_\\text (i) \\\\ &+\\underbracee^-\\int_s=0^t^\\prime \\sigma(\\mathbfo+s \\mathbfd) d s_\\text (ii) \\cdot \\underbrace\\int_t=t^\\prime^\\infty \\sigma(\\mathbfo+t \\mathbfd) \\cdot \\mathbfc(\\mathbfo+t \\mathbfd, \\mathbfd) \\cdot e^-\\int_s=t^\\prime^t \\sigma(\\mathbfo+s \\mathbfd) d s d t_\\text (iii) . \\endaligned C(r)=(i)  t=0tσ(o+td)c(o+td,d)e以上是关于辐射神经场算法——Wild-NeRF / Mipi-NeRF / BARF / NSVF / Semantic-NeRF / DSNeRF的主要内容,如果未能解决你的问题,请参考以下文章

辐射神经场算法——NeRF算法详解

辐射神经场算法——NeRF算法详解

CVPR 2022 | 鲁棒的神经辐射场重建

NeRF算法Keras实现教程

论文笔记:NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

本科生新算法打败NeRF,不用神经网络照片也能动起来,提速100倍|开源