Recursive-NeRF

Recursive-NeRF: An Efficient and Dynamically Growing NeRF:递归NeRF:一种高效且动态增长的NeRF
论文假设场景的复杂区域应该由大型神经网络表示,而小型神经网络能够编码简单区域,从而实现效率和质量之间的平衡。
递归NeRF是这一思想的体现,为NeRF提供了一种高效、自适应的渲染和训练方法。**递归NeRF的核心学习查询坐标的不确定性,表示每个级别的预测颜色和体积强度的质量。**只有具有高不确定性的查询坐标被转发到具有更强大的表示能力的更大的神经网络的下一级。最终渲染的图像是来自各级神经网络的结果的合成。

NeRF的一些缺陷:
无法自适应不同复杂度的场景。其次,无论单个查询样本是复杂的还是简单的,NeRF都将它们传递给整个神经网络,这对于空的或具有简单几何结构和纹理的区域来说是过度的。这些限制严重影响大规模场景渲染。
Recursive-NeRF主要进行了以下改进:
1、一种递归场景渲染方法,一旦输出质量足够好,早期终止阻止进一步处理,以大大减少的计算实现最先进的新视图合成结果。
2、一种新颖的多阶段动态增长方法,将不确定查询划分在网络的浅层,并在不同增长的深层网络中继续改进它们,使该方法适应具有不同复杂性区域的场景。

1、回顾

论文首先对NeRF相关论文进行了回顾,介绍了基本原理。这里介绍参数和场景复杂性的关系:更复杂的场景需要使用更多的参数来表示,同时,简单场景可以用少量参数表示。
在Lego数据集上针对不同数量的网络层(2、4、6、8)、网络宽度(64、128、256)和图像大小(25、50、100、200、400、800)测试了NeRF[14]的PSNR。网络容量与网络层数和网络宽度呈正相关。随着场景变得复杂,不同网络的表现能力之间的差距越来越大
在这里插入图片描述

2、递归神经辐射场

1、从一个小的神经网络开始,除了颜色和体积强度之外,递归NeRF还预测了一个不确定性,表明了当前结果的质量。
2、递归NeRF然后以低不确定性直接输出当前级别中查询坐标的结果,而不是通过网络的其余部分将其转发。
3、具有高不确定性的查询坐标以簇的形式转发到下一级,表示为具有更强大的表示能力的多个神经网络。使用k-means算法对当前阶段的高不确定性点进行聚类,从而将场景划分为多个部分,以进行更细粒度的预测。
4、当所有查询坐标的不确定性小于用户指定的阈值或达到某个最大迭代次数时,训练过程终止。
通过这种方式,RecursiveNeRF自适应地分割工作,以根据其复杂性解耦底层场景的不同部分,帮助避免网络参数的不必要增加。下图是Pipeline
在这里插入图片描述

2.1递归神经场

递归神经场以其父分支的输出ypi和观察方向d作为输入,并预测颜色ci、密度σi、不确定性δi和潜在向量yi:
在这里插入图片描述
FΦi表示第i个子网络。Φ1是递归网络的根;在本例中,ypi被设置为查询坐标(x,y,z)
子网络FΦi由三个主要组件组成:MLP模块、分支模块和输出模块。MLP模块包括两个或更多个线性层,以确保MLP模块执行足够复杂的特征处理。MLP模块预测每个查询点的不确定性δi,将具有低不确定性的点转发到输出模块进行输出,并根据其到FΦi的ki簇中心的距离将具有高不确定性的节点分配到不同的子网络(K-Means聚类方法)。输出模块负责将特征解码为ci和σi
在这里插入图片描述

2.2提前终止

每个分支网络查询坐标的不确定性,用它来确定分支网络的出口。 使用原始的NeRF损失来帮助预测不确定性。NeRF采用渲染图像与真实图像之间的均方误差(MSE)作为粗、细网络训练的损耗:
在这里插入图片描述
论文中引入两个正则化损失来有效地训练不确定性。使用跟随FΦi的输出特征ypi的线性层来计算不确定度δi。我们使用像素的平方误差来监督δi,其目的是,如果像素具有较大的误差,则产生与采样点相关的不确定性的采样点的δi也应较大。因此,我们惩罚δi小于平方误差,max中如果大于E®,就取0值:在这里插入图片描述
E(r)是射线r的平方误差,N是射线r采样点的数量,δr,i是射线r第i个采样点的预测不确定度。
为了防止δi爆炸,引入了另一个正则化损失:对于每个查询点,鼓励δi尽可能接近零
在这里插入图片描述
所以总体不确定性损失为
在这里插入图片描述
α1=1,α2=0.01
使用正则化损失而不是直接使用 L1 损失来训练不确定性,因为准确预测 E® 的难度与直接预测神经网络查询坐标的颜色差不多。在网络结构中,浅网络很难有准确的 E®。因此, 对 α1,α2 使用具有不平衡值的正则化损失,使得网络可以对不确定性小于损失的点使用较大的惩罚,而不确定性大于损失的点将较少惩罚。这样,网络将不确定性学习到复杂损失函数的上界,只有真正确定的点才能提前终止。

论文中按照多尺度密集网络的操作,每次,所有查询坐标都通过所有出口输出;具有提前终止的图像也被输出,并且在训练期间它们的损失被以相等的权重加权。因此,我们的总损失函数为:
在这里插入图片描述
D是当前的级数,第 i 层输出图像的 MSE 损失和不确定性损失相加,β1=1,β2=0.1

2.3动态增长

该策略在当前阶段对不确定的查询进行聚类,并根据聚类结果增长更深的网络。
在初始阶段,网络仅包含一个子网络Φ1,该子网络由两个线性层组成。在初始网络的I1次迭代训练之后,我们对空间中的一些点进行采样,并计算它们的不确定性。然后,我们对不确定性高于 ε 的点进行聚类,聚类结果决定了下一阶段网络的增长。为了确保聚类是简单和可控的,我们使用k-means算法,k∈[2,4] 网络根据聚类中心增加 k 个分支;例如 Φ2 和 Φ3 。在下游,查询点被分配给具有最近集群中心的分支。
当场景变得复杂时,NeRF必须深化其网络,而我们可以简单地添加更多分支以获得相同的结果。我们将增长的网络一分为二有两个原因。首先,分割点将降低网络的复杂性,否则,需要对所有点使用更深的网络。其次,每个子网络只独立负责部分场景,使其更有效和更具适应性。
基于增长的网络经过多次迭代训练,然后聚类和增长。这个过程可以连续重复,直到大多数点的不确定度小于 ε 。为了在合理的时间内完成训练,指定递归NeRF总计增长3倍。每个增长步骤使用的 k 值可以不同,但默认情况下,将每个增长步骤的 k 设置为2。

在训练过程中,样本点可以在多个阶段退出,而在推理过程中的某一特定阶段,点只会退出一次。较早发现的可靠点将立即退出并被渲染。采用哪个分支取决于聚类的结果。将当前阶段的不确定点聚类,下一阶段将它们传递给具有相同结构的不同子分支。
输出网络结构在这里插入图片描述
alpha linear负责将特征解码为查询点的密度,克服这一问题的方法是将成长子网络的alpha线性权值初始化为与父网络相同的权值。这使得子网的密度生成网络可以继承父节点的部分密度信息,避免了这种不稳定性。

2.4递归渲染

在当前视图中,在当前阶段不确定性低于阈值的所有点都可以呈现相对模糊的图像。所有不确定度高于阈值的点进入下一阶段网络进行进一步细化,其他不确定度较低的点可退出该阶段。这些点与所有先前阶段的点一起可以呈现清晰的图像。
下图使用在不同阶段完成的点渲染图像,这些点被合并以在左上方形成最终图像。不确定性在图中被隐式可视化,其中早期阶段的低不确定性区域主要是具有简单结构的空白空间和表面
在这里插入图片描述
不同的查询点在不同的阶段早期完成,最后所有的点被聚合以形成左上角的渲染图像。

猜你喜欢

转载自blog.csdn.net/qq_44708206/article/details/128478205