目錄
一、全流程訓練腳本?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:5123體素分辨率提取等值面(
surface_level=0.3
) - Poisson重建:基于表面點云生成網格,后處理(去退化三角面、重復頂點)
- Marching Cubes:5123體素分辨率提取等值面(
- 路徑規則:
./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.?網格法線一致性損失?
在網格中,每條邊相鄰的兩個三角面片的法線應該盡可能一致(即共面)。該損失通過計算共享一條邊的兩個面的法線之間的夾角余弦值來度量。
作用:促進網格形成光滑曲面。