目录
一、全流程训练脚本 train_full_pipeline.py
二、核心训练逻辑 train.py
粗优化 (coarse_density_and_dn_consistency.py)
网格提取 (extract_mesh_from_coarse_sugar)
精优化 (refined_training)
两次优化(粗优化和精优化)中使用的损失函数及其作用如下:
一、粗优化阶段(coarse_density_and_dn_consistency.py)
1.基础重建损失 (L1 + DSSIM)
2.深度-法线一致性损失
3.SDF正则化损失
1. SDF估计损失 (use_sdf_estimation_loss)
2.法线正则化损失
3.表面采样损失
4.熵正则化
二、精优化阶段(refined_training)核心损失函数及其作用:
1.loss_fn损失
2.网格法线一致性损失
详细流程见SuGaR代码解读_freetimegs: free gaussian primitives at anytime an-CSDN博客
一、全流程训练脚本 train_full_pipeline.py
功能:自动化训练3D高斯点云模型并优化网格
流程:
-
参数解析
- 必需参数:场景路径
--scene_path
、正则化类型--regularization_type
(sdf/density/dn_consistency) - 关键可选参数:
--gs_output_dir
:预训练3DGS模型路径(跳过基础训练)--low_poly
:自动设置低精度网格(20万顶点,6高斯/三角面)--high_poly
:高精度网格(100万顶点,1高斯/三角面)--export_obj
:默认启用,导出带纹理网格
- 必需参数:场景路径
-
训练Vanilla 3DGS
- 若未提供预训练模型,自动训练7000步基础3D高斯点云模型
- 输出路径:
./output/vanilla_gs/[场景名]/
二、核心训练逻辑 train.py
阶段 | 目标 | 关键技术 |
---|---|---|
1. 粗优化 | 基础几何成型 | SDF/密度正则化、深度-法线一致性约束 |
2. 提网格 | 生成三角网格表面 | Marching Cubes(体素化)或Poisson表面重建 |
3. 精优化 | 绑定高斯点到网格并细化 | 网格顶点位置学习、法线一致性损失 |
4. 加纹理 | 生成UV纹理贴图 | 网格光栅化投影、多视角颜色融合 |
-
粗优化 (
coarse_density_and_dn_consistency.py
)- SDF正则化:
- 采样100万点估计符号距离场(
sdf_estimation_mode='density'
) - 损失函数:投影法(直接几何计算)或深度差异法(需渲染深度图)
- 采样100万点估计符号距离场(
- 渐进式训练:
- 9000步后启用SDF约束和法线优化
- SH系数从1阶逐步增加到4阶(
do_sh_warmup
)
- SDF正则化:
-
网格提取 (
extract_mesh_from_coarse_sugar
)- 方法选择:
- Marching Cubes:512³体素分辨率提取等值面(
surface_level=0.3
) - Poisson重建:基于表面点云生成网格,后处理(去退化三角面、重复顶点)
- Marching Cubes:512³体素分辨率提取等值面(
- 路径规则:
./output/coarse_mesh/[场景名]/sugarmesh_[模型名]_level[阈值]_decim[顶点数].ply # 示例:sugarmesh_3Dgs7000_densityestim02_sdfnorm02_level03_decim1000000.ply
- 方法选择:
-
精优化 (
refined_training
)- 学习率调整:
spatial_lr_scale = 10 * 场景半径 / sqrt(顶点数)
- 启用
bind_to_surface_mesh=True
时:- 高斯点位置由网格顶点+重心坐标计算
- 优化目标转为网格几何平滑性(Laplacian损失、法线一致性损失)
- 学习率调整:
-
纹理生成 (
多视角渲染颜色融合到纹理像素(extract_mesh_and_texture_from_refined_sugar
)texture_with_gaussian_renders=True
),每个三角面分配独立纹理块(square_size=8
→ 2048×2048贴图)
两次优化(粗优化和精优化)中使用的损失函数及其作用如下:
一、粗优化阶段(coarse_density_and_dn_consistency.py)
1.基础重建损失 (L1 + DSSIM)
loss = (1.0 - dssim_factor) * l1_loss + dssim_factor * (1.0 - ssim)
作用:强制渲染图像在颜色(L1损失)和结构(DSSIM损失)上与真实图像对齐
2.深度-法线一致性损失
normal_error = 1 - (normal_view * normal_from_depth).sum(dim=0)
作用:通过比较渲染法线与深度图推导的法线,强化几何一致性,解决多视角法线方向冲突问题(如表面褶皱:在凹痕区域某些视角看到凸起,某些看到凹陷导致法线方向在各视角间矛盾)
启用时机:9,000次迭代后激活
3.SDF正则化损失
实现方式:在表面附近采样百万级点云;通过投影法或深度差异法计算SDF(有符号距离函数)
作用:
约束高斯分布形成连续表面(SDF=0处为表面)
解决点云松散问题(如空洞、孤岛点云)
启用时机:7,000次迭代后激活
1. SDF估计损失 (use_sdf_estimation_loss)
作用:确保预测的SDF值(有符号距离函数)与通过其他方式(如密度场或直接SDF预测)计算得到的SDF值一致。
2.法线正则化损失
原理:强制邻近高斯点法线方向一致
作用:消除表面噪声,增强几何平滑性,为后续网格提取提供干净的法线场
3.表面采样损失
通过约束采样点的SDF值趋近于0,使得这些采样点位于物体表面。
4.熵正则化
损失项的计算基于二元熵(Binary Entropy)公式:
H(p)=−plog(p)−(1−p)log(1−p)
作用:是促使每个高斯点的不透明度要么接近0(完全透明),要么接近1(完全不透明)
二、精优化阶段(refined_training)
核心损失函数及其作用:
1.loss_fn损失
(1.0 - dssim_factor) * l1_loss(pred_rgb, gt_rgb) + dssim_factor * (1.0 - ssim(pred_rgb, gt_rgb))
2.网格法线一致性损失
在网格中,每条边相邻的两个三角面片的法线应该尽可能一致(即共面)。该损失通过计算共享一条边的两个面的法线之间的夹角余弦值来度量。
作用:促进网格形成光滑曲面。