動態

詳情 返回 返回

3D Gaussian splatting 06: 代碼閲讀-訓練參數 - 動態 詳情

目錄

  • 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")
user avatar charlee44 頭像
點贊 1 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.