【深度学习】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

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

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

相关文章

嵌入式基础知识-测试基础概念

本篇来介绍嵌入式项目开发中,软件测试的相关基础知识。 1 测试基础知识 测试是指:在规定的条件下对程序进行操作,以发现错误,对软件质量进行评估 测试的对象包括程序、数据和文档 对于测试,并不是只有测试人员才需…

读AI3.0笔记04_视觉识别

1. 两次飞跃 1.1. ConvNets是当今计算机视觉领域深度学习革命的驱动力 1.1.1. 20世纪80年代便由法国计算机科学家杨立昆提出,而他则是受到了福岛邦彦提出的神经认知机(Neocognitron)的启发 1.2. ImageNet竞赛被看作计算机视觉和人工智能进…

Docker 配置 Gitea + Drone 搭建 CI/CD 平台

Docker 配置 Gitea Drone 搭建 CI/CD 平台 配置 Gitea 服务器来管理项目版本 本文的IP地址是为了方便理解随便打的,不要乱点 首先使用 docker 搭建 Gitea 服务器,用于管理代码版本,数据库选择mysql Gitea 服务器的 docker-compose.yml 配…

Kubernetes(K8S)拉取本地镜像部署Pod 实现类似函数/微服务功能(可设置参数并实时调用)

以两数相加求和为例,在kubernetes集群拉取本地的镜像,实现如下效果: 1.实现两数相加求和 2.可以通过curl实时调用,参数以GET方式提供,并得到结果。(类似调用函数) 一、实现思路 需要准备如下的…

分布式websocket IM聊天系统相关问题问答【第九期】

前言 上期视频讲解了自己关于聊天系统的设计的时候出现了一些不一样的声音。不了解情况的可以看上上期视频。这期主要是讨论。IM聊天系统设计方案多。我的先说明一下自己的技术背景互相之间才能更好的理解。 本期对应视频 目前已经写的文章有。并且有对应视频版本。 git项目地…

FPGA中跨时钟域传数据——(1)单bit脉冲

FPGA中跨时钟域传数据——(1)单bit脉冲 亚稳态模型由快时钟传到慢时钟由慢时钟传到快时钟 亚稳态模型 必须在建立时间和保持时间内,数据不变化,否则会产生亚稳态。 由快时钟传到慢时钟 在快时钟里面进行数据展宽(…

牛客周赛 Round 20 解题报告 | 珂学家 | 状压DP/矩阵幂优化 + 前缀和的前缀和

前言 整体评价 这场比赛很特别,是牛客周赛的第20场,后两题难度直线飙升了。 前四题相对简单,E题是道状压题,历来状压题都难,F题压轴难题了,感觉学到了不少。 A. 赝品 先求的最大值 然后统计非最大值的个…

位置无关码PIC详解:原理、动态链接库、代码重定位

静态链接库将代码和数据在编译时整合到可执行文件,使程序独立运行。动态链接库允许在程序运行时加载,而不是在编译时将库的代码和数据静态地合并到可执行文件中。这允许多个程序共享同一份库,减小程序体积。由于动态链接库在编译时并未确定其…

【Electron】Electron是什么

1. Electron是什么 Electron是使用JavaScript、HTML和CSS构建跨平台(Windows、MacOs、Linux)的桌面应用。Electron其实就是一个可以展示网页内容的壳子,相当于一个独立的浏览器,可以提供给你一些接口,去调用系统的资源…

微软 Power Apps model drven app 模型驱动应用使用Plugin插件实现业务流程跳转阶段功能

微软 Power Apps model drven app 模型驱动应用使用Plugin插件实现业务流程跳转阶段功能 模型驱动应用使用插件实现跳转业务流程阶段跳转功能 在实际操作中总会遇到使用业务流程的需求,那么如何使用plugin实现跳转阶段的功能呢 需求背景是主表上有业务流程&#x…

在Python环境中运行R语言的配环境实用教程

前情提要 在做一些生物信息与医学统计的工作,本来偷懒希望只靠python完成的,结果还是需要用R语言,倒腾了一会儿,调成功了,就记录一下这个过程。 我的环境: win10, pycharm, R-4.3.2 首先,我们…

Redis 面试题 | 05.精选Redis高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

muduo网络库剖析——线程Thread类

muduo网络库剖析——线程Thread类 前情从muduo到my_muduo 概要框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否可以高效满足;而作为学习者,我们需要抽取其中的精…

OpenCV书签 #差值哈希算法的原理与相似图片搜索实验

1. 介绍 差值哈希算法(Difference Hash Algorithm,简称dHash) 是哈希算法的一种,主要可以用来做以图搜索/相似图片的搜索工作。 2. 原理 差值哈希算法通过计算相邻像素的差异来生成哈希,即通过缩小图像的每个像素与平…

高效构建Java应用:Maven的使用总结

一、Maven简介和快速入门 1.1 Maven介绍 Maven-Introduction Maven 是一款为 Java 项目构建管理、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 总结:Maven…

excel(wps)之vlookup函数合并sheet数据

VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导入数据等函数功能。功能是按列查找,最终返回该列所需查询列序所对应…

DEB方式安装elastic search7以及使用

参考:https://www.cnblogs.com/anech/p/15957607.html 1、安装elastic search7 #手动下载安装 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.1-amd64.deb wget https://artifacts.elastic.co/downloads/elasticsearch/elastics…

深度学习(4)--Keras安装

目录 Keras安装: 1.1.安装CUDA/cuDDN工具包 1.1.1.安装前准备 1.1.2.安装CUDA 1.1.3.安装cuDDN 1.2.安装Anaconda 1.3.安装tensorflow框架 1.3.1.使用cmd安装 1.3.2.使用Anaconda Prompt安装 1.4.安装Keras框架 1.5.打开jupyter notebook,执行import调用 Keras…

18.鸿蒙HarmonyOS App(JAVA)日期选择器-时间选择器

18.鸿蒙HarmonyOS App(JAVA)日期选择器-时间选择器 点击button按钮触发事件显示月份与获取的时间 Button button3 (Button) findComponentById(ResourceTable.Id_button3);button3.setClickedListener(new Component.ClickedListener() {Overridepublic void onClick(Compon…

基于springboot酒店预订系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 前端技术:AdminLTEjQueryvue.jselementuijsp 服务端技术:springbootmybatis 本系统功能包括: 一、…