From c6a2d482fd97dd0c5f20fc63d14ce182582c1a63 Mon Sep 17 00:00:00 2001 From: wutongshenqiu <44188071+wutongshenqiu@users.noreply.github.com> Date: Fri, 15 Jul 2022 19:03:20 +0800 Subject: [PATCH] refactor autoslim config --- .../settings/imagenet_bs2048_autoslim_pil.py | 9 ++++ ..._mbv2_1.5x_slimmable_subnet_8xb256_in1k.py | 9 ++-- .../autoslim_mbv2_1.5x_subnet_8xb256_in1k.py | 3 -- ...mbv2_1.5x_subnet_8xb256_in1k_flops-220M.py | 4 ++ ...mbv2_1.5x_subnet_8xb256_in1k_flops-320M.py | 4 ++ ...mbv2_1.5x_subnet_8xb256_in1k_flops-530M.py | 4 ++ ...autoslim_mbv2_1.5x_supernet_8xb256_in1k.py | 2 +- configs/pruning/mmcls/autoslim/metafile.yml | 32 ++++++------- tools/model_converters/publish_model.py | 45 +++++++++---------- tools/slurm_train.sh | 0 10 files changed, 65 insertions(+), 47 deletions(-) create mode 100644 configs/_base_/settings/imagenet_bs2048_autoslim_pil.py delete mode 100644 configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k.py create mode 100644 configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-220M.py create mode 100644 configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-320M.py create mode 100644 configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-530M.py mode change 100755 => 100644 tools/slurm_train.sh diff --git a/configs/_base_/settings/imagenet_bs2048_autoslim_pil.py b/configs/_base_/settings/imagenet_bs2048_autoslim_pil.py new file mode 100644 index 00000000..6ba81bc4 --- /dev/null +++ b/configs/_base_/settings/imagenet_bs2048_autoslim_pil.py @@ -0,0 +1,9 @@ +_base_ = 'imagenet_bs2048_autoslim.py' + +_RandomResizedCrop_cfg = _base_.train_dataloader.dataset.pipeline[1] +assert _RandomResizedCrop_cfg.type == 'mmcls.RandomResizedCrop' +_RandomResizedCrop_cfg.backend = 'pillow' + +_ResizeEdge_cfg = _base_.test_dataloader.dataset.pipeline[1] +assert _ResizeEdge_cfg.type == 'mmcls.ResizeEdge' +_ResizeEdge_cfg.backend = 'pillow' diff --git a/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_slimmable_subnet_8xb256_in1k.py b/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_slimmable_subnet_8xb256_in1k.py index 9aff6b91..bd2a415f 100644 --- a/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_slimmable_subnet_8xb256_in1k.py +++ b/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_slimmable_subnet_8xb256_in1k.py @@ -1,5 +1,5 @@ _base_ = [ - 'mmrazor::_base_/settings/imagenet_bs2048_autoslim.py', + 'mmrazor::_base_/settings/imagenet_bs2048_autoslim_pil.py', 'mmcls::_base_/models/mobilenet_v2_1x.py', 'mmcls::_base_/default_runtime.py', ] @@ -22,8 +22,9 @@ data_preprocessor = dict( # !autoslim algorithm config # ========================================================================== channel_cfg_paths = [ - 'tests/data/MBV2_220M.yaml', 'tests/data/MBV2_320M.yaml', - 'tests/data/MBV2_530M.yaml' + 'https://download.openmmlab.com/mmrazor/v1/autoslim/autoslim_mbv2_subnet_8xb256_in1k_flops-220M_acc-71.4_20220715-9c288f3b_subnet_cfg.yaml', # noqa: E501 + 'https://download.openmmlab.com/mmrazor/v1/autoslim/autoslim_mbv2_subnet_8xb256_in1k_flops-320M_acc-72.73_20220715-9aa8f8ae_subnet_cfg.yaml', # noqa: E501 + 'https://download.openmmlab.com/mmrazor/v1/autoslim/autoslim_mbv2_subnet_8xb256_in1k_flops-530M_acc-74.23_20220715-aa8754fe_subnet_cfg.yaml' # noqa: E501 ] model = dict( @@ -45,6 +46,6 @@ model_wrapper_cfg = dict( broadcast_buffers=False, find_unused_parameters=True) -optim_wrapper = dict(accumulative_counts=3) +optim_wrapper = dict(accumulative_counts=len(channel_cfg_paths)) val_cfg = dict(type='mmrazor.SlimmableValLoop') diff --git a/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k.py b/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k.py deleted file mode 100644 index ee3fa596..00000000 --- a/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k.py +++ /dev/null @@ -1,3 +0,0 @@ -_base_ = 'autoslim_mbv2_1.5x_supernet_8xb256_in1k.py' - -model = dict(channel_cfg_paths='tests/data/MBV2_530M.yaml') diff --git a/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-220M.py b/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-220M.py new file mode 100644 index 00000000..221907c4 --- /dev/null +++ b/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-220M.py @@ -0,0 +1,4 @@ +_base_ = 'autoslim_mbv2_1.5x_slimmable_subnet_8xb256_in1k.py' + +_channel_cfg_paths = 'https://download.openmmlab.com/mmrazor/v1/autoslim/autoslim_mbv2_subnet_8xb256_in1k_flops-220M_acc-71.4_20220715-9c288f3b_subnet_cfg.yaml' # noqa: E501 +model = dict(channel_cfg_paths=_channel_cfg_paths) diff --git a/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-320M.py b/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-320M.py new file mode 100644 index 00000000..b9e21519 --- /dev/null +++ b/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-320M.py @@ -0,0 +1,4 @@ +_base_ = 'autoslim_mbv2_1.5x_slimmable_subnet_8xb256_in1k.py' + +_channel_cfg_paths = 'https://download.openmmlab.com/mmrazor/v1/autoslim/autoslim_mbv2_subnet_8xb256_in1k_flops-320M_acc-72.73_20220715-9aa8f8ae_subnet_cfg.yaml' # noqa: E501 +model = dict(channel_cfg_paths=_channel_cfg_paths) diff --git a/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-530M.py b/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-530M.py new file mode 100644 index 00000000..964f6919 --- /dev/null +++ b/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-530M.py @@ -0,0 +1,4 @@ +_base_ = 'autoslim_mbv2_1.5x_slimmable_subnet_8xb256_in1k.py' + +_channel_cfg_paths = 'https://download.openmmlab.com/mmrazor/v1/autoslim/autoslim_mbv2_subnet_8xb256_in1k_flops-530M_acc-74.23_20220715-aa8754fe_subnet_cfg.yaml' # noqa: E501 +model = dict(channel_cfg_paths=_channel_cfg_paths) diff --git a/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_supernet_8xb256_in1k.py b/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_supernet_8xb256_in1k.py index 177ff421..e3c99c4b 100644 --- a/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_supernet_8xb256_in1k.py +++ b/configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_supernet_8xb256_in1k.py @@ -1,5 +1,5 @@ _base_ = [ - 'mmrazor::_base_/settings/imagenet_bs2048_autoslim.py', + 'mmrazor::_base_/settings/imagenet_bs2048_autoslim_pil.py', 'mmcls::_base_/models/mobilenet_v2_1x.py', 'mmcls::_base_/default_runtime.py', ] diff --git a/configs/pruning/mmcls/autoslim/metafile.yml b/configs/pruning/mmcls/autoslim/metafile.yml index de82d8d7..3956155e 100644 --- a/configs/pruning/mmcls/autoslim/metafile.yml +++ b/configs/pruning/mmcls/autoslim/metafile.yml @@ -13,48 +13,48 @@ Collections: Converted From: Code: https://github.com/JiahuiYu/slimmable_networks Models: - - Name: autoslim_mbv2_subnet_8xb256_in1k + - Name: autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-530M In Collection: AutoSlim Metadata: Flops(G): 0.53 Params(M): 6.5 Supernet: MobileNet v2(x1.5) - Channel: https://download.openmmlab.com/mmrazor/v0.1/pruning/autoslim/autoslim_mbv2_subnet_8xb256_in1k/autoslim_mbv2_subnet_8xb256_in1k_flops-0.53M_acc-74.23_20211222-e5208bbd_channel_cfg.yaml + Channel: https://download.openmmlab.com/mmrazor/v1/autoslim/autoslim_mbv2_subnet_8xb256_in1k_flops-530M_acc-74.23_20220715-aa8754fe_subnet_cfg.yaml Results: - Task: Image Classification Dataset: ImageNet-1k Metrics: Top 1 Accuracy: 74.23 - Top 5 Accuracy: 91.74 - Config: configs/pruning/autoslim/autoslim_mbv2_subnet_8xb256_in1k.py - Weights: https://download.openmmlab.com/mmrazor/v0.1/pruning/autoslim/autoslim_mbv2_subnet_8xb256_in1k/autoslim_mbv2_subnet_8xb256_in1k_flops-0.53M_acc-74.23_20211222-e5208bbd.pth - - Name: autoslim_mbv2_subnet_8xb256_in1k + Top 5 Accuracy: 91.73 + Config: configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-530M.py + Weights: https://download.openmmlab.com/mmrazor/v1/autoslim/autoslim_mbv2_subnet_8xb256_in1k_flops-530M_acc-74.23_20220715-aa8754fe.pth + - Name: autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-320M In Collection: AutoSlim Metadata: Flops(G): 0.32 Params(M): 5.77 Supernet: MobileNet v2(x1.5) - Channel: https://download.openmmlab.com/mmrazor/v0.1/pruning/autoslim/autoslim_mbv2_subnet_8xb256_in1k/autoslim_mbv2_subnet_8xb256_in1k_flops-0.32M_acc-72.73_20211222-b5b0b33c_channel_cfg.yaml + Channel: https://download.openmmlab.com/mmrazor/v1/autoslim/autoslim_mbv2_subnet_8xb256_in1k_flops-320M_acc-72.73_20220715-9aa8f8ae_subnet_cfg.yaml Results: - Task: Image Classification Dataset: ImageNet-1k Metrics: Top 1 Accuracy: 72.73 - Top 5 Accuracy: 90.83 - Config: configs/pruning/autoslim/autoslim_mbv2_subnet_8xb256_in1k.py - Weights: https://download.openmmlab.com/mmrazor/v0.1/pruning/autoslim/autoslim_mbv2_subnet_8xb256_in1k/autoslim_mbv2_subnet_8xb256_in1k_flops-0.32M_acc-72.73_20211222-b5b0b33c.pth - - Name: autoslim_mbv2_subnet_8xb256_in1k + Top 5 Accuracy: 90.84 + Config: configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-320M.py + Weights: https://download.openmmlab.com/mmrazor/v1/autoslim/autoslim_mbv2_subnet_8xb256_in1k_flops-320M_acc-72.73_20220715-9aa8f8ae.pth + - Name: autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-220M In Collection: AutoSlim Metadata: Flops(G): 0.22 Params(M): 4.13 Supernet: MobileNet v2(x1.5) - Channel: https://download.openmmlab.com/mmrazor/v0.1/pruning/autoslim/autoslim_mbv2_subnet_8xb256_in1k/autoslim_mbv2_subnet_8xb256_in1k_flops-0.22M_acc-71.39_20211222-43117c7b_channel_cfg.yaml.? + Channel: https://download.openmmlab.com/mmrazor/v1/autoslim/autoslim_mbv2_subnet_8xb256_in1k_flops-220M_acc-71.4_20220715-9c288f3b_subnet_cfg.yaml Results: - Task: Image Classification Dataset: ImageNet-1k Metrics: - Top 1 Accuracy: 74.23 - Top 5 Accuracy: 91.74 - Config: configs/pruning/autoslim/autoslim_mbv2_subnet_8xb256_in1k.py - Weights: https://download.openmmlab.com/mmrazor/v0.1/pruning/autoslim/autoslim_mbv2_subnet_8xb256_in1k/autoslim_mbv2_subnet_8xb256_in1k_flops-0.22M_acc-71.39_20211222-43117c7b.pth + Top 1 Accuracy: 71.4 + Top 5 Accuracy: 90.08 + Config: configs/pruning/mmcls/autoslim/autoslim_mbv2_1.5x_subnet_8xb256_in1k_flops-220M.py + Weights: https://download.openmmlab.com/mmrazor/v1/autoslim/autoslim_mbv2_subnet_8xb256_in1k_flops-220M_acc-71.4_20220715-9c288f3b.pth diff --git a/tools/model_converters/publish_model.py b/tools/model_converters/publish_model.py index 944f089e..5d08f980 100644 --- a/tools/model_converters/publish_model.py +++ b/tools/model_converters/publish_model.py @@ -2,6 +2,7 @@ import argparse import datetime from pathlib import Path +from typing import Optional import mmcv import torch @@ -11,10 +12,14 @@ from mmcv import digit_version def parse_args(): parser = argparse.ArgumentParser( description='Process a checkpoint to be published') - parser.add_argument('in_file', help='input checkpoint filename') - parser.add_argument('out_file', help='output checkpoint filename') - parser.add_argument('--mutable-cfg', help='input mutable cfg filename') - parser.add_argument('--channel-cfg', help='output channel cfg filename') + parser.add_argument('in_file', help='input checkpoint filename', type=str) + parser.add_argument( + 'out_file', help='output checkpoint filename', default=None, type=str) + parser.add_argument( + 'subnet_cfg_file', + help='input subnet config filename', + default=None, + type=str) args = parser.parse_args() return args @@ -34,14 +39,16 @@ def cal_file_sha256(file_path: str) -> str: return sha256_hash.hexdigest() -def process_checkpoint(in_file, - out_file, - mutable_cfg_file=None, - channel_cfg_file=None): +def process_checkpoint(in_file: str, + out_file: Optional[str] = None, + subnet_cfg_file: Optional[str] = None) -> None: checkpoint = torch.load(in_file, map_location='cpu') # remove optimizer for smaller file size if 'optimizer' in checkpoint: del checkpoint['optimizer'] + + if out_file is None: + out_file = in_file # if it is necessary to remove some sensitive data in checkpoint['meta'], # add the code here. if digit_version(torch.__version__) >= digit_version('1.6'): @@ -62,19 +69,12 @@ def process_checkpoint(in_file, print(f'Successfully generated the publish-ckpt as {final_ckpt_file}.') - if mutable_cfg_file: - mutable_cfg = mmcv.fileio.load(mutable_cfg_file) - final_mutable_cfg_file = f'{final_file_prefix}_mutable_cfg.yaml' - mmcv.fileio.dump(mutable_cfg, final_mutable_cfg_file) - print(f'Successfully generated the publish-mutable-cfg as \ - {final_mutable_cfg_file}.') - - if channel_cfg_file: - channel_cfg = mmcv.fileio.load(channel_cfg_file) - final_channel_cfg_file = f'{final_file_prefix}_channel_cfg.yaml' - mmcv.fileio.dump(channel_cfg, final_channel_cfg_file) - print(f'Successfully generated the publish-channel-cfg as \ - {final_channel_cfg_file}.') + if subnet_cfg_file is not None: + subnet_cfg = mmcv.fileio.load(subnet_cfg_file) + final_subnet_cfg_file = f'{final_file_prefix}_subnet_cfg.yaml' + mmcv.fileio.dump(subnet_cfg, final_subnet_cfg_file) + print(f'Successfully generated the publish-subnet-cfg as \ + {final_subnet_cfg_file}.') def main(): @@ -83,8 +83,7 @@ def main(): if not out_dir.exists(): raise ValueError(f'Directory {out_dir} does not exist, ' 'please generate it manually.') - process_checkpoint(args.in_file, args.out_file, args.mutable_cfg, - args.channel_cfg) + process_checkpoint(args.in_file, args.out_file, args.subnet_cfg_file) if __name__ == '__main__': diff --git a/tools/slurm_train.sh b/tools/slurm_train.sh old mode 100755 new mode 100644