| |
| |
| |
| |
| |
|
|
| 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.NORM_TYPE = 'rms' |
|
|
| |
| _C.MODEL.CLIP_VIT = CN() |
| _C.MODEL.CLIP_VIT.PATCH_SIZE = 14 |
| _C.MODEL.CLIP_VIT.PRETRAIN_SIZE = 336 |
| _C.MODEL.CLIP_VIT.EMBED_DIM = 1024 |
| _C.MODEL.CLIP_VIT.NUM_HEADS = 16 |
| _C.MODEL.CLIP_VIT.MLP_RATIO = 4 |
| _C.MODEL.CLIP_VIT.DEPTH = 24 |
| _C.MODEL.CLIP_VIT.FREEZE_VIT = True |
| _C.MODEL.CLIP_VIT.PRETRAINED = 'openai/clip-vit-large-patch14-336' |
| _C.MODEL.CLIP_VIT.CLS_TARGET = 'cls_patch_concat' |
|
|
| |
| |
| |
| _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 |
|
|