climategan / shared /trainer /defaults.yaml
NimaBoscarino's picture
copy the climategan repo in here
6e601ed
output_path: /miniscratch/_groups/ccai/trash
# README on load_path
# 1/ any path which leads to a dir will be loaded as `path / checkpoints / latest_ckpt.pth`
# 2/ if you want to specify a specific checkpoint, it MUST be a `.pth` file
# 3/ resuming a P OR an M model, you may only specify 1 of `load_path.p` OR `load_path.m`.
# You may also leave BOTH at none, in which case `output_path / checkpoints / latest_ckpt.pth`
# will be used
# 4/ resuming a P+M model, you may specify (`p` AND `m`) OR `pm` OR leave all at none,
# in which case `output_path / checkpoints / latest_ckpt.pth` will be used to load from
# a single checkpoint
load_paths:
p: none # Painter weights: none will use `output_path / checkpoints / latest_ckpt.pth`
m: none # Masker weights: none will use `output_path / checkpoints / latest_ckpt.pth`
pm: none # Painter and Masker weights: none will use `output_path / checkpoints / latest_ckpt.pth`
# -------------------
# ----- Tasks -----
# -------------------
tasks: [d, s, m, p] # [p] [m, s, d]
# ----------------
# ----- Data -----
# ----------------
data:
max_samples: -1 # -1 for all, otherwise set to an int to crop the training data size
files: # if one is not none it will override the dirs location
base: /miniscratch/_groups/ccai/data/jsons
train:
r: train_r_full.json
s: train_s_fixedholes.json
rf: train_rf.json
kitti: train_kitti.json
val:
r: val_r_full.json
s: val_s_fixedholes.json
rf: val_rf_labelbox.json
kitti: val_kitti.json
check_samples: False
loaders:
batch_size: 6
num_workers: 6
normalization: default # can be "default" or "HRNet" for now. # default: mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]; HRNet: mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]
transforms:
- name: hflip
ignore: val
p: 0.5
- name: resize
ignore: false
new_size: 640
keep_aspect_ratio: true # smallest dimension will be `new_size` and the other will be computed to keep aspect ratio
- name: crop
ignore: false
center: val # disable randomness, crop around the image's center
height: 600
width: 600
- name: brightness
ignore: val
- name: saturation
ignore: val
- name: contrast
ignore: val
- name: resize
ignore: false
new_size:
default: 640
d: 160
s: 160
# ---------------------
# ----- Generator -----
# ---------------------
gen:
opt:
optimizer: ExtraAdam # one in [Adam, ExtraAdam] default: Adam
beta1: 0.9
lr:
default: 0.00005 # 0.00001 for dlv2, 0.00005 for dlv3
lr_policy: step
# lr_policy can be constant, step or multi_step; if step, specify lr_step_size and lr_gamma
# if multi_step specify lr_step_size lr_gamma and lr_milestones:
# if lr_milestones is a list:
# the learning rate will be multiplied by gamma each time the epoch reaches an
# item in the list (no need for lr_step_size).
# if lr_milestones is an int:
# a list of milestones is created from `range(lr_milestones, train.epochs, lr_step_size)`
lr_step_size: 5 # for linear decay : period of learning rate decay (epochs)
lr_milestones: 15
lr_gamma: 0.5 # Multiplicative factor of learning rate decay
default:
&default-gen # default parameters for the generator (encoder and decoders)
activ: lrelu # activation function [relu/lrelu/prelu/selu/tanh]
init_gain: 0.02
init_type: xavier
n_res: 1 # number of residual blocks before upsampling
n_downsample: &n_downsample 3 # number of downsampling layers in encoder | dim 32 + down 3 => z = 256 x 32 x 32
n_upsample: *n_downsample # upsampling in spade decoder ; should match encoder.n_downsample
pad_type: reflect # padding type [zero/reflect]
norm: spectral # ResBlock normalization ; one of {"batch", "instance", "layer", "adain", "spectral", "none"}
proj_dim: 32 # Dim of projection from latent space
encoder: # specific params for the encoder
<<: *default-gen
dim: 32
architecture: deeplabv3 # [deeplabv2/v3 resnet -> res_dim=2048) | dlv3 mobilenet -> res_dim=320
input_dim: 3 # input number of channels
n_res: 0 # number of residual blocks in content encoder/decoder
norm: spectral # ConvBlock normalization ; one of {"batch", "instance", "layer", "adain", "spectral", "none"}
#! Don't change!!!
deeplabv2:
nblocks: [3, 4, 23, 3]
use_pretrained: True
pretrained_model: "/miniscratch/_groups/ccai/data/pretrained_models/deeplabv2/DeepLab_resnet_pretrained_imagenet.pth"
deeplabv3:
backbone: resnet # resnet or mobilenet
output_stride: 8 # 8 or 16
use_pretrained: true
pretrained_model:
mobilenet: "/miniscratch/_groups/ccai/data/pretrained_models/deeplabv3/deeplabv3_plus_mobilenetv2_segmentron.pth"
resnet: "/miniscratch/_groups/ccai/data/pretrained_models/deeplabv3/model_CoinCheungDeepLab-v3-plus.pth"
d: # specific params for the depth estimation decoder
<<: *default-gen
output_dim: 1
norm: batch
loss: sigm # dada or sigm | /!\ ignored if classify.enable
upsample_featuremaps: True # upsamples from 80x80 to 160x160 intermediate feature maps
architecture: dada # dada or base | must be base for classif
classify: # classify log-depth instead of regression
enable: False
linspace:
min: 0.35
max: 6.95
buckets: 256
s: # specific params for the semantic segmentation decoder
<<: *default-gen
num_classes: 11
output_dim: 11
use_advent: True
use_minent: True
architecture: deeplabv3
upsample_featuremaps: False # upsamples from 80x80 to 160x160 intermediate feature maps
use_dada: True
p: # specific params for the SPADE painter
<<: *default-gen
latent_dim: 640
loss: gan # gan or hinge
no_z: true # <=> use_vae=False in the SPADE repo
output_dim: 3 # output dimension
pad_type: reflect # padding type [zero/reflect]
paste_original_content: True # only select the water painted to backprop through the network, not the whole generated image: fake_flooded = masked_x + m * fake_flooded
pl4m_epoch: 49 # epoch from which we introduce a new loss to the masker: the painter's discriminator's loss
spade_kernel_size: 3 # kernel size within SPADE norm layers
spade_n_up: 7 # number of upsampling layers in the translation decoder is equal to number of downsamplings in the encoder. output's h and w are z's h and w x 2^spade_num_upsampling_layers | z:32 and spade_n_up:4 => output 512
spade_param_free_norm: instance # what param-free normalization to apply in SPADE normalization
spade_use_spectral_norm: true
use_final_shortcut: False # if true, the last spade block does not get the masked input as conditioning but the prediction of the previous layer (passed through a conv to match dims) in order to lighten the masking restrictions and have smoother edges
diff_aug:
use: False
do_color_jittering: false
do_cutout: false
cutout_ratio: 0.5
do_translation: false
translation_ratio: 0.125
m: # specific params for the mask-generation decoder
<<: *default-gen
use_spade: False
output_dim: 1
use_minent: True # directly minimize the entropy of the image
use_minent_var: True # add variance of entropy map in the measure of entropy for a certain picture
use_advent: True # minimize the entropy of the image by adversarial training
use_ground_intersection: True
use_proj: True
proj_dim: 64
use_pl4m: False
n_res: 3
use_low_level_feats: True
use_dada: False
spade:
latent_dim: 128
detach: false # detach s_pred and d_pred conditioning tensors
cond_nc: 15 # 12 without x, 15 with x
spade_use_spectral_norm: True
spade_param_free_norm: batch
num_layers: 3
activations:
all_lrelu: True
# -------------------------
# ----- Discriminator -----
# -------------------------
dis:
soft_shift: 0.2 # label smoothing: real in U(1-soft_shift, 1), fake in U(0, soft_shift) # ! one-sided label smoothing
flip_prob: 0.05 # label flipping
opt:
optimizer: ExtraAdam # one in [Adam, ExtraAdam] default: Adam
beta1: 0.5
lr:
default: 0.00002 # 0.0001 for dlv2, 0.00002 for dlv3
lr_policy: step
# lr_policy can be constant, step or multi_step; if step, specify lr_step_size and lr_gamma
# if multi_step specify lr_step_size lr_gamma and lr_milestones:
# if lr_milestones is a list:
# the learning rate will be multiplied by gamma each time the epoch reaches an
# item in the list (no need for lr_step_size).
# if lr_milestones is an int:
# a list of milestones is created from `range(lr_milestones, train.epochs, lr_step_size)`
lr_step_size: 15 # for linear decay : period of learning rate decay (epochs)
lr_milestones: 5
lr_gamma: 0.5 # Multiplicative factor of learning rate decay
default:
&default-dis # default setting for discriminators (there are 4 of them for rn rf sn sf)
input_nc: 3
ndf: 64
n_layers: 4
norm: instance
init_type: xavier
init_gain: 0.02
use_sigmoid: false
num_D: 1 #Number of discriminators to use (>1 means multi-scale)
get_intermediate_features: false
p:
<<: *default-dis
num_D: 3
get_intermediate_features: true
use_local_discriminator: false
# ttur: false # two time-scale update rule (see SPADE repo)
m:
<<: *default-dis
multi_level: false
architecture: base # can be [base | OmniDiscriminator]
gan_type: WGAN_norm # can be [GAN | WGAN | WGAN_gp | WGAN_norm]
wgan_clamp_lower: -0.01 # used in WGAN, WGAN clap the params in dis to [wgan_clamp_lower, wgan_clamp_upper] for every update
wgan_clamp_upper: 0.01 # used in WGAN
s:
<<: *default-dis
gan_type: WGAN_norm # can be [GAN | WGAN | WGAN_gp | WGAN_norm]
wgan_clamp_lower: -0.01 # used in WGAN, WGAN clap the params in dis to [wgan_clamp_lower, wgan_clamp_upper] for every update
wgan_clamp_upper: 0.01 # used in WGAN
# -------------------------------
# ----- Domain Classifier -----
# -------------------------------
classifier:
opt:
optimizer: ExtraAdam # one in [Adam, ExtraAdam] default: Adam
beta1: 0.5
lr:
default: 0.0005
lr_policy: step # constant or step ; if step, specify step_size and gamma
lr_step_size: 30 # for linear decay
lr_gamma: 0.5
loss: l2 #Loss can be l1, l2, cross_entropy. default cross_entropy
layers: [100, 100, 20, 20, 4] # number of units per hidden layer ; las number is output_dim
dropout: 0.4 # probability of being set to 0
init_type: kaiming
init_gain: 0.2
proj_dim: 128 #Dim of projection from latent space
# ------------------------
# ----- Train Params -----
# ------------------------
train:
kitti:
pretrain: False
epochs: 10
batch_size: 6
amp: False
pseudo:
tasks: [] # list of tasks for which to use pseudo labels (empty list to disable)
epochs: 10 # disable pseudo training after n epochs (set to -1 to never disable)
epochs: 300
fid:
n_images: 57 # val_rf.json has 57 images
batch_size: 50 # inception inference batch size, not painter's
dims: 2048 # what Inception bock to compute the stats from (see BLOCK_INDEX_BY_DIM in fid.py)
latent_domain_adaptation: False # whether or not to do domain adaptation on the latent vectors # Needs to be turned off if use_advent is True
lambdas: # scaling factors in the total loss
G:
d:
main: 1
gml: 0.5
s:
crossent: 1
crossent_pseudo: 0.001
minent: 0.001
advent: 0.001
m:
bce: 1 # Main prediction loss, i.e. GAN or BCE
tv: 1 # Total variational loss (for smoothing)
gi: 0.05
pl4m: 1 # painter loss for the masker (end-to-end)
p:
context: 0
dm: 1 # depth matching
featmatch: 10
gan: 1 # gan loss
reconstruction: 0
tv: 0
vgg: 10
classifier: 1
C: 1
advent:
ent_main: 0.5 # the coefficient of the MinEnt loss that directly minimize the entropy of the image
ent_aux: 0.0 # the corresponding coefficient of the MinEnt loss of second output
ent_var: 0.1 # the proportion of variance of entropy map in the entropy measure for a certain picture
adv_main: 1.0 # the coefficient of the AdvEnt loss that minimize the entropy of the image by adversarial training
adv_aux: 0.0 # the corresponding coefficient of the AdvEnt loss of second output
dis_main: 1.0 # the discriminator take care of the first output in the adversarial training
dis_aux: 0.0 # the discriminator take care of the second output in the adversarial training
WGAN_gp: 10 # used in WGAN_gp, it's the hyperparameters for the gradient penalty
log_level: 2 # 0: no log, 1: only aggregated losses, >1 detailed losses
save_n_epochs: 25 # Save `latest_ckpt.pth` every epoch, `epoch_{epoch}_ckpt.pth` model every n epochs if epoch >= min_save_epoch
min_save_epoch: 28 # Save extra intermediate checkpoints when epoch > min_save_epoch
resume: false # Load latest_ckpt.pth checkpoint from `output_path` #TODO Make this path of checkpoint to load
auto_resume: true # automatically looks for similar output paths and exact same jobID to resume training automatically even if resume is false.
# -----------------------------
# ----- Validation Params -----
# -----------------------------
val:
store_images: false # write to disk on top of comet logging
val_painter: /miniscratch/_groups/ccai/checkpoints/painter/victor/good_large_lr/checkpoints/latest_ckpt.pth
# -----------------------------
# ----- Comet Params ----------
# -----------------------------
comet:
display_size: 20
rows_per_log: 5 # number of samples (rows) in a logged grid image. Number of total logged images: display_size // rows_per_log
im_per_row: # how many columns (3 = x, target, pred)
p: 4
m: 6
s: 4
d: 4