| | |
| | import torch |
| | from mmengine.dist import get_world_size |
| | from mmengine.logging import print_log |
| |
|
| | from mmdet.registry import MODELS |
| | from mmdet.utils import ConfigType, OptConfigType, OptMultiConfig |
| | from .single_stage import SingleStageDetector |
| |
|
| |
|
| | @MODELS.register_module() |
| | class RTMDet(SingleStageDetector): |
| | """Implementation of RTMDet. |
| | |
| | Args: |
| | backbone (:obj:`ConfigDict` or dict): The backbone module. |
| | neck (:obj:`ConfigDict` or dict): The neck module. |
| | bbox_head (:obj:`ConfigDict` or dict): The bbox head module. |
| | train_cfg (:obj:`ConfigDict` or dict, optional): The training config |
| | of ATSS. Defaults to None. |
| | test_cfg (:obj:`ConfigDict` or dict, optional): The testing config |
| | of ATSS. Defaults to None. |
| | data_preprocessor (:obj:`ConfigDict` or dict, optional): Config of |
| | :class:`DetDataPreprocessor` to process the input data. |
| | Defaults to None. |
| | init_cfg (:obj:`ConfigDict` or dict, optional): the config to control |
| | the initialization. Defaults to None. |
| | use_syncbn (bool): Whether to use SyncBatchNorm. Defaults to True. |
| | """ |
| |
|
| | def __init__(self, |
| | backbone: ConfigType, |
| | neck: ConfigType, |
| | bbox_head: ConfigType, |
| | train_cfg: OptConfigType = None, |
| | test_cfg: OptConfigType = None, |
| | data_preprocessor: OptConfigType = None, |
| | init_cfg: OptMultiConfig = None, |
| | use_syncbn: bool = True) -> None: |
| | super().__init__( |
| | backbone=backbone, |
| | neck=neck, |
| | bbox_head=bbox_head, |
| | train_cfg=train_cfg, |
| | test_cfg=test_cfg, |
| | data_preprocessor=data_preprocessor, |
| | init_cfg=init_cfg) |
| |
|
| | |
| | if use_syncbn and get_world_size() > 1: |
| | torch.nn.SyncBatchNorm.convert_sync_batchnorm(self) |
| | print_log('Using SyncBatchNorm()', 'current') |
| |
|