| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- from argparse import ArgumentParser, Namespace
- import sys
- import os
- class GroupParams:
- pass
- class ParamGroup:
- def __init__(self, parser: ArgumentParser, name : str, fill_none = False):
- group = parser.add_argument_group(name)
- for key, value in vars(self).items():
- shorthand = False
- if key.startswith("_"):
- shorthand = True
- key = key[1:]
- t = type(value)
- value = value if not fill_none else None
- if shorthand:
- if t == bool:
- group.add_argument("--" + key, ("-" + key[0:1]), default=value, action="store_true")
- else:
- group.add_argument("--" + key, ("-" + key[0:1]), default=value, type=t)
- else:
- if t == bool:
- group.add_argument("--" + key, default=value, action="store_true")
- else:
- group.add_argument("--" + key, default=value, type=t)
- def extract(self, args):
- group = GroupParams()
- for arg in vars(args).items():
- if arg[0] in vars(self) or ("_" + arg[0]) in vars(self):
- setattr(group, arg[0], arg[1])
- return group
- class ModelParams(ParamGroup):
- def __init__(self, parser, sentinel=False):
- self.sh_degree = 3
- self._source_path = ""
- self._model_path = ""
- self._images = "images"
- self._resolution = 1
- self._white_background = False
- self.eval = False
- super().__init__(parser, "Loading Parameters", sentinel)
- class PipelineParams(ParamGroup):
- def __init__(self, parser):
- self.convert_SHs_python = False
- self.compute_cov3D_python = False
- super().__init__(parser, "Pipeline Parameters")
- class OptimizationParams(ParamGroup):
- def __init__(self, parser):
- self.iterations = 30_000
- self.position_lr_init = 0.00016
- self.position_lr_final = 0.0000016
- self.position_lr_delay_mult = 0.01
- self.posititon_lr_max_steps = 30_000
- self.feature_lr = 0.0025
- self.opacity_lr = 0.05
- self.scaling_lr = 0.001
- self.rotation_lr = 0.001
- self.percent_dense = 0.01
- self.lambda_dssim = 0.2
- self.densification_interval = 100
- self.opacity_reset_interval = 3000
- self.densify_from_iter = 500
- self.densify_until_iter = 15_000
- self.densify_grad_threshold = 0.0002
- super().__init__(parser, "Optimization Parameters")
- def get_combined_args(parser : ArgumentParser):
- cmdlne_string = sys.argv[1:]
- cfgfile_string = "Namespace()"
- args_cmdline = parser.parse_args(cmdlne_string)
- try:
- cfgfilepath = os.path.join(args_cmdline.model_path, "cfg_args")
- print("Looking for config file in", cfgfilepath)
- with open(cfgfilepath) as cfg_file:
- print("Config file found: {}".format(cfgfilepath))
- cfgfile_string = cfg_file.read()
- except TypeError:
- print("Config file not found at")
- pass
- args_cfgfile = eval(cfgfile_string)
- merged_dict = vars(args_cfgfile).copy()
- for k,v in vars(args_cmdline).items():
- if v != None:
- merged_dict[k] = v
- return Namespace(**merged_dict)
|