当前位置: 首页 > news >正文

【深度学习】BasicSR训练过程记录,如何使用BasicSR训练GAN

文章目录

    • 两种灵活的使用场景
    • 项目结构概览
      • 简化的使用方式
    • 项目结构解读
      • 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
    • 简化开发流程
  • 训练恢复 Resume
  • 训练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仓库查看更多信息。

训练恢复 Resume

训练增加一个参数–auto_resume即可实现:

python train.py -opt options/example_option.yml --auto_resume

训练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

相关文章:

【深度学习】BasicSR训练过程记录,如何使用BasicSR训练GAN

文章目录 两种灵活的使用场景项目结构概览简化的使用方式 项目结构解读1. 代码的入口和训练的准备工作2. data和model的创建2.1 dataloader创建2.2 model的创建 3. 训练过程 动态实例化的历史演进1. If-else判断2. 动态实例化3. REGISTER注册机制 REGISTER注册机制的实现1. DAT…...

喜讯 | 华院计算摘得“2023大数据产业年度创新技术突破”奖

2024年1月17日, 由数据猿和上海大数据联盟主办,上海市经济和信息化委员会、上海市科学技术委员会指导的“第六届金猿季&魔方论坛——大数据产业发展论坛”在上海市四行仓库举行。论坛以“小趋势大未来”为主题,围绕大数据产业的各个领域展…...

stm32高级定时器死区时间

为什么要有死区时间 高级控制定时器(TIM1和TIM8)能够输出两路互补信号,并且能够管理输出的瞬时关断和接通。这段时间通常被称为死区,用户应该根据连接的输出器件和它们的特性(电平转换的延时、电源开关的延时等)来调整死区时间。 死区发生器 在生成的参…...

Python项目——久坐提醒定时器(PySide6)编写

1、介绍 使用Python编写一个久坐提醒软件。功能: 设置工作时间。设置休息时间。选择休息时是否播放音乐。休息时,软件置顶,且不能关闭。 2、工具 语言:python3.11UI设计工具:Qt designer编译器:PyCharm包…...

Linux,常见的强制退出/结束命令(ctr+c/ctr+d/:q/exit)

PS: 一直搞不清楚,这四个命令区别,干脆每个都输入一遍,逮着哪个算哪个。 1. CtrlC用途: 中断正在运行的程序或命令。(例如输入Ping命令一直处于等待状态,就像是进程一直等待干脆杀死&#xff0…...

检查一个Java List是否包含某个JavaBean对象的特定值,并且获取这个值

import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { // 创建一个新的ArrayList List<MyBean> list new ArrayList<MyBean>(); // 添加一些元素 list.add(new MyBean("apple", …...

浮点数详解

目录 1.概述 2.浮点数的编码方式 2.1.float类型的IEEE编码 2.2.double类型的IEEE编码 2.3.现场问题 2.4.总结 1.概述 计算机也需要运算和存储数学中的实数。在计算机的发展过程中&#xff0c;曾产生过多种存储实数的方式&#xff0c;有的现在已经很少使用了。不管如何存储…...

LED流水灯

这段代码是用于STM32F10x系列微控制器的程序&#xff0c;主要目的是初始化GPIOA并使其所有引脚按照特定的模式进行闪烁。下面是对这段代码的逐行解释&#xff1a; #include "stm32f10x.h"&#xff1a;这一行包含了STM32F10x系列微控制器的设备头文件。这个头文件包含…...

MySQL-B-tree和B+tree区别

B-tree&#xff08;平衡树&#xff09;和Btree&#xff08;平衡树的一种变种&#xff09;是两种常见的树状数据结构&#xff0c;用于构建索引以提高数据库的查询性能。它们在一些方面有相似之处&#xff0c;但也有一些关键的区别。以下是B-tree和Btree的主要区别&#xff1a; …...

架构篇08:架构设计三原则

文章目录 合适原则简单原则演化原则小结 成为架构师是每个程序员的梦想&#xff0c;但并不意味着把编程做好就能够自然而然地成为一个架构师&#xff0c;优秀程序员和架构师之间还有一个明显的鸿沟需要跨越&#xff0c;这个鸿沟就是“不确定性”。 对于编程来说&#xff0c;本…...

基于SpringBoot Vue汽车租赁系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…...

idea带的maven在SpringBoot下载jar包出错、下载jar包速度慢

找到idea安装目录 /IntelliJ IDEA/plugins/maven/lib/maven3/conf/settings.xml 搜索:mirrors 添加到mirrors标签里。&#xff08;默认下载包是从国外拉取&#xff0c;速度慢&#xff0c;现在替换成国内阿里的链接&#xff09; <mirror><id>central</id><…...

datasets的一些使用技巧

#加载某类文件作为数据集 dataset load_dataset("json", data_files"./train_pair_1w.json", split"train") #加载数据集中的子数据集 datasets load_dataset("clue",name"afqmc",#trust_remote_codeTrue) train_datas…...

react 实现页面状态缓存(keep-alive)

前言&#xff1a; 因为 react、vue都是单页面应用&#xff0c;路由跳转时&#xff0c;就会销毁上一个页面的组件。但是有些项目不想被销毁&#xff0c;想保存状态。 比如&#xff1a;h5项目跳转其他页面返回时&#xff0c;页面状态不丢失。设想一个 页面我滑倒了中间&#xf…...

spring和springboot、springMVC有什么区别?

前言 大家好&#xff0c;我是chowley&#xff0c;今天来聊一下&#xff0c;刚在面试中被问到的一个经典问题 spring和springboot、springMVC有什么区别&#xff1f; Spring、Spring Boot 和 Spring MVC 是 Spring Framework 生态中的不同组件&#xff0c;各自有不同的角色和…...

centos 启动nacos pg版本

背景&#xff1a;支持国产化需求&#xff0c;不再使用mysql 1.修改插件 git clone https://github.com/wuchubuzai2018/nacos-datasource-extend-plugins.git cd nacos-datasource-extend-plugins/nacos-postgresql-datasource-plugin-ext mvn package编译成功后&#xff0c;…...

实验:MySQL 客户端SocketTimeout 抓包分析

实验准备 服务端环境准备 服务器信息 阿里云 99 大洋白嫖机 $ cat /proc/version Linux version 5.15.0-83-generic (builddlcy02-amd64-027) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #92-Ubuntu SMP Mon Aug 14 09:30:42 UT…...

rocketmq双主双从部署+dashbord

1、主机规划 主机节点地址主机Anamesrv192.168.2.228:9876主机Abroker-a192.168.2.228:10911主机Abroker-b192.168.2.228:11911主机Bnamesrv192.168.2.229:9876主机Bbroker-c192.168.2.229:10911主机Bbroker-d192.168.2.229:11911 2、两台主机都需要执行&#xff0c;创建mq需…...

OpenHarmony当前进展和未来趋势

操作系统自20世纪50年代诞生&#xff0c;经历了从专用操作系统到通用操作系统的转变。整体可以将操作系统的发展历史分为3个阶段&#xff1a;PC时代、移动互联网时代、万物互联时代。 PC时代主要以计算机为主&#xff0c;用户规模从1970年的10亿增长到1990年的30亿。这一时代诞…...

php学习

php基础语法 一 php程序 1.php标记 开始标记<?php 和结束标记 ?>中间写 PHP 代码 当解析一个文件时&#xff0c;PHP 会寻找起始和结束标记&#xff0c;也就是告诉php 开始和停止解析二者之间的代码。此种解析方式使得PHP 可以被嵌入到各种不同的文档中去&#xff…...

Rust DLL注入技术深度解析:Rust-for-Malware-Development完整实现指南

Rust DLL注入技术深度解析&#xff1a;Rust-for-Malware-Development完整实现指南 【免费下载链接】Rust-for-Malware-Development Rust for malware Development is a repository for advanced Red Team techniques and offensive malwares & Ransomwares, focused on Rus…...

Graphormer开源模型部署教程:3.7GB小模型+RTX4090一键启动分子建模服务

Graphormer开源模型部署教程&#xff1a;3.7GB小模型RTX4090一键启动分子建模服务 1. 项目介绍 Graphormer是一种基于纯Transformer架构的图神经网络模型&#xff0c;专门为分子图&#xff08;原子-键结构&#xff09;的全局结构建模与属性预测而设计。这个3.7GB的小模型在OG…...

C-index避坑指南:生存分析中90%人会犯的5个评估错误

C-index避坑指南&#xff1a;生存分析中90%人会犯的5个评估错误 在临床研究和生物统计领域&#xff0c;C-index&#xff08;Harrells concordance index&#xff09;作为评估生存分析模型预测性能的核心指标&#xff0c;其正确计算与解读直接影响研究结论的可靠性。然而&#x…...

告别繁琐配置:用Docker一键搞定RKNN模型转换环境(Windows/Linux/Mac通用)

跨平台RKNN模型转换实战&#xff1a;Docker化环境搭建与高效部署指南 当AI开发者需要在不同设备上部署模型时&#xff0c;环境配置往往成为最耗时的环节。特别是在使用Rockchip NPU进行边缘计算时&#xff0c;传统的虚拟机配置、交叉编译等方法既繁琐又容易出错。本文将介绍如何…...

AI 开发实战:实验和试点项目怎么记录,才不会做完就散

AI 开发实战&#xff1a;实验和试点项目怎么记录&#xff0c;才不会做完就散 一、这个问题为什么值得专门拿出来做&#xff1f; 在 AI 工程落地里&#xff0c;真正拖慢团队的往往不是模型本身&#xff0c;而是流程和协作方式没有跟上。 围绕“实验和试点项目怎么记录&#xff0…...

大数据在电力行业应用案例解析 -【电力技术】(25)RPA 在电力业扩报装中的自动化应用与实现

目录 一、引言:业扩报装的效率瓶颈 二、RPA 技术特点与电力适用性 三、RPA 在业扩报装中的四大核心应用场景 3.1 预受理自动审核 3.2 批量用户信息自动导入 3.3 勘查工单自动派工 3.4 流程自动流转与归档 四、RPA 实施流程(标准化) 五、典型应用成效 六、完整可运行…...

大多数人用AI还是“一次性聊天” Claude Cowork却让你把重复工作彻底扔上自动驾驶

花大价钱开了Claude Pro&#xff0c;每天扔进去一句“帮我写文案”“帮我优化内容”&#xff0c;结果用完就关窗口&#xff0c;下次还是从零开始&#xff1f;重复任务永远在偷走你的注意力&#xff0c;脑子里永远挂着“待办事项”这个隐形标签&#xff0c;效率看起来提升了&…...

太阳能家用电池电源市场:预计到2032年将达到98.8亿美元

在全球能源转型与地缘政治风险交织的背景下&#xff0c;家庭能源自主性需求正催生一个高速增长的细分市场。据 恒州诚思&#xff08;YH Research&#xff09; 《全球太阳能家用电池电源市场报告2026-2032》预测&#xff0c;2032年该市场规模将达98.8亿美元&#xff0c;2026-203…...

AI Agent与传统RPA工具有什么本质区别?2026深度解析企业级智能体进化路径

在2026年3月下旬的当下&#xff0c;全球自动化技术正经历着从“按图索骥”到“自主导航”的范式跃迁。随着GPT-5.4等具备原生电脑操作能力的大模型发布&#xff0c;以及开源项目OpenClaw在过去一周内的爆发式增长&#xff0c;**AI Agent与传统RPA工具有什么本质区别&#xff1f…...

Linux 内核中的信号处理:从发送到捕获

Linux 内核中的信号处理&#xff1a;从发送到捕获 引言 作为一名深耕操作系统和嵌入式开发的工程师&#xff0c;我深知通知机制的重要性。在系统开发中&#xff0c;及时的通知可以帮助系统快速响应事件。在 Linux 内核中&#xff0c;信号是一种重要的进程间通信机制&#xff0c…...