mmrotate框架基本使用
1、如何将类交给mmrotate框架容器管理
- 容器:框架中现有基本容器包括DATASETS, BACKBONES, LOSSES, DETECTORS。
- 初始化容器:Registry(‘backbone’)中’backbone’为容器初始化配置文件。
#/mmdet/models/builder.py 部分代码 from mmcv.utils import Registry,build_from_cfg BACKBONES = Registry('backbone') NECKS = Registry('neck') ROI_EXTRACTORS = Registry('roi_extractor') SHARED_HEADS = Registry('shared_head') HEADS = Registry('head') LOSSES = Registry('loss') DETECTORS = Registry('detector')
- 容器管理类的形式:
#DATASETS容器 Registry(name=dataset, items={ 'CustomDataset': <class'mmdet.datasets.custom.CustomDataset'>, 'CocoDataset': <class'mmdet.datasets.coco.CocoDataset'>, 'CityscapesDataset': <class'mmdet.datasets.cityscapes.CityscapesDataset'>, 'ConcatDataset': <class'mmdet.datasets.dataset_wrappers.ConcatDataset'>, 'RepeatDataset': <class'mmdet.datasets.dataset_wrappers.RepeatDataset'>, 'XMLDataset': <class'mmdet.datasets.xml_style.XMLDataset'>, 'VOCDataset': <class'mmdet.datasets.voc.VOCDataset'>, 'WIDERFaceDataset': <class'mmdet.datasets.wider_face.WIDERFaceDataset'>})
- 通过注解@ROTATED_DATASETS.register_module()可将数据集类注册到ROTATED_DATASETS容器。同理@ROTATED_BACKBONES.register_module()可将主干网类注册到ROTATED_BACKBONES容器。
2、如何实例化mmrotate框架容器管理的类
- 通过build_dataset(cfg),build_backbone(cfg),build_neck(cfg),build_loss(cfg)实例化相应容器中的类对象。
#L1LossConfig loss = dict('type': 'L1Loss', 'loss_weight': 1.0)
import mmdet.models.builder.build_loss import L1LossConfig l1Loss = build_loss(L1LossConfig.loss)
- 以上几个build_xxx(cfg)仅仅只是构建一个模型中的组件。
3、如何组装实例化mmrotate类对象(组件)
- 通过build_detectors(cfg)就可以将各个组件组装起来。cfg如下:
# model settings model = dict( type='MaskRCNN', backbone=dict( type='ResNet', xxx ), neck=dict( type='FPN', xxx ), rpn_head=dict( type='RPNHead', xxx loss_cls=dict( type='CrossEntropyLoss', xxx), loss_bbox=dict(type='L1Loss', xxx), roi_head=dict( xxx mask_head=dict( type='FCNMaskHead', xxx loss_mask=dict( type='CrossEntropyLoss', xxx))))
4、各个组件之间是怎么进行耦合的。
5、怎么知道单个组件需要传入哪些参数,才能自适应构建我们想要的组件。
6、mmrotate组织结构/功能。
- 通过 LOSSES = Registry(‘loss’)注册管理loss注册表中的所有loss,并通过build_loss(cfg)定制化生成我们所需的对象。这和Spring是一致的,通过ApplicationContext(application.xml)加载application.xml中所有的Bean,不过不同的是Bean中指定了更为详细的信息,包括Property等。而loss注册表中仅仅只有对象名和对应的类,其他所需要的配置需要通过build_loss(cfg)指定。mmrotate分两步加载生成实例Bean,Spring只需要一步。但mmrotate更加灵活,它将通用部分进一步抽象。