EDSR模型
源码链接
sanghyun-son/EDSR-PyTorch: PyTorch version of the paper 'Enhanced Deep Residual Networks for Single Image Super-Resolution' (CVPRW 2017)
模型总结
1、模型结构
①一个3x3卷积层,从输入图像中提取初始特征。没有批标准化,以避免分布偏移。
②32个残差块(Residual Blocks)堆叠而成。每个残差块包含:
-
两个3x3卷积层。
-
ReLU激活函数(在第一个卷积后)。
-
残差连接(Shortcut Connection):将输入直接加到输出上。
-
常量缩放层(Scaling Factor,通常0.1):乘以残差输出,以稳定训练。 此外,还有全局残差连接(Global Skip Connection),将初始特征直接加到主干输出上,进一步简化学习.
③子像素卷积(Sub-Pixel Convolution)或转置卷积进行上采样,将特征图放大到目标分辨率。
2、创新
①移除所有BN层:保留像素绝对强度,减少计算复杂度和内存损耗
②残差缩放机制:残差连接前乘一个缩放因子,稳定训练过程,防止梯度爆炸
模型训练过程
1、下载数据集
①DIV2K数据集:https://data.vision.ee.ethz.ch/cvl/DIV2K/
②数据集结构:超分重建数据集 DIV2K & Flickr2K 下载地址【有效分享】-CSDN博客
该数据集包含训练集800张、验证集100张和测试集100张,测试集暂未公开
③源码中将训练集和验证集放在一个文件夹中,既一个文件夹有900张图片,按option.py中的data_range划分
2、修改option.py
文件中的很多参数都可以根据需要进行修改,常见的参数有:
①--dir_data:DIV2K数据集文件夹所在路径(不包括DIV2K文件夹)
②--dir_demo:测试为demo情况下使用的数据集路径
③--data_range:训练集和验证集范围
④--scale:模型训练/测试的倍数
⑤--patch_size:每张图片分割大小
⑥--pre_train:预训练模型路径
⑦--test_only:仅测试
3、训练模型,参考demo.sh文件,运行main.py文件
①训练scale为2的baseline EDSR模型
--model EDSR --scale 2 --patch_size 96 --save edsr_baseline_x2
②训练scale为3的baseline EDSR模型
--model EDSR --scale 3 --patch_size 144 --save edsr_baseline_x3 --pre_train [预训练的x2模型路径]
③训练scale为4的baseline EDSR模型
--model EDSR --scale 4 --save edsr_baseline_x4 --pre_train [预训练的x2模型路径]
4、验证,运行main.py
①EDSR模型,基准数据集,各scale同
--model EDSR --scale 2 --data_test Set5+Set14+B100+Urban100+DIV2K --data_range 801-900 --pre_train [预训练的x2模型路径] --test_only --self_ensemble
②自定义数据集
--model EDSR --scale 2 --data_test demo --pre_train [预训练的x2模型路径] --test_only --save_results --dir_demo [测试图片路径]
模型结果
1、图片对比(x4结果)
①0853
②0824
③0840
2、参数对比
模型 | EDSR_baseline_x2 | EDSR_baseline_x3 | EDSR_baseline_x4 |
PSNR | 34.553dB | 30.899dB | 28.933dB |