当前位置: 首页 > news >正文

SuGAR代码精简解读

目录

一、全流程训练脚本 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高斯点云模型并优化网格
流程

  1. 参数解析

    • 必需参数:场景路径 --scene_path、正则化类型 --regularization_type (sdf/density/dn_consistency)
    • 关键可选参数:
      • --gs_output_dir:预训练3DGS模型路径(跳过基础训练)
      • --low_poly:自动设置低精度网格(20万顶点,6高斯/三角面)
      • --high_poly:高精度网格(100万顶点,1高斯/三角面)
      • --export_obj:默认启用,导出带纹理网格
  2. 训练Vanilla 3DGS

    • 若未提供预训练模型,自动训练7000步基础3D高斯点云模型
    • 输出路径:./output/vanilla_gs/[场景名]/

二、核心训练逻辑 train.py

阶段目标关键技术
1. 粗优化基础几何成型SDF/密度正则化、深度-法线一致性约束
2. 提网格生成三角网格表面Marching Cubes(体素化)或Poisson表面重建
3. 精优化绑定高斯点到网格并细化网格顶点位置学习、法线一致性损失
4. 加纹理生成UV纹理贴图网格光栅化投影、多视角颜色融合
  1. 粗优化 (coarse_density_and_dn_consistency.py)

    • SDF正则化
      • 采样100万点估计符号距离场(sdf_estimation_mode='density'
      • 损失函数:投影法(直接几何计算)或深度差异法(需渲染深度图)
    • 渐进式训练
      • 9000步后启用SDF约束和法线优化
      • SH系数从1阶逐步增加到4阶(do_sh_warmup
  2. 网格提取 (extract_mesh_from_coarse_sugar)

    • 方法选择
      • Marching Cubes:512³体素分辨率提取等值面(surface_level=0.3
      • Poisson重建:基于表面点云生成网格,后处理(去退化三角面、重复顶点)
    • 路径规则
      ./output/coarse_mesh/[场景名]/sugarmesh_[模型名]_level[阈值]_decim[顶点数].ply
      # 示例:sugarmesh_3Dgs7000_densityestim02_sdfnorm02_level03_decim1000000.ply
      
  3. 精优化 (refined_training)

    • 学习率调整:spatial_lr_scale = 10 * 场景半径 / sqrt(顶点数)
    • 启用 bind_to_surface_mesh=True 时:
      • 高斯点位置由网格顶点+重心坐标计算
      • 优化目标转为网格几何平滑性(Laplacian损失、法线一致性损失)
  4. 纹理生成 (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.​网格法线一致性损失​

在网格中,每条边相邻的两个三角面片的法线应该尽可能一致(即共面)。该损失通过计算共享一条边的两个面的法线之间的夹角余弦值来度量。

作用:促进网格形成光滑曲面。

http://www.lryc.cn/news/573486.html

相关文章:

  • C++ 中 QVector 的判断与操作
  • 探索阿里云容器:解锁云原生应用的无限可能
  • [TPAMI 2022]HGNN: General Hypergraph Neural Networks+
  • Qt + C++ 入门2(界面的知识点)
  • [muduo] ThreadPool | TcpClient | 异步任务 | 通信测试
  • 【单调栈】-----【Largest Rectangle in a Histogram】
  • NuttX Socket 源码学习
  • C++ 第一阶段项目一:实现简易计算器
  • MCPServer编程与CLINE配置调用MCP
  • Taro 状态管理全面指南:从本地状态到全局方案
  • 人工智能学习57-TF训练
  • 逆向入门(16)程序逆向篇-Cabeca
  • 成长笔记——多串口发送与接收
  • Python 数据分析与可视化 Day 3 - Pandas 数据筛选与排序操作
  • springboot垃圾分类网站
  • 关于 Kyber:抗量子密码算法 Kyber 详解
  • 【软考高级系统架构论文】论多源数据集成及应用
  • 组件之间的双向绑定:v-model
  • GitHub OAuth 认证示例
  • 闲庭信步使用SV进行图像处理系列教程介绍
  • 2025年- H83-Lc191--139.单词拆分(动态规划)--Java版
  • 吴恩达:从斯坦福到 Coursera,他的深度学习布道之路
  • C++基础练习-二维数组
  • C++ 文件读写
  • GPT-1 与 BERT 架构
  • 开源项目分析:EDoRA | 了解如何基于peft实现EDoRA方法
  • 【软考高级系统架构论文】论无服务器架构及其应用
  • 博图SCL语言GOTO语句深度解析:精准跳转
  • 深入解析ID3算法:信息熵驱动的决策树构建基石
  • GO语言---数组