NeRF和3DGS对比

NeRF和3DGS对比

Felix Christian Lv2

NeRF

原理

NeRF(Neural Radiance Fields)是一种新型的3D场景表示方法,通过神经网络来生成逼真的3D场景。NeRF 的核心思想是利用神经网络来表示一个场景的体素,从而可以实现从不同角度对场景进行渲染,生成高质量的图像。

特点:

  • NeRF中三维模型的信息是以“隐式”的方法存储,而非点云、体素、网格等显式的表达方式。
  • NeRF使用类似光线追踪的方式创建新视角的图像。输入是采样点和观测的方向,输出是对应的RGB值和不透明度。

流程

Refer
  1. 输入信息:NeRF 将3D空间中的点(例如摄像机的位置)和观察方向作为输入。
  2. 神经网络映射:通过一个MLP(多层感知器)神经网络,将每个3D坐标点和观察方向映射到颜色和体素密度。网络的输出包含颜色(RGB)和体密度(衡量光线穿过该点的透明度)。
  3. 体渲染技术:NeRF 使用体渲染公式,即光线穿过场景的过程。具体来说,它沿着光线方向对多个点进行采样,并根据体密度和颜色计算每个点的贡献,进而得出最终的像素值。
  4. 损失函数:通过多视图监督进行训练,NeRF会在场景中从多个视角捕获图像,将渲染的像素值与真实图像进行对比,并通过优化损失函数不断调整网络参数,逐步逼近真实场景。
  5. 生成新视角:训练完成后,NeRF 能够在未见过的视角上生成图像,实现自由的3D视角切换和逼真的场景合成。

网络结构

network
  • 不透明度只和空间位置有关,颜色与空间位置和视角有关。

实现细节

MLP网络

  • 层数:NeRF的网络由10个隐藏层组成,前9层包含256个神经元,最后一层包含128个神经元。
  • 分支结构:NeRF的MLP有一个特定的分支结构。前8层用于处理空间位置信息(x,y,z),生成了隐变量(latent features)。这些特征被用来预测体密度(density),以表示该点在场景中的不透明度。
  • 跳跃连接:位置编码后的输入会与网络中间层(第5层)相连,作为跳跃连接(skip connection),帮助网络在深层结构中保持空间信息的细节。

位置编码

  • NeRF 使用了傅里叶特征来将输入的3D坐标和视角方向进行编码,这种方式称为位置编码(Positional Encoding)。具体来说,它将输入扩展到高频率空间,这样网络就能够学习更细腻的细节。
  • 对于坐标 (x,y,z)(x, y, z)(x,y,z) 和方向 (θ,ϕ),每个输入维度会生成多个不同频率的正余弦特征,以捕捉场景中的复杂空间结构。

体渲染

​ 从焦点到一个像素上连的射线为r(t)=o+td,其中其中o是原点,t是距离。距离起点(near bound)和距离终点(far bound)为tntf

​ 获得像素颜色的公式:

color

​ 这个式子积分里面是T(t)密度 σ(r(t))和颜色c(r(t),d)的乘积,其中T(t)是累积透光率,表示光线射到这“还剩多少光”。实际渲染过程是把射线平均分成N个小区间,每个区间随机采样一个点,对采样得到的点的颜色进行某种加权求和。

相关工作

NeRF2Mesh

NeRF2Mesh

最左侧的立方体就是Nerf所构建的三维数据,它包含离散点的三维坐标、不透明度(density)以及rgb色彩。 Nerf2Mesh的整体结构也像图中分为上下两个分支:

  • 密度分支 (Density field):首先利用NeRF生成的密度场划分出体素,再用Marching Cubes生成三角网格,再进行优化。
  • 外观分支 (Appearance Field):Nerf输出的内容(RGB)经过MLP1提取特征,然后分成两个分支分别提取漫反射和镜面反射(镜面反射会多经过一个MLP层)的分量。

3D Gaussian Splatting

原理

3D Gaussian Splatting 的核心思想是用高斯分布来表示 3D 空间中的点云,将场景中的点用 3D 高斯函数表示。这些高斯函数即“高斯球”,通过一组参数(均值、协方差矩阵等)来描述位置、方向、大小和形状。相比于单纯的点云,使用高斯分布可以更好地对点的位置和形状进行逼真地表达,使得结果更平滑并且抗噪性更好。

在渲染过程中,场景以相机视角来观察这些高斯分布的点,生成一个图像。每个像素的颜色和透明度是通过聚合沿视线方向的高斯球信息来计算的。这些高斯分布产生的重叠区域,通过数学上的加权平均可以很好地呈现出自然的模糊边缘,避免了传统点云中颗粒状的视觉问题。

流程

3DGS
  1. 点云采样:使用SfM从一组图像中估计出点云,可以直接调用 COLMAP 库操作
  2. 高斯分布:将每个点分配一个高斯分布。初始高斯分布通过位置、颜色、透明度和协方差矩阵等参数来定义。
  3. 投影变换:通过投影操作将 3D 高斯分布映射到相机视角下的 2D 图像平面。
  4. 光栅化:对投影后的高斯分布进行渲染。
  5. 优化:通过计算图像与目标图像之间的损失,反向传播梯度(Gradient Flow)来调整高斯参数。以及自适应地调整高斯分布的密度。

实现细节

三维高斯属性

用三维高斯分布构建基础元素,属性有中心μ、不透明度α、三维协方差矩阵(表示缩放程度)Σ和颜色c。其中颜色c与视角有关,由球谐函数表示。

球谐函数的示例:

球谐函数

(图源:3DGS综述以及对3DGS的理解:A Survey on 3D Gaussian Splatting - 知乎

自适应密度控制

自适应密度控制
  • Under-Reconstruction: 复制一个当前高斯分布的副本,然后沿着位置梯度方向移动它。
  • Over-Reconstruction: 将当前高斯分布分割成两个较小的高斯分布,再对其进行移动。

点的剪枝

对于冗余的高斯分布,在迭代过程中会逐渐消除。不透明度太低的高斯分布和过大的高斯分布都会在迭代中逐渐消除。以节省资源。

Tile

为了降低运算成本,3DGS将图像分割为数个不重叠的patch,称为tile,每个tile16×16像素。在此基础上,3DGS计算投影后的高斯与tile的相交情况。由于高斯可能与多个tile相交,所以对其进行了复制,并为其分配tile的标识符。不同的tile可以在不同的线程或 GPU 核心上同时计算,避免了对同一像素的竞争。

对比

场景绘制

  • NeRF使用光线追踪来创建新视点的图像。通过模拟从像素位置发射的光线来计算图像中每个像素的颜色,运行速度较慢。但渲染更真实。
  • 3DGS 使用光栅化来创建新视点的图像,通过Splatting进行渲染,运算速度更快,但3DGS创建了数百万个gaussion,占用的内存比NeRF多数倍。

3D重建

  • NeRF的输出需要借助其他方法转为显式输出,如NeRF2Mesh。
  • 3DGS训练后最终得到的是一个文件,其中包含每个高斯的高斯参数列表,例如位置、大小、颜色和透明度。3DGS的输出是比较显式的表达。

在CSDN上有一个3DGS和NeRF的对比表格,但数据来源并未标明,可靠性存疑(而且他的3DGS怎么是3D Geometry Sensing的缩写,虽然他给的结构图确实是3D高斯的):

对比维度3DGS (3D Geometry Sensing)NeRF (Neural Radiance Fields)
基本原理基于几何推断,通过多视角图像、深度传感器、LiDAR等获取显式3D几何信息。基于神经网络拟合体积辐射场,通过多视角图像学习隐式表示,渲染出场景。
输入数据多视角图像、深度信息(LiDAR、ToF相机)、位姿数据、点云。多视角图像(通常包括相机位姿),不需要显式的几何信息。
输出结果点云、网格、三角形模型、深度图、纹理映射等显式几何结构。通过体积渲染生成逼真图像(视角相关),不直接输出几何模型。
数据处理方式使用几何关系(如三角测量、立体视觉等)来显式重建场景结构。使用神经网络隐式建模颜色和密度,通过体积渲染生成图像。
几何信息显式获取3D几何信息,可以精确测量物体的距离和形状。隐式推断几何信息,主要用于图像渲染,几何结构不直接输出。
渲染效果依赖于重建的几何结构,渲染效果有限,尤其在复杂光线场景下效果一般。渲染效果非常逼真,尤其在反射、遮挡、折射等复杂光照场景表现优异。
计算资源需求需要较强的几何计算能力,数据获取通常依赖于多传感器系统(LiDAR等)。需要高计算资源,特别是训练神经网络的过程计算量大,通常依赖于GPU。
渲染速度实时性较好,特别是有深度传感器时可实现快速重建。渲染速度较慢,尤其在训练阶段耗时长,但有即时渲染版本。
应用场景自动驾驶、机器人导航、工业检测、3D建模、AR/VR、精密测量。电影视觉特效、虚拟旅游、虚拟现实内容生成、复杂光照场景的渲染。
优点可以显式建模、精确几何测量、适用于实时应用;深度传感器辅助时重建精度高。渲染质量极高,能处理复杂的光照、遮挡问题;不需要昂贵的深度传感器。
缺点在处理复杂光照(如透明物体、反射面)时效果不佳,依赖昂贵的传感器数据。渲染速度慢,训练时间长,初始设计不擅长生成明确的几何信息。
几何建模精度高,适合用于需要精确几何信息的场景(如测量、导航、物理模拟等)。几何建模是隐式的,主要依赖于神经网络推断,不适合用于测量等任务。
光照处理处理复杂光线条件较困难,通常需要额外的算法来应对光线反射和折射。对复杂光照场景处理效果出色,能够处理反射、折射、遮挡等问题。
实时性实时性较强,特别是在配合LiDAR等传感器时。需要较长的时间进行训练和渲染,不适合实时应用(加速版本除外)。
数据获取成本高,需要多视角相机或昂贵的深度传感器(如LiDAR)。低,仅需多视角图像数据,不依赖于专门的传感器。

(表源:【3dgs】3DGS与NeRF对比_nerf和3dgs区别-CSDN博客

  • 标题: NeRF和3DGS对比
  • 作者: Felix Christian
  • 创建于 : 2024-10-30 19:07:05
  • 更新于 : 2024-12-09 15:54:14
  • 链接: https://felixchristian.top/2024/10/30/04-NeRFvs3DGS/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论