diff --git a/nerfstudio/configs/method_configs.py b/nerfstudio/configs/method_configs.py index 801ef7ca3..4a4cc4dc2 100644 --- a/nerfstudio/configs/method_configs.py +++ b/nerfstudio/configs/method_configs.py @@ -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):