K2E-B-G6-2 · Paper Note
Instant-NGP
- Description:Instant-NGP 论文笔记 — 多分辨率哈希编码 + 小 MLP,把 NeRF 训练从数小时压到秒级(NeRF 任务 15 s 起、1–5 min 达 mip-NeRF 质量),validated 四个任务;多个 NeRF-SLAM 的渲染后端
- My Notion Note ID:K2E-B-G6-2
- Created:2024-03-31
- Updated:2026-06-11
- License:转载欢迎:转载请注明作者 Yu Zhang 并附原文出处(yuzhang.io)
Table of Contents
- 1. Summary
- 2. Key Contributions
- 3. Method
- 4. Experiments & Results
- 5. Ablation & Discussion
- 6. Strengths / Limitations / Future Work
- 7. Code Walkthrough
- References
1. Summary
Title: Instant Neural Graphics Primitives with a Multiresolution Hash Encoding Authors: Thomas Müller, Alex Evans, Christoph Schied, Alexander Keller (NVIDIA) Paper: arXiv:2201.05989 (ACM ToG / SIGGRAPH 2022) Github: NVlabs/instant-ngp
Instant-NGP 用多分辨率哈希编码 (multiresolution hash encoding) 替代 NeRF 的大 MLP + 正弦位置编码,把训练时间从数小时压到秒级(NeRF 任务 15 s 即与 NeRF/NSVF 竞争,1–5 min 达 mip-NeRF 质量),同时在四个图形原语任务 (NeRF、gigapixel 图像、SDF、NRC(神经辐射缓存,路径追踪渲染器中实时在线训练的网络,预测第一个非镜面顶点的出射辐射,Müller 2021)) 上保持竞争力。核心思路:把"表达能力"从参数量大的 MLP 转移到可学习的多分辨率特征哈希表,MLP 只做轻量解码。
在 NeRF Synthetic 数据集,5 分钟训练达到 33.18 dB(mip-NeRF 需数小时才到 33.09 dB);东京 gigapixel 全景 2.5 分钟达到 38.59 dB(ACORN 同质量需 36.9 小时)。速度提升主要来自两端:哈希编码让 MLP 大幅缩小(原 8层×256 → density 1隐层×64 + color 2隐层×64,约 ~20× 参数减少),加上自研 CUDA "全融合" 框架 tiny-cuda-nn 消除中间内存搬运。
在 SLAM 生态里,Instant-NGP 成为多个实时 NeRF-SLAM 的渲染后端:Orbeez-SLAM、GO-SLAM、NeRF-SLAM 均用它替换原始慢速 NeRF 做实时 mapping。后被 3D Gaussian Splatting 在部分场景进一步超越。

2. Key Contributions
- 多分辨率哈希编码: 个可学习哈希表 × 不同空间分辨率,O(1)/层查找,特征拼接后喂小 MLP;task-agnostic,只需调 和 两个超参
- 自动碰撞消歧:固定大小哈希表不显式解碰撞,靠梯度平均 + 多分辨率跨层互补自动聚焦重要区域,不需树结构/稀疏体素
- tiny-cuda-nn:全融合 CUDA kernel,level-by-level 流式处理 + 半精度存储 + 稀疏 Adam,实现端到端 ~10× 加速
- 速度–质量 Pareto 前沿:20–60× 快于频率编码,质量与 mip-NeRF 相当或更好
- 多任务验证:同一框架覆盖 NeRF、gigapixel、SDF、NRC 四类,仅改 loss 函数和输出 head
3. Method
3.1 多分辨率哈希编码
核心结构: 个哈希表,每表分辨率按几何级数排列。
分辨率公式(Eq. 2–3):
:第 层网格分辨率;:最粗分辨率(默认 16);:最细分辨率(NeRF 场景 512–524288);:公比;:层数(默认 16)。
空间哈希函数(Eq. 4):
:按位 XOR;:整数坐标分量;:质数 ();:哈希表大小(–)。质数 XOR 去除空间相关性,不同坐标方向碰撞模式相互独立。
3.2 查找流程(每输入点)
对输入坐标 ,逐层执行:
- 按第 层分辨率 缩放 ,取包围体素的 个整数角点
- 对每个角点做哈希 ,从表 取 维特征
- 按体素内位置做三线性插值,得该层 维输出
- 拼接所有 层 ( 维) + 辅助输入 (view dir 等) → 小 MLP 解码
默认参数:,,(消融实验确定的 Pareto 最优)。
3.3 哈希碰撞的隐式消解
哈希表大小固定 → 不同空间点可能映射同槽。Instant-NGP 不显式解碰撞,而是:
- 碰撞点梯度自然平均;对 loss 贡献大的点(有表面的地方)梯度更大,优化自动聚焦
- 不同层碰撞模式不同 → 多分辨率跨层互补消歧
- MLP 额外消歧:消融实验(Fig. 11)显示线性层 vs MLP 差距 — 线性层背景噪声明显,MLP 处理高光细节显著更好(+15% 计算但质量大幅改善)
3.4 tiny-cuda-nn
自研 CUDA 全融合框架(Müller 2021)。关键优化:
- Level-by-level 流式:先查所有输入的第 1 层,再查第 2 层,最大化 L2 cache 命中率(避免随机访问)
- 半精度存储:哈希表条目 2 byte(fp16),保 full-precision master copy 做稳定 Adam 更新
- 稀疏 Adam:跳过零梯度的槽,稀疏场景 ~10% 加速
- 避免控制流分歧:不像八叉树/BVH 需要条件分支和指针追逐,全规整访问模式
3.5 NeRF 体渲染(任务应用)
哈希编码输出的多分辨率特征经小 MLP 解码为体密度 和颜色 ,用标准 NeRF 体渲染积分合成像素颜色:
:第 采样点体密度(MLP density head 输出,与视角无关);:相邻采样点步长;:该点颜色(MLP color head 输出,依赖视角方向 的球谐编码);:透射率(到达第 点前未被遮挡/吸收的累积概率)。训练 loss:(对真值像素颜色 的 L2 光度损失)。
MLP 分两段:density MLP(仅用位置哈希特征,输出 + 中间几何特征)→ color MLP(几何特征 + SH 方向编码 ,输出 )。Instant-NGP 将原版 NeRF 的正弦位置编码替换为多分辨率哈希特征,其余体渲染框架相同。换 loss 即支持其他任务(SDF:截断距离损失;gigapixel:2D 坐标直接→像素颜色)。
4. Experiments & Results
NeRF Synthetic 数据集(Table 2)
| 方法 | 训练时间 | 平均 PSNR |
|---|---|---|
| NeRF (原版) | ~数小时 | 31.01 dB |
| mip-NeRF | ~数小时 | 33.09 dB |
| Instant-NGP(1 分钟) | 1 min | 32.64 dB |
| Instant-NGP(5 分钟) | 5 min | 33.18 dB |
5 分钟超过 mip-NeRF 数小时水平;单场景 Mic 15 秒达 34.76 dB、1 分钟达 35.92 dB。
Gigapixel 图像
东京全景(18,000×9,000 像素):2.5 分钟达 38.59 dB;4 分钟达 41.9 dB。ACORN 达到同级质量需 36.9 小时。
渲染性能
训练完成后 NeRF 任务 60 FPS @ 1920×1080(RTX 3090),支持景深 / 抗锯齿等实时效果。

5. Ablation & Discussion
哈希表大小 (Fig. 4)
从 增到 :质量随 亚线性提升,在 (约 6 MB,L2 cache 上限)后进入平台期。更大的 不再有益,推荐范围 –。
特征维度 与层数 (Fig. 5)
固定总参数量 ,测试 、: 在 gigapixel / SDF / NeRF 三任务上全部取得最优 Pareto 点。 在 RTX 3090 上因半精度 atomic 效率低而变慢。
MLP 规模(Fig. 10)
测试 层 × 宽:64 宽时 Pareto 最优。最终架构:density MLP 1 隐层 × 64、color MLP 2 隐层 × 64(非对称)。更深的 density MLP 无质量改善,更宽则计算冗余。
线性 vs MLP 解码器(Fig. 11)
哈希编码后接线性变换(不用 MLP)背景噪声明显,镜面高光质量明显差;MLP 仅增加 ~15% 计算但质量显著提升。说明哈希输出本身需要非线性消歧,不是直接可用的特征。
6. Strengths / Limitations / Future Work
优势:
- 速度:NeRF 任务 15 s 即与 NeRF/NSVF 竞争、1–5 min 达 mip-NeRF 质量,60 FPS 实时渲染
- 任务无关:四类图形原语同一框架,仅改 loss
- 内存有界:哈希表大小固定,不随场景复杂度增长
- 易扩展:tiny-cuda-nn 作为独立库可嵌入任何神经渲染管线
局限:
- 哈希碰撞在极细节区域可能引入噪声(大场景 + 小 时更明显)
- 无拓扑/几何约束:表示纯隐式,提取 mesh 需额外后处理(Marching Cubes 等)
- tiny-cuda-nn 强依赖 NVIDIA GPU,跨平台受限
- 无界 NeRF 场景(outdoor)需额外 contraction 等处理,paper 实验均为有界场景
后续影响:
- 催生一批实时 NeRF-SLAM(Orbeez-SLAM / GO-SLAM / NeRF-SLAM)
- 3D Gaussian Splatting 在部分室外/动态场景进一步突破,但 Instant-NGP 仍是隐式表示的速度标杆
- tiny-cuda-nn 作为独立开源框架被广泛复用
7. Code Walkthrough
仓库:NVlabs/instant-ngp。PyTorch 绑定通过 NVlabs/tiny-cuda-nn 提供。
入口
# C++ GUI 模式(NeRF 任务,直接拖数据集目录)
./instant-ngp data/nerf/fox
# Python 脚本模式(支持超集命令行参数)
python scripts/run.py --scene data/nerf/fox --mode nerf
scripts/run.py 是灵活接口:命令行参数超集,可指定 snapshot 保存路径、训练步数、评估 PSNR 等。
核心模块
| 模块 | 位置 | 作用 |
|---|---|---|
| 哈希编码 | tiny-cuda-nn include/tiny-cuda-nn/encodings/grid.h |
多分辨率哈希表 + 三线性插值,全 CUDA |
| 小 MLP | tiny-cuda-nn include/tiny-cuda-nn/networks/fully_fused_mlp.h |
全融合矩阵乘,half precision |
| NeRF 场景 | include/neural-graphics-primitives/nerf_network.h |
哈希编码 + density MLP + color MLP 组合 |
| 训练循环 | src/testbed_nerf.cu |
射线采样、volume rendering、loss、Adam 步骤 |
| 数据集 | scripts/colmap2nerf.py |
COLMAP → transforms.json 转换 |
关键超参
哈希编码参数()来自 Table 1;Adam 参数与训练步数来自 Section 4 正文,不在 Table 1。
| 参数 | 符号 | 默认值 | 出处 |
|---|---|---|---|
| 层数 | 16 | Table 1 | |
| 哈希表大小 | –(范围;– 为 Fig. 4 消融推荐区间) | Table 1 | |
| 特征维度 | 2 | Table 1 | |
| 最粗分辨率 | 16 | Table 1 | |
| 最细分辨率 | 512–524288(NeRF 场景) | Table 1 | |
| Adam | — | 0.9, 0.99, | Section 4 正文 |
| 训练步数 | — | 31000 (NeRF/gigapixel) | Section 4 正文 |
Paper vs Code
- Paper 描述哈希函数用质数 XOR;代码在
grid.h中实现完全一致 - Paper 声称 60 FPS @ 1080p;实际帧率因场景/GPU 不同有较大浮动(RTX 3090 全速时)
- tiny-cuda-nn
GridEncoding支持多种 grid 类型(HashGrid、DenseGrid、TiledGrid),paper 主实验用HashGrid
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 — 论文
- NVlabs/instant-ngp:官方代码
- NVlabs/tiny-cuda-nn:全融合 CUDA 框架
- NeRF 位置编码基础:NeRF 笔记
- 用 Instant-NGP 作后端的 SLAM:Orbeez-SLAM、GO-SLAM、NeRF-SLAM