NeRF 基础 - 从图像进行 3D 场景重建

· 9 分钟阅读

什么是 NeRF - 用神经网络表示 3D 场景

NeRF (Neural Radiance Fields) 是 2020 年由 Mildenhall 等人提出的方法,使用神经网络从多张 2D 照片重建 3D 场景。网络学习将 3D 坐标和观察方向映射到颜色和密度,从而能够从任意角度渲染逼真的新视角图像。

核心思想:将 3D 场景表示为连续的辐射场函数 F(x, y, z, θ, φ) → (r, g, b, σ),其中 (x,y,z) 是空间坐标,(θ,φ) 是观察方向,(r,g,b) 是颜色,σ 是体积密度。这个函数由 MLP (多层感知器) 近似。

与传统方法的区别:

  • 传统摄影测量:提取特征点 → 稀疏点云 → 稠密点云 → 网格。显式几何表示
  • NeRF:隐式表示,无需显式几何。直接从连续函数渲染图像

输入要求:通常需要 50-200 张从不同角度拍摄的照片,以及每张照片的相机位姿 (位置和朝向)。相机位姿通常通过 COLMAP 等 SfM (Structure from Motion) 工具自动估计。

补充:NeRF (Neural Radiance Fields) 由 UC Berkeley 的研究团队于 2020 年发表,并在 ECCV 2020 上获得 Best Paper Honorable Mention,为三维计算机视觉领域带来了革新。其基本思路是:以三维空间中的各点 (x, y, z) 与视线方向 (θ, φ) 作为输入,学习一个输出该点颜色 (RGB) 与密度 (σ) 的神经网络 F: (x, y, z, θ, φ) → (r, g, b, σ)。与传统方法相比,摄影测量 (SfM + MVS) 会生成显式网格,但纹理质量存在上限;点云以离散的点来表示,难以还原连续的表面;而 NeRF 借助连续的隐式表示,实现了照片级真实感的质量。

体积渲染 - 通过光线行进生成图像

NeRF 使用体积渲染 (Volume Rendering) 从辐射场生成 2D 图像。对于图像中的每个像素,从相机发射一条光线,沿光线采样多个点,累积颜色和密度得到最终像素颜色。

渲染方程:

C(r) = ∫ T(t) × σ(t) × c(t) dt

其中 T(t) = exp(-∫σ(s)ds) 是累积透射率,σ(t) 是 t 处的密度,c(t) 是 t 处的颜色。直观理解:光线穿过场景时,在每个点根据该点的密度和颜色累积贡献,密度高的区域贡献大。

离散化近似:实际计算中将连续积分离散化为 N 个采样点的加权求和。分层采样 (Stratified Sampling) 将光线均匀分段,每段内随机采样一点,避免采样偏差。

层级采样 (Hierarchical Sampling): NeRF 使用粗-细两阶段采样。粗网络先均匀采样 64 个点估计密度分布,然后根据密度分布在重要区域 (物体表面附近) 追加 128 个精细采样点。这大幅提高了渲染效率和质量。

位置编码 (Positional Encoding):直接输入 (x,y,z) 坐标会导致网络难以学习高频细节。NeRF 使用正弦/余弦位置编码将低维坐标映射到高维空间:γ(p) = [sin(2⁰πp), cos(2⁰πp), ..., sin(2^(L-1)πp), cos(2^(L-1)πp)]。L=10 用于坐标,L=4 用于方向。

补充:分层采样 (Hierarchical Sampling):NeRF 分为粗 (coarse) 网络与细 (fine) 网络两个阶段进行采样,先用粗网络沿光线均匀取样以把握密度分布,再用细网络在密度较高的区域集中取样。位置编码中 sin(2^0πp) 的第 0 项对应最低频成分,正是通过显式输入高频成分,才使细小纹理的还原成为可能。

NeRF 训练过程 - 从数据准备到模型优化

NeRF 的训练是一个自监督过程:从已知相机位姿渲染图像,与真实照片比较,通过梯度下降优化网络参数。

数据准备流程:

  • 拍摄 50-200 张覆盖场景的照片 (均匀分布角度)
  • 使用 COLMAP 估计相机内参和外参
  • 可选:使用 Mask 排除动态物体或天空
  • 划分训练集和测试集 (通常每 8 张取 1 张作为测试)

训练细节:

  • 损失函数:渲染像素颜色与真实像素颜色的 MSE
  • 每次迭代随机选择一批光线 (通常 1024-4096 条)
  • 训练时间:原始 NeRF 在单 GPU 上约需 1-2 天 (100k-300k 迭代)
  • 网络结构:8 层 MLP,每层 256 个神经元,ReLU 激活

常见问题与解决:

  • 浮动伪影:空气中出现半透明噪点。解决:增加正则化或使用 distortion loss
  • 模糊:细节不清晰。解决:增加位置编码频率,增加训练迭代
  • 相机位姿不准:导致整体模糊。解决:使用 BARF 等联合优化位姿的方法

补充:由于每个场景都要单独训练一个模型,其目的并非泛化,而是刻意的过拟合 (memorization)。拍摄时相邻图像之间的重叠率建议保持在 60% 以上。损失函数采用预测颜色与实际像素颜色的 MSE:L = Σ||C_pred(r) - C_gt(r)||^2。优化器使用 Adam,学习率从 5e-4 开始并按指数衰减,通常经过 200,000-500,000 次迭代收敛。原始 NeRF 在 NVIDIA V100 上训练单个场景约需 1-2 天。

加速方法 - Instant NGP 和 3D Gaussian Splatting

原始 NeRF 训练慢 (数天) 且渲染慢 (每帧数秒),限制了实际应用。近年来的加速方法将训练缩短到分钟级,渲染达到实时。

Instant NGP (2022, NVIDIA):

  • 使用多分辨率哈希编码替代 MLP 的大部分计算
  • 将场景空间划分为多级网格,每级使用哈希表存储特征向量
  • 训练时间从数天缩短到 5-15 秒 (RTX 3090)
  • 渲染速度达到实时 (30+ fps)
  • 实现:NVIDIA 的 instant-ngp 开源项目

3D Gaussian Splatting (2023):

  • 完全不同的表示方法:使用数百万个 3D 高斯椭球体显式表示场景
  • 每个高斯体有位置、协方差 (形状)、颜色和不透明度参数
  • 渲染使用可微分光栅化而非光线行进,速度极快
  • 训练约 10-30 分钟,渲染 100+ fps (1080p)
  • 质量与 NeRF 相当或更好,尤其在细节表现上

其他加速方法:

  • TensoRF:张量分解表示辐射场,内存效率高
  • Plenoxels:体素网格 + 球谐函数,无需神经网络
  • Zip-NeRF:结合 mip-NeRF 360 和 Instant NGP 的优点

补充:Instant NGP (Neural Graphics Primitives) 是 NVIDIA 于 2022 年发表的方法,借助多分辨率哈希编码把训练时间缩短到数秒至数分钟。速度对比如下:原始 NeRF 训练 1-2 天、渲染 30 秒/帧;Instant NGP 训练 5 秒至 5 分钟、渲染 15ms/帧;3D Gaussian Splatting 训练 5-30 分钟、渲染 7ms/帧 (可实时浏览)。

实际工作流程 - 从拍摄到 3D 模型生成

将 NeRF/3DGS 应用于实际项目的完整工作流程,从数据采集到最终输出。

拍摄指南:

  • 围绕物体/场景均匀拍摄,覆盖所有角度
  • 保持一致的曝光和白平衡 (手动模式)
  • 避免运动模糊和过曝/欠曝
  • 场景中应有足够纹理供特征匹配
  • 室内:50-100 张;室外大场景:100-300 张

推荐工具链:

  • Nerfstudio:统一框架,支持多种 NeRF 变体和 3DGS。命令行友好,可视化完善
  • COLMAP: SfM 相机位姿估计的标准工具
  • Polycam / Luma AI:手机端一键扫描和重建的商业应用
  • Meshroom:开源摄影测量软件,可与 NeRF 流程结合

输出格式:

  • 新视角图像/视频:直接从训练好的模型渲染
  • 点云导出:从密度场提取点云 (用于测量)
  • 网格导出:Marching Cubes 提取等值面,用于 3D 打印或游戏引擎
  • 3DGS 的 .ply 文件:可在专用查看器中实时浏览

补充:拍摄时相机之间的重叠率以 60-80% 为理想,应避免视角的剧烈跳变。用智能手机也能获得足够的质量,但以 RAW 拍摄并固定曝光可以让结果更稳定。之后用 COLMAP 估计相机位姿,再用 Instant NGP 或 Nerfacto (Nerfstudio 自有方法) 进行训练。

NeRF 应用与未来展望 - 从产业到研究前沿

NeRF 及其后续技术正在多个领域产生实际影响,同时研究前沿不断推进边界。

产业应用:

  • 房地产:室内空间的沉浸式虚拟游览
  • 电商:商品 3D 展示,消费者可自由旋转查看
  • 文化遗产:历史建筑和文物的数字化保存
  • 影视 VFX:实景场景的数字孪生,用于后期合成
  • 自动驾驶:驾驶场景重建用于仿真测试

研究前沿:

  • 动态场景: D-NeRF、HyperNeRF 处理随时间变化的场景
  • 生成式 NeRF: DreamFusion 从文本描述生成 3D 场景
  • 大规模场景: Block-NeRF、Mega-NeRF 处理城市级别的大场景
  • 少样本重建: pixelNeRF、SRN 从少量图像 (3-10 张) 重建
  • 可编辑 NeRF:修改场景中物体的位置、外观、光照

局限性与挑战:

  • 反射和透明物体仍然困难
  • 室外大范围场景的光照变化处理
  • 动态物体和人体的实时重建
  • 从 NeRF 表示到标准 3D 格式的高质量转换

补充:由文本生成 3D:DreamFusion (Google) 与 Magic3D (NVIDIA) 可以从文本提示生成三维物体。它们把预训练的扩散模型 (Stable Diffusion) 通过 SDS (Score Distillation Sampling) 损失用于 NeRF 的优化,从而生成与文本描述相符的三维形状。

相关文章

单目深度估计技术与应用 - 从单张图像推断深度

从 MiDaS 和 DPT 模型到自动驾驶和 AR 应用的深度图生成系统指南。涵盖原理到实际实现。

扩散模型工作原理 - Stable Diffusion 技术深度解析

从扩散模型原理到 Stable Diffusion 架构。涵盖 DDPM、潜在扩散、CFG、加速技术和实用控制方法。

基于有限数据的图像分类迁移学习 - 微调实战指南

使用预训练模型仅凭 100 张图像构建高精度图像分类器。包含 PyTorch 代码示例和最佳实践的迁移学习实用指南。

点云基础与 3D 重建 - 从采集到处理

全面介绍点云数据的基础知识,涵盖 LiDAR 和深度相机采集、预处理、配准、网格重建及实用工具链。

立体视觉与距离测量 - 从视差恢复 3D 信息

详解立体视觉的原理,从对极几何到立体匹配算法 (SGM、深度学习),涵盖视差图到 3D 点云的转换和实际系统搭建。

机器学习数据增强 - 实用图像增强技术

学习机器学习中的数据增强技术,包括几何变换、颜色增强、MixUp/CutMix 以及自动增强策略的实践方法。

相关术语