【三维重建】SMERF:内存高效的辐射场--实时大场景重建(论文解读)

题目:SMERF: Streamable Memory Efficient Radiance Fields for Real-Time Large-Scene Exploration
来源:Google DeepMind; Google Research
项目:https://smerf-3d.github.io.



摘要

  最近的实时视图合成技术保真度和速度方面取得了迅速的进展。对比两种方法: 易于栅格化的显式场景表示和建立在射线行进上的神经场之间出现了紧张关系,后者在质量上表现好,却难以实时。

  SMERF是一种视图合成方法,在3.5 mm3 的实时大场景中实现了最先进的精度。主要有两个贡献: 层次模型划分方案 ,它在限制计算和内存消耗的同时增加了模型容量,以及 蒸馏训练策略,同时产生高保真度和内部一致性。SMERF可以在网络浏览器中实现完全6个自由度(6个自由度)的导航,并在普通智能手机和笔记本电脑上进行实时渲染。(实验表明)超过当前最先进的实时新视图合成0.78 dB标准基准和1.78 dB大型场景, 渲染要快三个数量级(比先进的辐射场模型)。


一、前言

  与网格和点云等显式表示不同,辐射场通常被存储为神经网络,并使用体渲染重建真实世界的3D场景。它可以简洁地表示复杂的几何形状和视图依赖的效果,但在质量、速度或表示大小方面与Gaussian Splatting 等其他方法形成竞争

  作为辐射场的扩展SMERF能够实时渲染更高保真度的大空间:使用内存高效辐射字段(MERF)的变体,一种用于实时视图合成的紧凑表示,作为核心构建块。我们构建了一个由自包含的MERF子模型组成了层次模型架构,每个子模型都专门用于场景中的一个视点区域。这极大地增加了算力有限的模型容量。SMERF将子模型填充场景,以提高空间分辨率,并在每个子模型区域内填充(tile)参数,以更准确地建模视图相关的效果。

  模型容量的增加是一把双刃剑,小模型的架构,会缺乏先进大模型的归纳偏见(对合理重建至关重要)。因此,我们引入了一种新的蒸馏训练过程,它提供了丰富的颜色和几何形状的监督,包括泛化到新的视点和在摄像机运动下的稳定结果。

二、相关工作

2.1 提高NeRF的速度

  许多工作通过预计算NeRF的视图相关的颜色和稀疏体积数据结构的 opacities来实时渲染。其他研究表明,渲染/训练可以通过参数化具有大密集[56,68,77]的辐射场、hash[37]或低秩的体素网格参数化[9,10]、小MLPs [47]网格或神经纹理“polygon soup”来显著加速。或者,可以通过减少样本预算来加速渲染,同时仔细分配体积样本来保持质量。

  一般来说,在渲染时间和内存消耗之间存在着一种紧张关系。 MERF 使用稀疏和低秩体素网格表示的组合从而能够在有限的内存预算下实时渲染无边界场景

2.2 提高NeRF的质量

  与此同时,社区以许多不同的方式提高了NeRF重建质量,如减轻混叠[4,23],在不影响计算[37]的情况下增加模型容量,建模无界场景[5],以及消除floaters[44]。其他工作提高了对其他挑战的鲁棒性,如不准确的相机姿态[29,41,54],有限的监督[39,50,69,74],或异常值,如照明变化、瞬态物体[32,49]和场景运动[24,40]

  与我们的工作最相关的是Zip-NeRF,它使用多采样来实现快速基于网格的表示的抗混叠。我们 将高保真的Zip-NeRF模型提炼为一组基于MERF的子模型的方法,从而实现质量和实时渲染。还结合了改变照明[32]的latent code和减轻floaters[44]的梯度比例,对渲染速度没有影响

2.3 基于栅格化的视图-合成

  不同于NeRF 的per-pixel ray-marching, 另一种范例是利用专门的GPU硬件的 per-primitive 光栅化:早期方法用三角形mesh近似几何,并使用图像blending 来建模与视图相关的外观。后来的方法通过神经外观模型[20,30,31]或神经网格重建[45,51,65,75]提高了质量。最近的方法,通过栅格化重叠的mesh,解码[63]或合成结果缓冲[11]来建模更详细的几何模型。此外,对于有限的观测量,透明度可以用分层表示来建模,如多平面图像(multi-plane images)。

  GPU硬件还加速了基于点的表示的呈现。早期的方法通过使用U-Net [1,52,67]解码稀疏点云来合成视图。最近的研究表明,基于软点的表示(soft point-based:通过将每个点扩展到一个带有软重构内核的磁盘中)易于进行基于梯度的优化,并可以建模半透明度和视觉依赖的外观

   3D Gaussian Splatting(3DGS) 提高了视觉保真度,简化了初始化,改善了基于软点的表示的运行时间,但优化仍然具有挑战性,需要仔细选择启发式进行点分配。这在大型场景中很明显,因为许多区域缺乏足够的点密度。虽然最近的重新实现在移动端[28,82]呈现了3DGS模型,但它们依赖于近似来排序顺序和视图依赖性

2.4 大场景的NeRF

  NeRF很难扩展到大场景:对于以对象为中心的重建,通过将场景的无界背景区域重新参数化为有界域来改善,如Mip-NeRF、NeRF++。通过应用抗混叠技术,如Zip-NeRF、VR-NeRF对更大的多房间场景建模。另一种方法是将场景分割成多个区域,并为每个区域训练一个单独的NeRF, 如[DeRF, Mega-NERF, ScaNeRF]。这个想法还促进了实时渲染对象[47]和房间尺度场景[70]的能力。然而,要扩展到超大的场景,如城市街区或整个城市环境,就需要根据摄像机的位置划分为冗余的、重叠的场景volumes[34,58]。现有的模型需要昂贵的渲染和来自多个子模型的图像混合,但 SMERF只需要一个子模型来渲染给定的相机,并在训练期间利用正则化来鼓励相互一致性

2.5 蒸馏和NeRF

  深度学习中的蒸馏——训练小的学生模型,来近似大的教师的输出。在NeRF在各种上下文中应用:(1)蒸馏大MLP为一个小MLP的Grid[47],(2)蒸馏一个复杂的NeRF MLP到一个小“proposal”MLP来限定密度[5]。或(3)蒸馏昂贵的第二条射线,反回到轻量级模型来逆渲染[55]。此外,蒸馏法还通过将整个NeRF场景转换为光场模型[2,8,18,64]或表面表示[45]来消除昂贵的射线marching,并促进实时渲染。

  本文将一个大的、高质量的Zip-NeRF模型的外观和几何形状,提炼成一个类似于MERF的子模型家族 。与我们的工作同时, Hybrid-NeRF[61]也使用蒸馏进行实时视图合成,尽管是一个有符号的距离场。

三、MERF模型的回顾

  MERF使用了从3D位置 x∈R3 ,到特征向量 t∈R8 的映射

  MERF使用高分辨率三平面(Px,Py,Pz∈RR×R×8)和低分辨率稀疏体素网格 V∈RL×L×L×8 的组合来参数化这个映射 。将一个查询点x投影到三个轴对齐的平面上,并通过双线性插值来查询底层的二维特征网格。此外,还从稀疏体素网格中提取了一个三线性样本。然后将得到的四个8维向量相加在一起:

在这里插入图片描述
然后将这个向量解压缩成三个部分,分别进行独立校正,以产生密度(标量)、diffuse RGB颜色和编码视图依赖的特征向量:

在这里插入图片描述

  为了渲染一个像素,从该像素的投影中心沿观察方向 o 投射一条光线 d,并以一组距离 {ti} 采样,以沿光线生成一组点 xi = o + tid。在NeRF中,密度 i} 被转换为由体渲染积分近似的alpha合成权值 {wi}

在这里插入图片描述

  其中,δi = ti+1−ti 为相邻采样点之间的距离。alpha合成后,使用SNeRG [21]的 deferred shading 方法解码,利用小的MLP:h(·;θ) 得到最终像素颜色:

在这里插入图片描述

  在无限的场景中,遥远的内容可以被粗略地建模。为了获得随着距离场景焦点的距离而下降的分辨率,MERF在查询特征字段之前,对每个空间位置x应用一个收缩函数

在这里插入图片描述

四、SMERF模型

  基于MERF,提出一个层次化的架构:

第一步空间划分:将整个场景的坐标空间划分为一系列 blocks,其中每个blocks 都由自己的MERF的表示来建模。

第二步,对每个块引入一个额外的嵌套(nested)分区,其中我们将每个(类似于MERF 原型(primitive)的依赖于视图的延迟外观MLP权值),划分为它自己的分区集。

第三步,使用特征门控 feature gating(下面会解释)来修改底层的三平面和稀疏网格原型的特征聚合,有效地将子模型的有限容量,重新分配到场景的详细部分。

因此,整体架构可以被认为是一个三级层次结构:基于相机的初始值,(1)我们选择一个块的子模型,然后在子模型内,插值产生延迟MLP参数,然后将输入特征化来输入此MLP,(3)我们使用特征门控,有选择性地启用高分辨率三平面。

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

4.1 坐标空间划分

  虽然MERF 提供了足够的容量,来表示中等规模的场景,但使用单一的三平面限制了它的容量并降低了图像质量。在大型场景中,许多表面点投影到相同的二维平面位置,因此表示方法,难以同时表示多个表面的高频细节。通过简单地增加粗糙的3D网格和精细的二维三平面分辨率可以改善,但显著增加内存消耗,难以实践。

  为了在不增加内存消耗的情况下增加模型容量采用类似于Block-NeRF [58]的策略,将场景粗略划分为一个三维网格,将每个网格单元与一个独立的子模型关联起来。每个子模型都被分配自己的收缩函数(公式4下面的公式5),来详细表示网格单元内的场景区域,而子模型单元外的区域被粗略地建模。请注意,子模型的不同之处仅在于场景的哪个区域位于每个子模型的收缩区域的内部或外部。因此,渲染一个图像只需要查询单个子模型,这意味着一次内存中必须只有一个子模型。

  形式上,将所有摄像机位置,移动并缩放到一个 [− K 2 \frac {K}{2} 2K K 2 \frac {K}{2} 2K]3 立方体内,然后将这个立方体分割成 K3 相同且紧密排列的子体素 [−1,1]3。通过识别每个摄像机原点o所在的相关子体素 Rk,将训练摄像机分配给子模型{Sk}

在这里插入图片描述
我们设计了摄像机到子模型的分配程序,以应用于训练集之外的摄像机,例如在测试集渲染期间。这实现了广泛的特性,包括射线抖动、子模型重新分配、 consensus损失、任意测试摄像机放置以及第5和第6节所述的乒乓缓冲。

  不同于简单将所有K3 子体素实例化为子模型,而是将场景限制在包含训练集中至少一个摄像机的子体素中。由于大多数场景都是室外建筑或单层建筑,这将实例化的子模型的数量从K3减少到O(K2

4.2 延迟的(Deferred) 外观网络分区

  分区层次结构中的第二级涉及延迟渲染模型。MERF使用了一个小型的MLP来解码如等式(4)所述的从混合特征中获得的与视图相关的颜色。其能力往往不足以准确地再现较大场景中常见的复杂的视图依赖效应。简单地增加网络大小,会显著降低渲染速度。

  相反,SMERF平均将每个子模型的空间,细分为一个沿每个轴有P个顶点的网格。对于每个单元格 (u,v,w)∈{1,…,P}3,关联一组独立的网络参数 θuvw。基于相机原点o,通过三线性插值为相机分配参数:

在这里插入图片描述
三线性插值对于防止与视图相关的MLP参数的混叠至关重要(与空间划分中的最近邻域插值不同)

deferred network 分区对内存消耗或存储的影响几乎没有影响。这与坐标空间分区形成了对比,后者显著增加了存储大小。我们发现,坐标空间和deferred network 划分的联合,分别是有效提高空间和视图相关的分辨率的关键。这两种分区形式的可视化情况见图2

在这里插入图片描述

图2.SMERF在场景中的坐标系:K = 3的坐标空间分区,和P = 4延迟外观网络子分区每个分区都能够表示整个场景,同时将其大部分模型容量分配给其相应的分区。在每个分区中,我们实例化一组空间锚定的MLP权值 {θi,j} 参数化延迟外观模型,我们在渲染过程中作为相机原点的函数进行三值插值。(a)中,使用场景分区,在世界坐标下呈现整个场景(突出显示了两个子模型)。(b)和(c )从两个子模型在其相应的收缩坐标系中的视角中,渲染相同的场景。当摄像机原点o位于子模型的分区内时,(b)可视化渲染和参数插值过程,当它位于外部时,(c )可视化相同的过程。

4.3 Feature Gating 特征门控

  层次结构中的最后一级,是MERF的粗3D体素网格V,以及三个高分辨率三平面(Px,Py,Pz。MERF中,每个三维位置都与一个8维特征向量关联(插值求和,见公式(1)),产生的特征受限于,简单的合并(纠缠)高分辨率和低分辨率信息。

  本文使用低分辨率的3D特征来“gate”高分辨率特征:如果高分辨率特征为给定的3D坐标增加了价值,就应该使用它们,否则就应该忽略它们,使用更平滑、低分辨率的特征。为此,我们对特征聚合进行了如下修改:在将4个特征向量求和之前,我们将从三维体素网格中查询到的8维特征向量的最后一个分量 V(x)8 分割出来,并将其乘以每个三平面特征:

在这里插入图片描述

然后,拼接聚合的特征 t ^ \hat{t} t^(x) 和体素网格特征 V(x)来构建最终特征:

在这里插入图片描述
  这激励了模型利用低分辨率体素网格,在呈现低分辨率内容时禁用高分辨率三平面,如无特征的白色墙壁,并让模型可以自由地关注场景的详细部分。这种变化也可以被认为是一种“注意力”,因为一种乘法交互作用被用来确定模型何时应该“注意”三平面特征[62]。通过增加我们的MLP的第一个权重矩阵中的行数,这种变化会略微影响我们的模型的内存和速度。

五、训练

5.1 辐射场蒸馏

  像MERF这样的Nerf模型是“从头开始”训练,在一组输入图像上,最小化光度损失。训练时将模型正则化,以提高对新视角的泛化。如ZipNeRF(大型、多房间场景)。SMERF蒸馏一个训练过的最先进的辐射场模型(一种高质量的Zip-NeRF变体,训练中冻结;见附录)。

  蒸馏优点:继承了教师模型的有益的归纳偏差,避免了手动调整超参数以最大限度地提高泛化的需要,并使能够恢复全局一致的局部表示。

  我们通过单独提取参考亮度场的外观和几何形状来监督我们的模型。请注意,在优化过程中,教师模型的权重是冻结的。有关可视化信息见图3。

表观
  监督信号:模型预测的patch和Groundtruth图像patch之间的光度差异。具体为3×3 patch,来提取外观。学生patch C和对应的教师patch C∗之间,采用了RMSE和DSSIM 度量的加权组合

在这里插入图片描述

几何

  提炼几何,首先用给定的射线(起点和方向)询问老师,产生一组沿射线 {(( ti, ti+1),wiT)} 的加权间隔,其中 (ti, ti+1) 是对应于间隔i的射线的度量距离,wiT 是教师根据公式3对应的alpha组合权重。区间 i 的权重反映了相应的区间对最终预测辐射的贡献程度,用于提炼给学生模型

  对学生权重 {wSi } 施加了一个类似于mip-NeRF360的损失函数:对教师模型的上界和下界所施加的额外质量的绝对值的惩罚。由于学生和教师模型使用相同的一组间隔,这种损失简化为二者权重之间的绝对差异

在这里插入图片描述
体渲染权重是体积密度的函数(公式3),该损失间接地鼓励了学生和教师的密度场在场景的可见区域相互一致

5.2 数据增强

  选择有用的随机射线 整个场景中均匀随机采样光线,会导致较差的重建质量(因为许多此类光线来自物体或墙壁内部,或指向场景中不重要或观察不足的部分)。使用教师模型的数据集中像素对应的摄像机光线的表现也很差,因为这些输入图像代表了场景可能视图的一小部分子集。 SMERF采用了一种折衷的方法,使用随机扰动版本的输入相机光线,从而产生一种“数据增强”,提高泛化,同时仍然将学生模型的注意力集中在相机操作员认为相关的场景部分。

   生成训练射线 ,首先从教师数据集中,随机选择一条参数化射线。然后用各向同性高斯噪声抖动原点,并从射线方向向量的ϵ邻域中抽取一个均匀的样本,以获得一条射线( o ^ \hat{o} o^ d ^ \hat{d} d^):

在这里插入图片描述

  实验设置 σ = 0.03和ϵ=0.03(σ是在标准化场景坐标中定义的,其中所有的输入摄像机都位于[−1,1]3 立方体内)。可视化见图4。

在这里插入图片描述

5.3 子模型的一致性

  坐标空间划分意味着,并行训练多个独立的学生子模型——测试时,我们不希望场景的外观在从一个子模型切换到另一个子模型时突然发生变化。这个问题在过去通过从多个子模型进行渲染并混合它们的结果得到了改善,但是该解决方案显著降低了渲染速度,并且要求多个子模型同时在内存中。相比之下,为了性能和内存限制,我们的目标是渲染每个帧,同时只存储和查询单个子模型。

  为鼓励相邻的子模型,对同一相机射线做出类似的预测,引入了子模型之间的光度一致性损失。训练时渲染batch中射线两次:一次使用它的“home”子模型(射线原点位于内部的子模型),另一次使用随机选择的相邻子模型 s ^ \hat{s} s^
在这里插入图片描述
  SMERF将每个射线分配给一个子模型,这将有意义地提高重建质量。直观地说,我们希望光线能为它们的“home”子模型增加最大的价值,但来自相邻子模型的光线也可以通过在每个子模型的内部提供场景内容的额外视角来提供价值。因此,在一个batch中,首先分配每个训练射线它的“home”子模型,然后将20%的批次随机重新分配给一个随机选择的相邻子模型

六、渲染

6.1 Baking

  训练后,模型生成并存储一组,用于实时渲染的预计算资产(assets)。遵循MERF来bake assets,但稍微增加淘汰步骤,丢弃没有贡献的体素。

  每个子模型产生一个独立的bake assets(类似于MERF): 特性映射的三个高分辨率二维平面和低分辨率稀疏体素网格,存储为quantized byte arrays,剩下的延迟网络参数存储为floating point arrays。我们将这些资产存储为 gzip-compressed binary blobs,比PNG图像略小一些,解码速度也要快得多。

6.2 实时查看器

  在bake assets 之后,使用一个精心设计的实时渲染引擎来渲染模型,用于各种商品硬件上操作,包括智能手机、笔记本电脑和台式机。我们主要通过设计决定训练到K3 个单独的子模型来实现较低的资源使用,这样每个子模型都包含一个对整个场景的收缩表示。因此,在任何时间点,内存中只需要一个子模型(无论哪个子模型包含了被呈现的视图的投影中心

  隐藏网络延迟,当用户交互式地探索环境,摄像机移动到一个新的子卷时,相应的子模型被加载到主机内存中,而前一个子模型,其中包括这个新的相邻区域的几何形状的近似模型,继续用于渲染。一旦新的子模型可用,我们就会将它转移到视频内存中,并开始使用它进行渲染。因此,峰值GPU内存最多被限制为两个子模型:一个被主动呈现,另一个被加载到内存中。我们通过使用最近使用的缓存方案将内存中加载的子模型挤出内存,进一步限制主机内存的使用。

  纹理查找用于检索特征表示和密度,OpenGL片段着色器用于光线行进和延迟渲染。不同于MERF使用距离网格,加速射线在自由空间中的marching MERF使用几个二进制占用网格来确定一个体素是否被占用,SMERF使用一个距离网格来存储到最近的占用体素的8位距离。因此,渲染器可以快速跳过每条射线的大距离,而不需要昂贵的分层射线/box 交叉测试。因此,我们的渲染器在保证相同结果的同时获得了显著更高的帧率

  虽然插值我们的延迟外观网络参数需要额外的计算,但这最终对帧渲染时间的影响可以忽略不计。插值过程只需要每帧执行一次,并且对图像中的所有像素都是通用的。在实践中,我们在执行片段着色器之前在CPU上执行这个插值

七、实验

  模型与两种最先进的方法: 3D高斯Splatting和Zip-NeRF。Zip-NeRF在任何辐射场模型中产生最高质量的渲染,但速度太慢,在实时环境中不太有用,而3DGS渲染速度快,但产生的渲染质量比Zip-NeRF低。实验证明SMERF:(1)在gpu可用的运行时与3DGS相当,(2)能够在广泛的商品硬件平台上实时运行,(3)明显比3DGS更准确。我们的目标并不是要在质量方面优于Zip-NeRF——Zip-NeRF作为教师模型,代表图像质量的上限

7.1 重建质量

  我们首先在Zip-NeRF引入的四个大场景上评估了我们的方法:柏林、阿拉米达、伦敦和纽约。每个场景都是用一个180◦的鱼眼镜头,用1000-2000张照片拍摄下来的。为了与3DGS进行苹果应用比较,我们将照片裁剪到110◦的视场,并使用COLMAP [53]重新估计相机参数。然后,根据场景,将图像降采样到1392×793和2000×1140之间的分辨率。
在这里插入图片描述

  从表1的结果可以看出,对于中等程度的空间细分K,我们的方法的精度明显高于MERF和3DGS。随着K的增加,我们的模型的重建精度有所提高,并接近其Zip-NeRF老师,在K = 5时的差距小于0.1 PSNR和0.01 SSIM。

在这里插入图片描述

与其他方法的定性对比

  在无界室内和室外场景的mip-NeRF 360数据集上进一步评估了我们的方法。这些场景比Zip-NeRF数据集中的场景要小得多,因此,为了实现高质量的结果,无需进行空间划分。如表2所示,我们的模型的K = 1版本在图像质量方面优于所有之前的实时模型,其渲染速度与3DGS相当。
在这里插入图片描述

7.2 渲染速度 vs 消融实验

直接一张图表示速度(数据集上求平均):
在这里插入图片描述


消融实验中,去掉一些环节后的指标变化:在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

7.3 局限性

  虽然SMERF在重建质量和内存使用方面表现出色,但它的存储成本很高。在实时查看器中,这将以加载事件和高网络使用率的形式出现。此外还有训练成本:除了教师训练成本外,我们还根据数据集在8x V100或16xA100,100gpu上优化了100-200,000步的方法。在重建质量方面,我们的方法的平均性能优于3DGS,但在所有场景的所有部分的细节都不普遍较高。我们将此归因于通过我们的表示而强加给场景上的体素结构









d \sqrt{d} d 1 0.24 \frac {1}{0.24} 0.241 x ˉ \bar{x} xˉ x ^ \hat{x} x^ x ~ \tilde{x} x~ ϵ \epsilon ϵ
ϕ \phi ϕ

  
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值