SwinIR实战:详细记录SwinIR的训练过程

SwinIR实战:详细记录SwinIR的训练过程。

论文地址:https://arxiv.org/pdf/2108.10257.pdf

预训练模型下载:https://github.com/JingyunLiang/SwinIR/releases

训练代码下载:https://github.com/cszn/KAIR

测试代码:https://github.com/JingyunLiang/SwinIR

论文翻译:https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/124434886

测试:https://wanghao.blog.csdn.net/article/details/124517210

在写这边文章之前,我已经翻译了论文,讲解了如何使用SWinIR进行测试?

接下来,我们讲讲如何SwinIR完成训练,有于作者训练了很多任务,我只复现其中的一种任务。

下载训练代码

地址:https://github.com/cszn/KAIR

这是个超分的库,里面包含多个超分的模型,比如SCUNet、VRT、SwinIR、BSRGGAN、USRNet等模型。

face_13_comparison

face_04_comparison

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B5Md9i7H-1651410061139)(https://gitee.com/wanghao1090220084/cloud-image/raw/master/img/face_09_comparison.png)]

下载后解压,训练SwinIR的REANDME.md,路径:./docs/README_SwinIR.md

数据集

训练和测试集可以下载如下。 请将它们分别放在 trainsetstestsets 中。

任务训练集测试集
classical/lightweight image SRDIV2K (800 training images) or DIV2K +Flickr2K (2650 images)set5 + Set14 + BSD100 + Urban100 + Manga109 download all
real-world image SRSwinIR-M (middle size):
DIV2K (800 training images) +Flickr2K (2650 images) + OST (10324 images,sky,water,grass,mountain,building,plant,animal)
SwinIR-L (large size):
DIV2K + Flickr2K + OST + WED(4744 images) + FFHQ (first 2000 images, face) + Manga109 (manga) + SCUT-CTW1500 (first 100 training images, texts)
RealSRSet+5images
color/grayscale image denoisingDIV2K (800 training images) + Flickr2K (2650 images) + BSD500 (400 training&testing images) + WED(4744 images)grayscale: Set12 + BSD68 + Urban100
color: CBSD68 + Kodak24 + McMaster + Urban100 download all
JPEG compression artifact reductionDIV2K (800 training images) + Flickr2K (2650 images) + BSD500 (400 training&testing images) + WED(4744 images)grayscale: Classic5 +LIVE1 download all

我下载了DIV2K数据集和 Flickr2K数据集,DIV2K大小有7G+,Flickr2K约20G。如果网速不好建议只下载DIV2K。

注:在选用classical任务,做训练时,只能使用DIV2K或者Flickr2K,不能把两种数据集放在一起训练,否则就出现维度对不上的情况,如下图:

image-20220501075409750

暂时没有找到原因。

构建测试集,测试集的路径如下图:

image-20220501200746759

由于表格中的测试集放在google,我不能下载,但是SwinIR的测试代码中有测试集,代码链接:https://github.com/JingyunLiang/SwinIR,下载下来直接复制到testsets文件夹下面。

构建训练集,将下载下来的DIV2K解压。将DIV2K_train_HR复制到trainsets文件夹下面,将其改为trainH。

image-20220501201617513

将DIV2K_train_LR_bicubic文件夹的X2文件夹复制到trainsets文件夹下面,然后将其改名为trainL。

image-20220501202215478

到这里,数据集部分就完成了,接下来开始训练。

训练

首先,打开options/swinir/train_swinir_sr_classical.json文件,查看里面的内容。

"task": "swinir_sr_classical_patch48_x2" 

训练任务的名字。

"gpu_ids": [0,1]

选择GPU的ID,如果只有一快GPU,改为 [0]。如果有更多的GPU,直接往后面添加即可。

"scale": 2  //2,3,48

放大的倍数,可以设置为2、3、4、8.

"datasets": {
  "train": {
    "name": "train_dataset"           // just name
    , "dataset_type": "sr"         // "dncnn" | "dnpatch" | "fdncnn" | "ffdnet" | "sr" | "srmd" | "dpsr" | "plain" | "plainpatch" | "jpeg"
    , "dataroot_H": "trainsets/trainH"// path of H training dataset. DIV2K (800 training images)
    , "dataroot_L": "trainsets/trainL"              // path of L training dataset

    , "H_size": 96                   // 96/144|192/384 | 128/192/256/512. LR patch size is set to 48 or 64 when compared with RCAN or RRDB.

    , "dataloader_shuffle": true
    , "dataloader_num_workers": 4
    , "dataloader_batch_size": 1      // batch size 1 | 16 | 32 | 48 | 64 | 128. Total batch size =4x8=32 in SwinIR
  }
  , "test": {
    "name": "test_dataset"            // just name
    , "dataset_type": "sr"         // "dncnn" | "dnpatch" | "fdncnn" | "ffdnet" | "sr" | "srmd" | "dpsr" | "plain" | "plainpatch" | "jpeg"
    , "dataroot_H": "testsets/Set5/HR"  // path of H testing dataset
    , "dataroot_L": "testsets/Set5/LR_bicubic/X2"              // path of L testing dataset

  }
}

上面的参数是对数据集的设置。
“H_size”: 96 ,HR图像的大小,和下面的img_size有对应关系,大小设置为img_size×scale。

“dataloader_num_workers”: 4,CPU的核数设置。

“dataloader_batch_size”: 32 ,设置训练的batch_size。

dataset_type:sr,指的是数据集类型SwinIR。

"netG": {
    "net_type": "swinir" 
    , "upscale": 2                      // 2 | 3  | 4 | 8
    , "in_chans": 3 
    , "img_size": 48                    // For fair comparison, LR patch size is set to 48 or 64 when compared with RCAN or RRDB.
    , "window_size": 8  
    , "img_range": 1.0 
    , "depths": [6, 6, 6, 6, 6, 6] 
    , "embed_dim": 180 
    , "num_heads": [6, 6, 6, 6, 6, 6]
    , "mlp_ratio": 2 
    , "upsampler": "pixelshuffle"        // "pixelshuffle" | "pixelshuffledirect" | "nearest+conv" | null
    , "resi_connection": "1conv"        // "1conv" | "3conv"
    , "init_type": "default"
  }

upscale:2,放大的倍数,和上面的scale参数对应。

img_size:48,这里可以设置两个数值,48和64。和测试的training_patch_size参数对应。

官方提供的指令是基于DDP方式,比较复杂一下,好处是速度快。如下:

# 001 Classical Image SR (middle size)
python -m torch.distributed.launch --nproc_per_node=8 --master_port=1234 main_train_psnr.py --opt options/swinir/train_swinir_sr_classical.json  --dist True

# 002 Lightweight Image SR (small size)
python -m torch.distributed.launch --nproc_per_node=8 --master_port=1234 main_train_psnr.py --opt options/swinir/train_swinir_sr_lightweight.json  --dist True

# 003 Real-World Image SR (middle size)
python -m torch.distributed.launch --nproc_per_node=8 --master_port=1234 main_train_psnr.py --opt options/swinir/train_swinir_sr_realworld_psnr.json  --dist True
# before training gan, put the PSNR-oriented model into superresolution/swinir_sr_realworld_x4_gan/models/
python -m torch.distributed.launch --nproc_per_node=8 --master_port=1234 main_train_psnr.py --opt options/swinir/train_swinir_sr_realworld_gan.json  --dist True

# 004 Grayscale Image Deoising (middle size)
python -m torch.distributed.launch --nproc_per_node=8 --master_port=1234 main_train_psnr.py --opt options/swinir/train_swinir_denoising_gray.json  --dist True

# 005 Color Image Deoising (middle size)
python -m torch.distributed.launch --nproc_per_node=8 --master_port=1234 main_train_psnr.py --opt options/swinir/train_swinir_denoising_color.json  --dist True

# 006 JPEG Compression Artifact Reduction (middle size)
python -m torch.distributed.launch --nproc_per_node=8 --master_port=1234 main_train_psnr.py --opt options/swinir/train_swinir_car_jpeg.json  --dist True

我没有使用上面的方式,而是选择用DP的方式,虽然慢一点,但是简单,更稳定。

在Terminal里面输入:

python main_train_psnr.py --opt options/swinir/train_swinir_sr_classical.json

即可开始训练。

运行结果如下:

image-20220501205428982

等待训练完成后,我们使用测试代码测试。将模型复制到./model_zoo/swinir文件夹下面

image-20220501205611736

输入命令:

python main_test_swinir.py --task classical_sr --scale 2 --training_patch_size 48 --model_path model_zoo/swinir/45000_G.pth --folder_lq testsets/Set5/LR_bicubic/X2 

然后在result下面可以看到测试结果。

image-20220501210025110

完整的代码:

https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/85258387

### SwinIR 环境搭建教程 #### 1. 安装依赖项 为了成功复现 SwinIR 的环境,首先需要克隆其官方仓库并安装所需的 Python 库。以下是具体的步骤: 通过 Git 克隆 SwinIR 的 GitHub 项目到本地目录: ```bash git clone https://github.com/Jiang-Jinyang/SwinIR.git cd SwinIR ``` 创建一个新的 Conda 虚拟环境以确保兼容性和隔离性,并激活该环境: ```bash conda create -n swinir python=3.8 conda activate swinir ``` 随后,按照 `requirements.txt` 文件中的说明来安装必要的库: ```bash pip install -r requirements.txt ``` 此命令会自动下载 PyTorch 和其他必需的包[^1]。 --- #### 2. 数据准备 SwinIR 需要特定的数据集用于训练和验证。通常情况下,这些数据可以通过以下方式获取: - **DIV2K**: 常见的超分辨率基准数据集之一。 - 下载链接可以从官网找到:https://data.vision.ee.ethz.ch/cvl/div2k/ 完成数据下载后,将其解压至指定文件夹结构中。例如,在根目录下建立如下子文件夹: ``` datasets/ DIV2K_train_HR/ DIV2K_valid_HR/ ``` 如果计划运行预训练模型,则可以直接跳过这一步骤;但如果打算重新训练整个网络,则需准备好完整的高分辨率 (HR) 图像集合[^2]。 --- #### 3. 运行脚本配置 在 SwinIR 中提供了多个可执行脚本来简化流程管理。对于初学者来说,可以先尝试加载已有的权重参数来进行推理操作而非从头开始训练新模型。 ##### 推理阶段设置 调整 `options/test/` 文件夹内的 JSON 或 YAML 格式的选项文档,设定输入图片路径以及其他必要参数比如尺度因子等信息。例如修改 `test_SwinIR-M_x4.yml` 来适配自己的需求。 启动测试过程只需要简单调用下面这条指令即可: ```bash python test.py --opt options/test/test_SwinIR-M_x4.yml ``` ##### 训练模式启用 当决定自行优化算法性能或者探索不同架构设计时,就需要定义好相应的学习率策略、批次大小等因素后再发起正式的学习循环活动。同样地,编辑对应版本号下的 `.yml` 参数表单之后再执行相应命令: ```bash CUDA_VISIBLE_DEVICES=0,1,2,3 python train_swinir.py --opt options/train/train_SwinIR-L_realesrgan_x4_large.yml ``` 这里假设利用四张 GPU 卡共同加速运算效率[^1]。 --- #### 4. 性能评估指标计算 一旦完成了预测输出生成工作以后,就可以借助内置工具统计 PSNR 及 SSIM 数值作为质量评判依据。具体做法参照另一篇资料介绍的方法论框架[^2]。 --- ### 注意事项 在整个过程中可能会遇到各种问题诸如 CUDA 版本冲突之类的状况,请务必确认所使用的硬件驱动程序处于最新状态并且相互匹配良好。另外考虑到实际应用场景差异较大,某些默认设定可能并不完全满足个性化定制要求,因此灵活运用调试技巧显得尤为重要。
评论 111
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值