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.pswp.cn/news/910182.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/910182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型安全关键技术研究

​ 引言 随着人工智能技术的迅猛发展,大模型已成为推动各行业变革的核心力量。从智能客服、医疗影像识别到金融风险预测,大模型的应用场景不断拓展,深刻改变着人们的生产生活方式。大模型已经转变为AI领域的基础设施,为解决各种…

java面试题04成员变量和局部变量的区别

成员变量(Member Variable)和局部变量(Local Variable)是面向对象编程中两种作用域和生命周期不同的变量,主要区别体现在以下几个方面: 1. 声明位置 成员变量: 声明在类内部、方法/构造器/代码块外部。 例如: public class Person {// 成员变量(实例变量)private Str…

升级到 .NET 9 分步指南

随着激动人心的 .Net 9 更新正式发布,漫长的等待终于结束了。它带来了一些令人惊叹的特性,例如改进的 LINQ 功能、HybridCache 等等。此外,凭借其卓越的性能提升、更佳的安全性、更完善的协议和更易维护的特性,它必将吸引开发者和…

day30打卡

# 导入模块 import math print("方式1:使用 import math") print(f"圆周率π的值:{math.pi}") print(f"2的平方根:{math.sqrt(2)}\n") # 导入特定项 from math import pi, sqrt print("方式2&#…

优化数据库查询

优化数据库查询 在实际开发中,数据库查询的性能直接关系到系统响应速度和用户体验。尤其在高并发环境下,低效的SQL语句会成为瓶颈,导致系统负载升高,甚至引发宕机。因此,查询优化是数据库性能优化中最为关键的一环。 为了系统性地理解数据库查询优化策略,本节将从SQL语…

【LeetCode#第198题】打家劫舍(一维dp)

198. 打家劫舍 - 力扣(LeetCode) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入&#…

微前端MFE:(React 与 Angular)框架之间的通信方式

在 微前端&#xff08;MFE, Micro Frontends&#xff09; 中使用 CustomEvent 是非常常见的&#xff0c;尤其是在不同子应用&#xff08;Micro Apps&#xff09;之间通信的时候。今天将以React 主应用 ↔ Angular 子应用 之间的通信进行示例 React 主应用 <-> Angular 子…

408考研逐题详解:2010年第1题——理解栈的基本操作

2010年第1题 若元素 a&#xff0c;b&#xff0c;c&#xff0c;d&#xff0c;e&#xff0c;f 依次进栈&#xff0c;允许进栈、退栈操作交替进行&#xff0c;但不允许连续三次进行退栈操作&#xff0c;则不可能得到的出栈序列是&#xff08; &#xff09; A. dcebfa \qquad B.…

python追加合并excel效率记录

第一种合并方法&#xff1a; 在sheet的第一行&#xff0c;追加新表concat旧表 read_excel读取旧表全部 to_excel新表追加写入旧表 需要的时间&#xff1a; 第二种合并方法&#xff1a; 在sheet的最后一行&#xff0c;直接追加新表 load_book只读用来获取旧表sheet行数 read_ex…

公钥加密与签名算法计算详解(含计算题例子)

一、RSA 加密算法 密钥生成&#xff1a; 选两个大素数 p 和 q计算 n p q计算 φ(n) (p-1)(q-1)选整数 e 满足 1 < e < φ(n) 且 gcd(e, φ(n)) 1计算 d 满足 d e ≡ 1 mod φ(n) 公钥&#xff1a;(e, n) 私钥&#xff1a;(d, n) 加密&#xff1a; c ≡ mᵉ mod…

63 网络交互的过程中目标设备的选择

前言 这里主要是 调研一下 发送网络数据包的过程中 选择网络设备 比如 向本机发送信息, 走的是 lo 向局域网其他主机发送信息, 走无线网卡 或者 有线网卡 基于 linux 的调试 这里主要是基于 ping 192.168.1.2 的调试 skb->dev 的初始化是在 skb->_skb_refdst 初…

DE2-115板子上用 Verilog编程实现一个分秒计数器

一、实验目的 掌握 Verilog 语言在硬件描述中的应用&#xff0c;通过编程实现分秒计数器的逻辑功能。 学习并实践按键消抖的原理与实现方法&#xff0c;提升对硬件电路中信号处理的理解。 熟悉在 DE2-115 开发板上进行 Verilog 程序的开发、调试及下载验证流程&#xff0c;将…

R4 LSTM-火灾温度预测

import tensorflow as tf import pandas as pd import numpy as npgpus tf.config.list_physical_devices("GPU") if gpus:tf.config.experimental.set_memory_growth(gpus[0], True) #设置GPU显存用量按需使用tf.config.set_visible_devices([gpus[0]],&…

什么是跨域问题?后端如何解决跨域问题?

跨域问题是指浏览器为了安全&#xff0c;对不同域&#xff08;包含不同协议、不同端口或不同主机名&#xff09;的请求进行限制&#xff0c;从而导致请求无法正常访问后端接口。 跨域问题的产生源于浏览器的同源策略&#xff08;Same-Origin Policy&#xff09;&#xff0c;这…

vue | rollup 打包 | 配置 rollup.config.js 文件,更改 rollup的行为

原因&#xff1a;将入口文件 转为 esm 和 umd 两种格式&#xff0c;要配置 rollup Rollup 已内置到 vite 工具中&#xff0c; 命令行打包&#xff0c;参数多&#xff0c;麻烦——》解决&#xff1a;创建配置文件&#xff0c;js 写的&#xff0c;rollup.config.js 配置 rollup.…

服务器中物理处理器和逻辑处理器的区别?

在服务器或任何计算机系统中&#xff0c;**物理处理器&#xff08;Physical Processor&#xff09;和逻辑处理器&#xff08;Logical Processor&#xff09;**是两个不同的概念&#xff0c;它们分别代表了硬件层面和操作系统层面的处理能力。 物理处理器&#xff08;Physical P…

【Gin框架】中间件

1. 什么是中间件 (Middleware)&#xff1f; 在 Web 框架的语境下&#xff0c;中间件 (Middleware) 是一种可重用的软件组件或函数&#xff0c;它被设计用来在 HTTP 请求-响应生命周期中的特定点拦截和处理请求或响应。在 Gin 框架中&#xff0c;中间件特指符合 gin.HandlerFun…

STUN (Session Traversal Utilities for NAT) 服务器是一种网络协议

STUN (Session Traversal Utilities for NAT) 服务器是一种网络协议&#xff0c;主要用于帮助位于网络地址转换 (NAT) 设备&#xff08;如路由器&#xff09;后面的客户端发现自己的公共 IP 地址和端口号。这对于建立点对点 (P2P) 通信至关重要&#xff0c;尤其是在 VoIP&#…

AQS详解

概念 AQS&#xff08;AbstractQueuedSynchronizer&#xff09; 是并发包&#xff08;java.util.concurrent&#xff09;的核心组件&#xff0c;用于构建锁和同步器&#xff08;如 ReentrantLock、Semaphore、CountDownLatch 等&#xff09;。它通过维护一个 CLH 队列 和 同步状…

python实战项目76:51job数据采集与分析

python实战项目76:51job数据采集与分析 一、数据采集二、数据预处理2.1 导入相关库、读取数据2.2 查看数据2.3 处理数据、删除重复值、删除空值2.4 处理薪资水平字段数据三、数据可视化3.1 不同公司规模招聘岗位数量分布3.2 不同公司性质招聘岗位数量分布3.3 不同年限要求招聘岗…