|
|
|
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') |
|
|