From 0022ff4e82620681f9450ac66979f687326f5eeb Mon Sep 17 00:00:00 2001 From: RangiLyu Date: Wed, 26 Oct 2022 16:19:57 +0800 Subject: [PATCH 01/11] [Feature] Support auto import modules from registry. --- mmdet/registry.py | 79 +++++++++++++++++++++++++++++++++++------------ tools/test.py | 6 +--- tools/train.py | 6 ---- 3 files changed, 60 insertions(+), 31 deletions(-) diff --git a/mmdet/registry.py b/mmdet/registry.py index 3e3d2adac1d..1ee95dd0456 100644 --- a/mmdet/registry.py +++ b/mmdet/registry.py @@ -32,50 +32,89 @@ from mmengine.registry import Registry # manage all kinds of runners like `EpochBasedRunner` and `IterBasedRunner` -RUNNERS = Registry('runner', parent=MMENGINE_RUNNERS) +RUNNERS = Registry( + 'runner', parent=MMENGINE_RUNNERS, locations=['mmdet.engine.runner']) # manage runner constructors that define how to initialize runners RUNNER_CONSTRUCTORS = Registry( - 'runner constructor', parent=MMENGINE_RUNNER_CONSTRUCTORS) + 'runner constructor', + parent=MMENGINE_RUNNER_CONSTRUCTORS, + locations=['mmdet.engine.runner']) # manage all kinds of loops like `EpochBasedTrainLoop` -LOOPS = Registry('loop', parent=MMENGINE_LOOPS) +LOOPS = Registry( + 'loop', parent=MMENGINE_LOOPS, locations=['mmdet.engine.runner']) # manage all kinds of hooks like `CheckpointHook` -HOOKS = Registry('hook', parent=MMENGINE_HOOKS) +HOOKS = Registry( + 'hook', parent=MMENGINE_HOOKS, locations=['mmdet.engine.hooks']) # manage data-related modules -DATASETS = Registry('dataset', parent=MMENGINE_DATASETS) -DATA_SAMPLERS = Registry('data sampler', parent=MMENGINE_DATA_SAMPLERS) -TRANSFORMS = Registry('transform', parent=MMENGINE_TRANSFORMS) +DATASETS = Registry( + 'dataset', parent=MMENGINE_DATASETS, locations=['mmdet.datasets']) +DATA_SAMPLERS = Registry( + 'data sampler', + parent=MMENGINE_DATA_SAMPLERS, + locations=['mmdet.datasets.samplers']) +TRANSFORMS = Registry( + 'transform', + parent=MMENGINE_TRANSFORMS, + locations=['mmdet.datasets.transforms']) # manage all kinds of modules inheriting `nn.Module` -MODELS = Registry('model', parent=MMENGINE_MODELS) +MODELS = Registry('model', parent=MMENGINE_MODELS, locations=['mmdet.models']) # manage all kinds of model wrappers like 'MMDistributedDataParallel' -MODEL_WRAPPERS = Registry('model_wrapper', parent=MMENGINE_MODEL_WRAPPERS) +MODEL_WRAPPERS = Registry( + 'model_wrapper', + parent=MMENGINE_MODEL_WRAPPERS, + locations=['mmdet.models']) # manage all kinds of weight initialization modules like `Uniform` WEIGHT_INITIALIZERS = Registry( - 'weight initializer', parent=MMENGINE_WEIGHT_INITIALIZERS) + 'weight initializer', + parent=MMENGINE_WEIGHT_INITIALIZERS, + locations=['mmdet.models']) # manage all kinds of optimizers like `SGD` and `Adam` -OPTIMIZERS = Registry('optimizer', parent=MMENGINE_OPTIMIZERS) +OPTIMIZERS = Registry( + 'optimizer', + parent=MMENGINE_OPTIMIZERS, + locations=['mmdet.engine.optimizers']) # manage optimizer wrapper -OPTIM_WRAPPERS = Registry('optim_wrapper', parent=MMENGINE_OPTIM_WRAPPERS) +OPTIM_WRAPPERS = Registry( + 'optim_wrapper', + parent=MMENGINE_OPTIM_WRAPPERS, + locations=['mmdet.engine.optimizers']) # manage constructors that customize the optimization hyperparameters. OPTIM_WRAPPER_CONSTRUCTORS = Registry( - 'optimizer constructor', parent=MMENGINE_OPTIM_WRAPPER_CONSTRUCTORS) + 'optimizer constructor', + parent=MMENGINE_OPTIM_WRAPPER_CONSTRUCTORS, + locations=['mmdet.engine.optimizers']) # manage all kinds of parameter schedulers like `MultiStepLR` PARAM_SCHEDULERS = Registry( - 'parameter scheduler', parent=MMENGINE_PARAM_SCHEDULERS) + 'parameter scheduler', + parent=MMENGINE_PARAM_SCHEDULERS, + locations=['mmdet.engine.schedulers']) # manage all kinds of metrics -METRICS = Registry('metric', parent=MMENGINE_METRICS) +METRICS = Registry( + 'metric', parent=MMENGINE_METRICS, locations=['mmdet.evaluation']) # manage evaluator -EVALUATOR = Registry('evaluator', parent=MMENGINE_EVALUATOR) +EVALUATOR = Registry( + 'evaluator', parent=MMENGINE_EVALUATOR, locations=['mmdet.evaluation']) # manage task-specific modules like anchor generators and box coders -TASK_UTILS = Registry('task util', parent=MMENGINE_TASK_UTILS) +TASK_UTILS = Registry( + 'task util', parent=MMENGINE_TASK_UTILS, locations=['mmdet.models']) # manage visualizer -VISUALIZERS = Registry('visualizer', parent=MMENGINE_VISUALIZERS) +VISUALIZERS = Registry( + 'visualizer', + parent=MMENGINE_VISUALIZERS, + locations=['mmdet.visualization']) # manage visualizer backend -VISBACKENDS = Registry('vis_backend', parent=MMENGINE_VISBACKENDS) +VISBACKENDS = Registry( + 'vis_backend', + parent=MMENGINE_VISBACKENDS, + locations=['mmdet.visualization']) # manage logprocessor -LOG_PROCESSORS = Registry('log_processor', parent=MMENGINE_LOG_PROCESSORS) +LOG_PROCESSORS = Registry( + 'log_processor', + parent=MMENGINE_LOG_PROCESSORS, + locations=['mmdet.visualization']) diff --git a/tools/test.py b/tools/test.py index c0a8cd5af73..814917d79f4 100644 --- a/tools/test.py +++ b/tools/test.py @@ -8,7 +8,7 @@ from mmdet.engine.hooks.utils import trigger_visualization_hook from mmdet.registry import RUNNERS -from mmdet.utils import add_dump_metric, register_all_modules +from mmdet.utils import add_dump_metric # TODO: support fuse_conv_bn and format_only @@ -58,10 +58,6 @@ def parse_args(): def main(): args = parse_args() - # register all modules in mmdet into the registries - # do not init the default scope here because it will be init in the runner - register_all_modules(init_default_scope=False) - # load config cfg = Config.fromfile(args.config) cfg.launcher = args.launcher diff --git a/tools/train.py b/tools/train.py index afad5b8660e..90abd8f478f 100644 --- a/tools/train.py +++ b/tools/train.py @@ -9,8 +9,6 @@ from mmengine.registry import RUNNERS from mmengine.runner import Runner -from mmdet.utils import register_all_modules - def parse_args(): parser = argparse.ArgumentParser(description='Train a detector') @@ -55,10 +53,6 @@ def parse_args(): def main(): args = parse_args() - # register all modules in mmdet into the registries - # do not init the default scope here because it will be init in the runner - register_all_modules(init_default_scope=False) - # load config cfg = Config.fromfile(args.config) cfg.launcher = args.launcher From 7db4a45b7fc0df1c9b85868123157f2bdf7747dd Mon Sep 17 00:00:00 2001 From: RangiLyu Date: Fri, 25 Nov 2022 13:28:40 +0800 Subject: [PATCH 02/11] update scripts --- tools/analysis_tools/analyze_results.py | 7 ++++--- tools/analysis_tools/benchmark.py | 7 +++---- tools/analysis_tools/browse_dataset.py | 4 ++-- tools/analysis_tools/confusion_matrix.py | 7 ++++--- tools/analysis_tools/eval_metric.py | 5 ++--- tools/analysis_tools/get_flops.py | 5 +++-- tools/analysis_tools/optimize_anchors.py | 6 +++--- tools/analysis_tools/test_robustness.py | 5 ----- tools/deployment/mmdet_handler.py | 4 ++-- tools/deployment/test_torchserver.py | 4 ++-- tools/test.py | 5 ----- 11 files changed, 25 insertions(+), 34 deletions(-) diff --git a/tools/analysis_tools/analyze_results.py b/tools/analysis_tools/analyze_results.py index e60f722ce76..4dd4050594c 100644 --- a/tools/analysis_tools/analyze_results.py +++ b/tools/analysis_tools/analyze_results.py @@ -6,6 +6,7 @@ import numpy as np from mmengine.config import Config, DictAction from mmengine.fileio import load +from mmengine.registry import init_default_scope from mmengine.runner import Runner from mmengine.structures import InstanceData, PixelData from mmengine.utils import ProgressBar, check_file_exist, mkdir_or_exist @@ -14,8 +15,7 @@ from mmdet.evaluation import eval_map from mmdet.registry import DATASETS, RUNNERS from mmdet.structures import DetDataSample -from mmdet.utils import (register_all_modules, replace_cfg_vals, - update_data_root) +from mmdet.utils import replace_cfg_vals, update_data_root from mmdet.visualization import DetLocalVisualizer @@ -346,7 +346,6 @@ def parse_args(): def main(): - register_all_modules() args = parse_args() check_file_exist(args.prediction_path) @@ -361,6 +360,8 @@ def main(): if args.cfg_options is not None: cfg.merge_from_dict(args.cfg_options) + init_default_scope(cfg.get('default_scope', 'mmdet')) + cfg.test_dataloader.dataset.test_mode = True cfg.test_dataloader.pop('batch_size', 0) diff --git a/tools/analysis_tools/benchmark.py b/tools/analysis_tools/benchmark.py index 59a58748326..01609e6448d 100644 --- a/tools/analysis_tools/benchmark.py +++ b/tools/analysis_tools/benchmark.py @@ -5,9 +5,9 @@ from mmengine import MMLogger from mmengine.config import Config, DictAction from mmengine.dist import init_dist +from mmengine.registry import init_default_scope from mmengine.utils import mkdir_or_exist -from mmdet.utils import register_all_modules from mmdet.utils.benchmark import (DataLoaderBenchmark, DatasetBenchmark, InferenceBenchmark) @@ -105,14 +105,13 @@ def dataset_benchmark(args, cfg, distributed, logger): def main(): - register_all_modules() - args = parse_args() cfg = Config.fromfile(args.config) - if args.cfg_options is not None: cfg.merge_from_dict(args.cfg_options) + init_default_scope(cfg.get()) + distributed = False if args.launcher != 'none': init_dist(args.launcher, **cfg.get('env_cfg', {}).get('dist_cfg', {})) diff --git a/tools/analysis_tools/browse_dataset.py b/tools/analysis_tools/browse_dataset.py index e4035c0a2bf..21eb6c83f27 100644 --- a/tools/analysis_tools/browse_dataset.py +++ b/tools/analysis_tools/browse_dataset.py @@ -4,12 +4,12 @@ import numpy as np from mmengine.config import Config, DictAction +from mmengine.registry import init_default_scope from mmengine.utils import ProgressBar from mmdet.models.utils import mask2ndarray from mmdet.registry import DATASETS, VISUALIZERS from mmdet.structures.bbox import BaseBoxes -from mmdet.utils import register_all_modules def parse_args(): @@ -47,7 +47,7 @@ def main(): cfg.merge_from_dict(args.cfg_options) # register all modules in mmdet into the registries - register_all_modules() + init_default_scope(cfg.get('default_scope', 'mmdet')) dataset = DATASETS.build(cfg.train_dataloader.dataset) visualizer = VISUALIZERS.build(cfg.visualizer) diff --git a/tools/analysis_tools/confusion_matrix.py b/tools/analysis_tools/confusion_matrix.py index 1883afc5896..8ae0077fdb5 100644 --- a/tools/analysis_tools/confusion_matrix.py +++ b/tools/analysis_tools/confusion_matrix.py @@ -7,12 +7,12 @@ from mmcv.ops import nms from mmengine import Config, DictAction from mmengine.fileio import load +from mmengine.registry import init_default_scope from mmengine.utils import ProgressBar from mmdet.evaluation import bbox_overlaps from mmdet.registry import DATASETS -from mmdet.utils import (register_all_modules, replace_cfg_vals, - update_data_root) +from mmdet.utils import replace_cfg_vals, update_data_root def parse_args(): @@ -235,7 +235,6 @@ def plot_confusion_matrix(confusion_matrix, def main(): - register_all_modules() args = parse_args() cfg = Config.fromfile(args.config) @@ -249,6 +248,8 @@ def main(): if args.cfg_options is not None: cfg.merge_from_dict(args.cfg_options) + init_default_scope(cfg.get('default_scope', 'mmdet')) + results = load(args.prediction_path) if not os.path.exists(args.save_dir): diff --git a/tools/analysis_tools/eval_metric.py b/tools/analysis_tools/eval_metric.py index a68bdc8990e..450828735ca 100644 --- a/tools/analysis_tools/eval_metric.py +++ b/tools/analysis_tools/eval_metric.py @@ -4,9 +4,9 @@ import mmengine from mmengine import Config, DictAction from mmengine.evaluator import Evaluator +from mmengine.registry import init_default_scope from mmdet.registry import DATASETS -from mmdet.utils import register_all_modules def parse_args(): @@ -31,9 +31,8 @@ def parse_args(): def main(): args = parse_args() - register_all_modules(init_default_scope=True) - cfg = Config.fromfile(args.config) + init_default_scope(cfg.get('default_scope', 'mmdet')) if args.cfg_options is not None: cfg.merge_from_dict(args.cfg_options) diff --git a/tools/analysis_tools/get_flops.py b/tools/analysis_tools/get_flops.py index e3d57b8297f..96ec0b065c5 100644 --- a/tools/analysis_tools/get_flops.py +++ b/tools/analysis_tools/get_flops.py @@ -4,9 +4,9 @@ import numpy as np import torch from mmengine.config import Config, DictAction +from mmengine.registry import init_default_scope from mmdet.registry import MODELS -from mmdet.utils import register_all_modules try: from mmcv.cnn import get_model_complexity_info @@ -44,7 +44,6 @@ def parse_args(): def main(): - register_all_modules() args = parse_args() if len(args.shape) == 1: @@ -65,6 +64,8 @@ def main(): if args.cfg_options is not None: cfg.merge_from_dict(args.cfg_options) + init_default_scope(cfg.get('default_scope', 'mmdet')) + model = MODELS.build(cfg.model) if torch.cuda.is_available(): model.cuda() diff --git a/tools/analysis_tools/optimize_anchors.py b/tools/analysis_tools/optimize_anchors.py index 5b195b3dd69..859b7daa35d 100644 --- a/tools/analysis_tools/optimize_anchors.py +++ b/tools/analysis_tools/optimize_anchors.py @@ -26,14 +26,14 @@ from mmengine.config import Config from mmengine.fileio import dump from mmengine.logging import MMLogger +from mmengine.registry import init_default_scope from mmengine.utils import ProgressBar from scipy.optimize import differential_evolution from mmdet.datasets import build_dataset from mmdet.structures.bbox import (bbox_cxcywh_to_xyxy, bbox_overlaps, bbox_xyxy_to_cxcywh) -from mmdet.utils import (register_all_modules, replace_cfg_vals, - update_data_root) +from mmdet.utils import replace_cfg_vals, update_data_root def parse_args(): @@ -329,7 +329,7 @@ def main(): args = parse_args() cfg = args.config cfg = Config.fromfile(cfg) - register_all_modules() + init_default_scope(cfg.get('default_scope', 'mmdet')) # replace the ${key} with the value of cfg.key cfg = replace_cfg_vals(cfg) diff --git a/tools/analysis_tools/test_robustness.py b/tools/analysis_tools/test_robustness.py index 685a2586b1a..a701d23fe51 100644 --- a/tools/analysis_tools/test_robustness.py +++ b/tools/analysis_tools/test_robustness.py @@ -12,7 +12,6 @@ from mmdet.engine.hooks.utils import trigger_visualization_hook from mmdet.registry import RUNNERS -from mmdet.utils import register_all_modules from tools.analysis_tools.robustness_eval import get_results @@ -96,10 +95,6 @@ def parse_args(): def main(): args = parse_args() - # register all modules in mmdet into the registries - # do not init the default scope here because it will be init in the runner - register_all_modules(init_default_scope=False) - assert args.out or args.show or args.show_dir, \ ('Please specify at least one operation (save or show the results) ' 'with the argument "--out", "--show" or "show-dir"') diff --git a/tools/deployment/mmdet_handler.py b/tools/deployment/mmdet_handler.py index 3f04a7553d1..c63ae26d1d4 100644 --- a/tools/deployment/mmdet_handler.py +++ b/tools/deployment/mmdet_handler.py @@ -5,12 +5,12 @@ import mmcv import numpy as np import torch +from mmengine.registry import init_default_scope from ts.torch_handler.base_handler import BaseHandler from mmdet.apis import inference_detector, init_detector -from mmdet.utils import register_all_modules -register_all_modules(True) +init_default_scope('mmdet') class MMdetHandler(BaseHandler): diff --git a/tools/deployment/test_torchserver.py b/tools/deployment/test_torchserver.py index 96ff22f5e08..b00c34bf0da 100644 --- a/tools/deployment/test_torchserver.py +++ b/tools/deployment/test_torchserver.py @@ -4,12 +4,12 @@ import mmcv import requests import torch +from mmengine.registry import init_default_scope from mmengine.structures import InstanceData from mmdet.apis import inference_detector, init_detector from mmdet.registry import VISUALIZERS from mmdet.structures import DetDataSample -from mmdet.utils import register_all_modules def parse_args(): @@ -55,7 +55,7 @@ def align_ts_output(inputs, metainfo, device): def main(args): - register_all_modules() + init_default_scope('mmdet') # build the model from a config file and a checkpoint file model = init_detector(args.config, args.checkpoint, device=args.device) # test a single image diff --git a/tools/test.py b/tools/test.py index 81fb7d89086..4de587901b8 100644 --- a/tools/test.py +++ b/tools/test.py @@ -9,7 +9,6 @@ from mmdet.engine.hooks.utils import trigger_visualization_hook from mmdet.registry import RUNNERS -from mmdet.utils import register_all_modules # TODO: support fuse_conv_bn and format_only @@ -59,10 +58,6 @@ def parse_args(): def main(): args = parse_args() - # register all modules in mmdet into the registries - # do not init the default scope here because it will be init in the runner - register_all_modules(init_default_scope=False) - # load config cfg = Config.fromfile(args.config) cfg.launcher = args.launcher From 834c32fb9a30245e445ecd013af3f330d3989e4d Mon Sep 17 00:00:00 2001 From: RangiLyu Date: Mon, 9 Jan 2023 12:03:02 +0800 Subject: [PATCH 03/11] remove custom imports --- ...onvnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py | 3 --- ...onvnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py | 3 --- .../mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py | 3 --- .../cspnext-s_8xb256-rsb-a1-600e_in1k.py | 6 ++---- .../retinanet_timm-efficientnet-b1_fpn_1x_coco.py | 3 --- .../timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py | 3 --- 6 files changed, 2 insertions(+), 19 deletions(-) diff --git a/configs/convnext/cascade-mask-rcnn_convnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py b/configs/convnext/cascade-mask-rcnn_convnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py index e64692817e4..bc0844ab2b6 100644 --- a/configs/convnext/cascade-mask-rcnn_convnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py +++ b/configs/convnext/cascade-mask-rcnn_convnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py @@ -1,8 +1,5 @@ _base_ = './cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py' # noqa -# please install mmcls>=1.0 -# import mmcls.models to trigger register_module in mmcls -custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False) checkpoint_file = 'https://download.openmmlab.com/mmclassification/v0/convnext/downstream/convnext-small_3rdparty_32xb128-noema_in1k_20220301-303e75e3.pth' # noqa model = dict( diff --git a/configs/convnext/cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py b/configs/convnext/cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py index c13c5cc637d..0841f67b7cb 100644 --- a/configs/convnext/cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py +++ b/configs/convnext/cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py @@ -4,9 +4,6 @@ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' ] -# please install mmcls>=1.0 -# import mmcls.models to trigger register_module in mmcls -custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False) checkpoint_file = 'https://download.openmmlab.com/mmclassification/v0/convnext/downstream/convnext-tiny_3rdparty_32xb128-noema_in1k_20220301-795e9634.pth' # noqa model = dict( diff --git a/configs/convnext/mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py b/configs/convnext/mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py index 7ce9cbde8d6..dbd7f7f046f 100644 --- a/configs/convnext/mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py +++ b/configs/convnext/mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py @@ -4,9 +4,6 @@ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' ] -# please install mmcls>=1.0 -# import mmcls.models to trigger register_module in mmcls -custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False) checkpoint_file = 'https://download.openmmlab.com/mmclassification/v0/convnext/downstream/convnext-tiny_3rdparty_32xb128-noema_in1k_20220301-795e9634.pth' # noqa model = dict( diff --git a/configs/rtmdet/cspnext_imagenet_pretrain/cspnext-s_8xb256-rsb-a1-600e_in1k.py b/configs/rtmdet/cspnext_imagenet_pretrain/cspnext-s_8xb256-rsb-a1-600e_in1k.py index 2c88ee18b02..5708a45e632 100644 --- a/configs/rtmdet/cspnext_imagenet_pretrain/cspnext-s_8xb256-rsb-a1-600e_in1k.py +++ b/configs/rtmdet/cspnext_imagenet_pretrain/cspnext-s_8xb256-rsb-a1-600e_in1k.py @@ -4,8 +4,6 @@ 'mmcls::_base_/default_runtime.py' ] -custom_imports = dict(imports=['mmdet.models'], allow_failed_imports=False) - model = dict( type='ImageClassifier', backbone=dict( @@ -30,8 +28,8 @@ loss_weight=1.0), topk=(1, 5)), train_cfg=dict(augments=[ - dict(type='Mixup', alpha=0.2, num_classes=1000), - dict(type='CutMix', alpha=1.0, num_classes=1000) + dict(type='Mixup', alpha=0.2), + dict(type='CutMix', alpha=1.0) ])) # dataset settings diff --git a/configs/timm_example/retinanet_timm-efficientnet-b1_fpn_1x_coco.py b/configs/timm_example/retinanet_timm-efficientnet-b1_fpn_1x_coco.py index e868f1ce3ad..1b508bb661d 100644 --- a/configs/timm_example/retinanet_timm-efficientnet-b1_fpn_1x_coco.py +++ b/configs/timm_example/retinanet_timm-efficientnet-b1_fpn_1x_coco.py @@ -4,9 +4,6 @@ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' ] -# please install mmcls>=0.20.0 -# import mmcls.models to trigger register_module in mmcls -custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False) model = dict( backbone=dict( _delete_=True, diff --git a/configs/timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py b/configs/timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py index 843635a377e..2e269623810 100644 --- a/configs/timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py +++ b/configs/timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py @@ -4,9 +4,6 @@ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' ] -# please install mmcls>=0.20.0 -# import mmcls.models to trigger register_module in mmcls -custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False) model = dict( backbone=dict( _delete_=True, From 9f340a34c565dcebe112355cf76119a43cb36666 Mon Sep 17 00:00:00 2001 From: RangiLyu Date: Mon, 9 Jan 2023 12:09:40 +0800 Subject: [PATCH 04/11] update requirements --- docs/en/notes/faq.md | 17 +++++++++-------- docs/zh_cn/notes/faq.md | 17 +++++++++-------- mmdet/__init__.py | 2 +- requirements/mminstall.txt | 2 +- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/docs/en/notes/faq.md b/docs/en/notes/faq.md index 991da7f6982..274f932566a 100644 --- a/docs/en/notes/faq.md +++ b/docs/en/notes/faq.md @@ -9,14 +9,15 @@ We list some common troubles faced by many users and their corresponding solutio Compatible MMDetection, MMEngine, and MMCV versions are shown as below. Please choose the correct version of MMCV to avoid installation issues. | MMDetection version | MMCV version | MMEngine version | - | :-----------------: | :---------------------: | :----------------------: | - | 3.x | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc5 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc4 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc3 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc2 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | - | 3.0.0rc1 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | - | 3.0.0rc0 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | +---------------------| :-----------------: | :---------------------: | :----------------------: | + | 3.x | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | + | 3.0.0rc6 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | + | 3.0.0rc5 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | + | 3.0.0rc4 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | + | 3.0.0rc3 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | + | 3.0.0rc2 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | + | 3.0.0rc1 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | + | 3.0.0rc0 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | **Note:** diff --git a/docs/zh_cn/notes/faq.md b/docs/zh_cn/notes/faq.md index 87a9f10e302..4a8e62551b6 100644 --- a/docs/zh_cn/notes/faq.md +++ b/docs/zh_cn/notes/faq.md @@ -9,14 +9,15 @@ MMDetection,MMEngine 和 MMCV 的版本兼容关系如下。请选择合适的版本避免安装错误 。 | MMDetection 版本 | MMCV 版本 | MMEngine 版本 | - | :--------------: | :---------------------: | :----------------------: | - | 3.x | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc5 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc4 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc3 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc2 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | - | 3.0.0rc1 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | - | 3.0.0rc0 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | +----------------| :--------------: | :---------------------: | :----------------------: | + | 3.x | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | + | 3.0.0rc6 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | + | 3.0.0rc5 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | + | 3.0.0rc4 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | + | 3.0.0rc3 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | + | 3.0.0rc2 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | + | 3.0.0rc1 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | + | 3.0.0rc0 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | **注意:** diff --git a/mmdet/__init__.py b/mmdet/__init__.py index 4fb68d9f8a7..f5fb107392b 100644 --- a/mmdet/__init__.py +++ b/mmdet/__init__.py @@ -9,7 +9,7 @@ mmcv_maximum_version = '2.1.0' mmcv_version = digit_version(mmcv.__version__) -mmengine_minimum_version = '0.3.0' +mmengine_minimum_version = '0.4.0' mmengine_maximum_version = '1.0.0' mmengine_version = digit_version(mmengine.__version__) diff --git a/requirements/mminstall.txt b/requirements/mminstall.txt index ef6abdd8cb0..7cc1ee6cf0e 100644 --- a/requirements/mminstall.txt +++ b/requirements/mminstall.txt @@ -1,2 +1,2 @@ mmcv>=2.0.0rc1,<2.1.0 -mmengine>=0.1.0,<1.0.0 +mmengine>=0.4.0,<1.0.0 From dbbf469226c67f026aa40323a70154e09fbcdab8 Mon Sep 17 00:00:00 2001 From: RangiLyu Date: Mon, 9 Jan 2023 13:26:19 +0800 Subject: [PATCH 05/11] clean register all module --- demo/image_demo.py | 4 ---- demo/video_demo.py | 4 ---- demo/video_gpuaccel_demo.py | 4 ---- demo/webcam_demo.py | 4 ---- docs/en/get_started.md | 2 -- docs/en/notes/faq.md | 2 +- docs/en/user_guides/inference.md | 3 --- docs/zh_cn/get_started.md | 2 -- docs/zh_cn/notes/faq.md | 2 +- 9 files changed, 2 insertions(+), 25 deletions(-) diff --git a/demo/image_demo.py b/demo/image_demo.py index 182f9e2b5dc..12c17120e26 100644 --- a/demo/image_demo.py +++ b/demo/image_demo.py @@ -7,7 +7,6 @@ from mmdet.apis import (async_inference_detector, inference_detector, init_detector) from mmdet.registry import VISUALIZERS -from mmdet.utils import register_all_modules def parse_args(): @@ -34,9 +33,6 @@ def parse_args(): def main(args): - # register all modules in mmdet into the registries - register_all_modules() - # TODO: Support inference of image directory. # build the model from a config file and a checkpoint file model = init_detector( diff --git a/demo/video_demo.py b/demo/video_demo.py index 5cc4d29c053..bb7cdbfd473 100644 --- a/demo/video_demo.py +++ b/demo/video_demo.py @@ -8,7 +8,6 @@ from mmdet.apis import inference_detector, init_detector from mmdet.registry import VISUALIZERS -from mmdet.utils import register_all_modules def parse_args(): @@ -37,9 +36,6 @@ def main(): ('Please specify at least one operation (save/show the ' 'video) with the argument "--out" or "--show"') - # register all modules in mmdet into the registries - register_all_modules() - # build the model from a config file and a checkpoint file model = init_detector(args.config, args.checkpoint, device=args.device) diff --git a/demo/video_gpuaccel_demo.py b/demo/video_gpuaccel_demo.py index fba7548b4dc..e44697d6828 100644 --- a/demo/video_gpuaccel_demo.py +++ b/demo/video_gpuaccel_demo.py @@ -13,7 +13,6 @@ from mmdet.apis import init_detector from mmdet.registry import VISUALIZERS from mmdet.structures import DetDataSample -from mmdet.utils import register_all_modules try: import ffmpegcv @@ -81,9 +80,6 @@ def main(): ('Please specify at least one operation (save/show the ' 'video) with the argument "--out" or "--show"') - # register all modules in mmdet into the registries - register_all_modules() - model = init_detector(args.config, args.checkpoint, device=args.device) # init visualizer diff --git a/demo/webcam_demo.py b/demo/webcam_demo.py index 4a230278985..d0900303779 100644 --- a/demo/webcam_demo.py +++ b/demo/webcam_demo.py @@ -7,7 +7,6 @@ from mmdet.apis import inference_detector, init_detector from mmdet.registry import VISUALIZERS -from mmdet.utils import register_all_modules def parse_args(): @@ -27,9 +26,6 @@ def parse_args(): def main(): args = parse_args() - # register all modules in mmdet into the registries - register_all_modules() - # build the model from a config file and a checkpoint file device = torch.device(args.device) model = init_detector(args.config, args.checkpoint, device=device) diff --git a/docs/en/get_started.md b/docs/en/get_started.md index 334eca569b7..dc674d4efa4 100644 --- a/docs/en/get_started.md +++ b/docs/en/get_started.md @@ -95,9 +95,7 @@ Case b: If you install MMDetection with MIM, open your python interpreter and co ```python from mmdet.apis import init_detector, inference_detector -from mmdet.utils import register_all_modules -register_all_modules() config_file = 'yolov3_mobilenetv2_8xb24-320-300e_coco.py' checkpoint_file = 'yolov3_mobilenetv2_320_300e_coco_20210719_215349-d18dff72.pth' model = init_detector(config_file, checkpoint_file, device='cpu') # or device='cuda:0' diff --git a/docs/en/notes/faq.md b/docs/en/notes/faq.md index 274f932566a..7a33bb39325 100644 --- a/docs/en/notes/faq.md +++ b/docs/en/notes/faq.md @@ -9,7 +9,7 @@ We list some common troubles faced by many users and their corresponding solutio Compatible MMDetection, MMEngine, and MMCV versions are shown as below. Please choose the correct version of MMCV to avoid installation issues. | MMDetection version | MMCV version | MMEngine version | ----------------------| :-----------------: | :---------------------: | :----------------------: | + ---------------------| :-----------------: | :---------------------: | :----------------------: | | 3.x | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | | 3.0.0rc6 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | | 3.0.0rc5 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | diff --git a/docs/en/user_guides/inference.md b/docs/en/user_guides/inference.md index 13b09fc9719..5303cc9efbc 100644 --- a/docs/en/user_guides/inference.md +++ b/docs/en/user_guides/inference.md @@ -17,11 +17,8 @@ import mmcv from mmcv.transforms import Compose from mmengine.utils import track_iter_progress from mmdet.registry import VISUALIZERS -from mmdet.utils import register_all_modules from mmdet.apis import init_detector, inference_detector -# Register all modules in mmdet into the registries -register_all_modules() # Specify the path to model config and checkpoint file config_file = 'configs/faster_rcnn/faster-rcnn_r50-fpn_1x_coco.py' diff --git a/docs/zh_cn/get_started.md b/docs/zh_cn/get_started.md index 611cd3e5dc6..167f8d6f0e9 100644 --- a/docs/zh_cn/get_started.md +++ b/docs/zh_cn/get_started.md @@ -94,9 +94,7 @@ python demo/image_demo.py demo/demo.jpg yolov3_mobilenetv2_8xb24-320-300e_coco.p ```python from mmdet.apis import init_detector, inference_detector -from mmdet.utils import register_all_modules -register_all_modules() config_file = 'yolov3_mobilenetv2_8xb24-320-300e_coco.py' checkpoint_file = 'yolov3_mobilenetv2_320_300e_coco_20210719_215349-d18dff72.pth' model = init_detector(config_file, checkpoint_file, device='cpu') # or device='cuda:0' diff --git a/docs/zh_cn/notes/faq.md b/docs/zh_cn/notes/faq.md index 4a8e62551b6..62eaa1a1d70 100644 --- a/docs/zh_cn/notes/faq.md +++ b/docs/zh_cn/notes/faq.md @@ -9,7 +9,7 @@ MMDetection,MMEngine 和 MMCV 的版本兼容关系如下。请选择合适的版本避免安装错误 。 | MMDetection 版本 | MMCV 版本 | MMEngine 版本 | -----------------| :--------------: | :---------------------: | :----------------------: | + ----------------| :--------------: | :---------------------: | :----------------------: | | 3.x | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | | 3.0.0rc6 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | | 3.0.0rc5 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | From f7cdbbf43d2799653d5cef804889bae335b05fb6 Mon Sep 17 00:00:00 2001 From: RangiLyu Date: Mon, 9 Jan 2023 13:26:42 +0800 Subject: [PATCH 06/11] add scope --- mmdet/apis/inference.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mmdet/apis/inference.py b/mmdet/apis/inference.py index 38b3b1bf12b..19c0224901a 100644 --- a/mmdet/apis/inference.py +++ b/mmdet/apis/inference.py @@ -10,6 +10,7 @@ from mmcv.ops import RoIPool from mmcv.transforms import Compose from mmengine.config import Config +from mmengine.registry import init_default_scope from mmengine.runner import load_checkpoint from mmdet.registry import DATASETS @@ -54,6 +55,8 @@ def init_detector( config.merge_from_dict(cfg_options) elif 'init_cfg' in config.model.backbone: config.model.backbone.init_cfg = None + init_default_scope(config.get('default_scope', 'mmdet')) + model = MODELS.build(config.model) if checkpoint is None: warnings.simplefilter('once') From 419256503c4d82ab935444b61d4a7a7334a3e7f7 Mon Sep 17 00:00:00 2001 From: RangiLyu Date: Mon, 9 Jan 2023 13:30:37 +0800 Subject: [PATCH 07/11] fix lint --- docs/en/notes/faq.md | 18 +++++++++--------- docs/zh_cn/notes/faq.md | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/en/notes/faq.md b/docs/en/notes/faq.md index 7a33bb39325..b696f779a6d 100644 --- a/docs/en/notes/faq.md +++ b/docs/en/notes/faq.md @@ -9,15 +9,15 @@ We list some common troubles faced by many users and their corresponding solutio Compatible MMDetection, MMEngine, and MMCV versions are shown as below. Please choose the correct version of MMCV to avoid installation issues. | MMDetection version | MMCV version | MMEngine version | - ---------------------| :-----------------: | :---------------------: | :----------------------: | - | 3.x | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | - | 3.0.0rc6 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | - | 3.0.0rc5 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc4 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc3 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc2 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | - | 3.0.0rc1 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | - | 3.0.0rc0 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | + | :-----------------: | :---------------------: | :----------------------: | + | 3.x | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | + | 3.0.0rc6 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | + | 3.0.0rc5 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | + | 3.0.0rc4 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | + | 3.0.0rc3 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | + | 3.0.0rc2 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | + | 3.0.0rc1 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | + | 3.0.0rc0 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | **Note:** diff --git a/docs/zh_cn/notes/faq.md b/docs/zh_cn/notes/faq.md index 62eaa1a1d70..739423c07a0 100644 --- a/docs/zh_cn/notes/faq.md +++ b/docs/zh_cn/notes/faq.md @@ -9,15 +9,15 @@ MMDetection,MMEngine 和 MMCV 的版本兼容关系如下。请选择合适的版本避免安装错误 。 | MMDetection 版本 | MMCV 版本 | MMEngine 版本 | - ----------------| :--------------: | :---------------------: | :----------------------: | - | 3.x | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | - | 3.0.0rc6 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | - | 3.0.0rc5 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc4 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc3 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | - | 3.0.0rc2 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | - | 3.0.0rc1 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | - | 3.0.0rc0 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | + | :--------------: | :---------------------: | :----------------------: | + | 3.x | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | + | 3.0.0rc6 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | + | 3.0.0rc5 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | + | 3.0.0rc4 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | + | 3.0.0rc3 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | + | 3.0.0rc2 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | + | 3.0.0rc1 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | + | 3.0.0rc0 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.1.0, \<1.0.0 | **注意:** From a3d4650589e8727e2c52b2fe55bb5c0c7f284a86 Mon Sep 17 00:00:00 2001 From: RangiLyu Date: Fri, 3 Feb 2023 17:06:00 +0800 Subject: [PATCH 08/11] fix lint --- docs/en/notes/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/notes/faq.md b/docs/en/notes/faq.md index e2de7e318f7..d32bf29e399 100644 --- a/docs/en/notes/faq.md +++ b/docs/en/notes/faq.md @@ -9,7 +9,7 @@ We list some common troubles faced by many users and their corresponding solutio Compatible MMDetection, MMEngine, and MMCV versions are shown as below. Please choose the correct version of MMCV to avoid installation issues. | MMDetection version | MMCV version | MMEngine version | - |:-------------------:| :---------------------: | :----------------------: | + | :-----------------: | :---------------------: | :----------------------: | | 3.x | mmcv>=2.0.0rc4, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | | 3.0.0rc6 | mmcv>=2.0.0rc4, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | | 3.0.0rc5 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | From 78e6cd0e9c09235844665a9b2d4a3d98fc048de9 Mon Sep 17 00:00:00 2001 From: RangiLyu Date: Fri, 3 Feb 2023 17:22:08 +0800 Subject: [PATCH 09/11] update readme --- docs/en/notes/faq.md | 2 +- docs/zh_cn/notes/faq.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/notes/faq.md b/docs/en/notes/faq.md index d32bf29e399..389d195f299 100644 --- a/docs/en/notes/faq.md +++ b/docs/en/notes/faq.md @@ -10,7 +10,7 @@ We list some common troubles faced by many users and their corresponding solutio | MMDetection version | MMCV version | MMEngine version | | :-----------------: | :---------------------: | :----------------------: | - | 3.x | mmcv>=2.0.0rc4, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | + | 3.x | mmcv>=2.0.0rc4, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | | 3.0.0rc6 | mmcv>=2.0.0rc4, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | | 3.0.0rc5 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | | 3.0.0rc4 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | diff --git a/docs/zh_cn/notes/faq.md b/docs/zh_cn/notes/faq.md index 739423c07a0..52d975c5aef 100644 --- a/docs/zh_cn/notes/faq.md +++ b/docs/zh_cn/notes/faq.md @@ -10,8 +10,8 @@ | MMDetection 版本 | MMCV 版本 | MMEngine 版本 | | :--------------: | :---------------------: | :----------------------: | - | 3.x | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | - | 3.0.0rc6 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | + | 3.x | mmcv>=2.0.0rc4, \<2.1.0 | mmengine>=0.4.0, \<1.0.0 | + | 3.0.0rc6 | mmcv>=2.0.0rc4, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | | 3.0.0rc5 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | | 3.0.0rc4 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | | 3.0.0rc3 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | From 751997256aa60fc8a3440aeea97927a3ce11d969 Mon Sep 17 00:00:00 2001 From: RangiLyu Date: Fri, 3 Feb 2023 18:08:53 +0800 Subject: [PATCH 10/11] resolve comments --- ...convnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py | 4 ++++ ...convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py | 4 ++++ .../mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py | 4 ++++ .../retinanet_timm-efficientnet-b1_fpn_1x_coco.py | 5 +++++ .../timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py | 5 +++++ tools/analysis_tools/benchmark.py | 2 +- 6 files changed, 23 insertions(+), 1 deletion(-) diff --git a/configs/convnext/cascade-mask-rcnn_convnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py b/configs/convnext/cascade-mask-rcnn_convnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py index bc0844ab2b6..465209d3863 100644 --- a/configs/convnext/cascade-mask-rcnn_convnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py +++ b/configs/convnext/cascade-mask-rcnn_convnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py @@ -1,5 +1,9 @@ _base_ = './cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py' # noqa +# TODO: delete custom_imports after mmcls supports auto import +# please install mmcls>=1.0 +# import mmcls.models to trigger register_module in mmcls +custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False) checkpoint_file = 'https://download.openmmlab.com/mmclassification/v0/convnext/downstream/convnext-small_3rdparty_32xb128-noema_in1k_20220301-303e75e3.pth' # noqa model = dict( diff --git a/configs/convnext/cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py b/configs/convnext/cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py index 0841f67b7cb..53edb391921 100644 --- a/configs/convnext/cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py +++ b/configs/convnext/cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py @@ -4,6 +4,10 @@ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' ] +# TODO: delete custom_imports after mmcls supports auto import +# please install mmcls>=1.0 +# import mmcls.models to trigger register_module in mmcls +custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False) checkpoint_file = 'https://download.openmmlab.com/mmclassification/v0/convnext/downstream/convnext-tiny_3rdparty_32xb128-noema_in1k_20220301-795e9634.pth' # noqa model = dict( diff --git a/configs/convnext/mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py b/configs/convnext/mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py index dbd7f7f046f..e9932c44b03 100644 --- a/configs/convnext/mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py +++ b/configs/convnext/mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py @@ -4,6 +4,10 @@ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' ] +# TODO: delete custom_imports after mmcls supports auto import +# please install mmcls>=1.0 +# import mmcls.models to trigger register_module in mmcls +custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False) checkpoint_file = 'https://download.openmmlab.com/mmclassification/v0/convnext/downstream/convnext-tiny_3rdparty_32xb128-noema_in1k_20220301-795e9634.pth' # noqa model = dict( diff --git a/configs/timm_example/retinanet_timm-efficientnet-b1_fpn_1x_coco.py b/configs/timm_example/retinanet_timm-efficientnet-b1_fpn_1x_coco.py index 1b508bb661d..433cf5c7bda 100644 --- a/configs/timm_example/retinanet_timm-efficientnet-b1_fpn_1x_coco.py +++ b/configs/timm_example/retinanet_timm-efficientnet-b1_fpn_1x_coco.py @@ -4,6 +4,11 @@ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' ] +# TODO: delete custom_imports after mmcls supports auto import +# please install mmcls>=1.0 +# import mmcls.models to trigger register_module in mmcls +custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False) + model = dict( backbone=dict( _delete_=True, diff --git a/configs/timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py b/configs/timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py index 2e269623810..315284b5074 100644 --- a/configs/timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py +++ b/configs/timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py @@ -4,6 +4,11 @@ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' ] +# TODO: delete custom_imports after mmcls supports auto import +# please install mmcls>=1.0 +# import mmcls.models to trigger register_module in mmcls +custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False) + model = dict( backbone=dict( _delete_=True, diff --git a/tools/analysis_tools/benchmark.py b/tools/analysis_tools/benchmark.py index 01609e6448d..dfc06e2a3ad 100644 --- a/tools/analysis_tools/benchmark.py +++ b/tools/analysis_tools/benchmark.py @@ -110,7 +110,7 @@ def main(): if args.cfg_options is not None: cfg.merge_from_dict(args.cfg_options) - init_default_scope(cfg.get()) + init_default_scope(cfg.get('default_scope', 'mmdet')) distributed = False if args.launcher != 'none': From 7cb5e24e7af0b91121efc88e07287d5fbcb3b89e Mon Sep 17 00:00:00 2001 From: RangiLyu Date: Mon, 6 Feb 2023 10:58:29 +0800 Subject: [PATCH 11/11] resolve comments --- mmdet/registry.py | 3 ++- requirements/mminstall.txt | 2 +- tools/deployment/mmdet_handler.py | 3 --- tools/deployment/test_torchserver.py | 2 -- 4 files changed, 3 insertions(+), 7 deletions(-) diff --git a/mmdet/registry.py b/mmdet/registry.py index 1ee95dd0456..3a5b2b28a4f 100644 --- a/mmdet/registry.py +++ b/mmdet/registry.py @@ -117,4 +117,5 @@ LOG_PROCESSORS = Registry( 'log_processor', parent=MMENGINE_LOG_PROCESSORS, - locations=['mmdet.visualization']) + # TODO: update the location when mmdet has its own log processor + locations=['mmdet.engine']) diff --git a/requirements/mminstall.txt b/requirements/mminstall.txt index 7cc1ee6cf0e..8faef45b260 100644 --- a/requirements/mminstall.txt +++ b/requirements/mminstall.txt @@ -1,2 +1,2 @@ -mmcv>=2.0.0rc1,<2.1.0 +mmcv>=2.0.0rc4,<2.1.0 mmengine>=0.4.0,<1.0.0 diff --git a/tools/deployment/mmdet_handler.py b/tools/deployment/mmdet_handler.py index a6afd1bf4d5..28c93c99f6e 100644 --- a/tools/deployment/mmdet_handler.py +++ b/tools/deployment/mmdet_handler.py @@ -5,13 +5,10 @@ import mmcv import numpy as np import torch -from mmengine.registry import init_default_scope from ts.torch_handler.base_handler import BaseHandler from mmdet.apis import inference_detector, init_detector -init_default_scope('mmdet') - class MMdetHandler(BaseHandler): threshold = 0.5 diff --git a/tools/deployment/test_torchserver.py b/tools/deployment/test_torchserver.py index b00c34bf0da..5160a2fbdef 100644 --- a/tools/deployment/test_torchserver.py +++ b/tools/deployment/test_torchserver.py @@ -4,7 +4,6 @@ import mmcv import requests import torch -from mmengine.registry import init_default_scope from mmengine.structures import InstanceData from mmdet.apis import inference_detector, init_detector @@ -55,7 +54,6 @@ def align_ts_output(inputs, metainfo, device): def main(args): - init_default_scope('mmdet') # build the model from a config file and a checkpoint file model = init_detector(args.config, args.checkpoint, device=args.device) # test a single image