Commit 1b0584f7 authored by Krzysztof Chalupka's avatar Krzysztof Chalupka Committed by Facebook GitHub Bot
Browse files

Replace pluggable components to create a proper Configurable hierarchy.

Summary:
This large diff rewrites a significant portion of Implicitron's config hierarchy. The new hierarchy, and some of the default implementation classes, are as follows:
```
Experiment
    data_source: ImplicitronDataSource
        dataset_map_provider
        data_loader_map_provider
    model_factory: ImplicitronModelFactory
        model: GenericModel
    optimizer_factory: ImplicitronOptimizerFactory
    training_loop: ImplicitronTrainingLoop
        evaluator: ImplicitronEvaluator
```

1) Experiment (used to be ExperimentConfig) is now a top-level Configurable and contains as members mainly (mostly new) high-level factory Configurables.
2) Experiment's job is to run factories, do some accelerate setup and then pass the results to the main training loop.
3) ImplicitronOptimizerFactory and ImplicitronModelFactory are new high-level factories that create the optimizer, scheduler, model, and stats objects.
4) TrainingLoop is a new configurable that runs the main training loop and the inner train-validate step.
5) Evaluator is a new configurable that TrainingLoop uses to run validation/test steps.
6) GenericModel is not the only model choice anymore. Instead, ImplicitronModelBase (by default instantiated with GenericModel) is a member of Experiment and can be easily replaced by a custom implementation by the user.

All the new Configurables are children of ReplaceableBase, and can be easily replaced with custom implementations.

In addition, I added support for the exponential LR schedule, updated the config files and the test, as well as added a config file that reproduces NERF results and a test to run the repro experiment.

Reviewed By: bottler

Differential Revision: D37723227

fbshipit-source-id: b36bee880d6aa53efdd2abfaae4489d8ab1e8a27
parent 6b481595
...@@ -2,10 +2,10 @@ defaults: ...@@ -2,10 +2,10 @@ defaults:
- default_config - default_config
- _self_ - _self_
exp_dir: ./data/exps/base/ exp_dir: ./data/exps/base/
architecture: generic training_loop_ImplicitronTrainingLoop_args:
visualize_interval: 0 visualize_interval: 0
visdom_port: 8097 max_epochs: 1000
data_source_args: data_source_ImplicitronDataSource_args:
data_loader_map_provider_class_type: SequenceDataLoaderMapProvider data_loader_map_provider_class_type: SequenceDataLoaderMapProvider
dataset_map_provider_class_type: JsonIndexDatasetMapProvider dataset_map_provider_class_type: JsonIndexDatasetMapProvider
data_loader_map_provider_SequenceDataLoaderMapProvider_args: data_loader_map_provider_SequenceDataLoaderMapProvider_args:
...@@ -21,7 +21,9 @@ data_source_args: ...@@ -21,7 +21,9 @@ data_source_args:
load_point_clouds: false load_point_clouds: false
mask_depths: false mask_depths: false
mask_images: false mask_images: false
generic_model_args: model_factory_ImplicitronModelFactory_args:
visdom_port: 8097
model_GenericModel_args:
loss_weights: loss_weights:
loss_mask_bce: 1.0 loss_mask_bce: 1.0
loss_prev_stage_mask_bce: 1.0 loss_prev_stage_mask_bce: 1.0
...@@ -66,10 +68,14 @@ generic_model_args: ...@@ -66,10 +68,14 @@ generic_model_args:
proj_dim: 16 proj_dim: 16
image_rescale: 0.32 image_rescale: 0.32
first_max_pool: false first_max_pool: false
solver_args: optimizer_factory_ImplicitronOptimizerFactory_args:
breed: adam breed: Adam
weight_decay: 0.0
lr_policy: MultiStepLR
multistep_lr_milestones: []
lr: 0.0005 lr: 0.0005
lr_policy: multistep gamma: 0.1
max_epochs: 2000
momentum: 0.9 momentum: 0.9
weight_decay: 0.0 betas:
- 0.9
- 0.999
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
image_feature_extractor_class_type: ResNetFeatureExtractor image_feature_extractor_class_type: ResNetFeatureExtractor
image_feature_extractor_ResNetFeatureExtractor_args: image_feature_extractor_ResNetFeatureExtractor_args:
add_images: true add_images: true
......
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
image_feature_extractor_class_type: ResNetFeatureExtractor image_feature_extractor_class_type: ResNetFeatureExtractor
image_feature_extractor_ResNetFeatureExtractor_args: image_feature_extractor_ResNetFeatureExtractor_args:
add_images: true add_images: true
......
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
image_feature_extractor_class_type: ResNetFeatureExtractor image_feature_extractor_class_type: ResNetFeatureExtractor
image_feature_extractor_ResNetFeatureExtractor_args: image_feature_extractor_ResNetFeatureExtractor_args:
stages: stages:
......
defaults: defaults:
- repro_base.yaml - repro_base.yaml
- _self_ - _self_
data_source_args: data_source_ImplicitronDataSource_args:
data_loader_map_provider_SequenceDataLoaderMapProvider_args: data_loader_map_provider_SequenceDataLoaderMapProvider_args:
batch_size: 10 batch_size: 10
dataset_length_train: 1000 dataset_length_train: 1000
...@@ -26,10 +26,12 @@ data_source_args: ...@@ -26,10 +26,12 @@ data_source_args:
n_frames_per_sequence: -1 n_frames_per_sequence: -1
test_on_train: true test_on_train: true
test_restrict_sequence_id: 0 test_restrict_sequence_id: 0
solver_args: optimizer_factory_ImplicitronOptimizerFactory_args:
max_epochs: 3000 multistep_lr_milestones:
milestones:
- 1000 - 1000
camera_difficulty_bin_breaks: training_loop_ImplicitronTrainingLoop_args:
max_epochs: 3000
evaluator_ImplicitronEvaluator_args:
camera_difficulty_bin_breaks:
- 0.666667 - 0.666667
- 0.833334 - 0.833334
defaults: defaults:
- repro_multiseq_base.yaml - repro_multiseq_base.yaml
- _self_ - _self_
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
loss_weights: loss_weights:
loss_mask_bce: 100.0 loss_mask_bce: 100.0
loss_kl: 0.0 loss_kl: 0.0
......
defaults: defaults:
- repro_multiseq_base.yaml - repro_multiseq_base.yaml
- _self_ - _self_
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
chunk_size_grid: 16000 chunk_size_grid: 16000
view_pooler_enabled: false view_pooler_enabled: false
global_encoder_class_type: SequenceAutodecoder global_encoder_class_type: SequenceAutodecoder
......
...@@ -2,9 +2,11 @@ defaults: ...@@ -2,9 +2,11 @@ defaults:
- repro_multiseq_base.yaml - repro_multiseq_base.yaml
- repro_feat_extractor_unnormed.yaml - repro_feat_extractor_unnormed.yaml
- _self_ - _self_
clip_grad: 1.0 model_factory_ImplicitronModelFactory_args:
generic_model_args: model_GenericModel_args:
chunk_size_grid: 16000 chunk_size_grid: 16000
view_pooler_enabled: true view_pooler_enabled: true
raysampler_AdaptiveRaySampler_args: raysampler_AdaptiveRaySampler_args:
n_rays_per_image_sampled_from_mask: 850 n_rays_per_image_sampled_from_mask: 850
training_loop_ImplicitronTrainingLoop_args:
clip_grad: 1.0
...@@ -2,7 +2,8 @@ defaults: ...@@ -2,7 +2,8 @@ defaults:
- repro_multiseq_base.yaml - repro_multiseq_base.yaml
- repro_feat_extractor_transformer.yaml - repro_feat_extractor_transformer.yaml
- _self_ - _self_
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
chunk_size_grid: 16000 chunk_size_grid: 16000
raysampler_AdaptiveRaySampler_args: raysampler_AdaptiveRaySampler_args:
n_rays_per_image_sampled_from_mask: 800 n_rays_per_image_sampled_from_mask: 800
......
defaults: defaults:
- repro_multiseq_nerformer.yaml - repro_multiseq_nerformer.yaml
- _self_ - _self_
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
view_pooler_args: view_pooler_args:
feature_aggregator_class_type: AngleWeightedIdentityFeatureAggregator feature_aggregator_class_type: AngleWeightedIdentityFeatureAggregator
defaults: defaults:
- repro_multiseq_base.yaml - repro_multiseq_base.yaml
- _self_ - _self_
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
chunk_size_grid: 16000 chunk_size_grid: 16000
view_pooler_enabled: false view_pooler_enabled: false
n_train_target_views: -1 n_train_target_views: -1
...@@ -29,6 +30,6 @@ generic_model_args: ...@@ -29,6 +30,6 @@ generic_model_args:
stratified_point_sampling_evaluation: false stratified_point_sampling_evaluation: false
renderer_class_type: LSTMRenderer renderer_class_type: LSTMRenderer
implicit_function_class_type: SRNHyperNetImplicitFunction implicit_function_class_type: SRNHyperNetImplicitFunction
solver_args: optimizer_factory_ImplicitronOptimizerFactory_args:
breed: adam breed: Adam
lr: 5.0e-05 lr: 5.0e-05
defaults: defaults:
- repro_multiseq_srn_ad_hypernet.yaml - repro_multiseq_srn_ad_hypernet.yaml
- _self_ - _self_
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
num_passes: 1 num_passes: 1
implicit_function_SRNHyperNetImplicitFunction_args: implicit_function_SRNHyperNetImplicitFunction_args:
pixel_generator_args: pixel_generator_args:
......
...@@ -2,7 +2,8 @@ defaults: ...@@ -2,7 +2,8 @@ defaults:
- repro_multiseq_base.yaml - repro_multiseq_base.yaml
- repro_feat_extractor_normed.yaml - repro_feat_extractor_normed.yaml
- _self_ - _self_
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
chunk_size_grid: 32000 chunk_size_grid: 32000
num_passes: 1 num_passes: 1
n_train_target_views: -1 n_train_target_views: -1
...@@ -25,6 +26,6 @@ generic_model_args: ...@@ -25,6 +26,6 @@ generic_model_args:
renderer_class_type: LSTMRenderer renderer_class_type: LSTMRenderer
implicit_function_class_type: SRNImplicitFunction implicit_function_class_type: SRNImplicitFunction
view_pooler_enabled: true view_pooler_enabled: true
solver_args: optimizer_factory_ImplicitronOptimizerFactory_args:
breed: adam breed: Adam
lr: 5.0e-05 lr: 5.0e-05
defaults: defaults:
- repro_multiseq_srn_wce.yaml - repro_multiseq_srn_wce.yaml
- _self_ - _self_
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
num_passes: 1 num_passes: 1
implicit_function_SRNImplicitFunction_args: implicit_function_SRNImplicitFunction_args:
pixel_generator_args: pixel_generator_args:
......
defaults: defaults:
- repro_base - repro_base
- _self_ - _self_
data_source_args: data_source_ImplicitronDataSource_args:
data_loader_map_provider_SequenceDataLoaderMapProvider_args: data_loader_map_provider_SequenceDataLoaderMapProvider_args:
batch_size: 1 batch_size: 1
dataset_length_train: 1000 dataset_length_train: 1000
...@@ -12,7 +12,8 @@ data_source_args: ...@@ -12,7 +12,8 @@ data_source_args:
n_frames_per_sequence: -1 n_frames_per_sequence: -1
test_restrict_sequence_id: 0 test_restrict_sequence_id: 0
test_on_train: false test_on_train: false
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
render_image_height: 800 render_image_height: 800
render_image_width: 800 render_image_width: 800
log_vars: log_vars:
...@@ -31,9 +32,10 @@ generic_model_args: ...@@ -31,9 +32,10 @@ generic_model_args:
- objective - objective
- epoch - epoch
- sec/it - sec/it
solver_args: optimizer_factory_ImplicitronOptimizerFactory_args:
lr: 0.0005 lr: 0.0005
max_epochs: 400 multistep_lr_milestones:
milestones:
- 200 - 200
- 300 - 300
training_loop_ImplicitronTrainingLoop_args:
max_epochs: 400
defaults: defaults:
- repro_singleseq_base - repro_singleseq_base
- _self_ - _self_
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
loss_weights: loss_weights:
loss_mask_bce: 100.0 loss_mask_bce: 100.0
loss_kl: 0.0 loss_kl: 0.0
......
defaults:
- repro_singleseq_base
- _self_
exp_dir: "./data/nerf_blender_publ/${oc.env:BLENDER_SINGLESEQ_CLASS}"
data_source_ImplicitronDataSource_args:
data_loader_map_provider_SequenceDataLoaderMapProvider_args:
dataset_length_train: 100
dataset_map_provider_class_type: BlenderDatasetMapProvider
dataset_map_provider_BlenderDatasetMapProvider_args:
base_dir: ${oc.env:BLENDER_DATASET_ROOT}
object_name: ${oc.env:BLENDER_SINGLESEQ_CLASS}
path_manager_factory_class_type: PathManagerFactory
n_known_frames_for_test: null
path_manager_factory_PathManagerFactory_args:
silence_logs: true
model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
raysampler_AdaptiveRaySampler_args:
n_rays_per_image_sampled_from_mask: 4096
scene_extent: 2.0
renderer_MultiPassEmissionAbsorptionRenderer_args:
n_pts_per_ray_fine_training: 128
n_pts_per_ray_fine_evaluation: 128
loss_weights:
loss_rgb_mse: 1.0
loss_prev_stage_rgb_mse: 1.0
loss_mask_bce: 0.0
loss_prev_stage_mask_bce: 0.0
loss_autodecoder_norm: 0.00
optimizer_factory_ImplicitronOptimizerFactory_args:
exponential_lr_step_size: 2000
training_loop_ImplicitronTrainingLoop_args:
max_epochs: 2000
visualize_interval: 0
validation_interval: 30
...@@ -2,7 +2,8 @@ defaults: ...@@ -2,7 +2,8 @@ defaults:
- repro_singleseq_wce_base.yaml - repro_singleseq_wce_base.yaml
- repro_feat_extractor_unnormed.yaml - repro_feat_extractor_unnormed.yaml
- _self_ - _self_
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
chunk_size_grid: 16000 chunk_size_grid: 16000
view_pooler_enabled: true view_pooler_enabled: true
raysampler_AdaptiveRaySampler_args: raysampler_AdaptiveRaySampler_args:
......
...@@ -2,7 +2,8 @@ defaults: ...@@ -2,7 +2,8 @@ defaults:
- repro_singleseq_wce_base.yaml - repro_singleseq_wce_base.yaml
- repro_feat_extractor_transformer.yaml - repro_feat_extractor_transformer.yaml
- _self_ - _self_
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
chunk_size_grid: 16000 chunk_size_grid: 16000
view_pooler_enabled: true view_pooler_enabled: true
implicit_function_class_type: NeRFormerImplicitFunction implicit_function_class_type: NeRFormerImplicitFunction
......
defaults: defaults:
- repro_singleseq_base.yaml - repro_singleseq_base.yaml
- _self_ - _self_
generic_model_args: model_factory_ImplicitronModelFactory_args:
model_GenericModel_args:
num_passes: 1 num_passes: 1
chunk_size_grid: 32000 chunk_size_grid: 32000
view_pooler_enabled: false view_pooler_enabled: false
...@@ -23,6 +24,6 @@ generic_model_args: ...@@ -23,6 +24,6 @@ generic_model_args:
stratified_point_sampling_evaluation: false stratified_point_sampling_evaluation: false
renderer_class_type: LSTMRenderer renderer_class_type: LSTMRenderer
implicit_function_class_type: SRNImplicitFunction implicit_function_class_type: SRNImplicitFunction
solver_args: optimizer_factory_ImplicitronOptimizerFactory_args:
breed: adam breed: Adam
lr: 5.0e-05 lr: 5.0e-05
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment