BasicSR入门教程

news/2024/5/20 0:50:41/文章来源:https://blog.csdn.net/weixin_43800577/article/details/127338955

BasicSR入门教程

1.安装环境

由于安装好的其他环境已经有了pytorch,那么新建环境时直接拷贝该环境就好

//复制环境
conda create --name my-basicsr --clone mmediting

克隆项目

git clone https://github.com/XPixelGroup/BasicSR.git

安装依赖包

cd BasicSR
pip install -r requirements.txt

在BasicSR的根目录下安装BasicSR

python setup.py develop

验证BasicSR是否安装成功

import basicsr

通过本地clone安装成功的时候,此时使用pip list 命令查看BasicSR 路径

pip list

2.准备数据集

常用的图像超分数据集如下:

name数据集数据描述下载
2K ResolutionDIV2Kproposed in NTIRE17 (800 train and 100 validation)official website
Classical SR TestingSet5Set5 test datasetGoogle Drive / Baidu Drive
Classical SR TestingSet14Set14 test datasetGoogle Drive / Baidu Drive

DIV2K下载地址:https://data.vision.ee.ethz.ch/cvl/DIV2K/

Set5下载地址:https://drive.google.com/drive/folders/1B3DJGQKB6eNdwuQIhdskA64qUuVKLZ9u

Set14下载地址:https://drive.google.com/drive/folders/1B3DJGQKB6eNdwuQIhdskA64qUuVKLZ9u

因为DIV2K 数据集是2K 分辨率的(比如: 2048×1080), 而我们在训练的时候往往并不要那么大(常见的是128×128 或者192×192 的训练patch). 因此我们可以先把2K 的图片裁剪成有overlap 的480×480 的子图像块. 然后再由dataloader 从这个480×480 的子图像块中随机crop 出128×128 或者192×192 的训练patch。运行脚本extract_subimages.py。

cd BasicSR
python scripts/data_preparation/extract_subimages.py

若需要使用LMDB,则需要制作LMDB,数据准备运行脚本:

python scripts/data_preparation/create_lmdb.py --dataset div2k

数据集的目录结构如下

3.修改配置文件

创建新的训练配置文件options/train/SRResNet_SRGAN/my_train_MSRResNet_x4.yml,内容如下

# Modified SRResNet w/o BN from:
# Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network# ----------- Commands for running
# ----------- Single GPU with auto_resume
# PYTHONPATH="./:${PYTHONPATH}"  CUDA_VISIBLE_DEVICES=0 python basicsr/train.py -opt options/train/SRResNet_SRGAN/train_MSRResNet_x4.yml --auto_resume# general settings
name: 001_MSRResNet_x4_f64b16_DIV2K_10k_B16G1_wandb_myfirst
model_type: SRModel
scale: 4
num_gpu: 1  # set num_gpu: 0 for cpu mode
manual_seed: 0# dataset and data loader settings
datasets:train:name: DIV2Ktype: PairedImageDataset# dataroot_gt: datasets/DF2K/DIV2K_train_HR_sub# dataroot_lq: datasets/DF2K/DIV2K_train_LR_bicubic_X4_sub# meta_info_file: basicsr/data/meta_info/meta_info_DIV2K800sub_GT.txt# dataroot_gt: datasets/DIV2K/DIV2K_train_HR_sub# dataroot_lq: datasets/DIV2K/DIV2K_train_LR_bicubic_X4_sub# meta_info_file: basicsr/data/meta_info/meta_info_DIV2K800sub_GT.txt# (for lmdb)dataroot_gt: datasets/DIV2K/DIV2K_train_HR_sub.lmdbdataroot_lq: datasets/DIV2K/DIV2K_train_LR_bicubic_X4_sub.lmdbfilename_tmpl: '{}'io_backend:# type: disk# (for lmdb)type: lmdbgt_size: 128use_hflip: trueuse_rot: true# data loadernum_worker_per_gpu: 6batch_size_per_gpu: 16dataset_enlarge_ratio: 100prefetch_mode: ~val:name: Set5type: PairedImageDatasetdataroot_gt: datasets/Set5/GTmod12dataroot_lq: datasets/Set5/LRbicx4io_backend:type: diskval_2:name: Set14type: PairedImageDatasetdataroot_gt: datasets/Set14/GTmod12dataroot_lq: datasets/Set14/LRbicx4io_backend:type: disk# network structures
network_g:type: MSRResNetnum_in_ch: 3num_out_ch: 3num_feat: 64num_block: 16upscale: 4# path
path:pretrain_network_g: ~param_key_g: paramsstrict_load_g: trueresume_state: ~# training settings
train:ema_decay: 0.999optim_g:type: Adamlr: !!float 2e-4weight_decay: 0betas: [0.9, 0.99]scheduler:type: CosineAnnealingRestartLRperiods: [250000, 250000, 250000, 250000]restart_weights: [1, 1, 1, 1]eta_min: !!float 1e-7# total_iter: 1000000total_iter: 10000warmup_iter: -1  # no warm up# lossespixel_opt:type: L1Lossloss_weight: 1.0reduction: mean# validation settings
val:val_freq: !!float 5e3save_img: falsemetrics:psnr: # metric name, can be arbitrarytype: calculate_psnrcrop_border: 4test_y_channel: falsebetter: higher  # the higher, the better. Default: higherniqe:type: calculate_niqecrop_border: 4better: lower  # the lower, the better# logging settings
logger:print_freq: 100save_checkpoint_freq: !!float 5e3use_tb_logger: truewandb:project: ~resume_id: ~# dist training settings
dist_params:backend: ncclport: 29500

可以开始训练

python basicsr/train.py -opt options/train/SRResNet_SRGAN/my_train_MSRResNet_x4.yml

训练完成后,结果会保存在results文件夹下的001_MSRResNet_x4_f64b16_DIV2K_10k_B16G1_wandb_myfirst文件夹中

创建新的测试配置文件options/test/SRResNet_SRGAN/my_test_MSRResNet_x4.yml,内容如下

# ----------- Commands for running
# ----------- Single GPU
# PYTHONPATH="./:${PYTHONPATH}"  CUDA_VISIBLE_DEVICES=0 python basicsr/test.py -opt options/test/SRResNet_SRGAN/test_MSRResNet_x4.yml# general settings
name: 001_MSRResNet_x4_f64b16_DIV2K_10k_B16G1_wandb_myfirst
model_type: SRModel
scale: 4
num_gpu: 1  # set num_gpu: 0 for cpu mode
manual_seed: 0# test dataset settings
datasets:test_1:  # the 1st test datasetname: Set5type: PairedImageDatasetdataroot_gt: datasets/Set5/GTmod12dataroot_lq: datasets/Set5/LRbicx4io_backend:type: disktest_2:  # the 2nd test datasetname: Set14type: PairedImageDatasetdataroot_gt: datasets/Set14/GTmod12dataroot_lq: datasets/Set14/LRbicx4io_backend:type: disktest_3: # the 3rd test datasetname: DIV2K100type: PairedImageDatasetdataroot_gt: datasets/DIV2K/DIV2K_valid_HRdataroot_lq: datasets/DIV2K/DIV2K_valid_LR_bicubic/X4filename_tmpl: '{}x4'io_backend:type: disk# network structures
network_g:type: MSRResNetnum_in_ch: 3num_out_ch: 3num_feat: 64num_block: 16upscale: 4# path
path:pretrain_network_g: experiments/001_MSRResNet_x4_f64b16_DIV2K_10k_B16G1_wandb_myfirst/models/net_g_10000.pthparam_key_g: paramsstrict_load_g: true# validation settings
val:save_img: truesuffix: ~  # add suffix to saved images, if None, use exp namemetrics:psnr: # metric name, can be arbitrarytype: calculate_psnrcrop_border: 4test_y_channel: falsebetter: higher  # the higher, the better. Default: higherssim:type: calculate_ssimcrop_border: 4test_y_channel: falsebetter: higher

测试完成后,结果会保存在results文件夹下的001_MSRResNet_x4_f64b16_DIV2K_10k_B16G1_wandb_myfirst文件夹中

4.tensorboard可视化训练过程

在用于训练的yml配置文件中设置tensorboard开启

# logging settings
logger:print_freq: 100save_checkpoint_freq: !!float 5e3use_tb_logger: true # 设置为truewandb:project: ~resume_id: ~

在命令行输入以下命令,就可以在服务器的浏览器中查看:

tensorboard --logdir tb_logger --port 5500 --bind_all

tensorboard 在本机可以方便使用,但使用服务器时需要设置一下。

在Windows系统装一个Xshell,在文件->属性->ssh->隧道->添加,类型local,源主机填127.0.0.1(意思是本机),端口设置一个,比如12345,目标主机为服务器,目标端口一般是5500,如果5500被占了可以改为其他端口。

在本地浏览器中输入127.0.0.1:12345即可


最后感谢小伙伴们的学习噢~

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

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

相关文章

MyBatis--缓存

MyBatis的缓存 MyBatis的一级缓存 一级缓存是SqlSession级别的,通过 同一个SqlSession 查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问 import com.bijing.mybatis.mapper.CacheMapper; im…

二手商品交易网站

摘 要 本论文主要论述了如何使用JAVA语言开发一个二手商品交易网站,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述二手商品交易网站的当前背景以及系统开发的目…

大话西游服务端开服架设服务器搭建教程

大话西游服务端开服架设服务器搭建教程 大话西游一款回合制角色扮演手游,游戏内包含人族、仙族、魔族、鬼族四大种族,每个种族各有4个角色可供玩家选择。相信很多玩这款游戏的玩家也有不少想知道自己怎么可以开一个sf,自己当服主&#xff0c…

教学设计题-教学目标

(1)知识与技能目标 基础知识与基本技能 了解/理解(概念,性质) 掌握(方法,过程) 运用/会(----)剞劂问题 (2)过程与方法目标 通过(观察…

Linux篇【2】:shell命令初步认识,Linux权限(上)

目录 1、shell命令以及运行原理 2、Linux权限的概念 3、Linux权限管理 3.1、文件访问者的分类(人) 3.2、文件类型和文件权限属性(事物属性) 1、shell命令以及运行原理 Linux严格意义上说的是一个操作系统,我们称之为" 核心(kernel) " ,但…

Jenkins配置用户权限

前几篇讲了一下有关Jenkins的一系列的操作: 在linux上搭建jenkins,并进行所需的配置 Jenkins安装插件一直失败,报错SunCertPathBuilderException的解决方案 jenkins配置拉取git远程仓库的代码并进行自动化构建部署 怎么修改Jenkins的默认…

力扣周赛314-矩阵中和能被 K 整除的路径(动态规划)

解题思路:方案数问题动态规划问题。由于只能往下或右走,递归思考,每一点a[i][j]的方案数必由其上方a[i-1][j]或左侧a[i][j-1]得到。问题关键点在于统计的是能被K整除的路径数目,看一下示例1,如果走到(3,3&a…

Kafka由浅入深(二)—— 生产者工作原理

1、生产者的流程架构 生产者主体逻辑整个生产者客户端由两个线程协调运行,这两个线程分别为主线程和Sender 线程(发送线程)。 1.1 主线程: 在主线程中由KafkaProducer 创建消息,然后通过可能的拦截器、序列化器和分区…

带你吃透Servlet核心编程下篇(完整图文教程)

本文被 系统学习JavaWeb 收录点击订阅专栏 文章目录1 Http协议1.1 什么是 HTTP 协议1.2 GET请求与POST请求1.3 响应的HTTP协议格式1.4 MIME数据类型2 HttpServletRequest类2.1 HttpServletRequest说明及常用方法2.2 HttpServletRequest类演示2.3 获取请求表单中的参数值&#x…

车车基础知识扫盲

排量 排量是指发动机气缸工作容积之和。所谓工作容积就是活塞在一个冲程内经过的区域的体积。气缸的总容积减去活塞的工作容积,剩下的就是压缩容积,压缩容积是用来燃烧的。 排量的单位是升(L),常见的排量的标识有三种,T&#xff…

SpringMvc模块

SpingMVC 模块 简介 Spring MVC是一种基于MVC架构模式的轻量级Web框架。 SpringMVC处理过程 Spring MVC的处理过程: DispatcherServlet 接收用户的请求找到用于处理request的 handler 和Interceptors,构造成 HandlerExecutionChain执行链找到 handle…

宏任务与微任务

原文:做一些动图,学习一下EventLoop (https://juejin.cn/post/6969028296893792286)一、任务队列JavaScript 是单线程执行的语言, 在同一时间只能干一件事情。如果前面的任务很耗时后面的任务就会一直等待,为了解决这个问题,js中出现了同步任务和异步任务 1.1 同步任务在主…

Linux服务器部署Mysql5.7全过程记录

1、先下载安装包文件 mysql-5.7.27-linux-glibc2.12-x86_64.tar Mysql5.7.27 Linux安装包 链接:https://pan.baidu.com/s/1p4KmDp5O2bGJLXUHOHMQFQ 提取码:4692 2、解压 cd /usr/local 切换到安装包所在目录 tar -zxvf mysql-5.7.30-l…

【数据获取】可以公开获取到的百度迁徙数据

百度迁徙数据是一种较为常用的互联网数据,在之前的文章里小编已经讲了百度迁徙数据是什么、怎么获取、该如何处理、怎么用它做和弦图这些内容。但是其中数据的获取部分一直没有详细讲解,那么该如何获取它呢? 今天,就告诉大家一个…

教学设计题-教学过程

空间中直线与平面之间的位置关系 生活中的三种位置关系的实例 直线在平面内:开门关门时,门轴所在的直线在门所在平面内 直线与平面相交:操场上,升旗的旗杆所在直线与地面所在平面相交 直线与平面平行:黑板的一条边所在…

护肤 第三课

皮肤的生长周期一般是1-2个月 所以护肤品想要其效果 一般就是这个周期才会有效果 外用护肤品只能渗透到表皮层或者真皮层的表层,只有医疗美容的方法才有机会到真皮层 黑色素 黑色素细胞在基底层 黑色素细胞能产生黑色素 黑色素的作用:吸收和散射紫外线…

A Survey on Big Data Market: Pricing, Trading and Protection

基于大数据市场:定价、交易、保护的研究 作者:FAN LIANG, WEI YU , DOU AN, QINGYU YANG, XINWEN FU, AND WEI ZHAO 文章目录基于大数据市场:定价、交易、保护的研究Abstract1.Intro2.大数据的基本概念2.1.大数据的定义2.2.大数据的好处和挑…

【23秋招c++后端面试技术突围】mysql通俗易懂的数据库连接池原理及模拟实现

什么是数据库连接池? 当系统使用JDBC技术访问数据库时会创建一个connection对象,而该对象的创建过程是非常消耗资源的,并且创建对象的时间也特别长,假设系统一天有1万次的访问量,那么一天就会有1万个connection对象被…

Acetal-NHS (SDMB),乙缩醛-琥珀酰亚胺酯

An English name:Acetal-NHS (SDMB) Chinese name:乙缩醛-琥珀酰亚胺酯 Item no:X-GF-0136 Density: PEG density is approximately 1.125 g/mL Molecular formula: Physical form:PEG products generally appear…

CMake中find_file的使用

CMake中的命令find_file用于查找指定文件(named file)的完整路径&#xff0c;其格式如下&#xff1a;将创建一个由<VAR>命名的缓存条目即cache变量&#xff0c;将<VAR>的值存入CMakeCache.txt中);或如果指定了NO_CACHE&#xff0c;由<VAR>命名的普通变量来存…