2026-08-04

SAND: Spatially Adaptive Network Depth for Fast Sampling of Neural Implicit Surfaces(wu

SAND: Spatially Adaptive Network Depth for Fast Sampling of Neural Implicit Surfaces(雾

Clarifaction

AI泔水罢了,并非原论文真实复现,应付大作业的玩意

只不过神经网络表示模型及其渲染的内容是初学.逐层逼近似乎也算一个可以很有广泛引用的trick.

Introduction: Implicit neural representations

我们要解决的核心问题是如何快速准确的渲染一个模型.

传统的方法通常通过把模型存储为很多小三角面的并集,然后通过光线追踪或把面投影到屏幕上渲染.

隐式神经网络表达技术通过其他方法:设模型在空间中占据的点的集合为VV(严谨的话,可以是闭集),则可以定义一个标量场f(x)=sgn(x)dis(x,V)f(\vec x)=\mathrm{sgn}(x)\mathrm{dis}(x,\partial V)为点xx到模型表面的有符号距离(一般里面是负的外面是正的),则f(x)=0f(\vec x)=0确定了模型表面.

而隐式神经网络表示就是监督训练一个网络来拟合ff,来把传统的模型转化为训练好的权重数据.

渲染时常使用ray marching方法:光线投射的隐式神经网络版.

优势:无损表达光滑表面,利用泛化能力减小存储消耗

Results

Suzanne 猴头

6.2 万面。

网络RM 总时长 (s)RM 网络 (s)RM 零网络查询占比RM 平均深度RM 时长比
baseline (无纹理)2.862.470.0008.00
SAND (无纹理)10.174.710.8683.693.56x
SAND+纹理扩展10.815.060.8634.973.78x

R2 机器人

6.6 万面、13 个非封闭部件、2048² 贴图。实心化 v2 预处理。

网络RM 总时长 (s)RM 网络 (s)RM 零网络查询占比RM 平均深度RM 时长比
baseline (无纹理)3.803.480.0008.00
SAND (无纹理)9.824.420.9163.952.58x
SAND+纹理扩展9.364.410.8846.322.46x
模型网络参数量迭代数训练时长 (s)ms/iter最终 loss
Suzanne 猴头baseline (无纹理)461825100001603.86160.390.006387
Suzanne 猴头SAND (无纹理)465423100002829.50282.950.008446
Suzanne 猴头SAND+纹理扩展476988100002268.58226.860.492926
R2 机器人baseline (无纹理)461825100001600.17160.020.064338
R2 机器人SAND (无纹理)465423100002081.81208.180.008331
R2 机器人SAND+纹理扩展476988100002261.68226.170.349134

Explanation

baseline即直接同规模网络拟合距离场

为什么我们的比baseline慢?

  1. 最重要的:baseline在震荡同规模缺少octtree的策略,需要拟合整个空间,结果压根没收敛,导致平均marching次数远小于收敛了的sand
  2. baseline的batch开的比较大

Technique

论文使用的技术,和我们使用的技术

Octtree

在空间中建立八叉树,每个节点代表空间中的一个立方体,其八个儿子是把自己的空间分成八个子立方体.

建树时,当且仅当模型表面与当前立方体有交时进行细分,可以快速过滤掉模型内部/外部的空间,精细化训练模型表面附近的空间.使得拟合更为精细.

Octtree被用来

  • 生成神经网络的训练集:允许我们在靠近模型表面的空间采样,聚焦表面细节训练,不用拟合通过Octree过滤掉的空间远处的情况.
  • 决定网络推理深度,见后.

New Network Structure

传统的MLP拟合模型必须跑完整个深度,即使某处模型的表达很简单(比如,可线性表达的平面)

论文将MLP模型改造为T-MLP,MLP可以用如下公式表达:

xk=F(Wkxk1+bk)L=xnx\begin{gathered} \vec x_k=\operatorname{F}(W_k\vec x_{k-1}+\vec b_k) \\ L=\|\vec x_n-\vec x^\star\| \end{gathered}

论文改造为:

xk=F(Wkxk1+bk)y1=Ox1+bok>1,yk=(Ok,1xk+bk,1)(Ok,2xk+bk,2)+yk1Lk=ynyL=kLk\begin{aligned} \vec x_k&=\operatorname{F}(W_k\vec x_{k-1}+\vec b_k) \\ \vec y_1&=O \vec x_1+\vec b_o \\ \forall k>1,\vec y_k&=(O_{k,1}\vec x_k+\vec b_{k,1})*(O_{k,2}\vec x_k+\vec b_{k,2})+y_{k-1}\\ L_k&=\|\vec y_n-\vec y^\star\| \\ L&=\sum_k L_k \end{aligned}

显然这是改为后面的层拟合残差,这样越往后越是精确逼近.

注意激活函数F(x)F(x)一般取sinωx\sin \omega x第三行用的是对应项相乘.论文说是为了解决残差过小,且实验这样更优.

也许还有浅层神经网络不善于拟合点积的原因.

网络训练好,提前对每个Octtree叶子节点存储需要递推的层数:

  • 对近表面节点:在节点内取样,取对于给定误差,每个点所需推理层数的最大值,作为以后该节点内推理深度.
  • 对远表面节点:直接存节点内中心距离.

Texture

原论文是不带颜色的,我们给标准的距离场基础上增加了rgb通道的拟合,一起训练,使得支持渲染有纹理的模型.

Bugs

Bad Model

一开始选了个神秘奇异模型.注意到模型常常不是单个联通集.我们使用高斯环绕数判断点在内部还是外部,但仍然遇到了一些错综复杂的面使得内外混到一起了,导致渲染有穿模现象.

解决方案:换一个好模型?

更神秘了,我们修复了下面梯度方向的问题后上面问题的自动消失了.

Wrong Direction of Normal Vector

我们发现渲染结果有神秘噪点:当使用ray marching算法时,我们是通过有限差分求距离场的梯度算的表面法向量.而梯度方向可能朝外或朝内.朝内的表面无光照到表现为黑噪点.