找回密码
 立即注册
首页 业界区 科技 3D Gaussian splatting 06: 代码阅读-训练参数

3D Gaussian splatting 06: 代码阅读-训练参数

砂歹汤 4 天前
目录


  • 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 中有大部分参数的说明.
以下在注释中标出主要参数的含义
训练过程参数
  1.     # Set up command line argument parser
  2.     parser = ArgumentParser(description="Training script parameters")
  3.     # 模型相关参数
  4.     lp = ModelParams(parser)
  5.     op = OptimizationParams(parser)
  6.     pp = PipelineParams(parser)
  7.     # 用于连接到训练过程的IP
  8.     parser.add_argument('--ip', type=str, default="127.0.0.1")
  9.     # 用于连接到训练过程的端口
  10.     parser.add_argument('--port', type=int, default=6009)
  11.     # 因为debug影响速度, 通过这个参数可以指定从哪个迭代开始启用 debug.
  12.     parser.add_argument('--debug_from', type=int, default=-1)
  13.     parser.add_argument('--detect_anomaly', action='store_true', default=False)
  14.     # 在哪些迭代上, 对整个数据集计算 L1 和 PSNR
  15.     parser.add_argument("--test_iterations", nargs="+", type=int, default=[7_000, 30_000])
  16.     # 在哪些迭代上保存高斯模型
  17.     parser.add_argument("--save_iterations", nargs="+", type=int, default=[7_000, 30_000])
  18.     # 过程不往屏幕输出
  19.     parser.add_argument("--quiet", action="store_true")
  20.     # 不启动网络 GUI server
  21.     parser.add_argument('--disable_viewer', action='store_true', default=False)
  22.     # 在哪些迭代上保存 checkpoint, 以便将来继续训练
  23.     parser.add_argument("--checkpoint_iterations", nargs="+", type=int, default=[])
  24.     # 指定保存了 checkpoint 的路径, 用于继续训练
  25.     parser.add_argument("--start_checkpoint", type=str, default = None)
  26.     args = parser.parse_args(sys.argv[1:])
复制代码
模型参数
  1. class ModelParams(ParamGroup):
  2.     def __init__(self, parser, sentinel=False):
  3.         # 球谐函数的最大阶数, 在创建 GaussianModel 时, 赋给 max_sh_degree
  4.         self.sh_degree = 3
  5.         # 数据源路径, 即convert.py的工作目录, 目录下有提取相机位姿和稀疏点云后产生的 images, sparse 这些子目录
  6.         self._source_path = ""
  7.         # 模型保存路径, 为空时会在output目录下创建随机目录
  8.         self._model_path = ""
  9.         # 图像目录名
  10.         self._images = "images"
  11.         # 深度图目录
  12.         self._depths = ""
  13.         # 图像分辨率, 指定分辨率, 1:原始分辨率, 2:1/2, 4:1/4, 8:1/8
  14.         self._resolution = -1
  15.         # 是否使用白色背景
  16.         self._white_background = False
  17.         # 训练/测试实验标志
  18.         self.train_test_exp = False
  19.         # 指定存储图像数据的设备, 默认是cuda, 但是如果图像数据较多, 分辨率高, 改成cpu可以节省VRAM消耗, 相应的会影响训练速度
  20.         self.data_device = "cuda"
  21.         # 评估模式标志
  22.         self.eval = False
  23.         super().__init__(parser, "Loading Parameters", sentinel)
复制代码
渲染管线参数
  1. class PipelineParams(ParamGroup):
  2.     def __init__(self, parser):
  3.         # 使用 Pytorch (而不是项目定义的前向和后向传播函数) 处理球谐函数
  4.         self.convert_SHs_python = False
  5.         # 使用 Pytorch (而不是项目定义的前向和后向传播函数) 计算3D协方差
  6.         self.compute_cov3D_python = False
  7.         # 调试模式, 当 rasterizer 失败时会生成 dump 文件.
  8.         self.debug = False
  9.         # 抗锯齿开关
  10.         self.antialiasing = False
  11.         super().__init__(parser, "Pipeline Parameters")
复制代码
训练过程优化参数
  1. class OptimizationParams(ParamGroup):
  2.     def __init__(self, parser):
  3.         # 总迭代次数, 默认30000
  4.         self.iterations = 30_000
  5.         # 3D位置学习率初始值
  6.         self.position_lr_init = 0.00016
  7.         # 3D位置学习率最终值
  8.         self.position_lr_final = 0.0000016
  9.         # 位置学习率乘数
  10.         self.position_lr_delay_mult = 0.01
  11.         # 3D位置学习率从 initial 衰减至 final 所需的步数(从0开始), 默认 30000
  12.         self.position_lr_max_steps = 30_000
  13.         # 球谐特征量学习率
  14.         self.feature_lr = 0.0025
  15.         # 透明度学习率
  16.         self.opacity_lr = 0.025
  17.         # 缩放参数学习率
  18.         self.scaling_lr = 0.005
  19.         # 旋转参数学习率
  20.         self.rotation_lr = 0.001
  21.         # 曝光度参数学习率初始值, 最终值, 步数等
  22.         self.exposure_lr_init = 0.01
  23.         self.exposure_lr_final = 0.001
  24.         self.exposure_lr_delay_steps = 0
  25.         self.exposure_lr_delay_mult = 0.0
  26.         # 触发强制增密的场景空间占比阈值(范围0到1), 默认 0.01
  27.         self.percent_dense = 0.01
  28.         # SSIM在总损失函数中的权重系数
  29.         self.lambda_dssim = 0.2
  30.         # 点云密集化的执行间隔, 默认每100次迭代执行一次
  31.         self.densification_interval = 100
  32.         # 不透明度重置频率
  33.         self.opacity_reset_interval = 3000
  34.         # 开始执行点云密集化的迭代次数
  35.         self.densify_from_iter = 500
  36.         # 停止执行点云密集化的迭代次数
  37.         self.densify_until_iter = 15_000
  38.         # 基于2D位置梯度判断是否增密点的阈值
  39.         self.densify_grad_threshold = 0.0002
  40.         self.depth_l1_weight_init = 1.0
  41.         self.depth_l1_weight_final = 0.01
  42.         # 随机背景
  43.         self.random_background = False
  44.         # 优化器类型
  45.         self.optimizer_type = "default"
  46.         super().__init__(parser, "Optimization Parameters")
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册