BasicSR入门教程

2023-11-03

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 Resolution DIV2K proposed in NTIRE17 (800 train and 100 validation) official website
Classical SR Testing Set5 Set5 test dataset Google Drive / Baidu Drive
Classical SR Testing Set14 Set14 test dataset Google 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: DIV2K
    type: 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.lmdb
    dataroot_lq: datasets/DIV2K/DIV2K_train_LR_bicubic_X4_sub.lmdb
    filename_tmpl: '{}'
    io_backend:
      # type: disk
      # (for lmdb)
      type: lmdb

    gt_size: 128
    use_hflip: true
    use_rot: true

    # data loader
    num_worker_per_gpu: 6
    batch_size_per_gpu: 16
    dataset_enlarge_ratio: 100
    prefetch_mode: ~

  val:
    name: Set5
    type: PairedImageDataset
    dataroot_gt: datasets/Set5/GTmod12
    dataroot_lq: datasets/Set5/LRbicx4
    io_backend:
      type: disk

  val_2:
    name: Set14
    type: PairedImageDataset
    dataroot_gt: datasets/Set14/GTmod12
    dataroot_lq: datasets/Set14/LRbicx4
    io_backend:
      type: disk

# network structures
network_g:
  type: MSRResNet
  num_in_ch: 3
  num_out_ch: 3
  num_feat: 64
  num_block: 16
  upscale: 4

# path
path:
  pretrain_network_g: ~
  param_key_g: params
  strict_load_g: true
  resume_state: ~

# training settings
train:
  ema_decay: 0.999
  optim_g:
    type: Adam
    lr: !!float 2e-4
    weight_decay: 0
    betas: [0.9, 0.99]

  scheduler:
    type: CosineAnnealingRestartLR
    periods: [250000, 250000, 250000, 250000]
    restart_weights: [1, 1, 1, 1]
    eta_min: !!float 1e-7

  # total_iter: 1000000
  total_iter: 10000
  warmup_iter: -1  # no warm up

  # losses
  pixel_opt:
    type: L1Loss
    loss_weight: 1.0
    reduction: mean

# validation settings
val:
  val_freq: !!float 5e3
  save_img: false

  metrics:
    psnr: # metric name, can be arbitrary
      type: calculate_psnr
      crop_border: 4
      test_y_channel: false
      better: higher  # the higher, the better. Default: higher
    niqe:
      type: calculate_niqe
      crop_border: 4
      better: lower  # the lower, the better

# logging settings
logger:
  print_freq: 100
  save_checkpoint_freq: !!float 5e3
  use_tb_logger: true
  wandb:
    project: ~
    resume_id: ~

# dist training settings
dist_params:
  backend: nccl
  port: 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 dataset
    name: Set5
    type: PairedImageDataset
    dataroot_gt: datasets/Set5/GTmod12
    dataroot_lq: datasets/Set5/LRbicx4
    io_backend:
      type: disk
  test_2:  # the 2nd test dataset
    name: Set14
    type: PairedImageDataset
    dataroot_gt: datasets/Set14/GTmod12
    dataroot_lq: datasets/Set14/LRbicx4
    io_backend:
      type: disk
  test_3: # the 3rd test dataset
    name: DIV2K100
    type: PairedImageDataset
    dataroot_gt: datasets/DIV2K/DIV2K_valid_HR
    dataroot_lq: datasets/DIV2K/DIV2K_valid_LR_bicubic/X4
    filename_tmpl: '{}x4'
    io_backend:
      type: disk

# network structures
network_g:
  type: MSRResNet
  num_in_ch: 3
  num_out_ch: 3
  num_feat: 64
  num_block: 16
  upscale: 4

# path
path:
  pretrain_network_g: experiments/001_MSRResNet_x4_f64b16_DIV2K_10k_B16G1_wandb_myfirst/models/net_g_10000.pth
  param_key_g: params
  strict_load_g: true

# validation settings
val:
  save_img: true
  suffix: ~  # add suffix to saved images, if None, use exp name

  metrics:
    psnr: # metric name, can be arbitrary
      type: calculate_psnr
      crop_border: 4
      test_y_channel: false
      better: higher  # the higher, the better. Default: higher
    ssim:
      type: calculate_ssim
      crop_border: 4
      test_y_channel: false
      better: higher

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

4.tensorboard可视化训练过程

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

# logging settings
logger:
  print_freq: 100
  save_checkpoint_freq: !!float 5e3
  use_tb_logger: true # 设置为true
  wandb:
    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即可


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

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

BasicSR入门教程 的相关文章

随机推荐

  • M.2接口NVMe SSD固态硬盘安装win10

    M 2接口NVMe SSD固态硬盘使用了新接口 所以目前市面上的U盘win pe系统基本都不能识别硬盘 无法安装 但 win10原生系统默认能够识别NVMe固态盘的 所以 我们可以从微软官网https www microsoft com z
  • 大数据电商数据仓库系统搭建 附离线安装包

    一 数仓理论 1 数据仓库概念 数据仓库 Data Warehouse 是为企业所有决策制定过程 提供所有系统数据支持的战略集合 通过对数据仓库中数据的分析 可以帮助企业 改进业务流程 控制成本 提高产品质量等 数据仓库 并不是数据的最终目
  • 51单片机——LCD1602液晶显示屏

    如下图 红框就是LCD1602液晶显示屏 他是可插拔的 插上去后数码管就会乱码无效了 因为他两共用了MCU的8个P0口 LCD1602原理图 从上面两幅图可以看出来 LCD1602的LCD D0 LCD D7分别对应MCU的P00 P07
  • PhotoScan空三加密操作流程

    1 空三的原始数据 空三的原始数据主要由四个部分 原始影像 POS信息 像控点点位坐标 像控点现场照片 图片 2 加密流程 在PhotoScan中的加密流程主要是下面几个步骤 2 1导入照片及pos信息 在工作流程中添加照片 点击输入参照
  • windows 2012 证书服务

    文章目录 加密 数字签名 SSL 独立证书服务器 防火墙和路由 web服务器 web服务器使用证书服务 ssl加密 证书转换 openssl将私钥和crt证书合成pfx证书 iis配置ssl 步骤 加密 对称加密是使用的同一把密匙进行加密和
  • network和NetworkManager区别及ifconfig、ip、ethtool命令的使用介绍

    当你进入一个linux操作系统之后 你首先想了解恐怕就是这个环境的网络状态了 如果你使用的linux桌面GUI系统 你可以直接查看桌面上的网络图标 如果你使用的是服务器text文本模式登录 那恭喜你 下面的使用方式可以帮到你 openEul
  • Shell--基础--03--字符串

    Shell 基础 03 字符串 1 介绍 字符串是shell编程中最常用最有用的数据类型 除了数字和字符串 也没啥其它类型好用了 字符串可以用单引号 也可以用双引号 也可以不用引号 1 1 单引号 k5 333 aaa bbbb 单引号字符
  • Java中的基本数据类型byte、short、int和long

    一 byte byte的表示位数为 128 127 当我们byte num01 128时 数字超过的byte的表示范围 会报错 因为128默认为int型 所以我们要遵从 当表示范围大的数据类型转换成表示范围小的数据类型时 要强制转换 byt
  • 初识kafka --安装启动

    初识kafka kafka的安装及启动 kafka 1 官网下载 2 解压 3 安装jdk 4 配置kafka 4 1 配置server properties 4 2 配置zookeeper properties 5 启动kafka Kaf
  • QT for webassembly 技术探索

    前几日 接到上级任务 在不改动C 客户端的基础上 实现在浏览器中打开C 客户端 并进行交互 本想着是天方夜谭 谷歌一番 竟果真有此等尝试 官方参考文档传送门 https wiki qt io Qt for WebAssembly 在下查资料
  • Linux下ffmpeg无法内录声音解决方法

    此内容是转载非原创 感谢作者的付出 谢谢 参考下面这篇文章 http tieba baidu com p 4090696136 和这个链接 https trac ffmpeg org wiki Capture ALSA no1 这个问题基本
  • baxter机器人连接

    1 ctrl alt F3查看机器人的序列号以及IP地址 2 修改baxter sh 注意 baxter sh文件要放在工作空间根目录下 用网线将机器人和自己的电脑连接起来 注意 your ip要改成和baxter机器人ip同频段的但不同通
  • Qt:读取已有数据的Excel文档,并将数据显示在通过QTableWidget绘制的表格中,之后将显示的数据保存成excel格式进行输出(包括表头等内容)

    读取已有数据的Excel文档 并将数据显示在通过QTableWidget绘制的表格中 之后将显示的数据保存成excel格式进行输出 包括表头等内容 UI展示及功能简介 读取 于Mainwindow中 on read clicked属于Pus
  • 【Spring Boot 初识丨七 丨外部化配置(一)】属性详解

    上一篇讲了 Spring Boot 的依赖注入 本篇来讲一讲Spring Boot 外部化配置 Spring Boot 初识 Spring Boot 初识丨一 入门实战 Spring Boot 初识丨二 maven Spring Boot
  • 华为OD机试真题 Java 实现【补种未成活胡杨】【2023 B卷 100分】,附详细解题思路

    目录 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 一 题目描述 近些年来 我国防沙治沙取得显著成果 某沙漠新种植N棵胡杨 编号1 N 排成一排 一个月后 有M棵胡
  • 华为、小米、OPPO、VIVO联手打造“GDSA”对抗谷歌

    本文转载月光博客 华为 小米 OPPO VIVO联手打造 GDSA 对抗谷歌 据路透社报道 中国四大智能手机厂商华为 小米 OPPO 和 Vivo 正联手推出一个对标 Google Play 商店的生态平台 其目的是让非本土开发者能够更容易
  • cmake安装

    http hezuyou blog 163 com blog static 78497415201311734452972 编译安装cmake 下载cmake源码包cmake 2 8 4 tar gz mv到 usr local src目录
  • 如何查看mysql的ip地址_如何查mysql的ip地址

    查看连接mysql的ip地址的方法 直接查询 语法为 select SUBSTRING INDEX host 1 as ip count from information schema processlist 查看连接mysql的ip地址的
  • Date日期类型转换

    1 String 类型转换Date类型 import java text ParseException import java text SimpleDateFormat import java util Date public class
  • BasicSR入门教程

    BasicSR入门教程 1 安装环境 由于安装好的其他环境已经有了pytorch 那么新建环境时直接拷贝该环境就好 复制环境 conda create name my basicsr clone mmediting 克隆项目 git clo