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..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,6 @@ _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) 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..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,7 @@ '../_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) 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..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,7 @@ '../_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) diff --git a/configs/rtmdet/classification/cspnext-s_8xb256-rsb-a1-600e_in1k.py b/configs/rtmdet/classification/cspnext-s_8xb256-rsb-a1-600e_in1k.py index 08293efcd9c..5708a45e632 100644 --- a/configs/rtmdet/classification/cspnext-s_8xb256-rsb-a1-600e_in1k.py +++ b/configs/rtmdet/classification/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( 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..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,9 +4,11 @@ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' ] -# please install mmcls>=0.20.0 +# 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 843635a377e..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,9 +4,11 @@ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' ] -# please install mmcls>=0.20.0 +# 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/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 9b62635e39a..555a9f98cf1 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 22cb3adf581..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.0rc1, \<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/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 00b65f121c4..b0de03991e5 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 87a9f10e302..52d975c5aef 100644 --- a/docs/zh_cn/notes/faq.md +++ b/docs/zh_cn/notes/faq.md @@ -10,7 +10,8 @@ | MMDetection 版本 | MMCV 版本 | MMEngine 版本 | | :--------------: | :---------------------: | :----------------------: | - | 3.x | mmcv>=2.0.0rc1, \<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 | | 3.0.0rc3 | mmcv>=2.0.0rc1, \<2.1.0 | mmengine>=0.3.0, \<1.0.0 | diff --git a/mmdet/__init__.py b/mmdet/__init__.py index 630abc1db31..4946da851eb 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/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') diff --git a/mmdet/registry.py b/mmdet/registry.py index 3e3d2adac1d..3a5b2b28a4f 100644 --- a/mmdet/registry.py +++ b/mmdet/registry.py @@ -32,50 +32,90 @@ 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, + # 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 ef6abdd8cb0..8faef45b260 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 +mmcv>=2.0.0rc4,<2.1.0 +mmengine>=0.4.0,<1.0.0 diff --git a/tools/analysis_tools/analyze_results.py b/tools/analysis_tools/analyze_results.py index f0f71b97353..a7baba009e7 100644 --- a/tools/analysis_tools/analyze_results.py +++ b/tools/analysis_tools/analyze_results.py @@ -7,6 +7,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 @@ -15,8 +16,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 @@ -348,7 +348,6 @@ def parse_args(): def main(): - register_all_modules() args = parse_args() check_file_exist(args.prediction_path) @@ -363,6 +362,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..dfc06e2a3ad 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('default_scope', 'mmdet')) + 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 038cde411f4..ef2c484d650 100644 --- a/tools/analysis_tools/browse_dataset.py +++ b/tools/analysis_tools/browse_dataset.py @@ -3,12 +3,12 @@ import os.path as osp 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(): @@ -46,7 +46,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 3583978c158..a1c4c8ec86f 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 3fda9342e07..9b6a02b8644 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.registry import DATASETS 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 db7226f06f1..28c93c99f6e 100644 --- a/tools/deployment/mmdet_handler.py +++ b/tools/deployment/mmdet_handler.py @@ -8,9 +8,6 @@ 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) class MMdetHandler(BaseHandler): diff --git a/tools/deployment/test_torchserver.py b/tools/deployment/test_torchserver.py index 96ff22f5e08..5160a2fbdef 100644 --- a/tools/deployment/test_torchserver.py +++ b/tools/deployment/test_torchserver.py @@ -9,7 +9,6 @@ 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 +54,6 @@ def align_ts_output(inputs, metainfo, device): def main(args): - register_all_modules() # 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 diff --git a/tools/train.py b/tools/train.py index 57bb0c83260..eb21359487b 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') @@ -59,10 +57,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