3DGS与NeRF的区别及3DGS优化全流程详解
1. 3DGS与NeRF的区别NeRFNeural Radiance Fields和3DGS3D Gaussian Splatting是当前三维场景重建与渲染领域的两大主流技术它们在表示方式、渲染流程、性能和应用场景上存在显著差异。1.1 表示方式NeRF采用隐式神经表示。场景被建模为一个连续函数输入空间位置和观察方向输出该点的颜色和体密度。# NeRF隐式函数表示 (F_{\theta}(\mathbf{x}, \mathbf{d}) \rightarrow (\mathbf{c}, \sigma))3DGS采用显式3D高斯表示。场景由一组离散的、可学习的3D高斯椭球构成。每个高斯椭球由以下参数定义位置均值协方差矩阵控制椭球的形状和方向不透明度颜色通过球谐函数SH系数表示1.2 渲染流程NeRF基于体渲染Volume Rendering。沿相机光线采样多个点通过神经网络查询每个点的颜色和密度然后通过数值积分如分层采样合成最终像素颜色。体渲染公式其中为透射率。3DGS基于可微光栅化Differentiable Rasterization。将每个3D高斯椭球投影到2D图像平面形成2D高斯核然后通过alpha-blending按深度排序合成像素颜色。投影后的2D协方差矩阵其中为视图变换矩阵为投影雅可比矩阵。像素颜色合成公式alpha-blending其中为按深度排序后覆盖该像素的高斯集合。1.3 性能与特性对比特性NeRF3DGS表示方式隐式神经网络显式3D高斯集合渲染速度慢需多次网络前向快可微光栅化实时训练速度慢数小时至数天快数分钟至数小时显存占用较低网络参数较高存储大量高斯参数编辑性困难隐式表示容易显式可增删改高斯压缩性一般网络权重较好可量化、剪枝质量高连续细节好高近年已接近NeRF2. 3DGS优化全流程3DGS的优化是一个从稀疏点云初始化为起点通过可微渲染、损失计算、参数更新、自适应密度控制等步骤迭代优化的过程。2.1 初始化通常从运动恢复结构SfM得到的稀疏点云开始。每个点云点被初始化为一个各向同性的3D高斯位置点云坐标协方差初始为球体不透明度颜色SH系数初始为视图无关的漫反射颜色2.2 可微渲染与损失函数每一轮迭代对训练视图进行可微渲染得到预测图像并与真实图像比较计算损失。常用损失函数为L1损失与SSIM损失的加权和其中。2.3 参数优化使用梯度下降法如Adam更新所有高斯的参数位置协方差矩阵实际优化缩放和旋转四元数不透明度球谐系数协方差矩阵由缩放和旋转参数重建其中为由四元数转换的旋转矩阵。2.4 自适应密度控制这是3DGS优化的核心机制用于动态增加克隆/分裂或删除修剪高斯以更好地覆盖场景几何。克隆对于位置梯度大的高斯位于重建不足区域将其复制一份并沿位置梯度方向轻微扰动。分裂对于尺度过大协方差矩阵特征值过大的高斯将其分裂为两个更小的高斯以增加局部细节。修剪定期移除不透明度低于阈值如0.005或体积过小的高斯以控制总数。2.5 优化流程伪代码# 初始化 gaussians initialize_from_sfm(point_cloud) optimizer Adam(gaussians.parameters()) for iteration in range(max_iterations): # 1. 可微渲染 rendered_image differentiable_rasterization(gaussians, camera_pose) # 2. 计算损失 loss (1 - lambda) * L1_loss(rendered_image, gt_image) lambda * (1 - SSIM(rendered_image, gt_image)) # 3. 反向传播 loss.backward() optimizer.step() optimizer.zero_grad() # 4. 自适应密度控制每N次迭代执行 if iteration % density_control_interval 0: # 克隆梯度大的高斯 clone_gaussians_with_large_gradients(gaussians) # 分裂尺度过大的高斯 split_large_gaussians(gaussians) # 修剪不透明度过低的高斯 prune_opaque_gaussians(gaussians, threshold0.005) # 5. 重置不透明度可选避免饱和 reset_opacity(gaussians)2.6 收敛与输出优化完成后得到一组优化的3D高斯集合可用于实时渲染在新视角下通过光栅化快速生成图像。场景编辑直接修改、添加或删除特定高斯。压缩与传输对高斯参数