Shortcuts

Tutorial 1: Learn about Configs

We incorporate modular and inheritance design into our config system, which is convenient to conduct various experiments. If you wish to inspect the config file, you may run python tools/misc/print_config.py /PATH/TO/CONFIG to see the complete config.

Modify config through script arguments

When submitting jobs using “tools/train.py” or “tools/evaluation.py”, you may specify --cfg-options to in-place modify the config.

  • Update config keys of dict chains.

    The config options can be specified following the order of the dict keys in the original config. For example, --cfg-options test_cfg.use_ema=False changes the default sampling model to the original generator.

  • Update keys inside a list of configs.

    Some config dicts are composed as a list in your config. For example, the training pipeline data.train.pipeline is normally a list e.g. [dict(type='LoadImageFromFile'), ...]. If you want to change 'LoadImageFromFile' to 'LoadImageFromWebcam' in the pipeline, you may specify --cfg-options data.train.pipeline.0.type=LoadImageFromWebcam.

  • Update values of list/tuples.

    If the value to be updated is a list or a tuple. For example, the config file normally sets workflow=[('train', 1)]. If you want to change this key, you may specify --cfg-options workflow="[(train,1),(val,1)]". Note that the quotation mark ” is necessary to support list/tuple data types, and that NO white space is allowed inside the quotation marks in the specified value.

Config File Structure

There are 4 basic component types under config/_base_, dataset, model, default_metrics, default_runtime. Many methods could be easily constructed with one of each like StyleGAN2, CycleGAN, SinGAN. Configs consisting of components from _base_ are called primitive.

For all configs under the same folder, it is recommended to have only one primitive config. All other configs should inherit from the primitive config. In this way, the maximum of inheritance level is 3.

For easy understanding, we recommend contributors to inherit from existing methods. For example, if some modification is made base on StyleGAN2, user may first inherit the basic StyleGAN2 structure by specifying _base_ = ../styleganv2/stylegan2_c2_ffhq_256_b4x8_800k.py, then modify the necessary fields in the config files.

If you are building an entirely new method that does not share the structure with any of the existing methods, you may create a folder xxxgan under configs,

Please refer to mmcv for detailed documentation.

Config Name Style

We follow the below style to name config files. Contributors are advised to follow the same style.

{model}_[model setting]_{dataset}_[batch_per_gpu x gpu]_{schedule}

{xxx} is required field and [yyy] is optional.

  • {model}: model type like stylegan, dcgan, etc.

  • [model setting]: specific setting for some model, like c2 for stylegan2, etc.

  • {dataset}: dataset like ffhq, lsun-car, celeba-hq.

  • [batch_per_gpu x gpu]: GPUs and samples per GPU, b4x8 is used by default in stylegan2.

  • {schedule}: training schedule. Following Tero’s convention, we recommend to use the number of images shown to the discriminator, like 5M, 800k. Of course, you can use 5e indicating 5 epochs or 80k-iters for 80k iterations.

An Example of StyleGAN2

To help the users have a basic idea of a complete config and the modules in a modern detection system, we make brief comments on the config of Stylegan2 at 256x256 scale. For more detailed usage and the corresponding alternative for each module, please refer to the API documentation and the tutorial in MMDetection.

_base_ = [
    '../_base_/datasets/ffhq_flip.py', '../_base_/models/stylegan/stylegan2_base.py',
    '../_base_/default_runtime.py', '../_base_/default_metrics.py'
]  # base config file which we build new config file on.

model = dict(generator=dict(out_size=256), discriminator=dict(in_size=256))  # update the `out_size` and `in_size` arguments.

data = dict(
    samples_per_gpu=4,  # specify the number of samples on each GPU
    train=dict(dataset=dict(imgs_root='./data/ffhq/ffhq_imgs/ffhq_256')))  # provide root path for dataset

ema_half_life = 10.  # G_smoothing_kimg

custom_hooks = [  # add customized hooks for training
    dict(
        type='VisualizeUnconditionalSamples',  # visualize training samples for GANs
        output_dir='training_samples',  # define output path
        interval=5000),  # the interval of calling this hook
    dict(
        type='ExponentialMovingAverageHook',  # EMA hook for better generator
        module_keys=('generator_ema', ),  # get the ema model and the original model should be named as `generator`
        interval=1,  # the interval of calling this hook
        interp_cfg=dict(momentum=0.5**(32. / (ema_half_life * 1000.))),  # args for updating params for ema model
        priority='VERY_HIGH')  # define the priority of this hook
]

metrics = dict(  # metrics we used to test this model
    fid50k=dict(
        inception_pkl='work_dirs/inception_pkl/ffhq-256-50k-rgb.pkl',  # provide the inception pkl for FID
        bgr2rgb=True))  # change the order of the image channel when extracting inception features

checkpoint_config = dict(interval=10000, by_epoch=False, max_keep_ckpts=30)  # define checkpoint hook
lr_config = None  # remove lr scheduler

log_config = dict(  # define log hook
    interval=100,
    hooks=[
        dict(type='TextLoggerHook'),
        # dict(type='TensorboardLoggerHook'),
    ])

total_iters = 800002  # define the total number of iterations

FAQ

Ignore some fields in the base configs

Sometimes, you may set _delete_=True to ignore some of fields in base configs. You may refer to mmcv for simple illustration.

You may have a careful look at this tutorial for better understanding of this feature.

Use intermediate variables in configs

Some intermediate variables are used in the config files, like train_pipeline/test_pipeline in datasets. It’s worth noting that when modifying intermediate variables in the children configs, users need to pass the intermediate variables into corresponding fields again. An intuitive example can be found in this tutorial.

Read the Docs v: latest
Versions
latest
stable
1.x
Downloads
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.