51、Recursive-NeRF: An Efficient and Dynamically Growing NeRF

简介

github主页:https://github.com/Gword/Recursive-NeRF
在这里插入图片描述
Recursive- nerf的核心是学习查询坐标的不确定性,代表每一级预测颜色和体积强度的质量。只有具有高不确定性的查询坐标才会被转发到下一层具有更强大表示能力的更大的神经网络。最终渲染的图像是由各级神经网络的结果组成的

贡献点

  1. 一种递归场景渲染方法,一旦输出质量足够好,早期终止阻止进一步处理,以大大减少的计算实现最先进的新视图合成结果
  2. 一种新颖的多阶段动态增长方法,将不确定查询划分在网络的浅层,并在不同增长的深层网络中继续改进它们,使该方法适应具有不同复杂性区域的场景。

实现流程

NeRF回顾
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在Lego数据集上测试了NeRF的PSNR,用于不同数量的网络层(2、4、6、8)、网络宽度(64、128、256)和图像大小(25、50、100、200、400、800)。网络容量与网络层数和网络宽度呈正相关。在这里,图像大小是场景复杂性的代表。可以看出,随着场景复杂性的增加,PSNR先增大后减小。这是因为当场景太简单时,可供学习的信息太少,而当场景太复杂时,就会超出网络的能力。从图2可以看出,当场景比较简单时,不同网络的表征能力是相似的。随着场景变得复杂,不同网络的表示能力之间的差距越来越大。

有一个直观的解决方案:简单地将场景分成几个部分,每个部分由一个相同的独立网络表示。然而,这种解决方案存在问题。每个部分使用相同的网络体系结构,而场景的不同部分的复杂性可能不同,所以理想情况下,应该使用具有不同功能的网络来表示它们。此外,粗粒度的信息将被反复学习。Recursive- nerf使用更复杂的方法克服了这两个问题。

在这里插入图片描述
给定位置(x, y, z) 和观看方向 d,初始网络 Φ 1 Φ_1 Φ1 输出颜色 c 1 c_1 c1,密度 σ 1 σ_1 σ1,不确定度 δ 1 δ_1 δ1。将所有的不确定点划分为几个类别,然后 Φ 1 Φ_1 Φ1 动态增长几个分支网络,继续对每个不确定点的子集进行训练,直到网络相信所有的点都被可靠地预测。在渲染时,早期终止允许不同的点在不同的时间退出,减少网络负载

Recursive Neural Fields

在这里插入图片描述
Recursive- nerf的网络结构。对于每个查询(x, y, z, d),网络预测一个不确定性 δ,用于决定查询是否应该尽早完成。如果有,将进入Out Module 预测其颜色 c 和密度 σ。如果不是,则点分割单元(Branch Module)决定它应该随后进入哪个分支。

递归神经场以母分支的输出 y p i y_{pi} ypi和观看方向 d 为输入,预测颜色 c i c_i ci、密度 σ i σ_i σi、不确定性 δ i δ_i δi 和潜在向量 y i y_i yi:
在这里插入图片描述
其中 F Φ i F_{Φi} FΦi 表示第 i 个子网络。 F Φ 1 F_{Φ1} FΦ1 是递归网络的根;在本例中, y p i y_{pi} ypi 被设置为查询坐标 (x, y, z)。

子网 F Φ i F_{Φi} FΦi 由三个主要部分组成,MLP模块、Branch模块和Out模块

MLP模块包括两个或多个线性层,以确保MLP模块执行足够复杂的特征处理

Branch模块预测每个查询点的不确定度 δ i δ_i δi,将不确定度低的点转发给Out模块输出,并根据到 F Φ i F_{Φi} FΦi k i k_i ki 聚类中心的距离将不确定度高的点分配到不同的子网络中

Out模块负责将特征解码为 c i c_i ci σ i σ_i σi

Uncertainty prediction

每个分支网络预测查询坐标的不确定性,用它来确定分支网络的出口。 使用原始的NeRF损失来帮助预测不确定性。NeRF采用渲染图像与真实图像之间的均方误差(MSE)作为粗、细网络训练的损耗:
在这里插入图片描述
R包含小批中的射线,而 C ^ c ( r ) \hat{C}_c(r) C^c(r) C ^ f ( r ) \hat{C}_f(r) C^f(r) 分别为粗网络和细网络渲染的颜色,C®为真实值

粗和精细的架构专门用于采样点,因为网络设计避免了对每个采样点进行不必要的计算。事实上,之前的不确定性响应可以作为NeRF精细网络的采样指导

引入两个正则化损耗来有效地训练不确定性,在 F Φ i F_{Φi} FΦi 的输出特征 y p i y_{pi} ypi 之后使用一个线性层来计算不确定度 δ i δ_i δi

使用像素的平方误差来监督 δ i δ_i δi,目的是如果像素有很大的误差,产生与样本点相关的不确定性的样本点的 δ i δ_i δi 也应该很大。因此,惩罚 δ i δ_i δi 小于平方误差:
在这里插入图片描述
在这里插入图片描述
其中 E® 为射线 r 的平方误差, c i c_i ci 为射线 r 的采样点, δ c i δ_{ci} δci为查询坐标 c i c_i ci 的预测不确定度。

为了防止 δ i δ_i δi 膨胀,引入了另一个正则化损失:对于每个查询点,鼓励 δ i δ_i δi 尽可能接近零
在这里插入图片描述
L S E L_{SE} LSE L 0 L_0 L0 的加权和得到总体不确定性损失:
在这里插入图片描述
其中 α 1 α_1 α1 α 2 α_2 α2 为权值,此处设 α 1 α_1 α1 = 1.0, α 2 α_2 α2 = 0.01。

使用正则化损失而不是直接使用 L1 损失来训练 δ i δ_i δi,因为准确预测 E® 的难度与直接预测神经网络查询坐标的颜色差不多。在网络结构中,浅网络很难有准确的 E®。因此, 对 α 1 α_1 α1 α 2 α_2 α2 使用具有不平衡值的正则化损失,使得网络可以对不确定性小于损失的点使用较大的惩罚,而不确定性大于损失的点将较少惩罚。这样,网络将不确定性学习到复杂损失函数的上界,只有真正确定的点才能提前终止。

Multi-scale joint training

因此,尽早完成不确定度低于 ε \varepsilon ε 的查询,并将不确定度大于或等于 ε \varepsilon ε 的点转发到更深的网络。这种提前终止机制可以减少不必要的计算,但不幸的是,也带来了训练困难。对于查询坐标 (x, y, z, d),不确定度可能在某个阶段超过 ε \varepsilon ε,坐标将被发送到更深的网络。然而,如果更深层次的网络之前没有在这个坐标上训练过,它将输出一个几乎随机的值。这会在损耗中造成很大的不稳定性,影响训练,甚至可能造成梯度爆炸。

为了解决这一问题,遵循多尺度密集网络中的做法:每次,所有查询坐标通过所有出口输出;同时输出早期终止的图像,在训练过程中对其损失进行等权加权。总损失函数为:
在这里插入图片描述
式中,D为当前的阶段数(也是网络增长的D−1倍), L M S E i L^i _{MSE} LMSEi L u n c t i L^i_{unct} Luncti分别为第 i 层输出图像的 MSE 损失和不确定性损失。 β 1 β_1 β1 β 2 β_2 β2 为权重,设 β 1 β_1 β1 = 1.0, β 2 β_2 β2 = 0.1

Dynamic Growth

自适应动态增长策略,该策略在当前阶段对不确定查询进行聚类,并根据聚类结果进行更深层次的网络增长

在初始阶段,网络只包含一个子网络 Φ 1 Φ_1 Φ1,该子网络由两个线性层组成。在对初始网络进行 I 1 I_1 I1 次迭代训练后, 对空间中的一些点进行采样,并计算它们的不确定性。然后将不确定度高于 ε \varepsilon ε 的点聚类;聚类结果决定了下一阶段网络的成长。为了保证聚类的简单可控,使用k-means算法,可以用更高效的聚类算法代替,k∈[2,4]。网络根据聚类中心增加 k 个分支;例如 Φ 2 Φ_2 Φ2 Φ 3 Φ_3 Φ3。在下游,查询点被分配给具有最近集群中心的分支。

当场景变得复杂时,NeRF必须深化它的网络,可以简单地添加更多的分支来获得相同的结果。把这个成长的网络一分为二有两个原因。首先,对点进行分割将降低网络的复杂性,否则,需要对所有点进行更深层次的网络。其次,每个子网络只独立负责场景的一部分,使其更有效和适应性。完整模型优于使用单一分支

基于增长的网络经过多次迭代训练,然后聚类和增长。这个过程可以连续重复,直到大多数点的不确定度小于 ε \varepsilon ε 。为了在合理的时间内完成训练,我指定递归NeRF总计增长3倍。每个增长步骤使用的 k 值可以不同,但默认情况下,将每个增长步骤的 k 设置为2。

在训练过程中,样本点可以在多个阶段退出,而在推理过程中的某一特定阶段,点只会退出一次。较早发现的可靠点将立即退出并被渲染。采用哪个分支取决于聚类的结果。将当前阶段的不确定点聚类,下一阶段将它们传递给具有相同结构的不同子分支。

在这里插入图片描述
Alpha线性初始化比较。左:真实图像。中:完整模型的结果。右:没有alpha线性初始化的模型结果。

试验表明,随机初始化网络的直接增长会导致分阶段训练的不稳定性,导致部分增长网络的密度降至0。结果渲染的场景可能缺少片段,上图所示。

在这里插入图片描述
OutNet的网络结构。绿色块:全连通层。黄色块:网络的输入输出变量。

其中alpha linear负责将特征解码为查询点的密度。克服这一问题的方法是将成长子网络的alpha线性权值初始化为与父网络相同的权值。这使得子网的密度生成网络可以继承父节点的部分密度信息,避免了这种不稳定性。

Recursive Rendering

在这里插入图片描述

与NeRF输出网络最后一层所有点的颜色和密度不同,Recursive-NeRF递归地渲染最终图像。在当前视图下,所有不确定度低于当前阶段阈值的点都可以渲染出一个相对模糊的图像。所有不确定度高于阈值的点进入下一阶段网络进行进一步细化,其他不确定度较低的点退出这一阶段。这些点加上前面所有阶段的点可以渲染出清晰的图像。上图渲染了使用在不同阶段完成的点的图像,这些被合并形成在坐上的最终图像。不确定性在上图中隐式可视化,早期不确定性较低的区域主要是空间和结构简单的表面,如乐高模型的地板。

每个输入查询点 r(t) 从其不确定概率小于 ε \varepsilon ε 的第一个分支网络中退出。 用分支网络预测的颜色 c i c_i ci 和密度 σ i σ_i σi 来表示公式1所需的 c(r(t)) 和 σ(r(t))。然后用公式1计算查询点的颜色。
在这里插入图片描述
其中 R i R_i Ri 是包含在第 i 个分支中的点集合。

效果

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值