[CodeCamp2023-335]New version of config adapting BeitV2 Algorithm (#1755)
parent
827a216155
commit
bff80d3c48
|
@ -0,0 +1,53 @@
|
|||
# Copyright (c) OpenMMLab. All rights reserved.
|
||||
# This is a BETA new format config file, and the usage may change recently.
|
||||
from mmengine.dataset import DefaultSampler, default_collate
|
||||
|
||||
from mmpretrain.datasets import (BEiTMaskGenerator, ColorJitter, ImageNet,
|
||||
LoadImageFromFile, PackInputs, RandomFlip,
|
||||
RandomResizedCropAndInterpolationWithTwoPic)
|
||||
from mmpretrain.models import TwoNormDataPreprocessor
|
||||
|
||||
dataset_type = ImageNet
|
||||
data_root = 'data/imagenet/'
|
||||
|
||||
data_preprocessor = dict(
|
||||
type=TwoNormDataPreprocessor,
|
||||
mean=[123.675, 116.28, 103.53],
|
||||
std=[58.395, 57.12, 57.375],
|
||||
second_mean=[127.5, 127.5, 127.5],
|
||||
second_std=[127.5, 127.5, 127.5],
|
||||
to_rgb=True)
|
||||
|
||||
train_pipeline = [
|
||||
dict(type=LoadImageFromFile),
|
||||
dict(
|
||||
type=ColorJitter, brightness=0.4, contrast=0.4, saturation=0.4,
|
||||
hue=0.),
|
||||
dict(type=RandomFlip, prob=0.5, direction='horizontal'),
|
||||
dict(
|
||||
type=RandomResizedCropAndInterpolationWithTwoPic,
|
||||
size=224,
|
||||
second_size=224,
|
||||
interpolation='bicubic',
|
||||
second_interpolation='bicubic',
|
||||
scale=(0.2, 1.0)),
|
||||
dict(
|
||||
type=BEiTMaskGenerator,
|
||||
input_size=(14, 14),
|
||||
num_masking_patches=75,
|
||||
max_num_patches=75,
|
||||
min_num_patches=16),
|
||||
dict(type=PackInputs)
|
||||
]
|
||||
|
||||
train_dataloader = dict(
|
||||
batch_size=256,
|
||||
num_workers=8,
|
||||
persistent_workers=True,
|
||||
sampler=dict(type=DefaultSampler, shuffle=True),
|
||||
collate_fn=dict(type=default_collate),
|
||||
dataset=dict(
|
||||
type=dataset_type,
|
||||
data_root=data_root,
|
||||
split='train',
|
||||
pipeline=train_pipeline))
|
|
@ -0,0 +1,90 @@
|
|||
# Copyright (c) OpenMMLab. All rights reserved.
|
||||
# This is a BETA new format config file, and the usage may change recently.
|
||||
from mmengine.dataset import DefaultSampler, default_collate
|
||||
|
||||
from mmpretrain.datasets import (CenterCrop, ImageNet, LoadImageFromFile,
|
||||
PackInputs, RandAugment, RandomErasing,
|
||||
RandomFlip, RandomResizedCrop, Resize,
|
||||
ResizeEdge)
|
||||
from mmpretrain.evaluation import Accuracy
|
||||
|
||||
# dataset settings
|
||||
dataset_type = ImageNet
|
||||
data_preprocessor = dict(
|
||||
num_classes=1000,
|
||||
# RGB format normalization parameters
|
||||
mean=[123.675, 116.28, 103.53],
|
||||
std=[58.395, 57.12, 57.375],
|
||||
# convert image from BGR to RGB
|
||||
to_rgb=True,
|
||||
)
|
||||
|
||||
bgr_mean = data_preprocessor['mean'][::-1]
|
||||
bgr_std = data_preprocessor['std'][::-1]
|
||||
|
||||
train_pipeline = [
|
||||
dict(type=LoadImageFromFile),
|
||||
dict(
|
||||
type=RandomResizedCrop,
|
||||
scale=224,
|
||||
backend='pillow',
|
||||
interpolation='bicubic'),
|
||||
dict(type=RandomFlip, prob=0.5, direction='horizontal'),
|
||||
dict(
|
||||
type=RandAugment,
|
||||
policies='timm_increasing',
|
||||
num_policies=2,
|
||||
total_level=10,
|
||||
magnitude_level=9,
|
||||
magnitude_std=0.5,
|
||||
hparams=dict(
|
||||
pad_val=[round(x) for x in bgr_mean], interpolation='bicubic')),
|
||||
dict(
|
||||
type=RandomErasing,
|
||||
erase_prob=0.25,
|
||||
mode='rand',
|
||||
min_area_ratio=0.02,
|
||||
max_area_ratio=1 / 3,
|
||||
fill_color=bgr_mean,
|
||||
fill_std=bgr_std),
|
||||
dict(type=PackInputs),
|
||||
]
|
||||
|
||||
test_pipeline = [
|
||||
dict(type=LoadImageFromFile),
|
||||
dict(
|
||||
type=ResizeEdge,
|
||||
scale=256,
|
||||
edge='short',
|
||||
backend='pillow',
|
||||
interpolation='bicubic'),
|
||||
dict(type=CenterCrop, crop_size=224),
|
||||
dict(type=PackInputs),
|
||||
]
|
||||
|
||||
train_dataloader = dict(
|
||||
batch_size=64,
|
||||
num_workers=5,
|
||||
dataset=dict(
|
||||
type=dataset_type,
|
||||
data_root='data/imagenet',
|
||||
split='train',
|
||||
pipeline=train_pipeline),
|
||||
sampler=dict(type=DefaultSampler, shuffle=True),
|
||||
)
|
||||
|
||||
val_dataloader = dict(
|
||||
batch_size=64,
|
||||
num_workers=5,
|
||||
dataset=dict(
|
||||
type=dataset_type,
|
||||
data_root='data/imagenet',
|
||||
split='val',
|
||||
pipeline=test_pipeline),
|
||||
sampler=dict(type=DefaultSampler, shuffle=False),
|
||||
)
|
||||
val_evaluator = dict(type=Accuracy, topk=(1, 5))
|
||||
|
||||
# If you want standard test, please manually configure the test dataset
|
||||
test_dataloader = val_dataloader
|
||||
test_evaluator = val_evaluator
|
|
@ -0,0 +1,139 @@
|
|||
# Copyright (c) OpenMMLab. All rights reserved.
|
||||
# This is a BETA new format config file, and the usage may change recently.
|
||||
from mmengine.config import read_base
|
||||
|
||||
with read_base():
|
||||
from ..._base_.datasets.imagenet_bs64_swin_224 import *
|
||||
from ..._base_.schedules.imagenet_bs1024_adamw_swin import *
|
||||
from ..._base_.default_runtime import *
|
||||
|
||||
from mmengine.hooks import CheckpointHook
|
||||
from mmengine.model import PretrainedInit, TruncNormalInit
|
||||
from mmengine.optim import CosineAnnealingLR, LinearLR
|
||||
from torch.optim import AdamW
|
||||
|
||||
from mmpretrain.datasets import LoadImageFromFile, PackInputs, RandomFlip
|
||||
from mmpretrain.engine.optimizers import \
|
||||
LearningRateDecayOptimWrapperConstructor
|
||||
from mmpretrain.models import (BEiTViT, ImageClassifier, LabelSmoothLoss,
|
||||
LinearClsHead)
|
||||
from mmpretrain.models.utils.batch_augments import CutMix, Mixup
|
||||
|
||||
data_preprocessor = dict(
|
||||
num_classes=1000,
|
||||
mean=[127.5, 127.5, 127.5],
|
||||
std=[127.5, 127.5, 127.5],
|
||||
to_rgb=True,
|
||||
)
|
||||
|
||||
# model settings
|
||||
model = dict(
|
||||
type=ImageClassifier,
|
||||
backbone=dict(
|
||||
type=BEiTViT,
|
||||
arch='base',
|
||||
img_size=224,
|
||||
patch_size=16,
|
||||
drop_path_rate=0.1,
|
||||
out_type='avg_featmap',
|
||||
use_abs_pos_emb=False,
|
||||
use_rel_pos_bias=True,
|
||||
use_shared_rel_pos_bias=False,
|
||||
init_cfg=dict(type=PretrainedInit, checkpoint='', prefix='backbone.')),
|
||||
neck=None,
|
||||
head=dict(
|
||||
type=LinearClsHead,
|
||||
num_classes=1000,
|
||||
in_channels=768,
|
||||
loss=dict(type=LabelSmoothLoss, label_smooth_val=0.1, mode='original'),
|
||||
init_cfg=[dict(type=TruncNormalInit, layer='Linear', std=0.02)]),
|
||||
train_cfg=dict(
|
||||
augments=[dict(type=Mixup, alpha=0.8),
|
||||
dict(type=CutMix, alpha=1.0)]))
|
||||
|
||||
train_pipeline = [
|
||||
dict(type=LoadImageFromFile),
|
||||
dict(
|
||||
type=RandomResizedCrop,
|
||||
scale=224,
|
||||
backend='pillow',
|
||||
interpolation='bicubic'),
|
||||
dict(type=RandomFlip, prob=0.5, direction='horizontal'),
|
||||
dict(
|
||||
type=RandAugment,
|
||||
policies='timm_increasing',
|
||||
num_policies=2,
|
||||
total_level=10,
|
||||
magnitude_level=9,
|
||||
magnitude_std=0.5,
|
||||
hparams=dict(pad_val=[104, 116, 124], interpolation='bicubic')),
|
||||
dict(
|
||||
type=RandomErasing,
|
||||
erase_prob=0.25,
|
||||
mode='rand',
|
||||
min_area_ratio=0.02,
|
||||
max_area_ratio=0.3333333333333333,
|
||||
fill_color=[103.53, 116.28, 123.675],
|
||||
fill_std=[57.375, 57.12, 58.395]),
|
||||
dict(type=PackInputs)
|
||||
]
|
||||
test_pipeline = [
|
||||
dict(type=LoadImageFromFile),
|
||||
dict(
|
||||
type=ResizeEdge,
|
||||
scale=256,
|
||||
edge='short',
|
||||
backend='pillow',
|
||||
interpolation='bicubic'),
|
||||
dict(type=CenterCrop, crop_size=224),
|
||||
dict(type=PackInputs)
|
||||
]
|
||||
|
||||
train_dataloader = dict(batch_size=128, dataset=dict(pipeline=train_pipeline))
|
||||
val_dataloader = dict(batch_size=128, dataset=dict(pipeline=test_pipeline))
|
||||
test_dataloader = val_dataloader
|
||||
|
||||
# optimizer wrapper
|
||||
optim_wrapper = dict(
|
||||
optimizer=dict(type=AdamW, lr=4e-3, weight_decay=0.05, betas=(0.9, 0.999)),
|
||||
constructor=LearningRateDecayOptimWrapperConstructor,
|
||||
paramwise_cfg=dict(
|
||||
_delete_=True,
|
||||
layer_decay_rate=0.65,
|
||||
custom_keys={
|
||||
# the following configurations are designed for BEiT
|
||||
'.ln': dict(decay_mult=0.0),
|
||||
'.bias': dict(decay_mult=0.0),
|
||||
'q_bias': dict(decay_mult=0.0),
|
||||
'v_bias': dict(decay_mult=0.0),
|
||||
'.cls_token': dict(decay_mult=0.0),
|
||||
'.pos_embed': dict(decay_mult=0.0),
|
||||
'.gamma': dict(decay_mult=0.0),
|
||||
}))
|
||||
|
||||
# learning rate scheduler
|
||||
param_scheduler = [
|
||||
dict(
|
||||
type=LinearLR,
|
||||
start_factor=1e-4,
|
||||
by_epoch=True,
|
||||
begin=0,
|
||||
end=20,
|
||||
convert_to_iter_based=True),
|
||||
dict(
|
||||
type=CosineAnnealingLR,
|
||||
by_epoch=True,
|
||||
begin=20,
|
||||
end=100,
|
||||
eta_min=1e-6,
|
||||
convert_to_iter_based=True)
|
||||
]
|
||||
|
||||
# runtime settings
|
||||
default_hooks = dict(
|
||||
# save checkpoint per epoch.
|
||||
checkpoint=dict(type=CheckpointHook, interval=1, max_keep_ckpts=2))
|
||||
|
||||
train_cfg = dict(by_epoch=True, max_epochs=100)
|
||||
|
||||
randomness = dict(seed=0)
|
|
@ -0,0 +1,50 @@
|
|||
# Copyright (c) OpenMMLab. All rights reserved.
|
||||
# This is a BETA new format config file, and the usage may change recently.
|
||||
from mmengine.config import read_base
|
||||
|
||||
with read_base():
|
||||
from ..._base_.datasets.imagenet_bs64_swin_224 import *
|
||||
from ..._base_.schedules.imagenet_bs1024_adamw_swin import *
|
||||
from ..._base_.default_runtime import *
|
||||
|
||||
from mmengine.model import ConstantInit, TruncNormalInit
|
||||
|
||||
from mmpretrain.models import (BEiTViT, ImageClassifier, LabelSmoothLoss,
|
||||
LinearClsHead)
|
||||
from mmpretrain.models.utils.batch_augments import CutMix, Mixup
|
||||
|
||||
data_preprocessor = dict(
|
||||
num_classes=1000,
|
||||
# RGB format normalization parameters
|
||||
mean=[127.5, 127.5, 127.5],
|
||||
std=[127.5, 127.5, 127.5],
|
||||
# convert image from BGR to RGB
|
||||
to_rgb=True,
|
||||
)
|
||||
|
||||
model = dict(
|
||||
type=ImageClassifier,
|
||||
backbone=dict(
|
||||
type=BEiTViT,
|
||||
arch='base',
|
||||
img_size=224,
|
||||
patch_size=16,
|
||||
out_type='avg_featmap',
|
||||
use_abs_pos_emb=False,
|
||||
use_rel_pos_bias=True,
|
||||
use_shared_rel_pos_bias=False,
|
||||
),
|
||||
neck=None,
|
||||
head=dict(
|
||||
type=LinearClsHead,
|
||||
num_classes=1000,
|
||||
in_channels=768,
|
||||
loss=dict(type=LabelSmoothLoss, label_smooth_val=0.1, mode='original'),
|
||||
),
|
||||
init_cfg=[
|
||||
dict(type=TruncNormalInit, layer='Linear', std=.02),
|
||||
dict(type=ConstantInit, layer='LayerNorm', val=1., bias=0.),
|
||||
],
|
||||
train_cfg=dict(
|
||||
augments=[dict(type=Mixup, alpha=0.8),
|
||||
dict(type=CutMix, alpha=1.0)]))
|
|
@ -0,0 +1,130 @@
|
|||
# Copyright (c) OpenMMLab. All rights reserved.
|
||||
# This is a BETA new format config file, and the usage may change recently.
|
||||
from mmengine.config import read_base
|
||||
|
||||
with read_base():
|
||||
from .._base_.datasets.imagenet_bs256_beitv2 import *
|
||||
from .._base_.default_runtime import *
|
||||
|
||||
from mmengine.model import ConstantInit, PretrainedInit, TruncNormalInit
|
||||
from mmengine.optim import AmpOptimWrapper, CosineAnnealingLR, LinearLR
|
||||
from mmengine.runner import EpochBasedTrainLoop
|
||||
from torch.optim import AdamW
|
||||
|
||||
from mmpretrain.models import (VQKD, BEiT, BEiTPretrainViT, BEiTV2Head,
|
||||
BEiTV2Neck, CrossEntropyLoss)
|
||||
|
||||
vqkd_encoder = dict(
|
||||
arch='base',
|
||||
img_size=224,
|
||||
patch_size=16,
|
||||
in_channels=3,
|
||||
out_indices=-1,
|
||||
drop_rate=0.,
|
||||
drop_path_rate=0.,
|
||||
norm_cfg=dict(type='LN', eps=1e-6),
|
||||
final_norm=True,
|
||||
out_type='featmap',
|
||||
with_cls_token=True,
|
||||
frozen_stages=-1,
|
||||
use_abs_pos_emb=True,
|
||||
use_rel_pos_bias=False,
|
||||
use_shared_rel_pos_bias=False,
|
||||
layer_scale_init_value=0.,
|
||||
interpolate_mode='bicubic',
|
||||
patch_cfg=dict(),
|
||||
layer_cfgs=dict(),
|
||||
init_cfg=None)
|
||||
|
||||
layer_scale_init_value = 0.1
|
||||
drop_path_rate = 0.1 # 0. for 300 epochs and 0.1 for 1600 epochs.
|
||||
|
||||
model = dict(
|
||||
type=BEiT,
|
||||
backbone=dict(
|
||||
type=BEiTPretrainViT,
|
||||
arch='base',
|
||||
patch_size=16,
|
||||
out_indices=[-4, -1],
|
||||
drop_path_rate=drop_path_rate,
|
||||
final_norm=False,
|
||||
out_type='raw',
|
||||
layer_scale_init_value=layer_scale_init_value,
|
||||
init_cfg=[
|
||||
dict(type=TruncNormalInit, std=0.02, layer='Linear'),
|
||||
dict(type=TruncNormalInit, std=0.02, layer='Conv2d'),
|
||||
dict(type=ConstantInit, layer='LayerNorm', val=1.0, bias=0.0)
|
||||
]),
|
||||
neck=dict(
|
||||
type=BEiTV2Neck,
|
||||
num_layers=2,
|
||||
early_layers=9,
|
||||
backbone_arch='base',
|
||||
drop_path_rate=drop_path_rate,
|
||||
layer_scale_init_value=layer_scale_init_value,
|
||||
),
|
||||
head=dict(
|
||||
type=BEiTV2Head,
|
||||
embed_dims=768,
|
||||
num_embed=8192,
|
||||
loss=dict(type=CrossEntropyLoss)),
|
||||
target_generator=dict(
|
||||
type=VQKD,
|
||||
encoder_config=vqkd_encoder,
|
||||
init_cfg=dict(
|
||||
type=PretrainedInit,
|
||||
checkpoint= # noqa
|
||||
'https://download.openmmlab.com/mmselfsup/1.x/target_generator_ckpt/vqkd_encoder.pth' # noqa
|
||||
)))
|
||||
|
||||
# optimizer wrapper
|
||||
optim_wrapper = dict(
|
||||
type=AmpOptimWrapper,
|
||||
loss_scale='dynamic',
|
||||
# betas: (0.9, 0.98) for 300 epochs and (0.9, 0.999) for 1600 epochs.
|
||||
optimizer=dict(
|
||||
type=AdamW, lr=1.5e-3, betas=(0.9, 0.999), weight_decay=0.05),
|
||||
clip_grad=dict(max_norm=3.0),
|
||||
paramwise_cfg=dict(
|
||||
custom_keys={
|
||||
# the following configurations are designed for BEiT
|
||||
'.ln': dict(decay_mult=0.0),
|
||||
'.bias': dict(decay_mult=0.0),
|
||||
'q_bias': dict(decay_mult=0.0),
|
||||
'v_bias': dict(decay_mult=0.0),
|
||||
'.cls_token': dict(decay_mult=0.0),
|
||||
'.pos_embed': dict(decay_mult=0.0),
|
||||
'.gamma': dict(decay_mult=0.0),
|
||||
}))
|
||||
|
||||
# learning rate scheduler
|
||||
param_scheduler = [
|
||||
dict(
|
||||
type=LinearLR,
|
||||
start_factor=1e-4,
|
||||
by_epoch=True,
|
||||
begin=0,
|
||||
end=10,
|
||||
convert_to_iter_based=True),
|
||||
dict(
|
||||
type=CosineAnnealingLR,
|
||||
eta_min=1e-5,
|
||||
by_epoch=True,
|
||||
begin=10,
|
||||
end=1600,
|
||||
convert_to_iter_based=True)
|
||||
]
|
||||
|
||||
# runtime settings
|
||||
train_cfg = dict(type=EpochBasedTrainLoop, max_epochs=1600)
|
||||
default_hooks = dict(
|
||||
# only keeps the latest 3 checkpoints
|
||||
checkpoint=dict(type=CheckpointHook, interval=1, max_keep_ckpts=3))
|
||||
|
||||
randomness = dict(seed=0, diff_rank_seed=True)
|
||||
|
||||
find_unused_parameters = True
|
||||
|
||||
# NOTE: `auto_scale_lr` is for automatically scaling LR
|
||||
# based on the actual training batch size.
|
||||
auto_scale_lr = dict(base_batch_size=2048)
|
|
@ -0,0 +1,130 @@
|
|||
# Copyright (c) OpenMMLab. All rights reserved.
|
||||
# This is a BETA new format config file, and the usage may change recently.
|
||||
from mmengine.config import read_base
|
||||
|
||||
with read_base():
|
||||
from .._base_.datasets.imagenet_bs256_beitv2 import *
|
||||
from .._base_.default_runtime import *
|
||||
|
||||
from mmengine.model import ConstantInit, PretrainedInit, TruncNormalInit
|
||||
from mmengine.optim import AmpOptimWrapper, CosineAnnealingLR, LinearLR
|
||||
from mmengine.runner import EpochBasedTrainLoop
|
||||
from torch.optim import AdamW
|
||||
|
||||
from mmpretrain.models import (VQKD, BEiT, BEiTPretrainViT, BEiTV2Head,
|
||||
BEiTV2Neck, CrossEntropyLoss)
|
||||
|
||||
# model settings
|
||||
vqkd_encoder = dict(
|
||||
arch='base',
|
||||
img_size=224,
|
||||
patch_size=16,
|
||||
in_channels=3,
|
||||
out_indices=-1,
|
||||
drop_rate=0.,
|
||||
drop_path_rate=0.,
|
||||
norm_cfg=dict(type='LN', eps=1e-6),
|
||||
final_norm=True,
|
||||
out_type='featmap',
|
||||
with_cls_token=True,
|
||||
frozen_stages=-1,
|
||||
use_abs_pos_emb=True,
|
||||
use_rel_pos_bias=False,
|
||||
use_shared_rel_pos_bias=False,
|
||||
layer_scale_init_value=0.,
|
||||
interpolate_mode='bicubic',
|
||||
patch_cfg=dict(),
|
||||
layer_cfgs=dict(),
|
||||
init_cfg=None)
|
||||
|
||||
layer_scale_init_value = 0.1
|
||||
drop_path_rate = 0. # 0. for 300 epochs and 0.1 for 1600 epochs.
|
||||
model = dict(
|
||||
type=BEiT,
|
||||
backbone=dict(
|
||||
type=BEiTPretrainViT,
|
||||
arch='base',
|
||||
patch_size=16,
|
||||
out_indices=[-4, -1],
|
||||
drop_path_rate=drop_path_rate,
|
||||
final_norm=False,
|
||||
out_type='raw',
|
||||
layer_scale_init_value=layer_scale_init_value,
|
||||
init_cfg=[
|
||||
dict(type=TruncNormalInit, std=0.02, layer='Linear'),
|
||||
dict(type=TruncNormalInit, std=0.02, layer='Conv2d'),
|
||||
dict(type=ConstantInit, layer='LayerNorm', val=1.0, bias=0.0)
|
||||
]),
|
||||
neck=dict(
|
||||
type=BEiTV2Neck,
|
||||
num_layers=2,
|
||||
early_layers=9,
|
||||
backbone_arch='base',
|
||||
drop_path_rate=drop_path_rate,
|
||||
layer_scale_init_value=layer_scale_init_value,
|
||||
),
|
||||
head=dict(
|
||||
type=BEiTV2Head,
|
||||
embed_dims=768,
|
||||
num_embed=8192,
|
||||
loss=dict(type=CrossEntropyLoss)),
|
||||
target_generator=dict(
|
||||
type=VQKD,
|
||||
encoder_config=vqkd_encoder,
|
||||
init_cfg=dict(
|
||||
type=PretrainedInit,
|
||||
checkpoint= # noqa
|
||||
'https://download.openmmlab.com/mmselfsup/1.x/target_generator_ckpt/vqkd_encoder.pth' # noqa
|
||||
)))
|
||||
|
||||
# optimizer wrapper
|
||||
optim_wrapper = dict(
|
||||
type=AmpOptimWrapper,
|
||||
loss_scale='dynamic',
|
||||
# betas: (0.9, 0.98) for 300 epochs and (0.9, 0.999) for 1600 epochs.
|
||||
optimizer=dict(
|
||||
type=AdamW, lr=1.5e-3, betas=(0.9, 0.98), weight_decay=0.05),
|
||||
clip_grad=dict(max_norm=3.0),
|
||||
paramwise_cfg=dict(
|
||||
custom_keys={
|
||||
# the following configurations are designed for BEiT
|
||||
'.ln': dict(decay_mult=0.0),
|
||||
'.bias': dict(decay_mult=0.0),
|
||||
'q_bias': dict(decay_mult=0.0),
|
||||
'v_bias': dict(decay_mult=0.0),
|
||||
'.cls_token': dict(decay_mult=0.0),
|
||||
'.pos_embed': dict(decay_mult=0.0),
|
||||
'.gamma': dict(decay_mult=0.0),
|
||||
}))
|
||||
|
||||
# learning rate scheduler
|
||||
param_scheduler = [
|
||||
dict(
|
||||
type=LinearLR,
|
||||
start_factor=1e-4,
|
||||
by_epoch=True,
|
||||
begin=0,
|
||||
end=10,
|
||||
convert_to_iter_based=True),
|
||||
dict(
|
||||
type=CosineAnnealingLR,
|
||||
eta_min=1e-5,
|
||||
by_epoch=True,
|
||||
begin=10,
|
||||
end=300,
|
||||
convert_to_iter_based=True)
|
||||
]
|
||||
|
||||
# runtime settings
|
||||
train_cfg = dict(type=EpochBasedTrainLoop, max_epochs=300)
|
||||
default_hooks = dict(
|
||||
# only keeps the latest 3 checkpoints
|
||||
checkpoint=dict(type=CheckpointHook, interval=1, max_keep_ckpts=3))
|
||||
|
||||
randomness = dict(seed=0, diff_rank_seed=True)
|
||||
|
||||
find_unused_parameters = True
|
||||
|
||||
# NOTE: `auto_scale_lr` is for automatically scaling LR
|
||||
# based on the actual training batch size.
|
||||
auto_scale_lr = dict(base_batch_size=2048)
|
|
@ -0,0 +1,132 @@
|
|||
# Copyright (c) OpenMMLab. All rights reserved.
|
||||
# This is a BETA new format config file, and the usage may change recently.
|
||||
from mmengine.config import read_base
|
||||
|
||||
with read_base():
|
||||
from ..._base_.datasets.imagenet_bs64_swin_224 import *
|
||||
from ..._base_.schedules.imagenet_bs1024_adamw_swin import *
|
||||
from ..._base_.default_runtime import *
|
||||
|
||||
from mmengine.model import PretrainedInit, TruncNormalInit
|
||||
from mmengine.optim import CosineAnnealingLR, LinearLR
|
||||
from torch.optim import AdamW
|
||||
|
||||
from mmpretrain.engine.optimizers import \
|
||||
LearningRateDecayOptimWrapperConstructor
|
||||
from mmpretrain.models import (BEiTViT, ImageClassifier, LabelSmoothLoss,
|
||||
LinearClsHead)
|
||||
from mmpretrain.models.utils.batch_augments import CutMix, Mixup
|
||||
|
||||
# model settings
|
||||
model = dict(
|
||||
type=ImageClassifier,
|
||||
backbone=dict(
|
||||
type=BEiTViT,
|
||||
arch='base',
|
||||
img_size=224,
|
||||
patch_size=16,
|
||||
# 0.2 for 1600 epochs pretrained models and 0.1 for 300 epochs.
|
||||
drop_path_rate=0.1,
|
||||
out_type='avg_featmap',
|
||||
use_abs_pos_emb=False,
|
||||
use_rel_pos_bias=True,
|
||||
use_shared_rel_pos_bias=False,
|
||||
init_cfg=dict(type=PretrainedInit, checkpoint='', prefix='backbone.')),
|
||||
neck=None,
|
||||
head=dict(
|
||||
type=LinearClsHead,
|
||||
num_classes=1000,
|
||||
in_channels=768,
|
||||
loss=dict(type=LabelSmoothLoss, label_smooth_val=0.1, mode='original'),
|
||||
init_cfg=[dict(type=TruncNormalInit, layer='Linear', std=0.02)]),
|
||||
train_cfg=dict(
|
||||
augments=[dict(type=Mixup, alpha=0.8),
|
||||
dict(type=CutMix, alpha=1.0)]))
|
||||
|
||||
train_pipeline = [
|
||||
dict(type=LoadImageFromFile),
|
||||
dict(
|
||||
type=RandomResizedCrop,
|
||||
scale=224,
|
||||
backend='pillow',
|
||||
interpolation='bicubic'),
|
||||
dict(type=RandomFlip, prob=0.5, direction='horizontal'),
|
||||
dict(
|
||||
type=RandAugment,
|
||||
policies='timm_increasing',
|
||||
num_policies=2,
|
||||
total_level=10,
|
||||
magnitude_level=9,
|
||||
magnitude_std=0.5,
|
||||
hparams=dict(pad_val=[104, 116, 124], interpolation='bicubic')),
|
||||
dict(
|
||||
type=RandomErasing,
|
||||
erase_prob=0.25,
|
||||
mode='rand',
|
||||
min_area_ratio=0.02,
|
||||
max_area_ratio=0.3333333333333333,
|
||||
fill_color=[103.53, 116.28, 123.675],
|
||||
fill_std=[57.375, 57.12, 58.395]),
|
||||
dict(type=PackInputs)
|
||||
]
|
||||
test_pipeline = [
|
||||
dict(type=LoadImageFromFile),
|
||||
dict(
|
||||
type=ResizeEdge,
|
||||
scale=256,
|
||||
edge='short',
|
||||
backend='pillow',
|
||||
interpolation='bicubic'),
|
||||
dict(type=CenterCrop, crop_size=224),
|
||||
dict(type=PackInputs)
|
||||
]
|
||||
|
||||
train_dataloader = dict(batch_size=128, dataset=dict(pipeline=train_pipeline))
|
||||
val_dataloader = dict(batch_size=128, dataset=dict(pipeline=test_pipeline))
|
||||
test_dataloader = val_dataloader
|
||||
|
||||
# optimizer wrapper
|
||||
optim_wrapper = dict(
|
||||
optimizer=dict(type=AdamW, lr=5e-4, weight_decay=0.05, betas=(0.9, 0.999)),
|
||||
constructor=LearningRateDecayOptimWrapperConstructor,
|
||||
paramwise_cfg=dict(
|
||||
_delete_=True,
|
||||
# 0.6 for 1600 epochs pretrained models and 0.65 for 300 epochs
|
||||
layer_decay_rate=0.65,
|
||||
custom_keys={
|
||||
# the following configurations are designed for BEiT
|
||||
'.ln': dict(decay_mult=0.0),
|
||||
'.bias': dict(decay_mult=0.0),
|
||||
'q_bias': dict(decay_mult=0.0),
|
||||
'v_bias': dict(decay_mult=0.0),
|
||||
'.cls_token': dict(decay_mult=0.0),
|
||||
'.pos_embed': dict(decay_mult=0.0),
|
||||
'.gamma': dict(decay_mult=0.0),
|
||||
}))
|
||||
|
||||
# learning rate scheduler
|
||||
param_scheduler = [
|
||||
dict(
|
||||
type=LinearLR,
|
||||
start_factor=1e-4,
|
||||
by_epoch=True,
|
||||
begin=0,
|
||||
end=20,
|
||||
convert_to_iter_based=True),
|
||||
dict(
|
||||
type=CosineAnnealingLR,
|
||||
by_epoch=True,
|
||||
begin=20,
|
||||
end=100,
|
||||
eta_min=1e-6,
|
||||
convert_to_iter_based=True)
|
||||
]
|
||||
|
||||
# runtime settings
|
||||
default_hooks = dict(
|
||||
# save checkpoint per epoch.
|
||||
checkpoint=dict(type=CheckpointHook, interval=1, max_keep_ckpts=2))
|
||||
|
||||
train_cfg = dict(by_epoch=True, max_epochs=100)
|
||||
|
||||
randomness = dict(seed=0)
|
|
@ -0,0 +1,42 @@
|
|||
# Copyright (c) OpenMMLab. All rights reserved.
|
||||
# This is a BETA new format config file, and the usage may change recently.
|
||||
from mmengine.config import read_base
|
||||
|
||||
with read_base():
|
||||
from ..._base_.datasets.imagenet_bs64_swin_224 import *
|
||||
from ..._base_.schedules.imagenet_bs1024_adamw_swin import *
|
||||
from ..._base_.default_runtime import *
|
||||
|
||||
from mmengine.model import ConstantInit, TruncNormalInit
|
||||
|
||||
from mmpretrain.models import (BEiTViT, ImageClassifier, LabelSmoothLoss,
|
||||
LinearClsHead)
|
||||
from mmpretrain.models.utils.batch_augments.cutmix import CutMix
|
||||
from mmpretrain.models.utils.batch_augments.mixup import Mixup
|
||||
|
||||
model = dict(
|
||||
type=ImageClassifier,
|
||||
backbone=dict(
|
||||
type=BEiTViT,
|
||||
arch='base',
|
||||
img_size=224,
|
||||
patch_size=16,
|
||||
out_type='avg_featmap',
|
||||
use_abs_pos_emb=False,
|
||||
use_rel_pos_bias=True,
|
||||
use_shared_rel_pos_bias=False,
|
||||
),
|
||||
neck=None,
|
||||
head=dict(
|
||||
type=LinearClsHead,
|
||||
num_classes=1000,
|
||||
in_channels=768,
|
||||
loss=dict(type=LabelSmoothLoss, label_smooth_val=0.1, mode='original'),
|
||||
),
|
||||
init_cfg=[
|
||||
dict(type=TruncNormalInit, layer='Linear', std=.02),
|
||||
dict(type=ConstantInit, layer='LayerNorm', val=1., bias=0.),
|
||||
],
|
||||
train_cfg=dict(
|
||||
augments=[dict(type=Mixup, alpha=0.8),
|
||||
dict(type=CutMix, alpha=1.0)]))
|
Loading…
Reference in New Issue