from .optimizer import Optimizer, OptimizerCfg from .optimizer_learn2splat import Learn2SplatOptimizer from .optimizer_knn_based import KnnBasedOptimizer, KnnBasedOptimizerCfg from .optimizer_resplat import ResplatOptimizerV1, ResplatOptimizerV2 from .optimizer_adam import AdamOptimizerCfg, AdamOptimizer SceneOptimizerCfg = KnnBasedOptimizerCfg | AdamOptimizerCfg def extract_opt_params(cfg): opt_params = cfg.__dict__.copy() opt_params.pop("enabled", None) opt_params.pop("name", None) opt_params.pop("steps", None) opt_params.pop("scheduler", None) opt_params.pop("scheduler_warm_up_ratio", None) opt_params.pop("compute_metrics_every", None) return opt_params SCENE_OPTIMIZERS = { "none": None, "depthsplat": KnnBasedOptimizer, "resplat_v1": ResplatOptimizerV1, "resplat_v2": ResplatOptimizerV2, "clogs": Learn2SplatOptimizer, # TODO (release): remove "l2s": Learn2SplatOptimizer, "adam": AdamOptimizer, } def get_scene_optimizer(cfg: SceneOptimizerCfg | None) -> Optimizer | None: if cfg is None: print("Using scene optimizer: None") return None print(f"Using scene optimizer: {cfg.name}") scene_optimizer = SCENE_OPTIMIZERS[cfg.name] if scene_optimizer is None: return None scene_optimizer = scene_optimizer(cfg) return scene_optimizer