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

2023-11-17

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

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

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

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

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

main()函数流程

该函数大概流程如下图。
在这里插入图片描述关于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去仓库中取出同名的已登记一个类,并创建实例化对象。
在这里插入图片描述也正是这个return语句 ,跳进了实际的model里面,由上图可知,这个obj_cls是一个实例化对象了,(**args)是除了type后的形参传进这个对象的。这块注意看上图的调试器里面各个参数的值。
在这里插入图片描述上面是跳进Basicstore为例的图片,同理,接着跳进EDSR,流程一样。注意下图各个调试器里面的参数即可。
在这里插入图片描述
大概情况就是个这,希望有朋友可以一块交流交流!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Lighttpd 和 cgi python

    我正在尝试通过 lighttpd 执行一些 python 脚本 但是当我尝试运行它时 我只得到一个要求我下载的空白文件 lighttpd conf server modules mod access mod alias mod access
  • 是否有解决方法可以通过 CoinGecko API 安全检查?

    我在工作中运行我的代码 一切都很顺利 但在不同的网络 家庭 WiFi 上 我不断收到403访问时出错CoinGecko V3 API https www coingecko com api documentations v3 可以观察到 在
  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • Pandas/Google BigQuery:架构不匹配导致上传失败

    我的谷歌表中的架构如下所示 price datetime DATETIME symbol STRING bid open FLOAT bid high FLOAT bid low FLOAT bid close FLOAT ask open
  • 用枢轴点拟合曲线 Python

    我有下面的图 我想用 2 条线来拟合它 使用 python 我设法适应上半部分 def func x a b x np array x return a x b popt pcov curve fit func up x up y 我想用另
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Jupyter Notebook 找不到 Python 模块

    不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • Python:XML 内所有标签名称中的字符串替换(将连字符替换为下划线)

    我有一个格式不太好的 XML 标签名称内有连字符 我想用下划线替换它 以便能够与 lxml objectify 一起使用 我想替换所有标签名称 包括嵌套的子标签 示例 XML
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • Scipy Sparse:SciPy/NumPy 更新后出现奇异矩阵警告

    我的问题是由大型电阻器系统的节点分析产生的 我基本上是在设置一个大的稀疏矩阵A 我的解向量b 我正在尝试求解线性方程A x b 为了做到这一点 我正在使用scipy sparse linalg spsolve method 直到最近 一切都
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐

  • Windows使用cmake编译dll

    目录 工具 注意事项 工具 CMake MinGW CMake工具负责将CMakeLists txt配置文件转换成相关的MakeFile脚本 本身并不参与编译 而是使用MinGW工具进行编译 在Linux系统使用CMake编译需要执行以下命
  • HashMap 面试题 11 问,看这篇就够了

    1 请你说说 HashMap 的数据结构有什么区别 jdk1 7 采用的是数组 链表结构 在 jdk1 8 采用数组 链表 红黑树的结构 2 上面说到 jdk1 8 之后增加了红黑树 什么 情况下转红黑树 什么情况下又转链表的 1 当链表的
  • 错误隐藏学习手记(三)

    帧内错误隐藏算法集合 1 空间加权像素平均算法 加权像素平均插值算法 P0就是丢失的宏块 灰色的是最近的像素点 2 方向插值 1 边缘检测及梯度计算 使用Sobel算子 计算的是Sx和Sy 水平边缘和垂直边缘 下图中 a b c d是缺失的
  • android:configChanges属性总结

    http blog csdn net zhaokaiqiang1992 article details 19921703 android中的组件Activity在manifest xml文件中可以指定参数android ConfigChan
  • 查看aspx文件安装什么服务器,aspx文件怎么打开?手把手教你怎么打开aspx文件

    原标题 aspx文件怎么打开 手把手教你怎么打开aspx文件 在电脑里面 有许多不同格式的文件 而不同文件的打开方法也不一样 比如最近就有位朋友看见了一个aspx文件 不知道怎么打开 其实 打开aspx文件很简单 只要右键 aspx文件 选
  • 微信小程序退出重新进入时跳转特定页面

    微信小程序退出时会记录当前页面的状态 短时间内再次进入会显示退出前的状态 解决方案 在app js文件中添加onHide方法 onHide方法监听小程序切后台 在app js文件中使用会在每次程序退出时调用 onLaunch functio
  • php 实现抽奖功能

    记录借载 核心算法
  • 华为ipd产品开发流程_IPD模式下的产品开发流程

    IPD产品开发流程体系 IPD产品开发流程体系来源于美国PRTM公司的 产品生命周期优化法 该体系集成了多个迄今为止最好的产品开发实践方法 也就是其来源于实践活动 反过来去指导实践 据PRTM公司统计 通过成功实施IPD 产品投入市场时间缩
  • Java中对象比较的三种方式

    一 针对对象值是否相等的比较 和 equals 的区别 当我们提到比较值的时候 大多数人都会想到 因为在一般情况下 人们对于比较的概念中 数字比较的应用场景出现频率是最多的 首先我们创建一个类 之后新建这个类的对象来进行比较验证 class
  • DDR中的ZQ校准

    转载自https www xuebuyuan com 3233906 html What s the ZQ Calibration command it used to calibrate DRAM Ron ODT values In no
  • Maven程序 tomcat插件安装与web工程启动

    第一步 在mvnrepository库中找到tomcat插件 1 打开mvnrepository官网 搜索 tomcat maven 向下滑动找到 org apache tomcat maven 点进去 2 在这里点第一个 Apache T
  • 基于Matlab的随机森林算法实现(附算法介绍及代码详解)

    本算例完整代码领取方式在文末展示 一 内容提要 在地学领域中 岩性的准确识别对于储层评价来说至关重要 因此 今天笔者想要分享的是随机森林算法在岩性识别中的应用与代码实现 科普中国 科学百科定义 随机森林 Random forest 指的是利
  • 一文学会目前最火热的大数据技术

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由michelmu发表于云 社区专栏 Elasticsearch是当前主流的分布式大数据存储和搜索引擎 可以为用户提供强大的全文本检索能力 广泛应用于日志检索 全站搜索等领域 L
  • C程序运行步骤

    1 首先输入和编辑源程序 生成 c文件 2 对源程序进行编译 编译的作用首先是对源程序进行检查 判定他有无语法方面的错误 生成 obj文件 3 然后进行连接处理 把编译后的模块连接装配起来 再与函数库 例如scanf printf 连接成一
  • Web开发权威指南笔记(一)

    书 Web开发权威指南 美 Chris Aquino Todd Gandee著 为1st实战项目Ottergram练习以及代码整理 全为个人借鉴本书产出 若需要转载请联系通知我 谢谢 最终成果展示 第一章 配置开发环境 文档与参考资料 De
  • 手把手教你从零开发到上线一个答题微信小程序项目实战教程之01.开发环境搭建,微信小程序helloworld

    上线项目演示 微信搜索 放马来答 或扫以下二维码体验 项目大纲 1 开发环境搭建 微信小程序helloworld 2 题目分类页 3 答题页mock数据 4 答题页请求真实数据 pay 5 答题页记录错题 6 结果得分页 pay 7 展示错
  • springmvc url地址配置

    springmvc url地址配置 RequestMapping 注解的概念 通过 RequestMapping将请求地址与方法进行绑定 可以在类级别和方法级别声明 类级别的注解负责将一个特定的请求路径映射到一个控制器上 将url和类绑定
  • django-admin.py startproject HelloWorld创建文件提示invalid syntax

    直接用win R 输入cmd 输入python 然后输入django admin py startproject HelloWorld创建文件提示invalid syntax 解决方法 直接在cmd下执行语句 即可生成Helloworld项
  • MybatisPlus入门和分页和条件查询里面的条件和null值的处理方式和查询投影和查询条件设置和id生成相关和逻辑删除

    MybatisPlus 简化了mybatis之前的在springboot整合MyBatis时需要自己写sql语句在接口中 现在只需要让接口继承BaseMapper lt 实体类 gt 然后在测试类中接口 增删改查方法 即可 不用像sprin
  • MMEditing代码阅读笔记一:main()函数中的build_model()

    MMEditing代码阅读笔记一 main 函数中的build model 小白一枚 编程功底很弱 接触MMEditing这套代码 刚开始小眉头一皱 鼠标见点来点去不知道咋个回事 网上又没有关于MMEditing代码阅读的相关阐述 眉头更皱