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:5123體素分辨率提取等值面(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
英文地址,請注明出處:http://en.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 不同年限要求招聘崗…