Skip to content

Commit 562d661

Browse files
committedFeb 17, 2020
update 1 on comments
1 parent 45c5d7e commit 562d661

21 files changed

+148
-342
lines changed
 

‎conf/config.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ defaults:
66
- dataset: ???
77
optional: True
88

9-
- scheduler: lambda_rule
9+
- lr_scheduler: multi_step
1010
- training: default
1111
- eval
1212

@@ -17,4 +17,5 @@ defaults:
1717

1818
model_name: ??? # Name of the specific model to load
1919

20+
selection_stage: "test"
2021
pretty_print: False

‎conf/lr_scheduler/cosine.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
lr_scheduler:
2+
class: CosineAnnealingLR
3+
params:
4+
T_max: 10

‎conf/lr_scheduler/cyclic.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
lr_scheduler:
2+
class: CyclicLR
3+
params:
4+
base_lr: ${training.optim.base_lr}
5+
max_lr: 0.1

‎conf/lr_scheduler/exponential.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
lr_scheduler:
2+
class: ExponentialLR
3+
params:
4+
gamma: 0.1

‎conf/lr_scheduler/multi_step.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
lr_scheduler:
2+
class: MultiStepLR
3+
params:
4+
milestones: [10, 25, 50, 75, 100]
5+
gamma: 0.1

‎conf/lr_scheduler/plateau.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
lr_scheduler:
2+
class: ReduceLROnPlateau
3+
params:
4+
mode: "min"

‎conf/lr_scheduler/step.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
lr_scheduler:
2+
class: StepLR
3+
params:
4+
step_size: 10
5+
gamma: 0.1

‎conf/scheduler/cosine.yaml

-4
This file was deleted.

‎conf/scheduler/lambda_rule.yaml

-7
This file was deleted.

‎conf/scheduler/plateau.yaml

-5
This file was deleted.

‎conf/training/default.yaml

+11-10
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
# Those arguments defines the training hyper-parameters
22
training:
3-
shuffle: True
3+
epochs: 100
44
num_workers: 6
55
batch_size: 16
6+
shuffle: True
67
cuda: 1
78
precompute_multi_scale: False # Compute multiscate features on cpu for faster training / inference
8-
epochs: 100
9-
grad_clip: -1
10-
base_lr: 0.001
11-
accumulated_gradient: 10 # Accumulate gradient accumulated_gradient * batch_size
129
optim:
10+
base_lr: 0.001
11+
accumulated_gradient: 10 # Accumulate gradient accumulated_gradient * batch_size
12+
grad_clip: -1
1313
optimizer:
1414
class: Adam
1515
params:
16-
lr: ${base_lr} # The path is cut from training
17-
scheduler: ${scheduler}
16+
lr: ${training.optim.base_lr} # The path is cut from training
17+
scheduler: ${lr_scheduler}
1818
bn_scheduler:
1919
bn_policy: "step_decay"
2020
params:
21-
bn_momentum: 0.9
22-
bn_decay: 0.5
23-
decay_step : 200000
21+
bn_momentum: 0.1
22+
bn_decay: 0.9
23+
decay_step : 1024
2424
bn_clip : 1e-2
2525
weight_name: "latest" # Used during resume, select with model to load from [miou, macc, acc..., latest]
2626
enable_cudnn: True
@@ -34,6 +34,7 @@ wandb:
3434
log: False
3535
notes:
3636
name:
37+
public: True # It will be display the model within wandb log, else not.
3738

3839
# parameters for TensorBoard Visualization
3940
tensorboard:

‎conf/training/kpconv.yaml

+12-11
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
11
# Those arguments defines the training hyper-parameters
22
training:
3-
shuffle: True
3+
epochs: 100
44
num_workers: 4
55
batch_size: 16
6-
accumulated_gradient: 4 # Accumulate gradient accumulated_gradient * batch_size
6+
shuffle: True
77
cuda: 1
8-
precompute_multi_scale: True # Compute multiscate features on cpu for faster training / inference
9-
epochs: 100
10-
grad_clip: -1
11-
base_lr: 0.01
8+
precompute_multi_scale: False # Compute multiscate features on cpu for faster training / inference
129
optim:
10+
base_lr: 0.01
11+
grad_clip: -1
1312
optimizer:
1413
class: Adam
1514
params:
16-
lr: ${base_lr} # The path is cut from training
17-
scheduler: ${scheduler}
15+
lr: ${training.optim.base_lr} # The path is cut from training
16+
scheduler: ${lr_scheduler}
1817
bn_scheduler:
1918
bn_policy: "step_decay"
2019
params:
21-
bn_momentum: 0.9
22-
bn_decay: 0.5
23-
decay_step : 200000
20+
bn_momentum: 0.1
21+
bn_decay: 0.9
22+
decay_step : 1024
2423
bn_clip : 1e-2
2524
weight_name: "latest" # Used during resume, select with model to load from [miou, macc, acc..., latest]
2625
enable_cudnn: True
@@ -34,6 +33,8 @@ wandb:
3433
log: True
3534
notes: "Multihead"
3635
name: "kpconv-multihead"
36+
public: True # It will be display the model within wandb log, else not.
37+
3738

3839
# parameters for TensorBoard Visualization
3940
tensorboard:

‎src/core/schedulers/bn_schedulers.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def instantiate_bn_scheduler(model, bn_scheduler_opt, batch_size):
6868
Parameters:
6969
model -- the nn network
7070
bn_scheduler_opt (option class) -- dict containing all the params to build the scheduler 
71-
opt.lr_policy is the name of learning rate policy: lambda_rule | step | plateau | cosine
71+
opt.bn_policy is the name of learning rate policy: lambda_rule | step | plateau | cosine
7272
opt.params contains the scheduler_params to construct the scheduler
7373
See https://pytorch.org/docs/stable/optim.html for more details.
7474
"""
@@ -79,13 +79,15 @@ def instantiate_bn_scheduler(model, bn_scheduler_opt, batch_size):
7979
* bn_scheduler_params.bn_decay ** (int(it * batch_size / bn_scheduler_params.decay_step)),
8080
bn_scheduler_params.bn_clip,
8181
)
82+
8283
elif bn_scheduler_opt.bn_policy == "exponential_decay":
8384
bn_lambda = lambda e: max(
8485
eval(bn_scheduler_params.gamma) ** (e / bn_scheduler_params.decay_step),
8586
bn_scheduler_params.bn_clip / bn_scheduler_params.bn_momentum,
8687
)
88+
8789
else:
88-
return NotImplementedError("learning rate policy [%s] is not implemented", bn_scheduler_opt.lr_policy)
90+
return NotImplementedError("bn_policy [%s] is not implemented", bn_scheduler_opt.bn_policy)
8991

9092
bn_scheduler = BNMomentumScheduler(model, bn_lambda)
9193

‎src/core/schedulers/lr_schedulers.py

+13-34
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
from torch.optim import lr_scheduler
2-
from functools import partial
32
from omegaconf.dictconfig import DictConfig
43
import logging
54
from src.utils.config import merge_omega_conf
65

76

87
log = logging.getLogger(__name__)
98

9+
1010
def repr(self, scheduler_params={}):
1111
return "{}({})".format(self.__class__.__name__, scheduler_params)
1212

13-
class SchedulerWrapper():
1413

14+
class LRScheduler:
1515
def __init__(self, scheduler, scheduler_params):
1616
self._scheduler = scheduler
1717
self._scheduler_params = scheduler_params
@@ -22,7 +22,7 @@ def scheduler(self):
2222

2323
@property
2424
def scheduler_opt(self):
25-
return self._scheduler._scheduler_opt
25+
return self._scheduler._scheduler_opt
2626

2727
def __repr__(self):
2828
return "{}({})".format(self._scheduler.__class__.__name__, self._scheduler_params)
@@ -36,6 +36,7 @@ def state_dict(self):
3636
def load_state_dict(self, state_dict):
3737
self._scheduler.load_state_dict(state_dict)
3838

39+
3940
def instantiate_scheduler(optimizer, scheduler_opt):
4041
"""Return a learning rate scheduler
4142
Parameters:
@@ -45,37 +46,15 @@ def instantiate_scheduler(optimizer, scheduler_opt):
4546
opt.params contains the scheduler_params to construct the scheduler
4647
See https://pytorch.org/docs/stable/optim.html for more details.
4748
"""
48-
base_lr = optimizer.defaults['lr']
49+
50+
scheduler_cls_name = getattr(scheduler_opt, "class")
51+
scheduler_cls = getattr(lr_scheduler, scheduler_cls_name)
4952
scheduler_params = scheduler_opt.params
50-
if scheduler_opt.lr_policy == 'lambda_rule':
51-
if scheduler_opt.rule == "step_decay":
52-
lr_lambda = lambda e: max(
53-
scheduler_params.lr_decay ** (e // scheduler_params.decay_step),
54-
scheduler_params.lr_clip / base_lr,
55-
)
56-
elif scheduler_opt.rule == "exponential_decay":
57-
lr_lambda = lambda e: max(
58-
eval(scheduler_params.gamma) ** (e / scheduler_params.decay_step),
59-
scheduler_params.lr_clip / base_lr,
60-
)
61-
else:
62-
raise NotImplementedError
63-
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lr_lambda)
64-
65-
elif scheduler_opt.lr_policy == 'step':
66-
scheduler = lr_scheduler.StepLR(optimizer, **scheduler_params)
67-
68-
elif scheduler_opt.lr_policy == 'plateau':
69-
scheduler = lr_scheduler.ReduceLROnPlateau(optimizer, **scheduler_params)
70-
scheduler_params = merge_omega_conf(scheduler_params, {"metric_name": scheduler_opt.metric_name})
71-
setattr(scheduler, "metric_name", scheduler_opt.metric_name)
72-
73-
elif scheduler_opt.lr_policy == 'cosine':
74-
scheduler = lr_scheduler.CosineAnnealingLR(optimizer, **scheduler_params)
75-
else:
76-
return NotImplementedError('learning rate policy [%s] is not implemented', scheduler_opt.lr_policy)
77-
53+
54+
if scheduler_cls_name.lower() == "ReduceLROnPlateau".lower():
55+
raise NotImplementedError("This scheduler is not fully supported yet")
56+
57+
scheduler = scheduler_cls(optimizer, **scheduler_params)
7858
# used to re_create the scheduler
7959
setattr(scheduler, "_scheduler_opt", scheduler_opt)
80-
81-
return SchedulerWrapper(scheduler, scheduler_params)
60+
return LRScheduler(scheduler, scheduler_params)

‎src/metrics/model_checkpoint.py

-3
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ def get_model_checkpoint(
2828
):
2929
""" Loads a model from a checkpoint or creates a new one.
3030
"""
31-
model.set_selection_stage(selection_stage)
32-
3331
model_checkpoint: ModelCheckpoint = ModelCheckpoint(load_dir, check_name, resume, selection_stage)
3432

3533
if resume:
@@ -55,7 +53,6 @@ def _initialize_objects(self):
5553
self._objects["model_state"] = None
5654
self._objects["stats"] = {"train": [], "test": [], "val": []}
5755
self._objects["optimizer"] = None
58-
self._objects["lr_params"] = None
5956
self._filled = False
6057

6158
def save_objects(self, models_to_save, model_state, stage, current_stat, optimizer, schedulers, **kwargs):

0 commit comments

Comments
 (0)
Please sign in to comment.