NeRF — Neural Radiance Fields


  • Description:NeRF 论文笔记 (读 arXiv 全文后所写) — 用 5D MLP 表示连续辐射场,体渲染积分、位置编码、分层采样。NeRF-SLAM 系列的基石
  • Paper:Mildenhall, B., Srinivasan, P. P., Tancik, M., Barron, J. T., Ramamoorthi, R., & Ng, R. (2020). NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis. ECCV (Oral). arXiv:2003.08934
  • K2E-B ID:[K2E-B-G6-1]
  • Max3 PDF[K2E] SLAM/[K2E-B-G] Geometry & Rendering/[K2E-B-G6] Radiance Field Foundations/[K2E-B-G6-1][2020] NeRF Representing Scenes as Neural Radiance Fields for View Synthesis.pdf
  • Notion ID:(待创建)
  • Created:2024-03-31
  • Updated:2026-06-02
  • License转载欢迎 — 请署名 Yu Zhang 并链回 yuzhang.io 原文

Table of Contents


1. NeRF 概述

NeRF (Neural Radiance Fields) — Mildenhall et al. 2020。用一个 MLP 表示连续的 5D 辐射场,配合可微体渲染做新视角合成 (novel view synthesis)。输入只需一组已知相机位姿的图像。

三大贡献:

  1. 5D 神经辐射场 — MLP 参数化几何 + 视角相关材质
  2. 可微体渲染 + 分层采样加速
  3. 位置编码 — 让 MLP 表达高频细节

是后续 NeRF-SLAM (iMAP / NICE-SLAM / NeRF-LOAM...) 的表示基石。

2. 5D 神经辐射场

MLP $F_\Theta: (\mathbf{x}, \mathbf{d}) \to (\mathbf{c}, \sigma)$:

  • 输入 5D:3D 位置 $\mathbf{x} = (x,y,z)$ + 视角方向 $\mathbf{d}$ (概念上 2D 球面角 $(\theta, \phi)$,实现用 3D 笛卡尔单位向量)
  • 输出:颜色 $\mathbf{c} = (r,g,b)$ + 体密度 $\sigma$

关键约束密度 $\sigma$ 只依赖位置 $\mathbf{x}$,颜色 $\mathbf{c}$ 依赖位置 + 方向 (保证多视角几何一致,同一点不同视角密度相同但颜色可变 — 模拟高光等)。

网络结构

  • 位置 $\mathbf{x}$ 先过 8 层全连接 (256 通道, ReLU);第 5 层有 skip connection,把位置编码 $\gamma(\mathbf{x})$ 再次拼接到该层 → 输出 $\sigma$ (经 ReLU 保非负) + 256 维特征向量
  • 特征向量 拼接位置编码后的视角方向 $\gamma(\mathbf{d})$ → 再过 1 层 (128 通道, ReLU) → sigmoid 输出 RGB $\in [0,1]$

视角方向"晚注入"是为了强制密度与方向无关。

3. 体渲染

沿相机光线 $\mathbf{r}(t) = \mathbf{o} + t\mathbf{d}$ 积分颜色:

$$ C(\mathbf{r}) = \int_{t_n}^{t_f} T(t) , \sigma(\mathbf{r}(t)) , \mathbf{c}(\mathbf{r}(t), \mathbf{d}) , dt $$

其中透射率 (光走到 $t$ 还没被挡住的概率):

$$ T(t) = \exp\left( -\int_{t_n}^{t} \sigma(\mathbf{r}(s)) , ds \right) $$

离散化 (求积 + alpha 合成)

$$ \hat{C}(\mathbf{r}) = \sum_{i=1}^{N} T_i , (1 - e^{-\sigma_i \delta_i}) , \mathbf{c}i, \quad T_i = \exp\left( -\sum{j=1}^{i-1} \sigma_j \delta_j \right) $$

$\delta_i = t_{i+1} - t_i$ 是相邻采样点间距。令 $\alpha_i = 1 - e^{-\sigma_i \delta_i}$ → 退化为标准 alpha 合成 (前到后混合,与 3DGS 的混合公式同源)。

4. 位置编码

MLP 直接吃低维 $(x,y,z)$ 会偏向低频 (糊)。位置编码把每个标量映射到高维三角函数:

$$ \gamma(p) = \left( \sin(2^0 \pi p), \cos(2^0 \pi p), \dots, \sin(2^{L-1} \pi p), \cos(2^{L-1} \pi p) \right) $$

  • 位置 用 $L = 10$,方向 用 $L = 4$
  • 坐标归一化到 $[-1, 1]$

这让 MLP 能表达高频细节 (后来 Instant-NGP 用多分辨率哈希编码替代,见 Instant-NGP 那篇)。

5. 分层采样

均匀采样浪费算力 (大部分点在空/被遮挡区)。NeRF 用粗 + 细两个网络

粗网络 — $N_c$ 个分层 (stratified) 采样点,渲染并得权重:

$$ w_i = T_i (1 - e^{-\sigma_i \delta_i}), \quad \hat{w}_i = \frac{w_i}{\sum_j w_j} $$

细网络 — 把 $\hat{w}_i$ 当概率分布,重要性采样 $N_f$ 个点 (集中在有物体的地方),用 $N_c + N_f$ 个点渲染。

默认 $N_c = 64$, $N_f = 128$ (每条光线 256 次查询)。

6. 损失与训练

粗 + 细网络渲染颜色与真值的平方误差:

$$ \mathcal{L} = \sum_{\mathbf{r} \in \mathcal{R}} \left[ | \hat{C}_c(\mathbf{r}) - C(\mathbf{r}) |_2^2 + | \hat{C}_f(\mathbf{r}) - C(\mathbf{r}) |_2^2 \right] $$

(粗网络也算 loss,虽然最终只用细网络渲染 — 为了让粗网络的权重分布可靠)

训练:Adam (lr $5\times10^{-4} \to 5\times10^{-5}$ 指数衰减),batch 4096 光线,单 V100 跑 100-300k 迭代。

7. 贡献与影响

  • 开创神经辐射场表示 — 整个场景仅需约 5 MB 网络权重 (相比 LLFF 约 3000× 压缩),连续可微
  • 体渲染 + 位置编码 + 分层采样成为后续标配
  • 局限:慢 (每场景在单 V100 上训练约 1-2 天)、需精确位姿、静态场景、单场景不泛化
  • 衍生:Instant-NGP (快)、Mip-NeRF (抗锯齿)、Nerfies (可变形)、NeRF-SLAM 系列 (iMAP/NICE-SLAM/...)、最终被 3DGS 在速度上超越 (见 3D Gaussian Splatting 那篇)

References

  • Mildenhall, B., et al. (2020). NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis. ECCV. arXiv:2003.08934 — 论文 (本笔记读 arXiv 全文整理)
  • 项目页: matthewtancik.com/nerf
  • 体渲染 alpha 合成与 3DGS 同源 (见 3D Gaussian Splatting);位置编码的后继见 Instant-NGP