当前位置:网站首页>mmdetection之model构建
mmdetection之model构建
2022-06-10 16:54:00 【武乐乐~】
前言
本篇主要介绍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,拉你进群探讨交流。
边栏推荐
- Mapbox GL development tutorial (11): loading line layers
- SOA architecture / test phase interface description language transformation scheme
- Take you to a preliminary understanding of the basic mechanism of classes and objects
- 2022年焊工(初级)试题模拟考试平台操作
- matplotlib plt. Specific usage of text() - labeling points in a drawing
- 路由器实验之serial接口的静态路由配置(补充)
- pands pd.DataFrame()函数详细解析
- Fabric. JS activation input box
- 力扣 20. 有效的括号
- Fabric. Keep the original level when JS element is selected
猜你喜欢
随机推荐
单片机底层通信协议① —— 同步和异步、并行和串行、全双工和半双工以及单工、电平信号和差分信号
《华为数据之道》读书笔记
华为matepad能成为你的笔记本电脑副屏?
当v-if和v-for需要同时使用的时候
Nat. Commun. | Knowledge integration and decision support for accelerating the discovery of antibiotic resistance genes
2022年T电梯修理考试题模拟考试题库及在线模拟考试
Nacos configuration management
运筹说 第64期丨动态规划奠基人——理查德·贝尔曼
为什么 0.1+0.2=0.30000000000000004
大山深处的孩子,正在看见更远的星空
Fabric. JS centered element
Leetcode 875. 爱吃香蕉的珂珂
嘿!ONES 新星请看过来|师兄师姐说
2022年茶艺师(中级)操作证考试题库及模拟考试
vscode常用插件与配置
【玩转华为云】手把手带你使用鲲鹏代码迁移工具实现源码迁移
matplotlib plt.text()的具体用法——画图时给图中的点加标签
域名备案和icp备案有哪些区别?
二十多年了,安全套市场还只有杜蕾斯、冈本、杰士邦
This article introduces you to j.u.c's futuretask, fork/join framework and BlockingQueue









