|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import os |
|
|
|
|
|
import yaml |
|
|
from yacs.config import CfgNode as CN |
|
|
|
|
|
_C = CN() |
|
|
|
|
|
|
|
|
_C.BASE = [''] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_C.DATA = CN() |
|
|
|
|
|
_C.DATA.BATCH_SIZE = 128 |
|
|
|
|
|
_C.DATA.DATA_PATH = '' |
|
|
|
|
|
_C.DATA.DATASET = 'imagenet' |
|
|
|
|
|
_C.DATA.IMG_SIZE = 224 |
|
|
|
|
|
_C.DATA.INTERPOLATION = 'bicubic' |
|
|
|
|
|
|
|
|
_C.DATA.ZIP_MODE = False |
|
|
|
|
|
_C.DATA.CACHE_MODE = 'part' |
|
|
|
|
|
_C.DATA.PIN_MEMORY = True |
|
|
|
|
|
_C.DATA.NUM_WORKERS = 8 |
|
|
|
|
|
_C.DATA.IMG_ON_MEMORY = False |
|
|
|
|
|
_C.DATA.TRANSFORM = 'build_transform' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_C.MODEL = CN() |
|
|
|
|
|
_C.MODEL.TYPE = 'intern_vit_6b' |
|
|
|
|
|
_C.MODEL.NAME = 'intern_vit_6b' |
|
|
|
|
|
|
|
|
_C.MODEL.PRETRAINED = '' |
|
|
|
|
|
_C.MODEL.RESUME = '' |
|
|
|
|
|
_C.MODEL.NUM_CLASSES = 1000 |
|
|
|
|
|
_C.MODEL.DROP_RATE = 0.0 |
|
|
|
|
|
_C.MODEL.DROP_PATH_RATE = 0.1 |
|
|
|
|
|
_C.MODEL.DROP_PATH_TYPE = 'linear' |
|
|
|
|
|
_C.MODEL.LABEL_SMOOTHING = 0.1 |
|
|
|
|
|
|
|
|
_C.MODEL.INTERN_VIT_6B = CN() |
|
|
_C.MODEL.INTERN_VIT_6B.PATCH_SIZE = 14 |
|
|
_C.MODEL.INTERN_VIT_6B.PRETRAIN_SIZE = 224 |
|
|
_C.MODEL.INTERN_VIT_6B.QKV_BIAS = False |
|
|
_C.MODEL.INTERN_VIT_6B.EMBED_DIM = 3200 |
|
|
_C.MODEL.INTERN_VIT_6B.NUM_HEADS = 25 |
|
|
_C.MODEL.INTERN_VIT_6B.MLP_RATIO = 4 |
|
|
_C.MODEL.INTERN_VIT_6B.INIT_VALUES = 0.1 |
|
|
_C.MODEL.INTERN_VIT_6B.QK_NORMALIZATION = True |
|
|
_C.MODEL.INTERN_VIT_6B.DEPTH = 48 |
|
|
_C.MODEL.INTERN_VIT_6B.USE_FLASH_ATTN = True |
|
|
_C.MODEL.INTERN_VIT_6B.FREEZE_VIT = True |
|
|
_C.MODEL.INTERN_VIT_6B.PRETRAINED = None |
|
|
_C.MODEL.INTERN_VIT_6B.CLS_TARGET = 'cls_patch_concat' |
|
|
_C.MODEL.INTERN_VIT_6B.HEAD_NORM_TYPE = 'bn' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_C.TRAIN = CN() |
|
|
_C.TRAIN.START_EPOCH = 0 |
|
|
_C.TRAIN.EPOCHS = 300 |
|
|
_C.TRAIN.WARMUP_EPOCHS = 20 |
|
|
_C.TRAIN.WEIGHT_DECAY = 0.05 |
|
|
_C.TRAIN.BASE_LR = 5e-4 |
|
|
_C.TRAIN.WARMUP_LR = 5e-7 |
|
|
_C.TRAIN.MIN_LR = 5e-6 |
|
|
|
|
|
_C.TRAIN.CLIP_GRAD = 5.0 |
|
|
|
|
|
_C.TRAIN.AUTO_RESUME = True |
|
|
|
|
|
|
|
|
_C.TRAIN.ACCUMULATION_STEPS = 0 |
|
|
|
|
|
|
|
|
_C.TRAIN.USE_CHECKPOINT = False |
|
|
|
|
|
|
|
|
_C.TRAIN.LR_SCHEDULER = CN() |
|
|
_C.TRAIN.LR_SCHEDULER.NAME = 'cosine' |
|
|
|
|
|
_C.TRAIN.LR_SCHEDULER.DECAY_EPOCHS = 30 |
|
|
|
|
|
_C.TRAIN.LR_SCHEDULER.DECAY_RATE = 0.1 |
|
|
|
|
|
|
|
|
_C.TRAIN.OPTIMIZER = CN() |
|
|
_C.TRAIN.OPTIMIZER.NAME = 'adamw' |
|
|
|
|
|
_C.TRAIN.OPTIMIZER.EPS = 1e-8 |
|
|
|
|
|
_C.TRAIN.OPTIMIZER.BETAS = (0.9, 0.999) |
|
|
|
|
|
_C.TRAIN.OPTIMIZER.MOMENTUM = 0.9 |
|
|
|
|
|
_C.TRAIN.OPTIMIZER.USE_ZERO = False |
|
|
|
|
|
_C.TRAIN.OPTIMIZER.FREEZE_BACKBONE = None |
|
|
|
|
|
_C.TRAIN.OPTIMIZER.DCN_LR_MUL = None |
|
|
|
|
|
|
|
|
_C.TRAIN.EMA = CN() |
|
|
_C.TRAIN.EMA.ENABLE = False |
|
|
_C.TRAIN.EMA.DECAY = 0.9998 |
|
|
|
|
|
|
|
|
_C.TRAIN.LR_LAYER_DECAY = False |
|
|
_C.TRAIN.LR_LAYER_DECAY_RATIO = 0.875 |
|
|
|
|
|
|
|
|
_C.TRAIN.RAND_INIT_FT_HEAD = False |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_C.AUG = CN() |
|
|
|
|
|
_C.AUG.COLOR_JITTER = 0.4 |
|
|
|
|
|
_C.AUG.AUTO_AUGMENT = 'rand-m9-mstd0.5-inc1' |
|
|
|
|
|
_C.AUG.REPROB = 0.25 |
|
|
|
|
|
_C.AUG.REMODE = 'pixel' |
|
|
|
|
|
_C.AUG.RECOUNT = 1 |
|
|
|
|
|
_C.AUG.MIXUP = 0.8 |
|
|
|
|
|
_C.AUG.CUTMIX = 1.0 |
|
|
|
|
|
_C.AUG.CUTMIX_MINMAX = None |
|
|
|
|
|
_C.AUG.MIXUP_PROB = 1.0 |
|
|
|
|
|
_C.AUG.MIXUP_SWITCH_PROB = 0.5 |
|
|
|
|
|
_C.AUG.MIXUP_MODE = 'batch' |
|
|
|
|
|
_C.AUG.RANDOM_RESIZED_CROP = False |
|
|
_C.AUG.MEAN = (0.485, 0.456, 0.406) |
|
|
_C.AUG.STD = (0.229, 0.224, 0.225) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_C.TEST = CN() |
|
|
|
|
|
_C.TEST.CROP = True |
|
|
|
|
|
|
|
|
_C.TEST.SEQUENTIAL = False |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_C.AMP_OPT_LEVEL = '' |
|
|
|
|
|
_C.OUTPUT = '' |
|
|
|
|
|
_C.TAG = 'default' |
|
|
|
|
|
_C.SAVE_FREQ = 1 |
|
|
|
|
|
_C.PRINT_FREQ = 10 |
|
|
|
|
|
_C.EVAL_FREQ = 1 |
|
|
|
|
|
_C.SEED = 0 |
|
|
|
|
|
_C.EVAL_MODE = False |
|
|
|
|
|
_C.THROUGHPUT_MODE = False |
|
|
|
|
|
_C.LOCAL_RANK = 0 |
|
|
_C.EVAL_22K_TO_1K = False |
|
|
|
|
|
_C.AMP_TYPE = 'float16' |
|
|
|
|
|
|
|
|
def _update_config_from_file(config, cfg_file): |
|
|
config.defrost() |
|
|
with open(cfg_file, 'r') as f: |
|
|
yaml_cfg = yaml.load(f, Loader=yaml.FullLoader) |
|
|
|
|
|
for cfg in yaml_cfg.setdefault('BASE', ['']): |
|
|
if cfg: |
|
|
_update_config_from_file( |
|
|
config, os.path.join(os.path.dirname(cfg_file), cfg)) |
|
|
print('=> merge config from {}'.format(cfg_file)) |
|
|
config.merge_from_file(cfg_file) |
|
|
config.freeze() |
|
|
|
|
|
|
|
|
def update_config(config, args): |
|
|
_update_config_from_file(config, args.cfg) |
|
|
|
|
|
config.defrost() |
|
|
if hasattr(args, 'opts') and args.opts: |
|
|
config.merge_from_list(args.opts) |
|
|
|
|
|
|
|
|
if hasattr(args, 'batch_size') and args.batch_size: |
|
|
config.DATA.BATCH_SIZE = args.batch_size |
|
|
if hasattr(args, 'dataset') and args.dataset: |
|
|
config.DATA.DATASET = args.dataset |
|
|
if hasattr(args, 'data_path') and args.data_path: |
|
|
config.DATA.DATA_PATH = args.data_path |
|
|
if hasattr(args, 'zip') and args.zip: |
|
|
config.DATA.ZIP_MODE = True |
|
|
if hasattr(args, 'cache_mode') and args.cache_mode: |
|
|
config.DATA.CACHE_MODE = args.cache_mode |
|
|
if hasattr(args, 'pretrained') and args.pretrained: |
|
|
config.MODEL.PRETRAINED = args.pretrained |
|
|
if hasattr(args, 'resume') and args.resume: |
|
|
config.MODEL.RESUME = args.resume |
|
|
if hasattr(args, 'accumulation_steps') and args.accumulation_steps: |
|
|
config.TRAIN.ACCUMULATION_STEPS = args.accumulation_steps |
|
|
if hasattr(args, 'use_checkpoint') and args.use_checkpoint: |
|
|
config.TRAIN.USE_CHECKPOINT = True |
|
|
if hasattr(args, 'amp_opt_level') and args.amp_opt_level: |
|
|
config.AMP_OPT_LEVEL = args.amp_opt_level |
|
|
if hasattr(args, 'output') and args.output: |
|
|
config.OUTPUT = args.output |
|
|
if hasattr(args, 'tag') and args.tag: |
|
|
config.TAG = args.tag |
|
|
if hasattr(args, 'eval') and args.eval: |
|
|
config.EVAL_MODE = True |
|
|
if hasattr(args, 'throughput') and args.throughput: |
|
|
config.THROUGHPUT_MODE = True |
|
|
if hasattr(args, 'save_ckpt_num') and args.save_ckpt_num: |
|
|
config.SAVE_CKPT_NUM = args.save_ckpt_num |
|
|
if hasattr(args, 'use_zero') and args.use_zero: |
|
|
config.TRAIN.OPTIMIZER.USE_ZERO = True |
|
|
|
|
|
if hasattr(args, 'local_rank') and args.local_rank: |
|
|
config.LOCAL_RANK = args.local_rank |
|
|
|
|
|
|
|
|
config.MODEL.NAME = args.cfg.split('/')[-1].replace('.yaml', '') |
|
|
config.OUTPUT = os.path.join(config.OUTPUT, config.MODEL.NAME) |
|
|
|
|
|
|
|
|
config.freeze() |
|
|
|
|
|
|
|
|
def get_config(args): |
|
|
"""Get a yacs CfgNode object with default values.""" |
|
|
|
|
|
|
|
|
config = _C.clone() |
|
|
update_config(config, args) |
|
|
|
|
|
return config |
|
|
|