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}$,每层:
- 按该层分辨率 $N_l$ 缩放 $\mathbf{x}$,找包围它的体素 8 个角点
- 对每个角点整数坐标做哈希:$h(\mathbf{x}) = \left( \bigoplus_i x_i \pi_i \right) \mod T$
- 从哈希表 $\theta_l$ 取 $F$ 维特征向量
- 按体素内相对位置三线性插值特征
- 拼接所有 $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)