Unverified Commit d219867c authored by Ziyi Wu's avatar Ziyi Wu Committed by GitHub
Browse files

[Refactor] Use MMCV MODEL_REGISTRY (#495)

* remove registry.py in datasets/

* remove registry.py in ops/pointnet_modules/

* remove registry.py in models/

* refactor builder using mmcv.MODELS registry

* update mmcv min version requirement

* change min mmcv version requirement in mmdet3d/__init__.py

* min mmcv version to 1.3.2
parent 22b4bb4e
......@@ -12,7 +12,7 @@ The required versions of MMCV and MMDetection for different versions of MMDetect
| MMDetection3D version | MMDetection version | MMCV version |
|:-------------------:|:-------------------:|:-------------------:|
| master | mmdet>=2.10.0 | mmcv-full>=1.2.4, <=1.4|
| master | mmdet>=2.10.0 | mmcv-full>=1.3.2, <=1.4|
| 0.12.0 | mmdet>=2.5.0 | mmcv-full>=1.2.4, <=1.4|
| 0.11.0 | mmdet>=2.5.0 | mmcv-full>=1.2.4, <=1.4|
| 0.10.0 | mmdet>=2.5.0 | mmcv-full>=1.2.4, <=1.4|
......
......@@ -16,7 +16,7 @@ def digit_version(version_str):
return digit_version
mmcv_minimum_version = '1.2.4'
mmcv_minimum_version = '1.3.2'
mmcv_maximum_version = '1.4.0'
mmcv_version = digit_version(mmcv.__version__)
......
import platform
from mmcv.utils import build_from_cfg
from mmcv.utils import Registry, build_from_cfg
from mmdet.datasets import DATASETS
from mmdet.datasets.builder import _concat_dataset
......@@ -12,6 +12,8 @@ if platform.system() != 'Windows':
soft_limit = min(4096, hard_limit)
resource.setrlimit(resource.RLIMIT_NOFILE, (soft_limit, hard_limit))
OBJECTSAMPLERS = Registry('Object sampler')
def build_dataset(cfg, default_args=None):
from mmdet3d.datasets.dataset_wrappers import CBGSDataset
......
......@@ -6,7 +6,7 @@ import os
from mmdet3d.core.bbox import box_np_ops
from mmdet3d.datasets.pipelines import data_augment_utils
from mmdet.datasets import PIPELINES
from ..registry import OBJECTSAMPLERS
from ..builder import OBJECTSAMPLERS
class BatchSampler:
......
......@@ -6,7 +6,7 @@ from mmdet3d.core import VoxelGenerator
from mmdet3d.core.bbox import box_np_ops
from mmdet.datasets.builder import PIPELINES
from mmdet.datasets.pipelines import RandomFlip
from ..registry import OBJECTSAMPLERS
from ..builder import OBJECTSAMPLERS
from .data_augment_utils import noise_per_object_v3_
......
from mmcv.utils import Registry
OBJECTSAMPLERS = Registry('Object sampler')
from .backbones import * # noqa: F401,F403
from .builder import (build_backbone, build_detector, build_fusion_layer,
from .builder import (FUSION_LAYERS, MIDDLE_ENCODERS, VOXEL_ENCODERS,
build_backbone, build_detector, build_fusion_layer,
build_head, build_loss, build_middle_encoder, build_neck,
build_roi_extractor, build_shared_head,
build_voxel_encoder)
......@@ -10,7 +11,6 @@ from .losses import * # noqa: F401,F403
from .middle_encoders import * # noqa: F401,F403
from .model_utils import * # noqa: F401,F403
from .necks import * # noqa: F401,F403
from .registry import FUSION_LAYERS, MIDDLE_ENCODERS, VOXEL_ENCODERS
from .roi_heads import * # noqa: F401,F403
from .voxel_encoders import * # noqa: F401,F403
......
import warnings
from mmcv.cnn import MODELS as MMCV_MODELS
from mmcv.utils import Registry
from mmdet.models.builder import (BACKBONES, DETECTORS, HEADS, LOSSES, NECKS,
ROI_EXTRACTORS, SHARED_HEADS, build)
from .registry import FUSION_LAYERS, MIDDLE_ENCODERS, VOXEL_ENCODERS
ROI_EXTRACTORS, SHARED_HEADS)
MODELS = Registry('models', parent=MMCV_MODELS)
VOXEL_ENCODERS = MODELS
MIDDLE_ENCODERS = MODELS
FUSION_LAYERS = MODELS
def build_backbone(cfg):
"""Build backbone."""
return build(cfg, BACKBONES)
return BACKBONES.build(cfg)
def build_neck(cfg):
"""Build neck."""
return build(cfg, NECKS)
return NECKS.build(cfg)
def build_roi_extractor(cfg):
"""Build RoI feature extractor."""
return build(cfg, ROI_EXTRACTORS)
return ROI_EXTRACTORS.build(cfg)
def build_shared_head(cfg):
"""Build shared head of detector."""
return build(cfg, SHARED_HEADS)
return SHARED_HEADS.build(cfg)
def build_head(cfg):
"""Build head."""
return build(cfg, HEADS)
return HEADS.build(cfg)
def build_loss(cfg):
"""Build loss function."""
return build(cfg, LOSSES)
return LOSSES.build(cfg)
def build_detector(cfg, train_cfg=None, test_cfg=None):
......@@ -45,19 +52,20 @@ def build_detector(cfg, train_cfg=None, test_cfg=None):
'train_cfg specified in both outer field and model field '
assert cfg.get('test_cfg') is None or test_cfg is None, \
'test_cfg specified in both outer field and model field '
return build(cfg, DETECTORS, dict(train_cfg=train_cfg, test_cfg=test_cfg))
return DETECTORS.build(
cfg, default_args=dict(train_cfg=train_cfg, test_cfg=test_cfg))
def build_voxel_encoder(cfg):
"""Build voxel encoder."""
return build(cfg, VOXEL_ENCODERS)
return VOXEL_ENCODERS.build(cfg)
def build_middle_encoder(cfg):
"""Build middle level encoder."""
return build(cfg, MIDDLE_ENCODERS)
return MIDDLE_ENCODERS.build(cfg)
def build_fusion_layer(cfg):
"""Build fusion layer."""
return build(cfg, FUSION_LAYERS)
return FUSION_LAYERS.build(cfg)
......@@ -3,7 +3,7 @@ from mmcv.cnn import ConvModule, xavier_init
from torch import nn as nn
from torch.nn import functional as F
from ..registry import FUSION_LAYERS
from ..builder import FUSION_LAYERS
from . import apply_3d_transformation
......
......@@ -2,7 +2,7 @@ import torch
from torch import nn as nn
from mmdet3d.core.bbox import Coord3DMode, points_cam2img
from ..registry import FUSION_LAYERS
from ..builder import FUSION_LAYERS
from . import apply_3d_transformation, bbox_2d_transform, coord_2d_transform
EPS = 1e-6
......
......@@ -2,7 +2,7 @@ import torch
from mmcv.runner import auto_fp16
from torch import nn
from ..registry import MIDDLE_ENCODERS
from ..builder import MIDDLE_ENCODERS
@MIDDLE_ENCODERS.register_module()
......
......@@ -3,7 +3,7 @@ from torch import nn as nn
from mmdet3d.ops import SparseBasicBlock, make_sparse_convmodule
from mmdet3d.ops import spconv as spconv
from ..registry import MIDDLE_ENCODERS
from ..builder import MIDDLE_ENCODERS
@MIDDLE_ENCODERS.register_module()
......
......@@ -4,7 +4,7 @@ from torch import nn as nn
from mmdet3d.ops import SparseBasicBlock, make_sparse_convmodule
from mmdet3d.ops import spconv as spconv
from ..registry import MIDDLE_ENCODERS
from ..builder import MIDDLE_ENCODERS
@MIDDLE_ENCODERS.register_module()
......
from mmcv.utils import Registry
VOXEL_ENCODERS = Registry('voxel_encoder')
MIDDLE_ENCODERS = Registry('middle_encoder')
FUSION_LAYERS = Registry('fusion_layer')
......@@ -4,7 +4,7 @@ from mmcv.runner import force_fp32
from torch import nn
from mmdet3d.ops import DynamicScatter
from ..registry import VOXEL_ENCODERS
from ..builder import VOXEL_ENCODERS
from .utils import PFNLayer, get_paddings_indicator
......
......@@ -5,7 +5,7 @@ from torch import nn
from mmdet3d.ops import DynamicScatter
from .. import builder
from ..registry import VOXEL_ENCODERS
from ..builder import VOXEL_ENCODERS
from .utils import VFELayer, get_paddings_indicator
......
from .registry import SA_MODULES
from mmcv.utils import Registry
SA_MODULES = Registry('point_sa_module')
def build_sa_module(cfg, *args, **kwargs):
......
......@@ -5,7 +5,7 @@ from torch.nn import functional as F
from typing import List
from mmdet3d.ops import GroupAll, Points_Sampler, QueryAndGroup, gather_points
from .registry import SA_MODULES
from .builder import SA_MODULES
@SA_MODULES.register_module()
......
from mmcv.utils import Registry
SA_MODULES = Registry('point_sa_module')
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment