91、MERF: Memory-Efficient Radiance Fields for Real-time View Synthesis in Unbounded Scenes

简介

主页:https://merf42.github.io
在这里插入图片描述
可在网页渲染的实时无界场景NeRF

结合稀疏特征网格和高分辨率2D特征平面,减少了先验稀疏体积辐射场的内存消耗,将场景坐标映射到有界体积中,同时仍然允许有效的射线盒相交

实现流程

基础知识

NeRF公式
在这里插入图片描述
SNeRG在训练期间使用大型 MLP,并在收敛到块稀疏网格后将其烘焙以进行实时渲染。
在这里插入图片描述
在这里插入图片描述
场景压缩Mip-NeRF360
在这里插入图片描述

MERF

在这里插入图片描述
对于沿射线的位置x:
(1)在低分辨率3D网格上查询它的八个相邻位置;把它投影到三个轴向平面上,然后在一个高分辨率的二维网格上查询每个投影的四个邻居。
(2)对8个低分辨率3D邻域进行评估和三线性插值,对3组4个高分辨率2D邻域进行评估和两线性插值,并将所得特征求和为单个特征向量 t。
(3)对特征向量进行分割并非线性映射为3个分量:密度 τ \tau τ、RGB颜色 c d c_d cd 和编码视图依赖效应的特征向量 f。

低分辨率 L × L × L L \times L \times L L×L×L 3D 网格 V,三个 2D R × R R \times R R×R 平面 P x , P y , P z P_x,P_y,P_z Px,Py,Pz分布表示 y z , x z , x y yz,xz,xy yz,xz,xy平面,网格和平面存储了 C = 4+ K 维特征向量,实验中,C=8,L=512,R=2048

任意空间点可表示为:
在这里插入图片描述
3D网格点 V : R 3 → R c V:R^3 \to R^c V:R3Rc,2D平面点 P i : R 2 → R c P_i:R^2 \to R^c Pi:R2Rc

通过网络获得密度 τ ~ ∈ R \tilde{\tau}\in R τ~R,颜色 c ~ d ∈ R 3 \tilde{c}_d \in R^3 c~dR3,视图依赖效应的特征向量 f ~ ∈ R K \tilde{f} \in R^K f~RK,之后使用归一化函数
在这里插入图片描述
σ \sigma σ 是对数sigmoid函数,将颜色和特征向量限制在(0,1),在插值和求和后使用归一化

在这里插入图片描述

左边为mip-NeRF的样本压缩,右边为MERF的空间压缩
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

建模高分辨率的大规模场景需要高容量的表示,在训练期间可能会消耗大量的内存。在训练期间消耗的内存明显多于呈现期间,因为训练需要为了反向传播而存储中间激活,并且需要为Adam优化器积累更高精度的每个参数统计信息。

训练需要的视频内存是渲染的12倍以上。因此,通过将MERF的低分辨率体素网格和高分辨率2D平面参数化为具有多分辨率哈希编码的mlp来优化其压缩表示

然而,将mlp的输出烘焙到离散网格上进行渲染会导致用于训练和渲染的表示之间的不匹配。之前的工作通过对烘焙表示进行微调来解决这个问题,但是微调需要将整个表示存储在内存中,并且受到上述可扩展性问题的影响。相反,在训练期间通过查询虚拟网格角处的mlp来模拟有限的网格分辨率,并使用高分辨率2D网格的双线性插值和低分辨率体素网格的三线性插值来插值结果输出

为了减少系统在渲染时的内存消耗,希望将网格中每个位置的每个维度量化为单个字节。然而,在训练后简单地量化优化的网格值会导致优化模型与用于渲染的模型之间的不匹配,从而导致渲染质量下降,如表2 (b)所示

解决方案是在优化过程中量化每个位置的变量值。也就是说,使用一个s形函数(φ)将它们非线性映射到[0,1]中,然后使用量化函数𝑞将它们量化为单个字节,最后将结果仿射映射到范围[−𝑚,𝑚],即:
在这里插入图片描述
其中选择𝑚= 14密度(使用指数非线性计算),𝑚= 7 漫射颜色和特征。注意,这只是量化存储在网格中的值,然后在线性插值和求和这些值之后应用方程6中的非线性。
在这里插入图片描述
其中∇ (·)是一个停止梯度,它可以防止梯度反向传播到其输入。这种停止梯度的使用允许通过将𝑞作为反向传递期间的恒等函数来获得不可微舍入函数的梯度,这被称为直通估计器。

训练后,评估并存储离散网格上的MLP输出以进行实时渲染。首先,计算一个二进制3D网格a,表示对任何训练图像有贡献的体素(即,如果体素对应于遮挡的内容,没有被任何训练射线采样,或者不透明度低,则不应存储它们)。为了填充A,渲染所有的训练射线,并从中提取一组加权点{(x,𝑤)},其中x是点的位置,𝑤是公式1中相关的体积渲染权值。请注意,当使用proposal-MLP进行采样时,这些点聚集在场景中的表面周围。

如果体渲染权重 w i w_i wi 和不透明度 a i a_i ai 超过阈值设置为0.005,将包围给定点 x i x_i xi的八个体素标记为已占用。为了尽可能积极地剔除,基于实时渲染器使用的样本之间的距离 σ i \sigma_i σi计算 a i a_i ai 回想一下,它以一个小的统一步长在收缩的空间中步进。正如 proposal- mlp通常建议的步骤大于 σ i \sigma_i σi,计算 a i a_i ai这种方式可以导致更好的剔除。然而,仍然保证在最终的采样方案中,贡献显著不透明度值( a i a_i ai> 0.005)的体素不会被剔除。请注意,虽然不透明度 a i a_i ai只取决于 x i x_i xi的密度,权重 w i w_i wi也取决于沿整个射线的密度,使 w i w_i wi的使用必须考虑可见性。观察到,基于实时渲染器步长的不透明度检查显着降低了标记为占用的体积的比例。请注意,这是在只考虑由proposal-MLP采样的位置中的体素已经实现的稀疏性的基础上增加的。相比之下,现有的烘焙管道通常不考虑proposal-mlp,并对均匀间隔的样本点进行可见性剔除。这通常会导致雾状的伪影和浮动的斑点,因为底层3D场在proposal-MLP未采样的区域中可以具有任意值。表2表明,proposal - mlp感知烘焙管道几乎是无损的

在计算二值网格A后,对三个高分辨率二维平面和低分辨率三维体素网格进行烘烤。遵循SNeRG,以块稀疏格式存储该体素网格,其中我们仅存储包含已占用体素的数据块。对于空白空间跳跃,我们使用最大池创建了多个低分辨率版本的二进制占用网格A。为了减少存储空间,将纹理编码为png。

当透射率值 T i T_i Ti(在公式1中定义)低于 2 × 1 0 − 4 2 × 10^{−4} 2×104时,终止射线沿射线行进

为了进一步减少渲染过程中的内存访问次数,将纹理分成密度和外观(包含漫射RGB颜色和特征向量)组件。当在任何位置访问MERF表示时,首先查询密度分量,如果从返回的密度计算的体素不透明度非零,则只读取相应的外观分量。此外,还通过优化延迟渲染MLP获得了4倍的额外加速。更具体地说,执行循环展开,修改内存布局以促进线性访问,并利用快速的mat4乘法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于使用了SNeRG 中引入的视图依赖模型,也继承了它的局限性:通过每条光线评估一次视图依赖颜色,无法忠实地为与半透明物体相交的光线建模视图依赖外观。此外,由于微型MLP的容量有限,它可能难以扩展到更大的场景或具有复杂反射的对象。

此外,仍然执行体积渲染,这将其限制在配备了足够强大的GPU的设备,如笔记本电脑,平板电脑或工作站。在更小、散热受限的设备(如手机或耳机)上运行模型将需要进一步减少内存和运行时间。

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值