NeRF 的效率改进与表示演化
A. 本篇主题
本篇围绕 NeRF 效率改进路线,系统梳理从原始 NeRF 到 Instant-NGP 之间的一系列关键改进。这些方法并非独立的技术点,而是一条连续的优化逻辑线:解决抗锯齿 → 解决无界场景 → 引入显式体素化 → 低秩分解 → 多分辨率哈希编码。每一步都为下一步铺垫,最终引出 3DGS 用显式高斯完全替代 MLP 的范式转变。
B. 本篇在整条路线中的位置
本篇承接笔记 01 的 NeRF 基础,直接受两个驱动问题的牵引:
- 训练速度:原始 NeRF 收敛需数十小时,无法实用。
- 隐式表示的固有问题:无法直接编辑场景组成部分,MLP 作为”黑盒”记忆难以解释。
本篇将按时间顺序和逻辑递进组织:
- mip-NeRF / mip-NeRF 360:抗锯齿 + 无界场景
- Plenoxels:显式体素化 + 稀疏性
- DVGO:稠密体素网格 + 端到端可微
- TensoRF:低秩张量分解
- Instant-NGP:多分辨率哈希编码
本篇的结尾将说明:这条渐进式的”显式化”路线最终指向一个根本性范式转变——用离散的显式高斯分布替代连续 MLP,而非继续在 MLP 框架内打补丁。这正是 3DGS 的核心洞察,也是笔记 03 的主题。
C. 数学建模
C.1 共同问题陈述
原始 NeRF 的训练目标是像素级重建损失:
其中
核心瓶颈:
- 每次迭代需多次 MLP 前向(粗采样 + 细采样,每次查询需沿光线采样 ~128 个点)
- MLP 隐式存储场景,无法利用稀疏性(大部分空间密度为零)
- 像素被建模为无限细的光线,缺乏抗锯齿能力
C.2 mip-NeRF:锥体渲染与集成位置编码
问题:NeRF 将像素建模为无限细的光线,无法处理抗锯齿和远距离场景(光线面积不为零)。
解决方案:引入锥体渲染(Cone Rendering),每个像素对应一个视锥。
定义像素
- 锥心光线:
- 垂直于
的扩展向量控制锥体张角
集成位置编码(Integrated Positional Encoding, IPE):
对锥体内采样点呈高斯分布
这等价于对原始编码
IPE 的解析计算:
设频率向量
和
物理直觉:
- 指数因子
描述高斯分布的宽度对频率 的衰减 - 当
大(近处物体,张角大)时,高频项快速衰减,只有低频项保留 - 当
小(远处物体,或像素面积小)时,高频项得以保留
C.3 mip-NeRF 360:无界场景的扩展
问题:mip-NeRF 仍假设场景在有界区域内,无法处理无界(unbounded)场景(如大尺度户外环境)。
解决方案:
- 场景参数化变换:对无界坐标
应用非线性映射:
这将无穷远点映射到单位球面附近,实现无界到有界的变换。
- ** proposer 网络 + 在线蒸馏**:引入额外的网络预测采样分布,避免在空旷区域浪费计算。
C.4 Plenoxels:显式体素化与稀疏性
核心思想:将连续的 MLP 表示替换为显式体素网格,每个体素存储球谐函数(Spherical Harmonics, SH)系数。
表示:
场景用稀疏体素网格表示,仅在有内容的区域存储体素:
其中
球谐函数颜色表示:
颜色不是直接存储 RGB,而是用球谐函数系数表示视角相关外观:
是球谐函数基- 低阶
足以表示漫反射材质
体渲染:
与 NeRF 类似,但颜色和密度来自体素插值而非 MLP 查询:
其中
优化目标:
其中
C.5 DVGO:稠密体素网格与端到端优化
核心思想:用稠密体素网格替代稀疏网格,配合端到端优化。
表示:
三维网格
- 密度
(可学习标量) - 特征向量
(用于颜色预测)
颜色预测:
其中
可微体渲染:
密度通过 sigmoid 激活确保非负:
优化:
直接对所有体素参数
优势:
- 显式表示,可直接查询任意位置
- 端到端优化,无需手动设计稀疏先验
劣势:
- 内存:
网格需数十 GB - 精度受限于网格分辨率
C.6 TensoRF:低秩张量分解
核心思想:对体素网格做低秩(low-rank)分解,减少参数量。
张量表示:
将场景表示为四维张量
CP 分解(Canonical Polyadic):
将张量分解为多组一维因子的外积:
其中
向量矩阵分解(VM):
更高效的形式,将空间维度和特征维度分开:
其中
内存复杂度:
- 原始稠密张量:
- CP 分解:
- VM 分解:
当
渲染:
张量分解后,可通过插值快速查询任意位置的特征,然后送入小型 MLP 预测密度和颜色。
C.7 Instant-NGP:多分辨率哈希编码
核心思想:用多分辨率哈希表替代 MLP 直接处理坐标,配合小型 MLP,大幅加速训练。
哈希编码:
输入坐标
对第
- 找到
周围的 8 个网格顶点 - 用顶点坐标作为键查哈希表
,得到特征向量 - 用三线性插值合并 8 个顶点的特征
其中
多分辨率聚合:
其中
关键优势:
- 网格分辨率与参数量解耦:第
层有 个顶点,但只需 哈希表容量(实际用固定大小 的哈希表) - 哈希冲突提供正则:不同顶点映射到同一哈希槽提供了隐式正则化
- 网格插值天然提供高频建模:绕过 MLP 的高频学习困难
性能提升:
从数小时缩短到秒级(>1000× 加速)。
D. 详细推导
D.1 IPE 的详细推导
目标:计算
设
对正弦项:
推导利用了:高斯分布的傅里叶变换仍是高斯,以及
验证:当
D.2 TensoRF 的低秩近似推导
目标:用低秩分解近似高维张量
设
其中因子向量满足
为什么低秩有效:
真实场景的特征张量通常是低秩的——空间变化是平滑的,相邻体素高度相关。低秩分解通过捕捉空间相关性来压缩表示。
优化:
因子矩阵通过交替方向乘子法(ADMM)或随机梯度下降优化。每次更新一个因子矩阵时,固定其他因子,这一步是凸的。
D.3 哈希编码的插值推导
三线性插值:
给定 3D 点
插值结果:
这确保了
E. 算法与训练流程
E.1 Instant-NGP 训练流程
输入:多视角图像,相机参数
输出:哈希表 {V^l} 和 MLP 参数 θ
1. for iteration = 1 to N do
2. for each image do
3. for each pixel (u,v) do
4. r ← Ray(π, (u,v))
5. {t_i} ← SampleUniform(r, N_c)
6. for each t_i do
7. // 哈希编码
8. for l = 1 to L do
9. h_l ← trilerp(V^l, t_i) // 多分辨率插值
10. end for
11. h ← Concat(h_1, ..., h_L) // 拼接
12. (c_i, σ_i) ← MLP_θ(h) // 小型 MLP
13. end for
14. Ĉ ← VolumeRender({c_i, σ_i, t_i})
15. L ← ‖Ĉ - C_gt‖²
16. Update(V^l, θ) via backprop // 端到端梯度更新
17. end for
18. end for
19. end for
E.2 Plenoxels 优化流程
输入:SfM 点云初始化体素网格
输出:优化后的体素参数
1. InitializeVoxels(SfM_points) // 从运动恢复结构点云初始化
2. for iteration = 1 to N do
3. for each ray do
4. Sample voxels along ray // 三线性插值密度/颜色
5. Ĉ ← VolumeRender(volumetric)
6. L ← ‖Ĉ - C_gt‖² + λ·TV(V) // 加 TV 正则
7. Update voxel parameters // 梯度更新
8. end for
9. if density too low then Prune() // 稀疏性维护
10. end for
E.3 mip-NeRF 360 的 Proposal 网络
输入:光线 r,当前 MLP 参数
输出:细采样点分布 p(t)
1. coarse_samples ← UniformSample(r, N_coarse)
2. density ← F_coarse(coarse_samples) // proposer 网络
3. weights ← density · transmittance // 计算权重
4. p(t) ← Resample(weights) // 基于权重的采样分布
5. fine_samples ← SampleFromProposer(p(t))
proposer 网络(与主网络结构不同,仅预测密度)负责指导细采样分布,避免无效采样。
F. 关键直觉
-
从光线到锥体,本质是将像素面积纳入建模:mip-NeRF 通过 IPE 认识到像素不是点而是有面积的光锥,高频项的衰减提供了自然的抗锯齿机制。
-
显式体素化是通往实时渲染的必经之路:MLP 逐点查询无法利用并行,Plenoxels/DVGO 的体素网格可直接批量查询密度/颜色。
-
低秩分解利用了空间相关性:真实场景的空间变化是平滑的,TensoRF 通过捕捉这种低秩结构实现 10-100× 压缩率。
-
哈希编码绕过了 MLP 的高频学习困难:网格插值天然提供高频建模能力,哈希冲突提供隐式正则,这比让 MLP 从数据中学习高频模式更高效。
-
每一步改进都在”显式化”的方向上:从 MLP(最隐式)→ 体素(显式稠密)→ 低秩体素(显式稀疏)→ 哈希(显式+可学习),最终引出 3DGS 的完全显式高斯表示。
G. 局限性
-
体素方法受分辨率限制:DVGO 等方法在超出网格分辨率时产生模糊,无法达到 NeRF 的连续精度。
-
哈希编码有哈希冲突:当
很大时冲突增多,需要权衡分辨率和哈希表大小。 -
无界场景仍需特殊处理:mip-NeRF 360 的参数化变换是工程技巧,并非根本解决。
-
训练速度虽快但推理仍需采样:Instant-NGP 的加速主要来自训练,渲染仍需沿光线积分(只是 MLP 变小)。
-
体素/哈希表示难以编辑:与 MLP 类似,显式体素化后仍缺乏可解释的语义部件分割。
H. 与前后篇的衔接
本篇承接:笔记 01 的 NeRF 基础,继承了体渲染方程和层级采样的框架。
本篇引出:本篇的核心结论是:NeRF 的所有改进(抗锯齿、无界处理、体素化、低秩分解、哈希加速)仍然局限在”在 MLP 或类似连续框架内优化”的范式内。每一步改进都在加速或压缩表示,但没有一个方法从根本上改变”场景由连续函数定义”的设定。
3DGS(笔记 03)的核心洞察是:完全放弃 MLP,用离散的显式高斯分布替代连续场。这彻底改变了渲染范式——不再需要沿光线积分,而是用基于高斯投影的 splatting。
本篇中的 Plenoxels(显式体素化)和 TensoRF(低秩分解)已经暗示了”离散化”的方向,但高斯分布相比体素有更好的数学性质(可微投影、协方差参数化、anisotropic anisotropy),这正是 3DGS 能成功的关键。
本篇必须记住的结论
-
mip-NeRF 通过 IPE 实现抗锯齿:
,高频项在 大时衰减,提供自然的抗锯齿。 -
显式体素化(Plenoxels/DVGO)将场景存储在网格中,可批量查询,但受分辨率限制且内存开销大。
-
TensoRF 通过低秩张量分解实现高压缩率:
,利用空间相关性压缩。 -
Instant-NGP 的多分辨率哈希编码是训练加速的关键:网格插值+哈希表使 MLP 小型化,训练加速 >1000×。
-
本篇的所有方法仍在”连续函数”范式内,为笔记 03 的”完全显式化”——3DGS——做了铺垫。
参考文献
- Barron et al. “Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields” ICCV 2021
- Barron et al. “Mip-NeRF 360: Unbounded Anti-Aliasing Neural Radiance Fields” CVPR 2022
- Yu et al. “Plenoxels: Radiance Fields without Neural Networks” CVPR 2022
- Sun et al. “Direct Voxel Grid Optimization: Super-Convergent Scene Representation Networks” CVPR 2022
- Chen et al. “TensoRF: Tensorial Radiance Fields” ECCV 2022
- Müller et al. “Instant Neural Graphics Primitives with a Multiresolution Hash Encoding” ACM TOG 2022