• 论文笔记:NeRF++(2020)


    论文链接:https://arxiv.org/pdf/2010.07492.pdf

    解决什么问题?有什么贡献

    首先对辐射场中的形状与辐射量之间的歧义性进行了分析,并且分析得到说那为什么NeRF可以避免这种歧义性。
    第二,将原始的NeRF扩展到一个大尺度无边界的场景中。在这一点中,主要是通过将场景划分为前景与背景来实现的。


    shape与radiance之间是有可能存在歧义性的

    在一系列训练图像中,优化一个5D函数,在不加任何正则化的情况下,有可能会面临退化解的问题,也就进一步的导致了在新视角生成时潜在的failure cases。这种情况我们将其命名为 shape–radiance歧义性,示意图见下:
    在这里插入图片描述
    具体来说,对于不正确的场景几何 S ^ \hat{S} S^,训练影像也可以蛮好的fit(主要是通过view-dependent的radiance,来实现真实几何所能体现出来的视觉效果)。
    而NeRF对这种歧义性进行了较好的处理。在后续的介绍中将会详细提及。

    NeRF在大尺度场景下存在什么问题?

    对于NeRF来说,要么仅仅只能再volume中fit场景中较小的一部分,完全抛弃背景的元素,要么就会对volume中大部分都去进行fit,但是会导致整体的细节信息都有所欠缺。
    因此,文章通过一种简单但有效的方式对这个问题进行解决,即,将场景划分为前景与背景。
    示意图见下:
    在这里插入图片描述

    怎么解决的?

    分析:NeRF的潜在失效情况及其的处理方式

    先回顾下NeRF在视角下进行优化的数学表达:
    min ⁡ σ , c 1 n ∑ i = 1 n ∥ I i − I ^ i ( σ , c ) ∥ 2 2 \min _{\sigma, \mathbf{c}} \frac{1}{n} \sum_{i=1}^{n}\left\|I_{i}-\hat{I}_{i}(\sigma, \mathbf{c})\right\|_{2}^{2} σ,cminn1i=1n IiI^i(σ,c) 22
    当给定射线: r = o + t d r = o + td r=o+td时,这条射线在影像上的颜色可以表达为:
    C ( r ) = ∫ t = 0 ∞ σ ( o + t d ) ⋅ c ( o + t d , d ) ⋅ e − ∫ s = 0 t σ ( o + s d ) d s d t \mathbf{C}(\mathbf{r})=\int_{t=0}^{\infty} \sigma(\mathbf{o}+t \mathbf{d}) \cdot \mathbf{c}(\mathbf{o}+t \mathbf{d}, \mathbf{d}) \cdot e^{-\int_{s=0}^{t} \sigma(\mathbf{o}+s \mathbf{d}) d s} d t C(r)=t=0σ(o+td)c(o+td,d)es=0tσ(o+sd)dsdt

    为了补偿网络的spectral bias【什么意思?】,以及合成更加锐利的影像,NeRF使用了位置编码,具体为:
    γ k : p → ( sin ⁡ ( 2 0 p ) , cos ⁡ ( 2 0 p ) , sin ⁡ ( 2 1 p ) , cos ⁡ ( 2 1 p ) , … , sin ⁡ ( 2 k p ) , cos ⁡ ( 2 k p ) ) \gamma^{k}: \mathbf{p} \rightarrow\left(\sin \left(2^{0} \mathbf{p}\right), \cos \left(2^{0} \mathbf{p}\right), \sin \left(2^{1} \mathbf{p}\right), \cos \left(2^{1} \mathbf{p}\right), \ldots, \sin \left(2^{k} \mathbf{p}\right), \cos \left(2^{k} \mathbf{p}\right)\right) γk:p(sin(20p),cos(20p),sin(21p),cos(21p),,sin(2kp),cos(2kp))

    其中, k k k是一个超参数,用了指定Fourier特征向量的维度。

    可以想到,在没有正则化限制的前提下,形状和radiance之间是存在歧义性的,如下图所示:

    在这里插入图片描述
    那么,我们再来分析为什么nerf可以避免这种歧义性。

    我们来假设两种可能性:
    (1)不正确的几何会使得辐射场有着更高的内在复杂性,或者说有着更高的频率;具体来讲, σ \sigma σ是由正确的几何形状导出的,那么 c \mathbf{c} c必须是关于 d \mathbf{d} d的高频函数【怎么理解?】。对于正确的形状来说,表面光场会相对来说光滑一些(比如说经典的朗伯体材质)。而对于不正确的形状来说,有用一个有限容量的MLP去表达appearance,就会是一件更难的事情。

    (2)NeRF特殊的MLP结构隐式的编码了一个基于表面反射率的BRDF先验。下图是NeRF对radiance c \mathbf{c} c进行建模的简易示意图:

    在这里插入图片描述
    通常来说,MLP会更倾向于编码一个平滑的表面反射率函数,也就是说,对于给定的表面点 x \mathbf{x} x来说, c \mathbf{c} c d \mathbf{d} d之间的拟合关系会倾向于平滑。为什么会说倾向于平滑呢,我们可以从Figure3中看到,对于 d \mathbf{d} d的编码仅仅到四阶,再一个是从 d \mathbf{d} d的输入到最后的输入之间所包含的神经元并不多,也就意味着拟合能力会比较一般。
    为了验证这种假设,我们做了一个实验:同等的对待变量 x \mathbf{x} x以及 d \mathbf{d} d,都将其位置编码到10阶,都在第一层进行输入。
    做的对比实验结果如下所示:
    在这里插入图片描述
    在这里插入图片描述
    可以看到,所谓的vanilla MLP的测试效果并不如NeRF MLP,因此,侧面的验证了文章所提的假设,即,NeRF自身对反射模型做了正则化。

    inverted sphere parameterization: 一种能够使得NeRF在unbounded场景下工作的参数化机制

    我们知道,NeRF的体渲染积分,是在欧几里得深度上去做的。那么对于一些室外场景来说,比如建筑、山川、云等等,很可能会离得非常非常远。
    这样一种高动态范围将会对NeRF的渲染效果产生巨大的影响。
    在这里插入图片描述
    我们是这样解决的:
    首先将场景分为两个部分,一个是inner unit sphere,再一个是outer volume(使用所谓的inverted sphere) ,示意图见下:

    在这里插入图片描述
    在单位圆里,包含了前景以及相机,而其他的部分则包含了单位圆外。
    这两个volume分别使用两个NeRF进行建模。为了渲染得到一条射线上的颜色,两个NeRF分别地进行渲染,最后再进行融合。对于内部的NeRF来说,不再需要重参数化,因为场景已经比较好的被包裹住了,而对于外部的NeRF来说,采用了一个所谓的inverted sphere parametrization。具体来说,一个外部的三维点 ( x , y , z ) , r = ( x 2 + y 2 + z 2 ) > 1 (x,y,z), r = \sqrt{(x^2 + y^2 +z^2)} >1 (x,y,z),r=(x2+y2+z2) >1将被重参数化为一个四元变量: ( x ′ , y ′ , z ′ , 1 / r ) , x ′ 2 + y ′ 2 + z ′ 2 = 1 \left(x^{\prime}, y^{\prime}, z^{\prime}, 1 / r\right), \quad x^{\prime 2}+y^{\prime 2}+z^{\prime 2}=1 (x,y,z,1/r),x′2+y′2+z′2=1。其中, ( x ′ , y ′ , z ′ ) \left(x^{\prime}, y^{\prime}, z^{\prime}\right) (x,y,z)是单位圆上的点,主要用于表达背景三维点的方向,而 r r r则是用来表现三维点 r ⋅ ( x ′ , y ′ , z ′ ) r \cdot (x ',y',z') r(x,y,z)的长度,那么 1 / r 1/r 1/r自然就是距离的倒数。
    特别值得注意的是,四元变量的每一个值都是有界的,即:
    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]
    这样不仅仅可以让数值收敛的更加稳定,还可以使得更远的物体有着更小的resolution。
    这个四元变量实际上只有三个自由度,我们将直接使用这个变量去渲染得到像素颜色。
    至于如何将前景与背景的颜色进行融合,我们现在不妨来考虑将射线 r = o + t d \mathbf{r} = \mathbf{o} + t \mathbf{d} r=o+td划分为两个部分,对于第一部分来说, t ∈ ( 0 , t ′ ) t \in (0, t') t(0,t)在单位球内,而对于第二个部分来说, t ∈ ( t ′ , ∞ ) t \in (t', \infin) t(t,)在单位球外。
    此时,我们就可以将体渲染公式改写为:
    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)  .

    C(r)=t=0tσ(o+td)c(o+td,d)es=0tσ(o+sd)dsdt(i) +es=0tσ(o+sd)ds(ii) t=tσ(o+td)c(o+td,d)es=ttσ(o+sd)dsdt(iii) ." role="presentation" style="position: relative;">C(r)=t=0tσ(o+td)c(o+td,d)es=0tσ(o+sd)dsdt(i) +es=0tσ(o+sd)ds(ii) t=tσ(o+td)c(o+td,d)es=ttσ(o+sd)dsdt(iii) .
    C(r)=(i)  t=0tσ(o+td)c(o+td,d)es=0tσ(o+sd)dsdt+(ii)  es=0tσ(o+sd)ds(iii)  t=tσ(o+td)c(o+td,d)es=ttσ(o+sd)dsdt.
    ( i ) (i) (i)项以及 ( i i ) (ii) (ii)项,照常在欧几里得空间进行计算,而 ( i i i ) (iii) (iii)项则在inverted sphere space下进行积分,且以 1 r \frac{1}{r} r1为积分变量。
    为了计算项 ( i i i ) (iii) (iii),我们需要用 1 r \frac{1}{r} r1来表示 ( x ′ , y ′ , z ′ ) (x',y',z') (x,y,z),这样才能够用 ( x ′ , y ′ , z ′ , 1 r ) (x', y', z', \frac{1}{r}) (x,y,z,r1)作为输入,以 σ o u t , c o u t \sigma_{out}, \mathbf{c}_{out} σoutcout作为输出。

    见下图,射线与单位球在 a \mathbf{a} a点相交:
    在这里插入图片描述
    a = o + t a d \mathbf{a} = \mathbf{o} + t_a \mathbf{d} a=o+tad通过解求 ∣ o + t a d ∣ = 1 \left|\mathbf{o}+t_{a} \mathbf{d}\right|=1 o+tad=1而得,而 b = o + t b d \mathbf{b} = \mathbf{o} + t_b \mathbf{d} b=o+tbd则通过解求 d T ( o + t b d ) = 0 \mathbf{d}^{T}\left(\mathbf{o}+t_{b} \mathbf{d}\right)=0 dT(o+tbd)=0得到。
    在给定 1 r \frac{1}{r} r1的情况下,为了获得 ( x ′ , y ′ , z ′ ) (x',y',z') (x,y,z),我们可以将向量 a \mathbf{a} a沿着向量 b × d \mathbf{b} \times \mathbf{d} b×d旋转 ω = arcsin ⁡ ∣ b ∣ − arcsin ⁡ ( ∣ b ∣ ⋅ 1 r ) \omega=\arcsin |\mathbf{b}|-\arcsin \left(|\mathbf{b}| \cdot \frac{1}{r}\right) ω=arcsinbarcsin(br1)
    一旦我们能够在任何的 1 r \frac{1}{r} r1上都评估得到 σ o u t \sigma_{out} σout c o u t \mathbf{c}_{out} cout,我们就可以在 [ 0 , 1 ] [0,1] [0,1]之间采样有限数量的点。
    inverted sphere 参数化有着很直观的物理解释。
    我们可以视作有一个虚拟的相机,其相机平面就是场景中心的单元球,因此,3D点 ( x , y , z ) (x,y,z) (x,y,z)可以投影到 ( x ′ , y ′ , z ′ ) (x', y', z') (x,y,z),其中 1 r ∈ ( 0 , 1 ) \frac{1}{r} \in (0,1) r1(0,1)表示点的深度/视差。

    效果如何

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    进程(软件)
    深入理解Kotlin协程
    ElasticSearch部署实战架构、容量规划优化
    电信秋季发布会推出王炸产品
    微信小程序自定义按钮触发转发分享功能
    部署LVS-DR 集群及实验
    Vue tree树状结构数据转扁平数据
    ESP8266_Rtos3.0环境搭建
    HR常用的人才测评工具,测什么,怎么测?
    利用Optional解决空指针异常
  • 原文地址:https://blog.csdn.net/flow_specter/article/details/126256828