JA EN ZH

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 使用体积渲染 (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 用于方向。

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

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

数据准备流程:

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

训练细节:

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

常见问题与解决:

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

加速方法 - 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 的优点

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

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

拍摄指南:

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

推荐工具链:

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

输出格式:

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

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

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

产业应用:

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

研究前沿:

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

局限性与挑战:

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

Related Articles

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

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

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

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

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

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

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

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

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

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

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

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

Related Terms