update method configs

This commit is contained in:
maturk committed 2023-07-22 11:29:50 +03:00
1 parent 4ddbee9b08
commit aa7fd51462
1 file changed
+470 -410
+470 -410
View File
@@ -26,14 +26,23 @@ import tyro
from nerfstudio.cameras.camera_optimizers import CameraOptimizerConfig
from nerfstudio.configs.base_config import ViewerConfig
from nerfstudio.configs.external_methods import get_external_methods
from nerfstudio.data.datamanagers.base_datamanager import VanillaDataManager, VanillaDataManagerConfig
from nerfstudio.data.datamanagers.base_datamanager import (
VanillaDataManager,
VanillaDataManagerConfig,
)
from nerfstudio.data.datamanagers.parallel_datamanager import ParallelDataManagerConfig
from nerfstudio.data.datamanagers.random_cameras_datamanager import RandomCamerasDataManagerConfig
from nerfstudio.data.datamanagers.random_cameras_datamanager import (
RandomCamerasDataManagerConfig,
)
from nerfstudio.data.dataparsers.blender_dataparser import BlenderDataParserConfig
from nerfstudio.data.dataparsers.dnerf_dataparser import DNeRFDataParserConfig
from nerfstudio.data.dataparsers.instant_ngp_dataparser import InstantNGPDataParserConfig
from nerfstudio.data.dataparsers.instant_ngp_dataparser import (
InstantNGPDataParserConfig,
)
from nerfstudio.data.dataparsers.nerfstudio_dataparser import NerfstudioDataParserConfig
from nerfstudio.data.dataparsers.phototourism_dataparser import PhototourismDataParserConfig
from nerfstudio.data.dataparsers.phototourism_dataparser import (
PhototourismDataParserConfig,
)
from nerfstudio.data.dataparsers.sdfstudio_dataparser import SDFStudioDataParserConfig
from nerfstudio.data.dataparsers.sitcoms3d_dataparser import Sitcoms3DDataParserConfig
from nerfstudio.data.datasets.depth_dataset import DepthDataset
@@ -88,7 +97,6 @@ method_configs["nerfacto"] = TrainerConfig(
mixed_precision=True,
pipeline=VanillaPipelineConfig(
datamanager=ParallelDataManagerConfig(
# datamanager=VanillaDataManagerConfig(
dataparser=NerfstudioDataParserConfig(),
train_num_rays_per_batch=4096,
eval_num_rays_per_batch=4096,
@@ -116,51 +124,50 @@ method_configs["nerfacto"] = TrainerConfig(
vis="viewer_beta",
)
# **For now I commented everything out since the datamanager config breaks **
method_configs["nerfacto-big"] = TrainerConfig(
method_name="nerfacto",
steps_per_eval_batch=500,
steps_per_save=2000,
max_num_iterations=100000,
mixed_precision=True,
pipeline=VanillaPipelineConfig(
datamanager=ParallelDataManagerConfig(
dataparser=NerfstudioDataParserConfig(),
train_num_rays_per_batch=8192,
eval_num_rays_per_batch=4096,
),
model=NerfactoModelConfig(
eval_num_rays_per_chunk=1 << 15,
num_nerf_samples_per_ray=128,
num_proposal_samples_per_ray=(512, 256),
hidden_dim=128,
hidden_dim_color=128,
appearance_embed_dim=128,
base_res=32,
max_res=4096,
proposal_weights_anneal_max_num_iters=5000,
log2_hashmap_size=21,
camera_optimizer=CameraOptimizerConfig(mode="SO3xR3"),
),
),
optimizers={
"proposal_networks": {
"optimizer": RAdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": None,
},
"fields": {
"optimizer": RAdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=50000),
},
"camera_opt": {
"optimizer": AdamOptimizerConfig(lr=1e-3, eps=1e-15),
"scheduler": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=5000),
},
},
viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
vis="viewer",
)
# method_configs["nerfacto-big"] = TrainerConfig(
# method_name="nerfacto",
# steps_per_eval_batch=500,
# steps_per_save=2000,
# max_num_iterations=100000,
# mixed_precision=True,
# pipeline=VanillaPipelineConfig(
# datamanager=VanillaDataManagerConfig(
# dataparser=NerfstudioDataParserConfig(),
# train_num_rays_per_batch=8192,
# eval_num_rays_per_batch=4096,
# camera_optimizer=CameraOptimizerConfig(
# mode="SO3xR3",
# optimizer=RAdamOptimizerConfig(lr=6e-4, eps=1e-8, weight_decay=1e-3),
# ),
# ),
# model=NerfactoModelConfig(
# eval_num_rays_per_chunk=1 << 15,
# num_nerf_samples_per_ray=128,
# num_proposal_samples_per_ray=(512, 256),
# hidden_dim=128,
# hidden_dim_color=128,
# appearance_embed_dim=128,
# base_res=32,
# max_res=4096,
# proposal_weights_anneal_max_num_iters=5000,
# log2_hashmap_size=21,
# ),
# ),
# optimizers={
# "proposal_networks": {
# "optimizer": RAdamOptimizerConfig(lr=1e-2, eps=1e-15),
# "scheduler": None,
# },
# "fields": {
# "optimizer": RAdamOptimizerConfig(lr=1e-2, eps=1e-15),
# "scheduler": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=50000),
# },
# },
# viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
# vis="viewer",
# )
method_configs["nerfacto-huge"] = TrainerConfig(
method_name="nerfacto",
steps_per_eval_batch=500,
@@ -168,7 +175,6 @@ method_configs["nerfacto-huge"] = TrainerConfig(
max_num_iterations=100000,
mixed_precision=True,
pipeline=VanillaPipelineConfig(
# datamanager=VanillaDataManagerConfig(
datamanager=ParallelDataManagerConfig(
dataparser=NerfstudioDataParserConfig(),
train_num_rays_per_batch=16384,
@@ -190,6 +196,7 @@ method_configs["nerfacto-huge"] = TrainerConfig(
max_res=8192,
proposal_weights_anneal_max_num_iters=5000,
log2_hashmap_size=21,
camera_optimizer=CameraOptimizerConfig(mode="SO3xR3"),
),
),
optimizers={
@@ -202,382 +209,435 @@ method_configs["nerfacto-huge"] = TrainerConfig(
"scheduler": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=50000),
},
"camera_opt": {
"optimizer": RAdamOptimizerConfig(lr=1e-3, eps=1e-8),
"scheduler": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=10000),
"optimizer": AdamOptimizerConfig(lr=1e-3, eps=1e-15),
"scheduler": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=5000),
},
},
viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
vis="viewer_beta",
vis="viewer",
)
# method_configs["depth-nerfacto"] = TrainerConfig(
# method_name="depth-nerfacto",
# steps_per_eval_batch=500,
# steps_per_save=2000,
# max_num_iterations=30000,
# mixed_precision=True,
# pipeline=VanillaPipelineConfig(
# datamanager=VanillaDataManagerConfig(
# _target=VanillaDataManager[DepthDataset],
# dataparser=NerfstudioDataParserConfig(),
# train_num_rays_per_batch=4096,
# eval_num_rays_per_batch=4096,
# camera_optimizer=CameraOptimizerConfig(
# mode="SO3xR3", optimizer=AdamOptimizerConfig(lr=6e-4, eps=1e-8, weight_decay=1e-2)
# ),
# ),
# model=DepthNerfactoModelConfig(eval_num_rays_per_chunk=1 << 15),
# ),
# optimizers={
# "proposal_networks": {
# "optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
# "scheduler": None,
# },
# "fields": {
# "optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
# "scheduler": None,
# },
# },
# viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
# vis="viewer",
# )
method_configs["depth-nerfacto"] = TrainerConfig(
method_name="depth-nerfacto",
steps_per_eval_batch=500,
steps_per_save=2000,
max_num_iterations=30000,
mixed_precision=True,
pipeline=VanillaPipelineConfig(
datamanager=VanillaDataManagerConfig(
_target=VanillaDataManager[DepthDataset],
dataparser=NerfstudioDataParserConfig(),
train_num_rays_per_batch=4096,
eval_num_rays_per_batch=4096,
),
model=DepthNerfactoModelConfig(
eval_num_rays_per_chunk=1 << 15,
camera_optimizer=CameraOptimizerConfig(mode="SO3xR3"),
),
),
optimizers={
"proposal_networks": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": None,
},
"fields": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": None,
},
"camera_opt": {
"optimizer": AdamOptimizerConfig(lr=1e-3, eps=1e-15),
"scheduler": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=5000),
},
},
viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
vis="viewer",
)
# method_configs["volinga"] = TrainerConfig(
# method_name="volinga",
# steps_per_eval_batch=500,
# steps_per_save=2000,
# max_num_iterations=30000,
# mixed_precision=True,
# pipeline=VanillaPipelineConfig(
# datamanager=VanillaDataManagerConfig(
# dataparser=NerfstudioDataParserConfig(),
# train_num_rays_per_batch=4096,
# eval_num_rays_per_batch=4096,
# camera_optimizer=CameraOptimizerConfig(
# mode="SO3xR3", optimizer=AdamOptimizerConfig(lr=6e-4, eps=1e-8, weight_decay=1e-2)
# ),
# ),
# model=NerfactoModelConfig(
# eval_num_rays_per_chunk=1 << 15,
# hidden_dim=32,
# hidden_dim_color=32,
# hidden_dim_transient=32,
# num_nerf_samples_per_ray=24,
# proposal_net_args_list=[
# {"hidden_dim": 16, "log2_hashmap_size": 17, "num_levels": 5, "max_res": 128, "use_linear": True},
# {"hidden_dim": 16, "log2_hashmap_size": 17, "num_levels": 5, "max_res": 256, "use_linear": True},
# ],
# ),
# ),
# optimizers={
# "proposal_networks": {
# "optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
# "scheduler": None,
# },
# "fields": {
# "optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
# "scheduler": None,
# },
# },
# viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
# vis="viewer",
# )
method_configs["volinga"] = TrainerConfig(
method_name="volinga",
steps_per_eval_batch=500,
steps_per_save=2000,
max_num_iterations=30000,
mixed_precision=True,
pipeline=VanillaPipelineConfig(
datamanager=VanillaDataManagerConfig(
dataparser=NerfstudioDataParserConfig(),
train_num_rays_per_batch=4096,
eval_num_rays_per_batch=4096,
),
model=NerfactoModelConfig(
eval_num_rays_per_chunk=1 << 15,
hidden_dim=32,
hidden_dim_color=32,
hidden_dim_transient=32,
num_nerf_samples_per_ray=24,
proposal_net_args_list=[
{"hidden_dim": 16, "log2_hashmap_size": 17, "num_levels": 5, "max_res": 128, "use_linear": True},
{"hidden_dim": 16, "log2_hashmap_size": 17, "num_levels": 5, "max_res": 256, "use_linear": True},
],
camera_optimizer=CameraOptimizerConfig(mode="SO3xR3"),
),
),
optimizers={
"proposal_networks": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": None,
},
"fields": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": None,
},
"camera_opt": {
"optimizer": AdamOptimizerConfig(lr=1e-3, eps=1e-15),
"scheduler": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=5000),
},
},
viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
vis="viewer",
)
# method_configs["instant-ngp"] = TrainerConfig(
# method_name="instant-ngp",
# steps_per_eval_batch=500,
# steps_per_save=2000,
# max_num_iterations=30000,
# mixed_precision=True,
# pipeline=DynamicBatchPipelineConfig(
# datamanager=VanillaDataManagerConfig(
# dataparser=NerfstudioDataParserConfig(),
# train_num_rays_per_batch=4096,
# eval_num_rays_per_batch=4096,
# ),
# model=InstantNGPModelConfig(eval_num_rays_per_chunk=8192),
# ),
# optimizers={
# "fields": {
# "optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
# "scheduler": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=200000),
# }
# },
# viewer=ViewerConfig(num_rays_per_chunk=1 << 12),
# vis="viewer",
# )
method_configs["instant-ngp"] = TrainerConfig(
method_name="instant-ngp",
steps_per_eval_batch=500,
steps_per_save=2000,
max_num_iterations=30000,
mixed_precision=True,
pipeline=DynamicBatchPipelineConfig(
datamanager=VanillaDataManagerConfig(
dataparser=NerfstudioDataParserConfig(),
train_num_rays_per_batch=4096,
eval_num_rays_per_batch=4096,
),
model=InstantNGPModelConfig(eval_num_rays_per_chunk=8192),
),
optimizers={
"fields": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=200000),
}
},
viewer=ViewerConfig(num_rays_per_chunk=1 << 12),
vis="viewer",
)
method_configs["instant-ngp-bounded"] = TrainerConfig(
method_name="instant-ngp-bounded",
steps_per_eval_batch=500,
steps_per_save=2000,
max_num_iterations=30000,
mixed_precision=True,
pipeline=DynamicBatchPipelineConfig(
datamanager=VanillaDataManagerConfig(dataparser=InstantNGPDataParserConfig(), train_num_rays_per_batch=8192),
model=InstantNGPModelConfig(
eval_num_rays_per_chunk=8192,
grid_levels=1,
alpha_thre=0.0,
cone_angle=0.0,
disable_scene_contraction=True,
near_plane=0.01,
background_color="black",
),
),
optimizers={
"fields": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=200000),
}
},
viewer=ViewerConfig(num_rays_per_chunk=1 << 12),
vis="viewer",
)
#
#
method_configs["mipnerf"] = TrainerConfig(
method_name="mipnerf",
pipeline=VanillaPipelineConfig(
datamanager=VanillaDataManagerConfig(dataparser=NerfstudioDataParserConfig(), train_num_rays_per_batch=1024),
model=VanillaModelConfig(
_target=MipNerfModel,
loss_coefficients={"rgb_loss_coarse": 0.1, "rgb_loss_fine": 1.0},
num_coarse_samples=128,
num_importance_samples=128,
eval_num_rays_per_chunk=1024,
),
),
optimizers={
"fields": {
"optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
"scheduler": None,
}
},
)
# method_configs["instant-ngp-bounded"] = TrainerConfig(
# method_name="instant-ngp-bounded",
# steps_per_eval_batch=500,
# steps_per_save=2000,
# max_num_iterations=30000,
# mixed_precision=True,
# pipeline=DynamicBatchPipelineConfig(
# datamanager=VanillaDataManagerConfig(dataparser=InstantNGPDataParserConfig(), train_num_rays_per_batch=8192),
# model=InstantNGPModelConfig(
# eval_num_rays_per_chunk=8192,
# grid_levels=1,
# alpha_thre=0.0,
# cone_angle=0.0,
# disable_scene_contraction=True,
# near_plane=0.01,
# background_color="black",
# ),
# ),
# optimizers={
# "fields": {
# "optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
# "scheduler": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=200000),
# }
# },
# viewer=ViewerConfig(num_rays_per_chunk=1 << 12),
# vis="viewer",
# )
method_configs["semantic-nerfw"] = TrainerConfig(
method_name="semantic-nerfw",
steps_per_eval_batch=500,
steps_per_save=2000,
max_num_iterations=30000,
mixed_precision=True,
pipeline=VanillaPipelineConfig(
datamanager=VanillaDataManagerConfig(
_target=VanillaDataManager[SemanticDataset],
dataparser=Sitcoms3DDataParserConfig(),
train_num_rays_per_batch=4096,
eval_num_rays_per_batch=8192,
),
model=SemanticNerfWModelConfig(eval_num_rays_per_chunk=1 << 16),
),
optimizers={
"proposal_networks": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": None,
},
"fields": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": None,
},
},
viewer=ViewerConfig(num_rays_per_chunk=1 << 16),
vis="viewer",
)
method_configs["vanilla-nerf"] = TrainerConfig(
method_name="vanilla-nerf",
pipeline=VanillaPipelineConfig(
datamanager=VanillaDataManagerConfig(
dataparser=BlenderDataParserConfig(),
),
model=VanillaModelConfig(_target=NeRFModel),
),
optimizers={
"fields": {
"optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
"scheduler": None,
},
"temporal_distortion": {
"optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
"scheduler": None,
},
},
)
# method_configs["mipnerf"] = TrainerConfig(
# method_name="mipnerf",
# pipeline=VanillaPipelineConfig(
# datamanager=VanillaDataManagerConfig(dataparser=NerfstudioDataParserConfig(), train_num_rays_per_batch=1024),
# model=VanillaModelConfig(
# _target=MipNerfModel,
# loss_coefficients={"rgb_loss_coarse": 0.1, "rgb_loss_fine": 1.0},
# num_coarse_samples=128,
# num_importance_samples=128,
# eval_num_rays_per_chunk=1024,
# ),
# ),
# optimizers={
# "fields": {
# "optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
# "scheduler": None,
# }
# },
# )
method_configs["tensorf"] = TrainerConfig(
method_name="tensorf",
steps_per_eval_batch=500,
steps_per_save=2000,
max_num_iterations=30000,
mixed_precision=False,
pipeline=VanillaPipelineConfig(
datamanager=ParallelDataManagerConfig(
dataparser=BlenderDataParserConfig(),
train_num_rays_per_batch=4096,
eval_num_rays_per_batch=4096,
),
model=TensoRFModelConfig(
regularization="tv",
camera_optimizer=CameraOptimizerConfig(mode="off"),
),
),
optimizers={
"fields": {
"optimizer": AdamOptimizerConfig(lr=0.001),
"scheduler": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=30000),
},
"encodings": {
"optimizer": AdamOptimizerConfig(lr=0.02),
"scheduler": ExponentialDecaySchedulerConfig(lr_final=0.002, max_steps=30000),
},
"camera_opt": {
"optimizer": AdamOptimizerConfig(lr=1e-4, eps=1e-15),
"scheduler": ExponentialDecaySchedulerConfig(lr_final=1e-5, max_steps=5000),
},
},
viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
vis="viewer",
)
# method_configs["semantic-nerfw"] = TrainerConfig(
# method_name="semantic-nerfw",
# steps_per_eval_batch=500,
# steps_per_save=2000,
# max_num_iterations=30000,
# mixed_precision=True,
# pipeline=VanillaPipelineConfig(
# datamanager=VanillaDataManagerConfig(
# _target=VanillaDataManager[SemanticDataset],
# dataparser=Sitcoms3DDataParserConfig(),
# train_num_rays_per_batch=4096,
# eval_num_rays_per_batch=8192,
# ),
# model=SemanticNerfWModelConfig(eval_num_rays_per_chunk=1 << 16),
# ),
# optimizers={
# "proposal_networks": {
# "optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
# "scheduler": None,
# },
# "fields": {
# "optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
# "scheduler": None,
# },
# },
# viewer=ViewerConfig(num_rays_per_chunk=1 << 16),
# vis="viewer",
# )
method_configs["dnerf"] = TrainerConfig(
method_name="dnerf",
pipeline=VanillaPipelineConfig(
datamanager=VanillaDataManagerConfig(dataparser=DNeRFDataParserConfig()),
model=VanillaModelConfig(
_target=NeRFModel,
enable_temporal_distortion=True,
temporal_distortion_params={"kind": TemporalDistortionKind.DNERF},
),
),
optimizers={
"fields": {
"optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
"scheduler": None,
},
"temporal_distortion": {
"optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
"scheduler": None,
},
},
)
# method_configs["vanilla-nerf"] = TrainerConfig(
# method_name="vanilla-nerf",
# pipeline=VanillaPipelineConfig(
# datamanager=VanillaDataManagerConfig(
# dataparser=BlenderDataParserConfig(),
# ),
# model=VanillaModelConfig(_target=NeRFModel),
# ),
# optimizers={
# "fields": {
# "optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
# "scheduler": None,
# },
# "temporal_distortion": {
# "optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
# "scheduler": None,
# },
# },
# )
method_configs["phototourism"] = TrainerConfig(
method_name="phototourism",
steps_per_eval_batch=500,
steps_per_save=2000,
max_num_iterations=30000,
mixed_precision=True,
pipeline=VanillaPipelineConfig(
datamanager=VanillaDataManagerConfig(
dataparser=PhototourismDataParserConfig(), # NOTE: one of the only differences with nerfacto
train_num_rays_per_batch=4096,
eval_num_rays_per_batch=4096,
# Large dataset, so using prior values from VariableResDataManager.
train_num_images_to_sample_from=40,
train_num_times_to_repeat_images=100,
eval_num_images_to_sample_from=40,
eval_num_times_to_repeat_images=100,
),
model=NerfactoModelConfig(
eval_num_rays_per_chunk=1 << 15,
camera_optimizer=CameraOptimizerConfig(mode="SO3xR3"),
),
),
optimizers={
"proposal_networks": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": None,
},
"fields": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": None,
},
"camera_opt": {
"optimizer": AdamOptimizerConfig(lr=1e-3, eps=1e-15),
"scheduler": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=5000),
},
},
viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
vis="viewer",
)
# method_configs["tensorf"] = TrainerConfig(
# method_name="tensorf",
# steps_per_eval_batch=500,
# steps_per_save=2000,
# max_num_iterations=30000,
# mixed_precision=False,
# pipeline=VanillaPipelineConfig(
# datamanager=VanillaDataManagerConfig(
# dataparser=BlenderDataParserConfig(),
# train_num_rays_per_batch=4096,
# eval_num_rays_per_batch=4096,
# ),
# model=TensoRFModelConfig(
# regularization="tv",
# ),
# ),
# optimizers={
# "fields": {
# "optimizer": AdamOptimizerConfig(lr=0.001),
# "scheduler": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=30000),
# },
# "encodings": {
# "optimizer": AdamOptimizerConfig(lr=0.02),
# "scheduler": ExponentialDecaySchedulerConfig(lr_final=0.002, max_steps=30000),
# },
# },
# viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
# vis="viewer",
# )
method_configs["generfacto"] = TrainerConfig(
method_name="generfacto",
experiment_name="",
steps_per_eval_batch=50,
steps_per_eval_image=50,
steps_per_save=200,
max_num_iterations=30000,
mixed_precision=True,
pipeline=VanillaPipelineConfig(
datamanager=RandomCamerasDataManagerConfig(
horizontal_rotation_warmup=3000,
),
model=GenerfactoModelConfig(
eval_num_rays_per_chunk=1 << 15,
distortion_loss_mult=1.0,
interlevel_loss_mult=100.0,
max_res=256,
sphere_collider=True,
initialize_density=True,
taper_range=(0, 2000),
random_background=True,
proposal_warmup=2000,
proposal_update_every=0,
proposal_weights_anneal_max_num_iters=2000,
start_lambertian_training=500,
start_normals_training=2000,
opacity_loss_mult=0.001,
positional_prompting="discrete",
guidance_scale=25,
),
),
optimizers={
"proposal_networks": {
"optimizer": AdamOptimizerConfig(lr=1e-3, eps=1e-15),
"scheduler": None,
},
"fields": {
"optimizer": AdamOptimizerConfig(lr=5e-4, eps=1e-15),
"scheduler": None,
},
},
viewer=ViewerConfig(),
vis="viewer",
)
# method_configs["dnerf"] = TrainerConfig(
# method_name="dnerf",
# pipeline=VanillaPipelineConfig(
# datamanager=VanillaDataManagerConfig(dataparser=DNeRFDataParserConfig()),
# model=VanillaModelConfig(
# _target=NeRFModel,
# enable_temporal_distortion=True,
# temporal_distortion_params={"kind": TemporalDistortionKind.DNERF},
# ),
# ),
# optimizers={
# "fields": {
# "optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
# "scheduler": None,
# },
# "temporal_distortion": {
# "optimizer": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),
# "scheduler": None,
# },
# },
# )
method_configs["neus"] = TrainerConfig(
method_name="neus",
steps_per_eval_image=500,
steps_per_eval_batch=5000,
steps_per_save=20000,
steps_per_eval_all_images=1000000, # set to a very large number so we don't eval with all images
max_num_iterations=100000,
mixed_precision=False,
pipeline=VanillaPipelineConfig(
datamanager=VanillaDataManagerConfig(
_target=VanillaDataManager[SDFDataset],
dataparser=SDFStudioDataParserConfig(),
train_num_rays_per_batch=1024,
eval_num_rays_per_batch=1024,
),
model=NeuSModelConfig(eval_num_rays_per_chunk=1024),
),
optimizers={
"fields": {
"optimizer": AdamOptimizerConfig(lr=5e-4, eps=1e-15),
"scheduler": CosineDecaySchedulerConfig(warm_up_end=5000, learning_rate_alpha=0.05, max_steps=300000),
},
"field_background": {
"optimizer": AdamOptimizerConfig(lr=5e-4, eps=1e-15),
"scheduler": CosineDecaySchedulerConfig(warm_up_end=5000, learning_rate_alpha=0.05, max_steps=300000),
},
},
viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
vis="viewer",
)
# method_configs["phototourism"] = TrainerConfig(
# method_name="phototourism",
# steps_per_eval_batch=500,
# steps_per_save=2000,
# max_num_iterations=30000,
# mixed_precision=True,
# pipeline=VanillaPipelineConfig(
# datamanager=VanillaDataManagerConfig(
# dataparser=PhototourismDataParserConfig(), # NOTE: one of the only differences with nerfacto
# train_num_rays_per_batch=4096,
# eval_num_rays_per_batch=4096,
# camera_optimizer=CameraOptimizerConfig(
# mode="SO3xR3", optimizer=AdamOptimizerConfig(lr=6e-4, eps=1e-8, weight_decay=1e-2)
# ),
# # Large dataset, so using prior values from VariableResDataManager.
# train_num_images_to_sample_from=40,
# train_num_times_to_repeat_images=100,
# eval_num_images_to_sample_from=40,
# eval_num_times_to_repeat_images=100,
# ),
# model=NerfactoModelConfig(eval_num_rays_per_chunk=1 << 15),
# ),
# optimizers={
# "proposal_networks": {
# "optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
# "scheduler": None,
# },
# "fields": {
# "optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
# "scheduler": None,
# },
# },
# viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
# vis="viewer",
# )
# method_configs["neus"] = TrainerConfig(
# method_name="neus",
# steps_per_eval_image=500,
# steps_per_eval_batch=5000,
# steps_per_save=20000,
# steps_per_eval_all_images=1000000, # set to a very large number so we don't eval with all images
# max_num_iterations=100000,
# mixed_precision=False,
# pipeline=VanillaPipelineConfig(
# datamanager=VanillaDataManagerConfig(
# _target=VanillaDataManager[SDFDataset],
# dataparser=SDFStudioDataParserConfig(),
# train_num_rays_per_batch=1024,
# eval_num_rays_per_batch=1024,
# camera_optimizer=CameraOptimizerConfig(
# mode="off", optimizer=AdamOptimizerConfig(lr=6e-4, eps=1e-8, weight_decay=1e-2)
# ),
# ),
# model=NeuSModelConfig(eval_num_rays_per_chunk=1024),
# ),
# optimizers={
# "fields": {
# "optimizer": AdamOptimizerConfig(lr=5e-4, eps=1e-15),
# "scheduler": CosineDecaySchedulerConfig(warm_up_end=5000, learning_rate_alpha=0.05, max_steps=300000),
# },
# "field_background": {
# "optimizer": AdamOptimizerConfig(lr=5e-4, eps=1e-15),
# "scheduler": CosineDecaySchedulerConfig(warm_up_end=5000, learning_rate_alpha=0.05, max_steps=300000),
# },
# },
# viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
# vis="viewer",
# )
# method_configs["neus-facto"] = TrainerConfig(
# method_name="neus-facto",
# steps_per_eval_image=5000,
# steps_per_eval_batch=5000,
# steps_per_save=2000,
# steps_per_eval_all_images=1000000, # set to a very large model so we don't eval with all images
# max_num_iterations=20001,
# mixed_precision=False,
# pipeline=VanillaPipelineConfig(
# datamanager=VanillaDataManagerConfig(
# _target=VanillaDataManager[SDFDataset],
# dataparser=SDFStudioDataParserConfig(),
# train_num_rays_per_batch=2048,
# eval_num_rays_per_batch=2048,
# camera_optimizer=CameraOptimizerConfig(
# mode="SO3xR3", optimizer=AdamOptimizerConfig(lr=6e-4, eps=1e-8, weight_decay=1e-2)
# ),
# ),
# model=NeuSFactoModelConfig(
# # proposal network allows for significantly smaller sdf/color network
# sdf_field=SDFFieldConfig(
# use_grid_feature=True,
# num_layers=2,
# num_layers_color=2,
# hidden_dim=256,
# bias=0.5,
# beta_init=0.8,
# use_appearance_embedding=False,
# ),
# background_model="none",
# eval_num_rays_per_chunk=2048,
# ),
# ),
# optimizers={
# "proposal_networks": {
# "optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
# "scheduler": MultiStepSchedulerConfig(max_steps=20001, milestones=(10000, 1500, 18000)),
# },
# "fields": {
# "optimizer": AdamOptimizerConfig(lr=5e-4, eps=1e-15),
# "scheduler": CosineDecaySchedulerConfig(warm_up_end=500, learning_rate_alpha=0.05, max_steps=20001),
# },
# "field_background": {
# "optimizer": AdamOptimizerConfig(lr=5e-4, eps=1e-15),
# "scheduler": CosineDecaySchedulerConfig(warm_up_end=500, learning_rate_alpha=0.05, max_steps=20001),
# },
# },
# viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
# vis="viewer",
# )
method_configs["neus-facto"] = TrainerConfig(
method_name="neus-facto",
steps_per_eval_image=5000,
steps_per_eval_batch=5000,
steps_per_save=2000,
steps_per_eval_all_images=1000000, # set to a very large model so we don't eval with all images
max_num_iterations=20001,
mixed_precision=False,
pipeline=VanillaPipelineConfig(
datamanager=VanillaDataManagerConfig(
_target=VanillaDataManager[SDFDataset],
dataparser=SDFStudioDataParserConfig(),
train_num_rays_per_batch=2048,
eval_num_rays_per_batch=2048,
),
model=NeuSFactoModelConfig(
# proposal network allows for significantly smaller sdf/color network
sdf_field=SDFFieldConfig(
use_grid_feature=True,
num_layers=2,
num_layers_color=2,
hidden_dim=256,
bias=0.5,
beta_init=0.8,
use_appearance_embedding=False,
),
background_model="none",
eval_num_rays_per_chunk=2048,
),
),
optimizers={
"proposal_networks": {
"optimizer": AdamOptimizerConfig(lr=1e-2, eps=1e-15),
"scheduler": MultiStepSchedulerConfig(max_steps=20001, milestones=(10000, 1500, 18000)),
},
"fields": {
"optimizer": AdamOptimizerConfig(lr=5e-4, eps=1e-15),
"scheduler": CosineDecaySchedulerConfig(warm_up_end=500, learning_rate_alpha=0.05, max_steps=20001),
},
"field_background": {
"optimizer": AdamOptimizerConfig(lr=5e-4, eps=1e-15),
"scheduler": CosineDecaySchedulerConfig(warm_up_end=500, learning_rate_alpha=0.05, max_steps=20001),
},
},
viewer=ViewerConfig(num_rays_per_chunk=1 << 15),
vis="viewer",
)
def merge_methods(methods, method_descriptions, new_methods, new_descriptions, overwrite=True):