Instant-NGP


  • Description:Instant-NGP 论文笔记 (读 arXiv 全文后所写) — 多分辨率哈希编码 + 小 MLP,把 NeRF 训练从数小时缩到数秒。多个 NeRF-SLAM (Orbeez/GO-SLAM/NeRF-SLAM) 的实时渲染后端
  • Paper:Müller, T., Evans, A., Schied, C., & Keller, A. (2022). Instant Neural Graphics Primitives with a Multiresolution Hash Encoding. ACM ToG (SIGGRAPH). arXiv:2201.05989
  • K2E-B ID:[K2E-B-G6-2]
  • Max3 PDF[K2E] SLAM/[K2E-B-G] Geometry & Rendering/[K2E-B-G6] Radiance Field Foundations/[K2E-B-G6-2][2022] Instant-NGP Multiresolution Hash Encoding.pdf
  • Notion ID:(待创建)
  • Created:2024-03-31
  • Updated:2026-06-02
  • License转载欢迎 — 请署名 Yu Zhang 并链回 yuzhang.io 原文

Table of Contents


1. Instant-NGP 概述

Instant-NGP (Müller et al. 2022, NVIDIA) — 用多分辨率哈希编码 (multiresolution hash encoding) 替代 NeRF 的位置编码 + 大 MLP,把 NeRF 训练从数小时缩到 5-15 秒

四个任务验证:NeRF、gigapixel 图像、SDF、神经辐射缓存 (NRC)。在 SLAM 圈,它是 Orbeez-SLAM / GO-SLAM / NeRF-SLAM 等的实时渲染后端 (替掉慢的原版 NeRF)。

NeRF 基础见 NeRF 那篇 (G6-1);本笔记读 arXiv 全文整理。

2. 多分辨率哈希编码

核心:用 $L$ 个可训练哈希表,每个对应不同分辨率的空间网格,配一个小 MLP

分辨率几何级数

$$ N_l = \lfloor N_{\min} \cdot b^l \rfloor, \quad b = \exp\left( \frac{\ln N_{\max} - \ln N_{\min}}{L - 1} \right) $$

典型 $L = 16$ 层,$N_{\min} = 16$ 到 $N_{\max} = 512 \sim 524288$。

每层查找

对输入坐标 $\mathbf{x}$,每层:

  1. 按该层分辨率 $N_l$ 缩放 $\mathbf{x}$,找包围它的体素 8 个角点
  2. 对每个角点整数坐标做哈希:$h(\mathbf{x}) = \left( \bigoplus_i x_i \pi_i \right) \mod T$
  3. 从哈希表 $\theta_l$ 取 $F$ 维特征向量
  4. 按体素内相对位置三线性插值特征
  5. 拼接所有 $L$ 层输出 ($L \cdot F$ 维) + 辅助输入 → 喂给小 MLP

哈希函数用质数 XOR ($\pi_1 = 1, \pi_2 = 2654435761, \pi_3 = 805459861$) 去相关。

参数:$T = 2^{14} \sim 2^{24}$ (哈希表大小),$F = 2$,$L = 16$ 是速度/质量最优。

3. 为什么比 NeRF 位置编码快

NeRF 位置编码 Instant-NGP 哈希编码
编码 sin/cos 频率展开 ($2L$ 维) 稀疏哈希表查找 (O(1)/层)
MLP 大 (8 层 × 256) 小 (2 层 × 64)
每次更新影响 所有 MLP 权重 每层只 $2^d$ 个网格角点
内存 固定大小哈希表 (有界)

特征查找把"表达能力"从 MLP 转移到可学习的特征表,MLP 只需小网络做解码 → 快几个数量级。

4. 哈希碰撞

哈希表固定大小 → 不同空间点可能映射到同一槽 (碰撞)。Instant-NGP 不显式解决碰撞

  • 碰撞点的梯度自然平均
  • "最大的梯度 (对 loss 最相关的) 占主导" → 学习自动聚焦到重要区域 (有表面的地方)
  • MLP 借助多分辨率跨层消歧 (不同层碰撞模式不同)

这是它能用小哈希表 + 小 MLP 的关键 trick。

5. tiny-cuda-nn

自研 CUDA"全融合"(fully-fused) 框架:

  • 半精度哈希表存储 (2 byte/项) + 全精度 master copy
  • 逐层流式评估保 L2 cache 连续
  • 跳过零梯度的 Adam 更新 (稀疏时 ~10% 加速)
  • 避免控制流分歧和指针追逐 (不像树遍历)

6. 结果与影响

NeRF 任务 (单 GPU):1 秒 21.2 dB → 5 秒 29.3 dB → 15 秒 31.4 dB (≈ 原版 NeRF 水平) → 5 分钟 33.2 dB (≈ mip-NeRF 33.09 数小时水平)。Gigapixel: 东京全景 2.5 分钟达 ACORN 36.9 小时的质量。

影响:让 NeRF "即时"可用 → 催生一批实时 NeRF-SLAM (它们用 Instant-NGP 当 mapping 后端)。后被 3DGS 在某些场景进一步超越 (见 3D Gaussian Splatting)。

References

  • Müller, T., Evans, A., Schied, C., & Keller, A. (2022). Instant Neural Graphics Primitives with a Multiresolution Hash Encoding. ACM ToG (SIGGRAPH). arXiv:2201.05989 — 论文 (本笔记读 arXiv 全文整理)
  • 代码: github.com/NVlabs/instant-ngp (tiny-cuda-nn)
  • NeRF 位置编码见 NeRF §4;用 Instant-NGP 的 SLAM 见 Orbeez-SLAM / GO-SLAM / NeRF-SLAM (G5)