NeRF神经辐射场学习笔记(九)— BungeeNeRF(CityNeRF)论文翻译以及原理解读

发布于:2023-01-10 ⋅ 阅读:(1291) ⋅ 点赞:(1)

声明

本人书写本系列博客目的是为了记录我学习三维重建领域相关知识的过程和心得,不涉及任何商业意图,欢迎互相交流,批评指正。

论文概述

BungeeNeRF扩展了传统NeRF的尺度范围,由单一尺度的物体渲染过渡到了城市场景的多尺度渲染——从捕捉卫星级别的城市概貌到显示建筑物复杂细节的地面图像;城市场景这种大范围的观察位置会产生不同细节层次的多尺度渲染,这给NeRF带来了巨大的挑战,并使其无法兼顾多个尺度;而BungeeNeRF是采用一种渐进的神经辐射场(a progressive NeRF),能够在不同尺度上实现细节层次的渲染——从a shallow base block开始拟合远距离视图,随着训练的进行,新的blocks被加入到模型中用来适应逐渐靠近的视图细节;该策略逐渐激活NeRF位置编码中的高频通道,并随着训练的进行陆续展开更复杂的细节。
在这里插入图片描述
如图所示,BungeeNeRF能够将极端的多尺度城市场景打包到一个统一的模型中,该模型保留了从卫星级到地面级不同尺度的高质量细节,数据来自谷歌地图

背景介绍

神经辐射场(NeRF)利用由多层感知器(MLP)参数化的连续体积函数对3D场景进行编码,并将5D坐标(位置和观看方向)映射到场景中相应的颜色和体积密度。NeRF还启发了许多后续的工作,将其连续神经体积表示扩展到更实际的场景,超出简单的静态场景,包括无界场景(NeRF++,Mip-NeRF 360)、动态场景(Neural scene flow fields,Space-time neural irradiance fields)、非刚体形变物体(Nerfies、Hypernerf、D-nerf、Non-rigrid NeRF)、改变光照和遮挡物的摄影场景(NeRF-W、Urban radiance fields)、将单个项目中的大场景分离成小场景(Block-NeRF、Mega-NeRF)。NeRF不光光在针对不同场景的处理上面延伸出许多方法,也在对3D场景的表示上面有所拓展;Mip-NeRF使用集成位置编码(IPE),用锥形采样代替NeRF的点采样,这允许模型显式地推理3D体积。Barf、Nerfies、Hypernerf采用窗口位置编码(windowed positional encoding),通过粗到细的训练来帮助学习动态形状。

用NeRF表示极端多尺度下的场景所面临的挑战

  1. 近距离相机观测到的区域是远距离相机的一个子空间,而远距离相机捕捉到近距离相机没有覆盖的场景的重要部分,这导致渲染图像的质量不一致,如下图(a)所示;
  2. 相反,单独训练每个尺度可以消除这种不一致性,但牺牲了连续尺度之间的联系,导致如下图(b)所示的重大差异,而这需要进一步的融合来整合结果;
    在这里插入图片描述
    注意到,尺度不同,PE和IPE位置编码的有效频率通道(effrctive frequency channels)不同。如下图(a)所示,对于显示屋顶复杂细节的近距离视图(L=3),低频傅里叶特征似乎不够,而高频傅里叶特征被激活以更好地与这些细节对齐。相反,远距离视图(L=1)可以用低频傅里叶特征很好地表示,从而抑制了高频傅里叶特征。所以,PE中的高频通道仅在近距离视图中激活。然而,由于训练数据中的近视图数量有限,在所有尺度上训练的NeRF和Mip-NeRF总体上往往忽略了这些高频场景分量,导致只利用低频特征的折衷解决方案。
    在这里插入图片描述

多级监督的递进模型(Progressive Model with Multi-level Supervision)

文章提出以渐进的方式建立和训练模型,以鼓励网络层之间的分工,释放PE中全频段的力量。并且相关研究表明,以有意义的顺序训练模型可以简化对困难任务的训练,并可以在简单样本上初始化模型权重。这也符合采取渐进式训练策略的动机。
在这里插入图片描述
在BungeeNeRF中,训练数据和模型以同步的多阶段方式生长,设 L m a x L_{max} Lmax作为为捕获的场景预先确定的训练阶段的总数,同时也离散了相机和场景之间的连续距离,如上图(a)所示。在实验中,根据摄像机距离对训练数据进行划分,在投影几何的基础上近似场景中物体的分辨率层次,并且认为最近视点为最高分辨率。当相机以 { 2 1 , 2 2 , 2 3 , …   } \left\{2^1,2^2,2^3,\dots\right\} {21,22,23,}的倍数缩小时,这样一种新的尺度标准就设立出来,每个图像分配了一个阶段指示符 I l I_l Il,该stage indicator在其图像的所有像素和圆锥形光线的采样点之间共享。对于{ I l = L I_l=L Il=L},其表示该图像集属于尺度 L L L
从最远的视图( L = 1 L=1 L=1)开始,随着训练的进行,在每个训练阶段,一个更近尺度 L + 1 L+1 L+1下的视图被添加进模型中,如上图(b)所示。这样的数据输入方案通过在早期训练阶段将更多地精力放在周边地区来修正了样本分布的偏差。(上面这句没太理解…Such data feeding scheme remedies the bias in sample distribution by allowing the model to put more effort on peripheral regions at the early training stage.)同时,可以构建一个rough粗略的场景布局,这将会成为随后的训练阶段进行更深入观察的基础。随着训练集的扩展,模型通过添加新的blocks来不断学习。如上图(b)所示,每个block匹配了一个输出头,用来在连续的、更近的尺度上预测场景中的颜色和密度残差(density residuals)。最远尺度的视图可以从只有base颜色的shallow block(图中每个block上面的部分)中退出,而近距离的视图要经过更深的blocks来处理并用逐步添加的残差颜色进行渲染(模型中的横向部分)。位置编码会通过skip connection与每个block连接,用来捕捉场景中的复杂细节。在整个训练过程中,网络中的所有层都保持可训练性。

1. 残差Block结构(Residual Block Structure)

远距离视图通常因为不需要显示复杂的细节而相对容易处理。文章用一个shallow MLP作为模型的base block来匹配最远距离的场景尺度{ I l = 1 I_l=1 Il=1},记作 B b a s e B_{base} Bbase——其中该网络有 D b a s e = 4 D_{base}=4 Dbase=4个隐藏层,每层有 W = 256 W=256 W=256个隐藏神经元。颜色和体密度输出符合传统的NeRF设定,且base block没有skip connection。
当进行下一个训练阶段时,一个包含 D r e s = 2 D_{res}=2 Dres=2层非线性映射的block网络 B L B_L BL添加进了模型当中,同时位置编码 γ ( x ) \gamma(\pmb{x}) γ(xx)通过skip connection添加到block中。新的block不仅仅学习了base block中有关远距离视图的特征,而且通过访问位置编码中的高频通道,用来在更近的试图中构建新的细节,如下图(b)所示,渐进式训练策略能够在更深的block中捕捉到更高频率的傅立叶特征,相反Mip-NeRF即使在最深的skip层也不能激活位置编码中的高频通道,更不能表示更复杂的细节。
在这里插入图片描述
添加的block网络 B L B_L BL基于从上一个block的最后一个映射层获得的潜在特征 z L − 1 \pmb{z}_{L-1} zzL1输出残差颜色和密度信息: ( c L r e s , σ L r e s ) = f L r e s ( z L − 1 , x , d ) (\pmb{c}^{res}_L,\sigma^{res}_L)=f^{res}_L(\pmb{z}_{L-1}, \pmb{x},\pmb{d}) (ccLres,σLres)=fLres(zzL1,xx,dd)然后将从输出头 H L H_L HL输出的结果合并为: c L = c b a s e + ∑ l = 2 L c l r e s , σ L = σ b a s e + ∑ l = 2 L σ l r e s \pmb{c}_L=\pmb{c}^{base}+\sum_{l=2}^L\pmb{c}_l^{res}, \sigma_L=\sigma^{base}+\sum_{l=2}^L\sigma_l^{res} ccL=ccbase+l=2Lcclres,σL=σbase+l=2Lσlres
残差的设计对所有尺度都有共同的好处:

  1. 该方法鼓励中间的block集中在缺失的细节上,并通过skip connection获得高频傅立叶特征;
  2. 而且其使得从后一个block获得的梯度平滑地流回前一个block,并在近距离视图的监督下增强了shallow特征。

2. 包容性多层次监督(Inclusive Multi-level Supervision)

为了保证所有尺度的渲染质量一致,在训练阶段 L L L,输出头 H L H_L HL由之前尺度的图像联合监督,例如{ I L ≤ L I_L\leq L ILL}。阶段 L L L的损失将会累加在从 H 1 H_1 H1 H L H_L HL的所有之前的输出头上: L L = ∑ l = 1 L ∑ r ∈ R l ( ∣ ∣ C ^ ( r ) − C ( r ) ∣ ∣ 2 2 ) \mathcal{L}_L=\sum^L_{l=1}\sum_{\pmb{r}\in\mathcal{R}_l}\left(||\hat{C}(\pmb{r})-C(\pmb{r})||^2_2\right) LL=l=1LrrRl(∣∣C^(rr)C(rr)22)其中 R l \mathcal{R}_l Rl是从1到阶段 l l l的带有阶段指示器的光线集, C ( r ) C(\pmb{r}) C(rr) C ^ ( r ) \hat{C}(\pmb{r}) C^(rr)是场景颜色的真实值和预测值。

参考文献和资料

[1]BungeeNeRF原文
[2]BungeeNeRF官网
[3]BungeeNeRF代码

本文含有隐藏内容,请 开通VIP 后查看