在 3D Gaussian Splatting (3DGS) 中,ModelParams
、OptimizationParams
和 PipelineParams
是三个核心参数类,分别控制模型结构、优化策略和渲染流程。以下是它们的详细作用和相互关系:
一、参数类总览
参数类 | 主要作用 | 关键配置项示例 |
---|---|---|
ModelParams | 定义高斯模型的结构和初始化 | 点云来源、球谐阶数、初始点数 |
OptimizationParams | 控制训练优化策略 | 学习率、致密化规则、正则化权重 |
PipelineParams | 管理渲染流水线和输出设置 | 分辨率、抗锯齿、背景色、保存格式 |
二、ModelParams
:模型结构控制
作用:定义高斯分布的初始状态和基础架构。
关键参数:
sh_degree: int = 3 # 球谐函数阶数(控制颜色表达能力)
source_path: str = "" # COLMAP数据路径(sparse/和images/)
num_points: int = 100_000 # 初始点云数量
random_init: bool = False # 是否随机初始化(否则用COLMAP点云)
white_background: bool = False # 是否使用白色背景
data_device: str = "cuda" # 数据加载设备(CPU/GPU)
典型应用场景:
# 初始化高斯模型
gaussians = GaussianModel(model_params.sh_degree)
if not model_params.random_init:
point_cloud = load_colmap_data(model_params.source_path)
三、OptimizationParams
:训练优化策略
作用:控制高斯分布参数的优化过程。
关键参数:
# 学习率配置
position_lr_init: float = 0.00016 # 位置初始学习率
feature_lr: float = 0.0025 # 颜色特征学习率
opacity_lr: float = 0.05 # 不透明度学习率
# 致密化(Densification)控制
densify_grad_threshold: float = 0.0002 # 致密化梯度阈值: 设定触发高斯分布分裂或克隆的 梯度幅值阈值。
percent_dense: float = 0.01 # 每次致密化的比例
densification_interval: int = 100 # 致密化执行间隔,指定每隔多少轮训练迭代执行一次 致密化操作(Densification)。
opacity_reset_interval #表示每隔多少轮训练就重置一次所有高斯点的透明度,防止无效点长期残留。
# 正则化
lambda_dssim: float = 0.2 # 结构相似性损失权重
iterations: int = 30_000 # 总迭代次数
优化流程示例:
for iter in range(opt_params.iterations):
# 1. 前向渲染 + 计算损失
loss = render_loss(gaussians, lambda_dssim)
# 2. 反向传播
loss.backward()
# 3. 参数更新
optimizer.step()
# 4. 定期致密化
if iter % opt_params.densification_interval == 0:
densify(gaussians, opt_params)
四、PipelineParams
:渲染流水线设置
作用:管理渲染过程和输出配置。
关键参数:
convert_SHs_python: bool = False # 是否用Python计算球谐函数(慢但易调试)
compute_cov3D_python: bool = False # 是否用Python计算3D协方差
debug: bool = False # 是否输出调试信息
# 渲染器设置
background: torch.Tensor = [0, 0, 0] # 背景色(RGB)
preprocess: bool = True # 是否预加载数据到GPU
渲染流程控制:
def render(pipeline_params):
# 选择计算后端
if pipeline_params.compute_cov3D_python:
cov3D = compute_cov3D_python(gaussians)
else:
cov3D = compute_cov3D_cuda(gaussians) # 默认用CUDA加速
# 应用背景色
if pipeline_params.white_background:
bg_color = torch.ones(3)
# 执行光栅化
image = rasterize(
gaussians,
background=bg_color,
debug=pipeline_params.debug
)
五、三者的协作关系
六、参数调整策略
目标 | 建议调整的参数 |
---|---|
加快训练速度 | 降低 sh_degree 减小 iterations |
提高重建质量 | 增加 sh_degree 增大 lambda_dssim |
减少显存占用 | 减小 num_points 关闭Python后端 |
处理复杂几何 | 增大 percent_dense 降低梯度阈值 |
七、典型配置示例
# 高质量重建配置
model_params = ModelParams(
sh_degree=3,
source_path="colmap_data",
num_points=500_000
)
opt_params = OptimizationParams(
position_lr_init=0.0001,
lambda_dssim=0.3,
iterations=50_000
)
pipe_params = PipelineParams(
background=[0.1, 0.1, 0.1], # 深灰背景
compute_cov3D_python=False # 启用CUDA加速
)
八、常见问题解决
-
点云过度致密化 → 降低
percent_dense
或 增大densify_grad_threshold
-
颜色表现不自然 → 增加
sh_degree
或 检查feature_lr
是否过大 -
训练过程不稳定 → 减小
position_lr_init
或 启用debug=True
定位问题
总结
ModelParams
:模型结构的"蓝图",决定高斯分布的初始状态OptimizationParams
:训练过程的"指挥官",控制参数更新和几何优化PipelineParams
:渲染流水线的"调度员",管理计算后端和输出效果
三者协同工作,共同实现从稀疏点云到高质量3D重建的转换。实际应用中建议先使用默认参数,再根据具体场景逐步调优。
欢迎关注公众号AutoSIM,新技术分享抢先一步查看