模型#

总览#

如下图所示,模型训练相关的由BaseModelControllerOptimizer构成。 其中BaseModel中包含了默认的Point Cloud ModelCamera Model,以及 Renderer.

  • BaseModel:提供了一种方便灵活的方式来组织训练过程、管理参数、定义计算,并利用PyTorch的自动微分能力。它与一个PointCloud模型和相机模型关联,这是优化的主要目标。并包含一个渲染器。

  • Optimizer:负责自动更新模型的参数,支持多优化器。

  • Controller:负责自动更新点云模型的结构。

以下是在Pointrix 训练中模型与优化器的交互过程:

其中左侧的 Point Cloud PriorObservationCamera Prior均为数据流水线传递来的数据。

模型#

模型主要由三部分组成,分别为:

  • 点云模型:可优化的点云模型,用户可以通过注册可优化的属性来实现拓展,例如:

point_cloud = PointsCloud(cfg)
point_cloud.register_atribute('position', position)
point_cloud.register_atribute('rgb', rgb)

通过上面的代码,用户在每个点云上注册了’position’ 与 ‘rgb’ 属性。用户可以通过自定义属性来扩展 点云的特征。例如高斯点云包含’sh’, ‘scale’,’rotation’,’opacity’, ‘position’属性。

  • 相机模型:主要包含qrots,tvecs,intrs这三个可优化的属性。即 旋转,平移与相机内参。后续会支持扩展自定义属性。

  • 渲染器:主要包含原版高斯核,Gsplat, Msplat 的渲染器支持。通常如上图所示:渲染器在模型中读取对应视角的相机和点云数据,输出 对应的渲染结果。

优化器与控制器#

优化器负责模型参数的更新,控制器负责模型结构的更新(通常为点云模型)。

相关配置#

模型配置:#

trainer:
    model:
        name: BaseModel
        lambda_ssim: 0.2
        point_cloud:
            point_cloud_type: "GaussianPointCloud"  
            max_sh_degree: 3
            trainable: true
            unwarp_prefix: "point_cloud"
            initializer:
                init_type: 'colmap'
                feat_dim: 3
        camera_model:
            enable_training: False
        renderer:
            name: "MsplatRender"
            render_depth: True
            max_sh_degree: ${trainer.model.point_cloud.max_sh_degree}
  • name: 模型的名称,将由注册表查找。

  • lambda_dssim: SSIM损失的权重。

  • point_cloud

    • point_cloud_type: 点云的类型,’GaussianPointCloud’用于基于Gaussian Splatting的方法。

    • max_sh_degree: Pointrix中的最大SH阶数。

    • trainable: 点云模型是否可训练。

    • unwarp_prefix: 用于区分优化器中不同点云组的前缀,除非有多个点云的需求,否则不需要关心。

    • initializer

      • init_type: 点云的初始化方法,包括’colmap’和’random’。

      • feat_dim: 用于渲染RGB的点云的特征维度。

  • camera_model

    • enable_training: 是否开启相机优化

  • renderer

    • name: MSplat, GSplat 或原始高斯核,将由注册表索引。

    • max_sh_degree: 渲染器最大的 sh 阶数。

    • render_depth: 是否渲染深度

优化器配置:#

trainer:
    optimizer:
        optimizer_1:
        type: BaseOptimizer
        name: Adam
        args:
            eps: 1e-15
        extra_cfg:
            backward: False
        params:
            point_cloud.position:
            lr: 0.00016
            point_cloud.features:
            lr: 0.0025
            point_cloud.features_rest:
            lr: 0.000125 # features/20
            point_cloud.scaling:
            lr: 0.005
            point_cloud.rotation:
            lr: 0.001
            point_cloud.opacity:
            lr: 0.05
  • optimizer_x: 第 x 个优化器,您可以添加任意数量的优化器,Pointrix 将自动处理它们。

    • type: 优化器的类型,由注册器索引。

    • name: 优化器的名称。

    • params:需要优化的参数名称以及对应的学习率。Pointrix将自动解析。如果您在Basemodel 基础上新加入了可学习的参数,请在这个配置中添加

    • camera_params: 相机参数

      • lr: 相机参数的学习率,需要camera_model.enable_training==True