mmdetection之model构建


前言

 本篇主要介绍mmdetection如何构建目标检测模型的。在读本文之前,建议读者先阅读mmcv之Config类介绍。该系列文章以构建FasterRcnn为具体例子。当然,本文不会详细介绍如何构建FasterRcnn,仅仅介绍mmdetection是如何建立目标检测模型的。

1、总体流程

在这里插入图片描述
 我这里简单介绍下流程:“模型配置字典”以字典形式存储着实例化类的信息。而检测器注册类里面存储了目标检测类(FasterRcnn,Yolo,ssd等,里面存储着是类,不是实例)。而函数build_from_cfg则是根据模型配置字典中type字段FasterRcnn来从 检测器注册类 中提取出FasterRcnn类。然后完成实例化。
 本篇文章分配顺序如下:2 介绍“模型配置字典”和“检测器注册类”;3介绍build_from_cfg;4.实例化faster_rcnn。

2、模型配置字典和检测器注册类

2.1.模型配置字典

 这里放张FasterRcnn的配置字典。关于这个字典怎么生成的请转mmdet之Config类介绍
在这里插入图片描述
 这里注意下‘type’字段。type字段是用来辨别采用何种检测器/backbone等等(比如FasterRcnn,ResNet,FPN)。

2.2.检测器注册类

 注册器是mmdetection中一大特色,要讲清需要很大篇幅,后续我会单独出一篇博文介绍。这里只需明白注册器就是一个字典,里面存储了各个类。比如检测器注册器类,里面存储着(FasterRcnn类、SSD类、Yolo类)。这里贴下注册器类:
在这里插入图片描述
 从上图可以看出,注册器Registry里面包括了多种检测器类。

3、build_from_cfg函数介绍

 在弄懂了模型配置字典和注册器类之后,build_from_cfg就是根据模型配置字典中的 type字段 来从注册器类中索引出 对应的 类 完成初始化。举个例子,type为FasterRcnn,则就从Registry中提取出FasterRcnn类。贴下代码:

def build_from_cfg(cfg, registry, default_args=None):

    args = cfg.copy()
    obj_type = args.pop('type')            # 从配置文件中索引出type字段对应的obj
    if isinstance(obj_type, str):
        obj_cls = registry.get(obj_type)   # 根据字段从Registry中索引出类
        if obj_cls is None:
            raise KeyError(
                f'{obj_type} is not in the {registry.name} registry')
    elif inspect.isclass(obj_type):
        obj_cls = obj_type
    else:
        raise TypeError(
            f'type must be a str or valid type, but got {type(obj_type)}')

    return obj_cls(**args)                 # 完成类的初始化

 这里比较难以理解最后一行代码:obj_cls(args) 。其实作用就是用模型配置字典中参数完成类的初始化。这里贴下FasterRcnn初始化代码:

@DETECTORS.register_module()
class TwoStageDetector(BaseDetector):
    def __init__(self,
                 backbone,
                 neck=None,
                 rpn_head=None,
                 roi_head=None,
                 train_cfg=None,
                 test_cfg=None,
                 pretrained=None):
        super(TwoStageDetector, self).__init__()

 就是用模型配置字典中剩下的字段完成上述参数的初始化。
 这是类继承关系图:
在这里插入图片描述

总结

 本文主要大致介绍了mmdetection如何构建model。核心就是借助build_from_cfg将类完成初始化。后续文章会介绍Registry类,Runner,Hook以及检测算法介绍。若有问题欢迎+vx:wulele2541612007,拉你进群探讨交流。

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值