builder.py 4 KB
Newer Older
dingchang's avatar
dingchang committed
1
# Copyright (c) OpenMMLab. All rights reserved.
2
import warnings
3

4
from mmdet3d.registry import MODELS
5

6
7
8
9
10
11
12
BACKBONES = MODELS
NECKS = MODELS
ROI_EXTRACTORS = MODELS
SHARED_HEADS = MODELS
HEADS = MODELS
LOSSES = MODELS
DETECTORS = MODELS
13
SEGMENTORS = MODELS
14
15
16
VOXEL_ENCODERS = MODELS
MIDDLE_ENCODERS = MODELS
FUSION_LAYERS = MODELS
17
SEGMENTORS = MODELS
zhangwenwei's avatar
zhangwenwei committed
18
19
20


def build_backbone(cfg):
21
    """Build backbone."""
22
23
24
25
    warnings.warn('``build_backbone`` would be deprecated soon, please use '
                  '``mmdet3d.registry.MODELS.build()`` ')

    return BACKBONES.build(cfg)
zhangwenwei's avatar
zhangwenwei committed
26
27
28


def build_neck(cfg):
29
    """Build neck."""
30
31
32
33
    warnings.warn('``build_neck`` would be deprecated soon, please use '
                  '``mmdet3d.registry.MODELS.build()`` ')

    return NECKS.build(cfg)
zhangwenwei's avatar
zhangwenwei committed
34
35
36


def build_roi_extractor(cfg):
37
38
39
40
41
    """Build roi extractor."""
    warnings.warn(
        '``build_roi_extractor`` would be deprecated soon, please use '
        '``mmdet3d.registry.MODELS.build()`` ')
    return ROI_EXTRACTORS.build(cfg)
zhangwenwei's avatar
zhangwenwei committed
42
43
44


def build_shared_head(cfg):
45
46
47
48
    """Build shared head."""
    warnings.warn('``build_shared_head`` would be deprecated soon, please use '
                  '``mmdet3d.registry.MODELS.build()`` ')
    return SHARED_HEADS.build(cfg)
zhangwenwei's avatar
zhangwenwei committed
49
50
51


def build_head(cfg):
52
    """Build head."""
53
54
55
    warnings.warn('``build_head`` would be deprecated soon, please use '
                  '``mmdet3d.registry.MODELS.build()`` ')
    return HEADS.build(cfg)
zhangwenwei's avatar
zhangwenwei committed
56
57
58


def build_loss(cfg):
59
60
61
62
    """Build loss."""
    warnings.warn('``build_loss`` would be deprecated soon, please use '
                  '``mmdet3d.registry.MODELS.build()`` ')
    return LOSSES.build(cfg)
zhangwenwei's avatar
zhangwenwei committed
63
64
65


def build_detector(cfg, train_cfg=None, test_cfg=None):
66
    """Build detector."""
67
68
69
70
71
72
73
74
    if train_cfg is not None or test_cfg is not None:
        warnings.warn(
            'train_cfg and test_cfg is deprecated, '
            'please specify them in model', UserWarning)
    assert cfg.get('train_cfg') is None or train_cfg is 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 '
75
76
77
    if cfg['type'] in DETECTORS._module_dict.keys():
        return DETECTORS.build(
            cfg, default_args=dict(train_cfg=train_cfg, test_cfg=test_cfg))
zhangwenwei's avatar
zhangwenwei committed
78
79


80
81
82
83
84
85
86
87
88
89
def build_segmentor(cfg, train_cfg=None, test_cfg=None):
    """Build segmentor."""
    if train_cfg is not None or test_cfg is not None:
        warnings.warn(
            'train_cfg and test_cfg is deprecated, '
            'please specify them in model', UserWarning)
    assert cfg.get('train_cfg') is None or train_cfg is 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 '
90
91
    return SEGMENTORS.build(
        cfg, default_args=dict(train_cfg=train_cfg, test_cfg=test_cfg))
92
93
94


def build_model(cfg, train_cfg=None, test_cfg=None):
95
    """A function wrapper for building 3D detector or segmentor according to
96
97
98
99
100
101
102
103
104
105
    cfg.

    Should be deprecated in the future.
    """
    if cfg.type in ['EncoderDecoder3D']:
        return build_segmentor(cfg, train_cfg=train_cfg, test_cfg=test_cfg)
    else:
        return build_detector(cfg, train_cfg=train_cfg, test_cfg=test_cfg)


zhangwenwei's avatar
zhangwenwei committed
106
def build_voxel_encoder(cfg):
107
    """Build voxel encoder."""
108
109
    warnings.warn('``build_voxel_encoder`` would be deprecated soon, please '
                  'use ``mmdet3d.registry.MODELS.build()`` ')
110
    return VOXEL_ENCODERS.build(cfg)
zhangwenwei's avatar
zhangwenwei committed
111
112
113


def build_middle_encoder(cfg):
114
    """Build middle level encoder."""
115
116
    warnings.warn('``build_middle_encoder`` would be deprecated soon, please '
                  'use ``mmdet3d.registry.MODELS.build()`` ')
117
    return MIDDLE_ENCODERS.build(cfg)
zhangwenwei's avatar
zhangwenwei committed
118
119
120


def build_fusion_layer(cfg):
121
    """Build fusion layer."""
122
123
    warnings.warn('``build_fusion_layer`` would be deprecated soon, please '
                  'use ``mmdet3d.registry.MODELS.build()`` ')
124
    return FUSION_LAYERS.build(cfg)