4
0
mirror of https://github.com/nerfstudio-project/nerfstudio.git synced 2026-11-11 02:24:38 +08:00

Add Adam optimizer (#496)

* Add adam optimizer

* Fix configs

* merge
This commit is contained in:
Matthew Tancik 2022-09-20 15:10:48 -07:00 committed by GitHub
parent 38f83de64b
commit a04427644a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 73 additions and 26 deletions

View File

@ -337,18 +337,34 @@ class ViewerConfig(PrintableConfig):
# Optimizer related configs
@dataclass
class OptimizerConfig(InstantiateConfig):
class OptimizerConfig(PrintableConfig):
"""Basic optimizer config with RAdam"""
_target: Type = torch.optim.RAdam
_target: Type = torch.optim.Adam
lr: float = 0.0005
eps: float = 1e-08
# TODO: somehow make this more generic. i dont like the idea of overriding the setup function
# but also not sure how to go about passing things into predefined torch objects.
def setup(self, params=None, **kwargs) -> Any:
def setup(self, params) -> Any:
"""Returns the instantiated object using the config."""
return self._target(params, lr=self.lr, eps=self.eps)
kwargs = vars(self)
del kwargs["_target"]
return self._target(params, **kwargs)
@dataclass
class AdamOptimizerConfig(OptimizerConfig):
"""Basic optimizer config with Adam"""
_target: Type = torch.optim.Adam
@dataclass
class RAdamOptimizerConfig(OptimizerConfig):
"""Basic optimizer config with RAdam"""
_target: Type = torch.optim.RAdam
@dataclass

View File

@ -23,13 +23,14 @@ import dcargs
from typeguard import typeguard_ignore
from nerfactory.configs.base import (
AdamOptimizerConfig,
BlenderDataParserConfig,
Config,
LoggingConfig,
MipNerf360DataParserConfig,
NerfWModelConfig,
OptimizerConfig,
PipelineConfig,
RAdamOptimizerConfig,
SchedulerConfig,
TensoRFModelConfig,
TrainerConfig,
@ -46,6 +47,23 @@ from nerfactory.models.semantic_nerf import SemanticNerfModel
from nerfactory.models.vanilla_nerf import NeRFModel
base_configs: Dict[str, Config] = {}
base_configs["compound"] = Config(
method_name="compound",
trainer=TrainerConfig(mixed_precision=True),
pipeline=PipelineConfig(
datamanager=VanillaDataManagerConfig(train_dataparser=BlenderDataParserConfig(), train_num_rays_per_batch=8192),
model=CompoundModelConfig(eval_num_rays_per_chunk=8192),
),
optimizers={
"fields": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": None,
}
},
viewer=ViewerConfig(enable=True),
logging=LoggingConfig(event_writer="none"),
)
base_configs["instant-ngp"] = Config(
method_name="instant-ngp",
trainer=TrainerConfig(steps_per_eval_batch=500, steps_per_save=2000, mixed_precision=True),
@ -55,7 +73,7 @@ base_configs["instant-ngp"] = Config(
),
optimizers={
"fields": {
"optimizer": OptimizerConfig(lr=3e-3, eps=1e-15),
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": None,
}
},
@ -79,6 +97,12 @@ base_configs["mipnerf-360"] = Config(
eval_num_rays_per_chunk=8192,
),
),
optimizers={
"fields": {
"optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
"scheduler": None,
}
},
)
base_configs["mipnerf"] = Config(
@ -93,6 +117,12 @@ base_configs["mipnerf"] = Config(
eval_num_rays_per_chunk=8192,
),
),
optimizers={
"fields": {
"optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
"scheduler": None,
}
},
)
base_configs["nerfw"] = Config(
@ -103,6 +133,12 @@ base_configs["nerfw"] = Config(
),
model=NerfWModelConfig(),
),
optimizers={
"fields": {
"optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
"scheduler": None,
}
},
)
@ -119,6 +155,12 @@ base_configs["semantic-nerf"] = Config(
num_importance_samples=64,
),
),
optimizers={
"fields": {
"optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
"scheduler": None,
}
},
)
base_configs["vanilla-nerf"] = Config(
@ -129,6 +171,12 @@ base_configs["vanilla-nerf"] = Config(
),
model=VanillaModelConfig(_target=NeRFModel),
),
optimizers={
"fields": {
"optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
"scheduler": None,
}
},
)
base_configs["tensorf"] = Config(
@ -142,37 +190,20 @@ base_configs["tensorf"] = Config(
),
optimizers={
"fields": {
"optimizer": OptimizerConfig(lr=0.001),
"optimizer": RAdamOptimizerConfig(lr=0.001),
"scheduler": SchedulerConfig(lr_final=0.00005, max_steps=15000),
},
"position_encoding": {
"optimizer": OptimizerConfig(lr=0.02),
"optimizer": RAdamOptimizerConfig(lr=0.02),
"scheduler": SchedulerConfig(lr_final=0.005, max_steps=15000),
},
"direction_encoding": {
"optimizer": OptimizerConfig(lr=0.02),
"optimizer": RAdamOptimizerConfig(lr=0.02),
"scheduler": SchedulerConfig(lr_final=0.005, max_steps=15000),
},
},
)
base_configs["compound"] = Config(
method_name="compound",
trainer=TrainerConfig(mixed_precision=True),
pipeline=PipelineConfig(
datamanager=VanillaDataManagerConfig(train_dataparser=BlenderDataParserConfig(), train_num_rays_per_batch=8192),
model=CompoundModelConfig(eval_num_rays_per_chunk=8192),
),
optimizers={
"fields": {
"optimizer": OptimizerConfig(lr=3e-3, eps=1e-15),
"scheduler": None,
}
},
viewer=ViewerConfig(enable=True),
logging=LoggingConfig(event_writer="none"),
)
@typeguard_ignore # TypeGuard doesn't understand the generic alias that's returned here.
def _make_base_config_subcommand_type() -> Type[Config]: