MMEditing代码阅读笔记一:main()函数中的build_model()

MMEditing代码阅读笔记一:main()函数中的build_model()

小白一枚,编程功底很弱,接触MMEditing这套代码,刚开始小眉头一皱,鼠标见点来点去不知道咋个回事。网上又没有关于MMEditing代码阅读的相关阐述,眉头更皱两皱了,一不留神发现了关于MMDectection代码阅读的详细阐述,出于一个师门的针对不同任务的两套代码果然换汤不换药。得到领悟,眉头逐渐舒展,作为一个小白,突然感觉代码捋顺了,有点兴奋,赶快写下来纪录记录。

可能关于一些编程技巧的专业词汇名称,自己不太熟悉,大白话多一点,有不对的望大佬指正。

以超分网络EDSR进行学习记录。

理解得益于这位大佬的文章:链接: link

main()函数流程

该函数大概流程如下图。
MMEditing代码阅读笔记一:main()函数中的build_model()_第1张图片关于build_datasets()函数,暂时没有看,后续明白了继续记录。这个build_model()函数的执行流程大概就是这个样子。下面我们仔细来分析一下这个build_model()函数。

build_model()函数

对我来说,刚开始接触的时候不知道这个实际的model(比如这个SRCNN怎么传进去的)怎么导入进去的,看import ,也没找到线索。我觉得的是封装的太好的缘故吧。

还有这个Registry,也就是注册表这个东西到底是个啥玩意?

一顿摸索挂调试。好多文章里面说代码执行开始后会先建立一个registry注册表,巴拉巴拉的,不太理解,后来我就把他理解成一个仓库,每次执行build()函数的时候,其实就是启动对应的仓库(打开仓库的大门,预示着要开始去里面拿东西了);

然后呢,进入build()函数,执行build_from_cfg()函数,并通过该函数下的obj_type(**args)语句,
**args是将字典unpack得到各个元素,分别与形参匹配送入函数中;
其实就是将 **** 除了’type’ **** 的所有字段,当做形参,送入了名为Basicrestore的类中(type = ’Basicrestore‘);

注意:build_from_cfg()函数,传入了registry和cfg两个参数,仓库(registry)中存在cfg中type的value,也就是说这个value类已经在仓库中登记过了,现在要拿出来用(用来实例化对象)。

另外呢,这个仓库还不分类,也就是说loss、model等都扔在这个仓库之中,只不过进入这个仓库有build_loss身份和build_model身份均可。

故,如果想加入自己的loss、模型进入这个仓库(Registry),要先在这个仓库中登记,实现形式也就是在对应的__init__文件中加入类名。

看看调试图。注:细品标注的这几个值,以及 **** 除了’type’ **** 这几个字体。
也就是说obj_type = args.pop(‘type’) 取出了type对应的value,然后再通过这个value去定位是registry中的那个类,说白了就是通过这个value去仓库中取出同名的已登记一个类,并创建实例化对象。
MMEditing代码阅读笔记一:main()函数中的build_model()_第2张图片也正是这个return语句 ,跳进了实际的model里面,由上图可知,这个obj_cls是一个实例化对象了,(**args)是除了type后的形参传进这个对象的。这块注意看上图的调试器里面各个参数的值。
在这里插入图片描述上面是跳进Basicstore为例的图片,同理,接着跳进EDSR,流程一样。注意下图各个调试器里面的参数即可。
MMEditing代码阅读笔记一:main()函数中的build_model()_第3张图片
大概情况就是个这,希望有朋友可以一块交流交流!!!

你可能感兴趣的:(MMEditing,python,计算机视觉,深度学习,超分辨率重建)