目錄
- 3D Gaussian splatting 01: 環境搭建
- 3D Gaussian splatting 02: 快速評估
- 3D Gaussian splatting 03: 用户數據訓練和結果查看
- 3D Gaussian splatting 04: 代碼閲讀-提取相機位姿和稀疏點雲
- 3D Gaussian splatting 05: 代碼閲讀-訓練整體流程
- 3D Gaussian splatting 06: 代碼閲讀-訓練參數
- 3D Gaussian splatting 07: 代碼閲讀-訓練載入數據和保存結果
- 3D Gaussian splatting 08: 自建模型展示網頁
訓練參數
訓練程序入參除了訓練過程參數, 另外設置了ModelParams, OptimizationParams, PipelineParams三個參數組, 分別控制數據加載、渲染計算和優化訓練環節, 這些參數類共同構成3D高斯渲染模型的核心配置. 在項目的 README.md 中有大部分參數的説明.
以下在註釋中標出主要參數的含義
訓練過程參數
# Set up command line argument parser
parser = ArgumentParser(description="Training script parameters")
# 模型相關參數
lp = ModelParams(parser)
op = OptimizationParams(parser)
pp = PipelineParams(parser)
# 用於連接到訓練過程的IP
parser.add_argument('--ip', type=str, default="127.0.0.1")
# 用於連接到訓練過程的端口
parser.add_argument('--port', type=int, default=6009)
# 因為debug影響速度, 通過這個參數可以指定從哪個迭代開始啓用 debug.
parser.add_argument('--debug_from', type=int, default=-1)
parser.add_argument('--detect_anomaly', action='store_true', default=False)
# 在哪些迭代上, 對整個數據集計算 L1 和 PSNR
parser.add_argument("--test_iterations", nargs="+", type=int, default=[7_000, 30_000])
# 在哪些迭代上保存高斯模型
parser.add_argument("--save_iterations", nargs="+", type=int, default=[7_000, 30_000])
# 過程不往屏幕輸出
parser.add_argument("--quiet", action="store_true")
# 不啓動網絡 GUI server
parser.add_argument('--disable_viewer', action='store_true', default=False)
# 在哪些迭代上保存 checkpoint, 以便將來繼續訓練
parser.add_argument("--checkpoint_iterations", nargs="+", type=int, default=[])
# 指定保存了 checkpoint 的路徑, 用於繼續訓練
parser.add_argument("--start_checkpoint", type=str, default = None)
args = parser.parse_args(sys.argv[1:])
模型參數
class ModelParams(ParamGroup):
def __init__(self, parser, sentinel=False):
# 球諧函數的最大階數, 在創建 GaussianModel 時, 賦給 max_sh_degree
self.sh_degree = 3
# 數據源路徑, 即convert.py的工作目錄, 目錄下有提取相機位姿和稀疏點雲後產生的 images, sparse 這些子目錄
self._source_path = ""
# 模型保存路徑, 為空時會在output目錄下創建隨機目錄
self._model_path = ""
# 圖像目錄名
self._images = "images"
# 深度圖目錄
self._depths = ""
# 圖像分辨率, 指定分辨率, 1:原始分辨率, 2:1/2, 4:1/4, 8:1/8
self._resolution = -1
# 是否使用白色背景
self._white_background = False
# 訓練/測試實驗標誌
self.train_test_exp = False
# 指定存儲圖像數據的設備, 默認是cuda, 但是如果圖像數據較多, 分辨率高, 改成cpu可以節省VRAM消耗, 相應的會影響訓練速度
self.data_device = "cuda"
# 評估模式標誌
self.eval = False
super().__init__(parser, "Loading Parameters", sentinel)
渲染管線參數
class PipelineParams(ParamGroup):
def __init__(self, parser):
# 使用 Pytorch (而不是項目定義的前向和後向傳播函數) 處理球諧函數
self.convert_SHs_python = False
# 使用 Pytorch (而不是項目定義的前向和後向傳播函數) 計算3D協方差
self.compute_cov3D_python = False
# 調試模式, 當 rasterizer 失敗時會生成 dump 文件.
self.debug = False
# 抗鋸齒開關
self.antialiasing = False
super().__init__(parser, "Pipeline Parameters")
訓練過程優化參數
class OptimizationParams(ParamGroup):
def __init__(self, parser):
# 總迭代次數, 默認30000
self.iterations = 30_000
# 3D位置學習率初始值
self.position_lr_init = 0.00016
# 3D位置學習率最終值
self.position_lr_final = 0.0000016
# 位置學習率乘數
self.position_lr_delay_mult = 0.01
# 3D位置學習率從 initial 衰減至 final 所需的步數(從0開始), 默認 30000
self.position_lr_max_steps = 30_000
# 球諧特徵量學習率
self.feature_lr = 0.0025
# 透明度學習率
self.opacity_lr = 0.025
# 縮放參數學習率
self.scaling_lr = 0.005
# 旋轉參數學習率
self.rotation_lr = 0.001
# 曝光度參數學習率初始值, 最終值, 步數等
self.exposure_lr_init = 0.01
self.exposure_lr_final = 0.001
self.exposure_lr_delay_steps = 0
self.exposure_lr_delay_mult = 0.0
# 觸發強制增密的場景空間佔比閾值(範圍0到1), 默認 0.01
self.percent_dense = 0.01
# SSIM在總損失函數中的權重係數
self.lambda_dssim = 0.2
# 點雲密集化的執行間隔, 默認每100次迭代執行一次
self.densification_interval = 100
# 不透明度重置頻率
self.opacity_reset_interval = 3000
# 開始執行點雲密集化的迭代次數
self.densify_from_iter = 500
# 停止執行點雲密集化的迭代次數
self.densify_until_iter = 15_000
# 基於2D位置梯度判斷是否增密點的閾值
self.densify_grad_threshold = 0.0002
self.depth_l1_weight_init = 1.0
self.depth_l1_weight_final = 0.01
# 隨機背景
self.random_background = False
# 優化器類型
self.optimizer_type = "default"
super().__init__(parser, "Optimization Parameters")