【深度学习】BasicSR训练过程记录

news2024/11/28 0:57:12

文章目录

    • 两种灵活的使用场景
    • 项目结构概览
      • 简化的使用方式
    • 项目结构解读
      • 1. 代码的入口和训练的准备工作
      • 2. data和model的创建
        • 2.1 dataloader创建
        • 2.2 model的创建
      • 3. 训练过程
    • 动态实例化的历史演进
      • 1. If-else判断
      • 2. 动态实例化
      • 3. REGISTER注册机制
    • REGISTER注册机制的实现
      • 1. DATASET_REGISTRY
      • 2. ARCH_REGISTRY
      • 3. MODEL_REGISTRY
      • 4. LOSS_REGISTRY
      • 5. METRIC_REGISTRY
    • 简化开发流程
  • 训练codeformer过程的一个小记录

两种灵活的使用场景

BasicSR支持两种灵活的使用场景,以满足用户不同的需求:

  1. 本地克隆仓库使用: 用户可以直接克隆BasicSR的本地仓库,查看完整的代码并进行修改,例如在BasicSR中训练SRGAN或StyleGAN2。安装方式包括先执行git clone,然后运行python setup.py develop/install。详细信息请参考安装指南。修改源码就即时生效,我推荐这个方式。

  2. 作为Python包使用: 用户可以通过pip安装BasicSR作为一个额外的Python包(basicsr)。这样可以方便地利用其提供的训练框架、流程和基本功能,更容易地构建自己的项目。例如,Real-ESRGAN和GFPGAN就是基于basicsr搭建的。安装方式为pip install basicsr

项目结构概览

在深度学习项目中,通常可以分为data、arch(网络结构和forward步骤)、model和training pipeline(训练流程)几个部分。BasicSR旨在简化这些共用的功能,使开发者能够更专注于主要功能的开发而不必重复造轮子。

简化的使用方式

BasicSR提供了basicsr package,通过pip install basicsr安装后,可以方便地使用BasicSR的训练流程和已经开发好的功能。

项目结构解读

1. 代码的入口和训练的准备工作

用户可以通过运行命令python basicsr/train.py -opt options/train/SRResNet_SRGAN/train_MSRResNet_x4.yml开始训练,其中-opt参数指定配置文件的路径。这个命令会调用train_pipeline函数作为训练的入口。

train_pipeline函数中,会完成一系列基础工作,包括解析配置文件、设置分布式训练选项、创建相关文件夹、初始化日志系统等。

2. data和model的创建

2.1 dataloader创建

数据加载器(dataloader)的创建通过create_train_val_dataloader函数实现,其中包括build_datasetbuild_dataloader两个主要函数。build_dataset根据配置文件中的dataset类型创建相应的实例,而build_dataloader则根据传入的dataset和其他参数构建数据加载器。

2.2 model的创建

模型的创建通过build_model函数完成,根据配置文件中的model类型创建相应的实例。在BasicSR框架中,主要有几个类型,如network architecture和loss,都是通过REGISTRY机制实例化的。

3. 训练过程

训练过程是一个循环过程,通过不断喂数据和执行训练步骤来完成。具体的训练过程包括网络的前向传播、损失计算、反向传播和优化器的更新。

动态实例化的历史演进

在网络结构的开发过程中,经历了三个阶段的发展:If-else判断、动态实例化、REGISTER注册机制。

1. If-else判断

最初的方法是通过if-else判断实现动态实例化。在这种方式中,根据配置文件中的参数进行判断,选择实例化哪个网络结构。虽然这种方式能够实现目的,但频繁开发网络结构时会显得繁琐。

2. 动态实例化

为了简化动态实例化的过程,BasicSR引入了动态实例化的方法。使用getattr函数,根据配置文件中指定的Class name,实现了网络结构的自动实例化。这一方法在一定程度上提高了开发效率,但还存在一些问题,如需要手动import网络结构的module。

3. REGISTER注册机制

为解决上述问题,BasicSR引入了REGISTER注册机制,借鉴了fvcore仓库的Registry类。这一机制通过注册机制实现了网络结构的自动化实例化,避免了手动import的问题。注册时进行强制检查,防止同名类的出现,同时减少了冗余的import。

REGISTER注册机制的实现

在REGISTER注册机制中,BasicSR定义了五个REGISTER,分别用于DATASET、ARCH、MODEL、LOSS、METRIC。注册时通过python装饰器,在类或函数前添加注册语句,实现注册。

1. DATASET_REGISTRY

DATASET_REGISTRY用于注册数据集相关的类,约定以_dataset.py结尾。

2. ARCH_REGISTRY

ARCH_REGISTRY用于注册网络结构相关的类,约定以_arch.py结尾。通过约定的文件名和自动扫描import,实现网络结构的自动注册。

3. MODEL_REGISTRY

MODEL_REGISTRY用于注册模型相关的类,约定以_model.py结尾。

4. LOSS_REGISTRY

LOSS_REGISTRY用于注册损失函数相关的类,约定以_loss.py结尾。

5. METRIC_REGISTRY

METRIC_REGISTRY用于注册评估指标相关的函数,约定在__init__.py文件中进行import。

简化开发流程

如今,在BasicSR的新版本中,开发者在新开发网络结构时只需进行两个步骤:写具体的网络结构文件和修改配置文件。其余的工作交由BasicSR的动态实例化和REGISTER注册机制来完成。这一机制的引入使得开发者能够更专注于网络结构的改进,同时提高了项目的整体开发效率。

REGISTER注册机制为BasicSR注入了更为灵活和自动化的元素,为深度学习项目的构建提供了更加便捷的途径。如果你对该机制感兴趣,可以前往BasicSR GitHub仓库查看更多信息。

训练codeformer过程的一个小记录

codeformer使用了BasicSR后端。

启动单机多卡分布式训练:

CUDA_VISIBLE_DEVICES=0,2,3 python -m torch.distributed.launch --nproc_per_node=3 --master_port=4322 basicsr/train.py -opt options/CodeFormer_stage2.yml --launcher pytorch

日志文件查看:

tensorboard --logdir="/ssd/xiedong/CodeFormer/tb_logger/20240116_182107_VQGAN-512-ds32-nearest-stage1" --bind_all

在这里插入图片描述

参考:https://zhuanlan.zhihu.com/p/409675896

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1399369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

反序列化提升刷题(2)

今天的例题&#xff1a; <?phphighlight_file(__FILE__);class ctfshowvip{public $username;public $password;public $code;public function __construct($u,$p){$this->username$u;$this->password$p;}public function __wakeup(){if($this->username! || $thi…

2008年苏州大学837复试机试C语言

2008年苏州大学复试机试C 题目 编写程序充成以下功能: 一、从键盘上输入随机变量x的 10个取样点。X0&#xff0c;X1—X9 的值; 1、计算样本平均值 2、判定x是否为等差数列 3、用以下公式计算z的值(t0.63) 注。请对程序中必要地方进行注释 补充&#xff1a;个人觉得这个题目回…

macOS修改默认时区显示中国时间

默认时区不是中国,显示时间不是中国时间 打开终端 ,删除旧区,并复制新时区到etcreb sudo -rm -rf /etc/localtime sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 重启系统后时间显示为中国时间

R 语言学习 case3:柱状图(ggchart)

主要涉及到对图的优化&#xff0c;使用ggchart工具包 ggchart 链接&#xff1a;https://thomas-neitmann.github.io/ggcharts/index.html step1: 安装工具包 install.packages("ggcharts") install.packages("tidytext")step2: 导入工具包 library(dplyr…

【游戏开发程序员必备技术】

【游戏开发程序员必备技术】 当你披着《英雄联盟》的战袍&#xff0c;挥舞着利剑&#xff0c;与对手不死不休地战斗&#xff1b; 当你驾驶着战车穿过《坦克世界》的烟尘弹雨&#xff0c;掩护基地免受敌人侵袭&#xff1b; 当你完美落地《CS&#xff1a;GO》的翻墙smoke&…

领航分布式消息系统:一起探索Apache Kafka的核心术语及其应用场景

本文是Kafka系列文章的第一篇&#xff0c;将带你了解Kafka的核心术语及其应用场景&#xff0c;后续会逐步探索其各方面的原理及应用场景。下面先看一张大概得简图&#xff0c;涉及Kafka的功能、原理等等&#xff0c;后续不断深入介绍&#xff0c;欢迎关注。 1、什么是消息中间…

unity 编辑器开发一些记录(遇到了更新)

1、封装Toggle组件 在用toggle等会状态改变的组件时&#xff0c;通过select GUILayout.Toggle(select, text, options)通常是这样做&#xff0c;但是往往有些复杂编辑器需求&#xff0c;当select变化时需要进行复杂的计算&#xff0c;所以不希望每帧去计算select应该的信息。…

muduo 网络库源码解析和使用

1. base 模块 1.1 API 1.1.1 eventfd int eventfd(unsigned int initval, int flags);&#xff08;1&#xff09;类似信号量&#xff1b;其内部保存了一个 uint64_t 计数器 count&#xff0c;使用 initval 初始化&#xff1b; &#xff08;2&#xff09;read 没有设置 EFD…

uniapp-app视频层级过高问题

使用v-html动态渲染 参考&#xff1a;uniapp video app端层级过高的问题&#xff0c;滑动渲染问题。_video在app端层级过高-CSDN博客 有想过使用原生&#xff0c;但是太麻烦了&#xff0c;然后换成了弹窗播放&#xff0c;但是动态的src播放失败&#xff0c;错误提示&#xff…

洋州影院购票系统:如何用Java、Spring Boot、Vue和MySQL实现现代化管理

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

【高等数学之牛莱公式】

一、深入挖掘定积分 二、变限积分 三、变限积分的"天然"连续性 四、微积分基本定理 五、定积分基本方法 5.1、换元法 5.2、分部积分法 六、定积分经典结论 七、区间再现公式 八、三角函数积分变换公式 九、周期函数积分变换公式 十、分段函数求定积分

【MySQL】——关系数据库标准语言SQL(大纲)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

HCIA——18实验:NAT

学习目标&#xff1a; NAT 学习内容&#xff1a; NAT 1.要求——基本的 2.模型 3.IP分配、规划、优化 1&#xff09;思路 R2为ISP路由器&#xff0c;其上只能配置ip地址&#xff0c;不得冉进行其他的任何配置—ospf配置 认证 、汇总、沉默接口、加快收敛、缺省路由 PC1-PC2…

如何通过frp、geoserver发布家里电脑的空间数据教程

如何通过家里电脑的geoserver发布空间数据的教程 简介 大家好&#xff0c;我是锐多宝&#xff0c;最近我在开发一个新网站的时候遇到一个需求&#xff0c;这里记录一下以帮助需要用到的网友。 我的需求是&#xff1a;用户通过网站前端上传空间数据后&#xff0c;即可在前端展…

【Spring 篇】MyBatis核心配置文件解密:数据之门的守护精灵

欢迎来到MyBatis的幕后花絮&#xff0c;今天我们将深入解析MyBatis的核心配置文件&#xff0c;这个神秘的数据之门的守护精灵。这份配置文件是连接你的应用程序和数据库之间的纽带&#xff0c;也是整个MyBatis舞台背后的幕后工作者。在这篇博客中&#xff0c;我们将揭开核心配置…

竞赛保研 机器学习股票大数据量化分析与预测系统 - python 竞赛保研

文章目录 0 前言1 课题背景2 实现效果UI界面设计web预测界面RSRS选股界面 3 软件架构4 工具介绍Flask框架MySQL数据库LSTM 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器学习股票大数据量化分析与预测系统 该项目较为新颖&am…

Cortex-M3/M4内核中断及HAL库函数详解(1):中断相关寄存器

0 工具准备 Keil uVision5 Cortex M3权威指南&#xff08;中文&#xff09; Cortex M3与M4权威指南 stm32f407的HAL库工程 STM32F4xx中文参考手册 1 NVIC相关寄存器介绍 在Cortex-M3/M4内核上搭载了一个异常响应系统&#xff0c;支持为数众多的系统异常和外部中断。其中&#…

MySQL运维篇(二)主从复制

一、概述 主从复制是指将主数据库的 DDL 和 DML 操作通过 二进制日志 传到从库服务器中&#xff0c;然后在从库上对这些日志重新执行&#xff08;也叫重做&#xff09;&#xff0c;从而使得从库和主库的数据保持同步。 MySQL 支持一台主库同时向多台从库进行复制&#xff0c; 从…

编译和链接(翻译环境:预编译+编译+汇编+链接​、运行环境)

一、翻译环境和运行环境​ 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。​ 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。​ 第2种是执行环境&#xff0c;它用于实际执行代码。​ VS中编译器&#xff1a;cl.exe &#xff1b;Linux中…

Flink(十三)【Flink SQL(上)SqlClient、DDL、查询】

前言 最近在假期实训&#xff0c;但是实在水的不行&#xff0c;三天要学完SSM&#xff0c;实在一言难尽&#xff0c;浪费那时间干什么呢。SSM 之前学了一半&#xff0c;等后面忙完了&#xff0c;再去好好重学一遍&#xff0c;毕竟这玩意真是面试必会的东西。 今天开始学习 Flin…