【论文笔记】A Survey on 3D Gaussian Splatting

文章探讨了3D高斯溅射(3DGS),一种新的3D场景表达技术,它结合了神经网络和显式、隐式辐射场的优点,提供高效计算和动态控制。3DGS通过使用3D高斯进行实时、高分辨率渲染,适用于SLAM、动态场景建模和AIGC等应用,并在性能上超越了基于NeRF的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:https://arxiv.org/abs/2401.03890

1. 引言

NeRF在计算效率和可控性上具有局限性,这导致了3D高斯溅射(3D GS)的出现,重新定义了场景表达和渲染。

3D GS通过引入新的场景表达技术,用大量的3D高斯表达场景。3D GS使用显式的表达和高度并行化的工作流程,促进高效计算和渲染;其创新在于混合了可微渲染与基于点的渲染技术的优势。3D GS保留了连续体积辐射场的理想特性(有利于高质量图像渲染),同时避免了渲染空空间带来的计算开销。此外,3D GS的显式表达提供了对场景的动态控制能力。

2. 背景

2.1 问题定义

2.1.1 辐射场

辐射场是3D空间中光分布的表达,捕捉了环境中光与表面和材料的交互。神经场可表达为函数 L : R 5 → R + L:\mathbb{R}^5\rightarrow\mathbb{R}^+ L:R5R+,其中 L ( x , y , z , θ , ϕ ) L(x,y,z,\theta,\phi) L(x,y,z,θ,ϕ)将点 ( x , y , z ) (x,y,z) (x,y,z)和球坐标下的方向 ( θ , ϕ ) (\theta,\phi) (θ,ϕ)映射为非负辐射值。辐射场有显示表达和隐式表达。

2.1.2 隐式辐射场

隐式辐射场不显式地定义场景几何,通常使用神经网络学习连续体积场景表达。其代表NeRF使用MLP将坐标与视线方向映射为密度和颜色,不会显式存储,而是通过查询神经网络在线计算:
L implicit ( x , y , z , θ , ϕ ) = NeuralNetwork ( x , y , z , θ , ϕ ) L_\text{implicit}(x,y,z,\theta,\phi)=\text{NeuralNetwork}(x,y,z,\theta,\phi) Limplicit(x,y,z,θ,ϕ)=NeuralNetwork(x,y,z,θ,ϕ)

这一形式允许复制场景可微且紧凑的表达,但渲染时的射线行进有较高的计算复杂度。

2.1.3 显式辐射场

显式辐射场直接在离散空间结构中表达光的分布,如体素或点集。结构中的每个元素存储了相应位置的辐射信息。这一方法通常能更直接、更快地获取辐射数据,但需要大量存储空间,且分辨率可能受限。通常形式为:
L explicit ( x , y , z , θ , ϕ ) = DataStructure [ ( x , y , z ) ] ⋅ f ( θ , ϕ ) L_\text{explicit}(x,y,z,\theta,\phi)=\text{DataStructure}[(x,y,z)]\cdot f(\theta,\phi) Lexplicit(x,y,z,θ,ϕ)=DataStructure[(x,y,z)]f(θ,ϕ)

其中 DataStructure \text{DataStructure} DataStructure为网格或点云, f f f为基于视线方向修改辐射的函数。

2.1.4 3D高斯溅射

3D GS使用3D高斯作为灵活且高效的表达,从而利用了隐式和显式辐射场的优势。高斯可通过基于神经网络的优化来精确表达场景,但进行的是显式、结构化的数据存储。这种混合方法能进行高质量渲染,且训练更快、有实时性。3D高斯表达可表示为:
L 3DGS ( x , y , z ,

### 实现3D高斯溅射自适应密度算法 #### 理解基本概念 3D 高斯溅射是一种用于表示和渲染复杂场景的技术,在该方法中,物体由大量带有方向性的高斯分布函数来近似描述。这些高斯分布在空间中的位置、大小以及形状可以灵活调整以匹配目标几何体或外观特征[^1]。 对于自适应密度部分而言,这意味着可以根据局部结构特性动态改变各个高斯组件的数量及其参数设置,从而更高效地捕捉不同尺度下的细节变化并减少冗余计算开销[^2]。 #### 关键技术要点 为了实现这一过程,通常涉及以下几个方面: - **初始化阶段**:通过某种方式(例如基于图像分析或其他先验信息)确定初始的一组稀疏分布的种子点作为潜在的高斯中心候选; - **优化迭代**:利用特定准则评估当前配置下各处拟合误差,并据此更新相应权重、协方差矩阵等属性直至收敛; - **细化处理**:当达到一定精度水平后进一步引入更多细粒度单元填补空白区域或者增强边界过渡效果。 #### Python代码示例 下面给出一段简化版Python伪代码展示如何构建这样一个系统框架: ```python import numpy as np class GaussianSplatting: def __init__(self, points): self.points = points # 输入的空间坐标集合 def initialize(self): """ 初始化一组随机分布的高斯核 """ num_gaussians = int(len(self.points) * 0.1) # 假设选取10%的数据量作为起点 indices = np.random.choice(range(len(self.points)), size=num_gaussians, replace=False) means = [self.points[i] for i in indices] covariances = [np.eye(3)*0.5]*num_gaussians # 初始设定较小的标准偏差 weights = [1/len(means)]*len(means) return {'means': means, 'covariances': covariances, 'weights': weights} def optimize(self, params): """ 对给定参数执行EM算法进行最大似然估计 """ pass def refine(self, optimized_params): """ 根据优化后的结果添加新的高斯项提高分辨率 """ pass if __name__ == "__main__": sample_points = [[x,y,z] for x in range(-5,6) for y in range(-5,6) for z in range(-5,6)] gs = GaussianSplatting(sample_points) initial_guesses = gs.initialize() final_estimates = gs.optimize(initial_guesses) refined_model = gs.refine(final_estimates) ``` 上述例子仅提供了一个非常基础的概念验证版本,实际应用时还需要考虑很多因素比如性能优化、鲁棒性改进等问题[^3]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值