ahmedbrs's picture
first
254fdf2
#!/usr/bin/env python3
"""Config system (based on Detectron's)."""
from .config_node import CfgNode
# Global config object
_C = CfgNode()
# Example usage:
# from configs.config import cfg
_C.DBG = False
_C.OUTPUT_DIR = "./output"
_C.RUN_N_TIMES = 5
# Perform benchmarking to select the fastest CUDNN algorithms to use
# Note that this may increase the memory usage and will likely not result
# in overall speedups when variable size inputs are used (e.g. COCO training)
_C.CUDNN_BENCHMARK = False
# Number of GPUs to use (applies to both training and testing)
_C.NUM_GPUS = 1
_C.NUM_SHARDS = 1
# Note that non-determinism may still be present due to non-deterministic
# operator implementations in GPU operator libraries
_C.SEED = None
# ----------------------------------------------------------------------
# Model options
# ----------------------------------------------------------------------
_C.MODEL = CfgNode()
_C.MODEL.TRANSFER_TYPE = "linear" # one of linear, end2end, prompt, adapter, side, partial-1, tinytl-bias
_C.MODEL.WEIGHT_PATH = "" # if resume from some checkpoint file
_C.MODEL.SAVE_CKPT = False
_C.MODEL.MODEL_ROOT = "" # root folder for pretrained model weights
_C.MODEL.TYPE = "vit"
_C.MODEL.MLP_NUM = 0
_C.MODEL.LINEAR = CfgNode()
_C.MODEL.LINEAR.MLP_SIZES = []
_C.MODEL.LINEAR.DROPOUT = 0.1
# ----------------------------------------------------------------------
# Prompt options
# ----------------------------------------------------------------------
_C.MODEL.PROMPT = CfgNode()
_C.MODEL.PROMPT.NUM_TOKENS = 3
_C.MODEL.PROMPT.LOCATION = "prepend"
# prompt initalizatioin:
# (1) default "random"
# (2) "final-cls" use aggregated final [cls] embeddings from training dataset
# (3) "cls-nolastl": use first 12 cls embeddings (exclude the final output) for deep prompt
# (4) "cls-nofirstl": use last 12 cls embeddings (exclude the input to first layer)
_C.MODEL.PROMPT.INITIATION = "random" # "final-cls", "cls-first12"
_C.MODEL.PROMPT.CLSEMB_FOLDER = ""
_C.MODEL.PROMPT.CLSEMB_PATH = ""
_C.MODEL.PROMPT.PROJECT = -1 # "projection mlp hidden dim"
_C.MODEL.PROMPT.DEEP = False # "whether do deep prompt or not, only for prepend location"
_C.MODEL.PROMPT.LOG = "set_log" # log file for prompt
_C.MODEL.PROMPT.NUM_DEEP_LAYERS = None # if set to be an int, then do partial-deep prompt tuning
_C.MODEL.PROMPT.REVERSE_DEEP = False # if to only update last n layers, not the input layer
_C.MODEL.PROMPT.DEEP_SHARED = False # if true, all deep layers will be use the same prompt emb
_C.MODEL.PROMPT.FORWARD_DEEP_NOEXPAND = False # if true, will not expand input sequence for layers without prompt
_C.MODEL.PROMPT.HEAD = False # if true, will add a trainable head to the model
_C.MODEL.PROMPT.HEAD_CLASS = False # if true, will add a trainable classification head to the model
# _C.MODEL.PROMPT.TRAINABLE_PARM is a list of strings, each string is a name of a parameter
_C.MODEL.PROMPT.TRAINABLE_PARM = "prompt,head" # if not empty, will only train the parameters in this list
_C.WANDB = True
_C.margin = 0.5
_C.threshold = 0.4
_C.learning_rate = 1e-5
_C.ft_all = True
_C.max_classes = 3
_C.bz = 16
_C.save_every = 5
_C.checkpoint_path = "checkpoint/sketch_seg_best_miou.pth"
_C.sketch_path = 'demo/sketch_1.png'
_C.output_path = "/output"
# _C.classes = ['tree','bench','grass']
# how to get the output emb for cls head:
# original: follow the orignial backbone choice,
# img_pool: image patch pool only
# prompt_pool: prompt embd pool only
# imgprompt_pool: pool everything but the cls token
_C.MODEL.PROMPT.VIT_POOL_TYPE = "original"
_C.MODEL.PROMPT.DROPOUT = 0.1
_C.MODEL.PROMPT.SAVE_FOR_EACH_EPOCH = False
# ----------------------------------------------------------------------
# adapter options
# ----------------------------------------------------------------------
_C.MODEL.ADAPTER = CfgNode()
_C.MODEL.ADAPTER.REDUCATION_FACTOR = 8
_C.MODEL.ADAPTER.STYLE = "Pfeiffer"
# ----------------------------------------------------------------------
# Solver options
# ----------------------------------------------------------------------
_C.SOLVER = CfgNode()
_C.SOLVER.LOSS = "softmax"
_C.SOLVER.LOSS_ALPHA = 0.01
_C.SOLVER.OPTIMIZER = "sgd" # or "adamw"
_C.SOLVER.MOMENTUM = 0.9
_C.SOLVER.WEIGHT_DECAY = 0.0001
_C.SOLVER.WEIGHT_DECAY_BIAS = 0
_C.SOLVER.PATIENCE = 300
_C.SOLVER.SCHEDULER = "cosine"
_C.SOLVER.BASE_LR = 0.01
_C.SOLVER.BIAS_MULTIPLIER = 1. # for prompt + bias
_C.SOLVER.WARMUP_EPOCH = 5
_C.SOLVER.TOTAL_EPOCH = 30
_C.SOLVER.LOG_EVERY_N = 1000
_C.SOLVER.DBG_TRAINABLE = False # if True, will print the name of trainable params
# ----------------------------------------------------------------------
# Dataset options
# ----------------------------------------------------------------------
_C.DATA = CfgNode()
_C.DATA.NAME = ""
_C.DATA.DATAPATH = ""
_C.DATA.FEATURE = "" # e.g. inat2021_supervised
_C.DATA.PERCENTAGE = 1.0
_C.DATA.NUMBER_CLASSES = -1
_C.DATA.MULTILABEL = False
_C.DATA.CLASS_WEIGHTS_TYPE = "none"
_C.DATA.CROPSIZE = 224 # or 384
_C.DATA.NO_TEST = False
_C.DATA.BATCH_SIZE = 32
# Number of data loader workers per training process
_C.DATA.NUM_WORKERS = 4
# Load data to pinned host memory
_C.DATA.PIN_MEMORY = True
_C.DIST_BACKEND = "nccl"
_C.DIST_INIT_PATH = "env://"
_C.DIST_INIT_FILE = ""
def get_cfg():
"""
Get a copy of the default config.
"""
return _C.clone()