谷歌发布SMERF,实时大场景视图合成,可移动设备上流畅运行

SMERF: Streamable Memory Efficient Radiance Fields for Real-Time Large-Scene Exploration

Google、图宾根大学联合提出SMERF,支持实时大场景视图合成,实现大场景中漫游。运行成本低,可在各设备浏览器中完成实时渲染。

项目主页:https://smerf-3d.github.io.

论文地址:https://arxiv.org/pdf/2312.07541.pdf

摘要

SMERF是一种实时视图合成方法,能够在大场景中实现高精度的渲染,并在普通设备上实时运行。它采用了分层模型划分和蒸馏训练策略,能够提高模型容量并控制计算和内存消耗。实验证明,SMERF在实时新视图合成方面超过了当前最先进的方法,并且比最先进的辐射场模型快三个数量级。它在各种普通设备上都能实现实时性能。

《谷歌发布SMERF,实时大场景视图合成,可移动设备上流畅运行》- 投稿作者:灵度智能 - 发布于:GetAI社区

简介

辐射场是重建和重新渲染真实世界3D场景的强大且易于优化的表示形式。与显式表示形式(如网格和点云)不同,辐射场通常存储为神经网络,并使用体积光线投射进行渲染。本文提出了一种可扩展的实时渲染大空间的方法,其质量接近于较慢的最先进模型,并且是第一个在普通硬件上实时渲染无限多房间空间的方法。本方法实现了不依赖场景大小的内存预算,同时不会影响图像质量或渲染速度。

本文提出了一种基于Memory-Efficient Radiance Fields (MERF)的分层模型架构,可以实现实时渲染大场景。该架构由多个MERF子模型组成,每个子模型专门处理场景中的一定区域。同时,该架构采用了分块的方式提高空间分辨率和更准确地建模视角相关效果。为了解决模型容量增加导致的可信重建问题,本文提出了一种新的蒸馏训练方法,可以提供丰富的颜色和几何信息的监督,包括对新视角的泛化和相机运动下的稳定结果。这两个创新的结合使得该模型可以实现与现有最先进技术相似的大场景实时渲染。

相关工作

提高NeRF的速度。尽管NeRF产生了令人信服的结果,但它在速度方面严重不足:训练模型需要数小时,渲染图像需要30秒。许多研究通过预计算NeRF的视图相关颜色和不透明度到稀疏的体积数据结构中来实现实时渲染。其他研究表明,通过使用大密度、散列或低阶体素网格参数化、小mlp网格或神经纹理的“多边形汤”来参数化辐射场,可以显著加快渲染和/或训练速度。或者,可以通过减少样本预算来加速渲染,同时仔细分配体积样本以保持质量。

提高NeRF的质量。社区已经通过许多不同的方式提高了NeRF重建质量,例如减轻混联,在不影响计算的情况下增加模型容量,建模无界场景,消除浮动。其他工作提高了对其他挑战的鲁棒性,如不准确的相机姿势,有限的监督,或异常值,如照明变化,瞬态物体和场景运动。

Rasterization-based View-Synthesis。早期的这种视图合成方法用三角形网格近似几何,并使用图像混合来模拟与视图相关的外观。后来的方法通过神经外观模型或神经网格重建来提高质量。最近的方法通过栅格化重叠网格和解码或合成产生的缓冲区来建立更详细的几何模型。

大规模NeRF。尽管NeRF模型擅长于再现物体和场景的局部区域,但它们很难有效地扩展到更大的场景。对于以目标为中心的捕获,可以通过将场景的无界背景区域重新参数化到有界域来改善这一点。更大的、多房间的场景可以通过对哈希网格支持的辐射场应用抗混叠技术来建模。另一种方法是将场景分成多个区域,并为每个区域训练一个单独的NeRF。

蒸馏和NeRF。1)将大型MLP提取到由微小MLP组成的网格中。2)将昂贵的NeRF MLP提取到一个小的MLP中。3)将的二次射线反弹提取到轻量级模型中进行反向渲染。

MERF

MERF是一种用于渲染3D场景的方法,它将3D位置映射到8维特征向量,并使用高分辨率三面板和低分辨率稀疏体素网格来参数化这个映射。通过对每个像素进行采样和体积渲染,MERF可以生成高质量的图像。此外,MERF还使用了收缩函数来处理远离焦点的场景内容。

模型

我们提出了一个层次结构。首先,我们将整个场景的坐标空间划分为一系列块,其中每个块由其自己的类似merf的表示建模。其次,我们为每个块引入了额外的嵌套分区,其中我们将每个类似merf的原语的依赖于视图的延迟外观MLP权重划分到它自己的分区集中。最后,我们使用特征门控(如下所述)来修改底层三平面和稀疏网格原语的特征聚合,以更有效地将子模型的有限容量重新分配到场景的详细部分。因此,我们的整体架构可以被认为是一个三层层次结构:基于相机原点,1)我们选择一个块的子模型,然后在该子模型中,2)我们插值以产生延迟的MLP参数,然后在对该MLP的输入进行特征化时,3)我们使用特征门控来选择性地启用高分辨率三平面。

这大大增加了模型的容量,而不会降低渲染速度或增加内存消耗:即使总存储需求随着子模型数量的增加而增加,也只需要一个子模型来渲染给定的帧。因此,当在图形加速器上实现时,我们的系统保持与MERF相当的适度资源需求。

坐标空间划分:虽然MERF提供了足够的容量来忠实地表示中等规模的场景,但我们发现使用一组三平面限制了它的容量并降低了图像质量。在大型场景中,许多表面点投射到相同的二维平面位置,因此表示难以同时表示多个表面的高频细节。虽然这可以通过简单地增加粗糙的3D网格和精细的2D三平面分辨率来改善,但这样做会显著增加内存消耗,并且在实践中代价高昂。

为了在不增加内存消耗的情况下增加模型容量,我们将场景粗略地细分为一个3D网格,并将每个网格单元与一个独立的子模型相关联,策略类似于Block-NeRF。每个子模型都被赋予自己的收缩函数,并负责以高细节表示其网格单元内的场景区域,而每个子模型单元外的区域则被粗略地建模。注意,整个场景仍然由每个子模型表示——子模型的不同之处在于场景的哪个区域位于每个子模型的收缩区域的内部或外部。因此,呈现图像只需要查询单个子模型,这意味着一次只能有一个子模型在内存中。

《谷歌发布SMERF,实时大场景视图合成,可移动设备上流畅运行》- 投稿作者:灵度智能 - 发布于:GetAI社区

我们将相机到子模型的分配过程设计为应用于训练集之外的相机,例如在测试集渲染期间。这可以实现广泛的功能,包括光线抖动,子模型重新分配,共识损失,任意测试摄像机放置,以及乒乓缓冲。

延迟外观网络分区:分区层次结构中的第二级涉及延迟呈现模型。我们将每个子模型的域统一细分为沿每个轴有P个顶点的网格。对于每个cell,我们关联一组单独的网络参数θ。我们通过基于摄像机原点0的三线性插值为摄像机分配参数,

《谷歌发布SMERF,实时大场景视图合成,可移动设备上流畅运行》- 投稿作者:灵度智能 - 发布于:GetAI社区

与我们在空间划分中使用的最近邻插值不同,三线性插值的使用对于防止视点相关MLP参数的混叠至关重要,当相机在空间中移动时,这种混叠会在镜面高光中出现明显的“弹出”伪影。参数插值后,根据式(4)对视相关颜色进行解码。

由于与视图相关的MLP的大小与总表示大小相比可以忽略不计,因此延迟的网络分区对内存消耗或存储影响几乎没有影响。因此,这种技术几乎免费地增加了模型容量。这与坐标空间分区形成对比,后者会显著增加存储大小。我们发现,坐标空间和延迟网络划分的结合对于有效提高空间和视图相关的分辨率至关重要。

《谷歌发布SMERF,实时大场景视图合成,可移动设备上流畅运行》- 投稿作者:灵度智能 - 发布于:GetAI社区

特征门控:我们层次结构的最后一个层次是MERF的粗3D体素网格V和三个高分辨率三平面。我们选择使用低分辨率3D特征来“闸门”高分辨率特征:如果高分辨率特征对给定的3D坐标有价值,就应该使用它们,否则就应该忽略它们,使用更平滑的低分辨率特征。为此,我们对特征聚合进行如下修改:在对4个特征向量求和之前,将从3D体素网格中查询到的8维特征向量的最后一个分量分离出来,并将其相乘到每个三平面特征中:

《谷歌发布SMERF,实时大场景视图合成,可移动设备上流畅运行》- 投稿作者:灵度智能 - 发布于:GetAI社区

然后,我们通过连接聚合特征t (x)和体素网格特征V(x)来构建最终特征:

《谷歌发布SMERF,实时大场景视图合成,可移动设备上流畅运行》- 投稿作者:灵度智能 - 发布于:GetAI社区

直观地说,这激励模型在渲染低频内容(如无特征的白墙)时利用低分辨率体素网格来禁用高分辨率三平面,并使模型可以自由地专注于场景的细节部分。这种变化也可以被认为是一种“关注”,因为乘法交互被用来确定模型何时应该“关注”三面特征。由于增加了MLP的第一个权重矩阵中的行数,这个更改稍微影响了我们模型的内存和速度,但是它的实际影响可以忽略不计。

训练

辐射场蒸馏

我们使用了一种基于“学生/教师”蒸馏的方法来训练MERF模型,以实现对新视角的泛化。该方法通过模仿已经训练好的高质量Zip-NeRF模型来获得有用的归纳偏差,并避免手动调整超参数以最大化泛化能力。该方法通过分别蒸馏外观和几何信息来监督模型的训练。外观信息通过最小化预测图像块与教师模型渲染的图像块之间的差异来实现,而几何信息则通过查询教师模型来获得。该方法在保持质量的同时,渲染速度比Zip-NeRF快三个数量级。

我们还使用了一种基于密度的体积渲染方法,通过将教师模型的权重作为上下界来惩罚学生模型的权重,以保证两个模型在可见区域的密度场一致。与 mip-NeRF 360 不同的是,本文中的学生模型可以选择使用相同的区间集合,从而简化了损失函数的计算。

《谷歌发布SMERF,实时大场景视图合成,可移动设备上流畅运行》- 投稿作者:灵度智能 - 发布于:GetAI社区

数据增强

关于在训练学生模型时如何选择有用的随机光线的问题,我们使用均匀随机采样光线的方法会导致重建质量较差,因为许多光线起源于物体内部或墙壁,或者指向场景中不重要或观察较少的部分。使用与训练教师模型的输入图像对应的相机光线也效果不佳,因为这些输入图像只代表了场景可能视角的一小部分。因此,我们采用了一种折中的方法,使用输入相机光线的随机扰动版本,从而在提高泛化能力的同时,仍将学生模型的注意力集中在相机操作员认为相关的场景部分。具体生成训练光线的方法是,首先从教师数据集中随机选择一条光线,该光线由起点o和方向d参数化。然后对起点进行各向同性高斯噪声扰动,并从光线方向向量的ϵ-邻域中均匀采样,得到一条光线(oˆ,d)。

《谷歌发布SMERF,实时大场景视图合成,可移动设备上流畅运行》- 投稿作者:灵度智能 - 发布于:GetAI社区

子模型的一致性

在使用单个教师模型的情况下,坐标空间分割意味着我们实际上是在并行训练多个独立的学生子模型。这在子模型之间的一致性方面提出了挑战,我们不希望从一个子模型切换到另一个子模型时场景的外观突然改变。过去通过从多个子模型进行渲染并混合它们的结果来改善这个问题,但这种解决方案会显著减慢渲染速度,并且需要同时在内存中存储多个子模型。相比之下,为了性能和内存限制,我们的目标是在渲染每一帧时只存储和查询一个子模型。

为了鼓励相邻的子模型对于给定的相机光线做出类似的预测,我们引入了子模型之间的光度一致性损失。在训练过程中,我们对批次中的每个相机光线进行两次渲染:一次使用其“home”子模型s(光线起点所在的子模型),再次使用随机选择的相邻子模型s^。然后我们在这两个渲染的颜色之间施加一个简单的损失,从而鼓励它们相互类似。

此外,在构建生成的训练光线的批次时,我们要确保将每个光线分配给能够显著提高重建质量的子模型。

渲染

通过MERF算法生成和存储预计算的资产,用于实时渲染。为每个子模型生成独立的烘焙资产,存储为gzip压缩的二进制文件。

设计了实时渲染引擎,通过训练多个子模型来限制内存需求。通过热交换子模型来隐藏网络延迟,最多只需同时加载两个子模型。使用OpenGL片段着色器进行光线行进和延迟渲染,使用距离网格加速光线行进。插值延迟外观网络参数对帧渲染时间影响很小。

实验

我们在四个大型场景上进行了评估,结果表明,本方法的重建精度明显优于其他方法。此外,本方法还可以在智能手机和笔记本电脑上实时运行,但分辨率会降低。该方法的贡献包括延迟外观网络分区和特征门控等。

《谷歌发布SMERF,实时大场景视图合成,可移动设备上流畅运行》- 投稿作者:灵度智能 - 发布于:GetAI社区

《谷歌发布SMERF,实时大场景视图合成,可移动设备上流畅运行》- 投稿作者:灵度智能 - 发布于:GetAI社区

我们的方法在不同空间分辨率下展示了其质量和内存特性,并与一系列MERF变体进行了比较。与基线方法相比,我们的方法的内存表示大小受到两个最大子模型大小的限制。同时,我们的方法在所有分辨率下都实现了严格更高的质量,随着坐标空间分区数量的增加,质量通常会继续提高。我们通过图9展示了我们方法在子模型一致性方面的有效性。尽管四个不同的子模型渲染了相同的视图,但我们发现它们的输出几乎无法区分。然而,我们的方法也存在一些限制。尽管在重建质量和内存使用方面表现出色,但它的存储成本较高。此外,我们的方法还需要进行相当大的训练成本。总的来说,我们的模型能够在各种硬件平台上以实时速率运行,并在所有实时辐射场方法中产生最先进的质量渲染。我们鼓励读者访问我们项目页面上的演示来亲自体验这种实时渲染。

《谷歌发布SMERF,实时大场景视图合成,可移动设备上流畅运行》- 投稿作者:灵度智能 - 发布于:GetAI社区

总结

SMERF是一种适用于实时大场景视图合成的流式、内存高效的辐射场表示方法。该方法在资源受限的消费设备上实现了实时渲染,并且在中等和大型场景上与现有的实时方法相比,达到了最先进的质量水平。通过将高保真的Zip-NeRF教师融合到基于MERF的分层学生中,我们实现了这一目标。我们的方法将场景细分为独立的子模型,并进一步细分为一组延迟渲染网络。因此,只需要一个子模型和一个局部邻域的延迟网络参数就可以渲染目标视图。我们还对MERF的查看器进行了一系列改进,将帧率提高了70%以上。因此,内存和计算要求与MERF保持一致,同时显著提高了质量和渲染速度。

0

评论0

请先
显示验证码