Tutorial 2: Learn about configs¶
In this folder “fgvclib/configs” we show the configs about the fgvclib.
We modularized the config in the experiment, creating FGVCConfig
class to load and store the parameters.And you can load config by using FGVCConfig
Config File Structure¶
There are 4 basic component types under “fgvclib/configs/config.py”,__init__
,get_cfg
,load
,stringfy
.
We set the parameters for the fgvclib, and you can search or modify the parameters in config.py
.
The following is about the basic parameters.
# Name of Project
self.cfg.PROJ_NAME = "FGVC"
# Name of experiment
self.cfg.EXP_NAME = None
# Resume last train
self.cfg.RESUME_WEIGHT = None
# Directory of trained weight
self.cfg.WEIGHT = CN()
self.cfg.WEIGHT.NAME = None
self.cfg.WEIGHT.SAVE_DIR = "./checkpoints/"
# Use cuda
self.cfg.USE_CUDA = True
# Logger
self.cfg.LOGGER = CN()
self.cfg.LOGGER.NAME = "wandb_logger"
self.cfg.LOGGER.FILE_PATH = "./logs/"
self.cfg.LOGGER.PRINT_FRE = 50
The following parameters are about datasets.
# Datasets and data loader
self.cfg.DATASET = CN()
self.cfg.DATASET.NAME = None
self.cfg.DATASET.ROOT = None
self.cfg.DATASET.TRAIN = CN()
self.cfg.DATASET.TEST = CN()
# train dataset and data loder
self.cfg.DATASET.TRAIN.BATCH_SIZE = 32
self.cfg.DATASET.TRAIN.POSITIVE = 0
self.cfg.DATASET.TRAIN.PIN_MEMORY = True
self.cfg.DATASET.TRAIN.SHUFFLE = True
self.cfg.DATASET.TRAIN.NUM_WORKERS = 0
# test dataset and data loder
self.cfg.DATASET.TEST.BATCH_SIZE = 32
self.cfg.DATASET.TEST.POSITIVE = 0
self.cfg.DATASET.TEST.PIN_MEMORY = False
self.cfg.DATASET.TEST.SHUFFLE = False
self.cfg.DATASET.TEST.NUM_WORKERS = 0
The following parameters are about the model.
# Model architecture
self.cfg.MODEL = CN()
self.cfg.MODEL.NAME = None
self.cfg.MODEL.CLASS_NUM = None
self.cfg.MODEL.CRITERIONS = None
# Standard modulars of each model
self.cfg.MODEL.BACKBONE = CN()
self.cfg.MODEL.ENCODING = CN()
self.cfg.MODEL.NECKS = CN()
self.cfg.MODEL.HEADS = CN()
# Setting of backbone
self.cfg.MODEL.BACKBONE.NAME = None
self.cfg.MODEL.BACKBONE.ARGS = None
# Setting of encoding
self.cfg.MODEL.ENCODING.NAME = None
self.cfg.MODEL.ENCODING.ARGS = None
# Setting of neck
self.cfg.MODEL.NECKS.NAME = None
self.cfg.MODEL.NECKS.ARGS = None
# Setting of head
self.cfg.MODEL.HEADS.NAME = None
self.cfg.MODEL.HEADS.ARGS = None
# Transforms
self.cfg.TRANSFORMS = CN()
self.cfg.TRANSFORMS.TRAIN = None
self.cfg.TRANSFORMS.TEST = None
# Optimizer
self.cfg.OPTIMIZER = CN()
self.cfg.OPTIMIZER.NAME = "SGD"
self.cfg.OPTIMIZER.MOMENTUM = 0.9
self.cfg.OPTIMIZER.WEIGHT_DECAY = 5e-4
self.cfg.OPTIMIZER.LR = CN()
self.cfg.OPTIMIZER.LR.backbone = None
self.cfg.OPTIMIZER.LR.encoding = None
self.cfg.OPTIMIZER.LR.necks = None
self.cfg.OPTIMIZER.LR.heads = None
The following parameters are about the processing.
# Train
self.cfg.ITERATION_NUM = None
self.cfg.EPOCH_NUM = None
self.cfg.START_EPOCH = None
self.cfg.UPDATE_STRATEGY = None
# Validation
self.cfg.PER_ITERATION = None
self.cfg.PER_EPOCH = None
self.cfg.METRICS = None
# Inference
self.cfg.FIFTYONE = CN()
self.cfg.FIFTYONE.NAME = "BirdsTest"
self.cfg.FIFTYONE.STORE = True
self.cfg.INTERPRETER = CN()
self.cfg.INTERPRETER.NAME = "cam"
self.cfg.INTERPRETER.METHOD = "gradcam"
self.cfg.INTERPRETER.TARGET_LAYERS = []
The example of the configs¶
In the main.py
, you can import the configs from fgvclib.configs import FGVCConfig
, and use it to load config.
import os
import torch
from fgvclib.configs import FGVCConfig
# load config
config = FGVCConfig()
config.load(args.config)
cfg = config.cfg
print(cfg)