【超分顶会详解+部署】ESRT:Transformer for Single Image Super-Resolution

news/2025/4/2 5:08:31/

文章目录

  • ESRT
    • 1. 超分基本知识
      • 1.1 SRF
      • 1.2 xxx_img
      • 1.3 裁剪
      • 1.4 超分模型评估标准
    • 2. LCB、LTB 模块
      • 2.1 序列模型
    • 3. 损失函数
    • 4. 部署运行
      • 4.1 数据集
        • 4.1.1 训练集
        • 4.1.2 验证集
        • 4.1.3 测试集
      • 4.2 数据集转换
      • 4.3 训练
      • 4.4 测试
      • 4.5 效果

ESRT

ESRT(Efficient Super-Resolution Transformer)是一种单图像超分辨率重建算法。

  • 相较于传统的超分辨率方法,ESRT 提出了一种基于自注意力机制的Transformer 网络,可以充分利用全局信息,从而获得更好的性能。
  • 同时也是第一次将CNN和Transformer相结合应用于超分方向的一次大胆尝试。
    在这里插入图片描述

1. 超分基本知识

1.1 SRF

SRF是指超分辨率因子(Super-Resolution Factor),也称为上采样倍率,是指将低分辨率图像放大到高分辨率图像的大小时所使用的比例因子。

一般来说,低分辨率图像的大小是高分辨率图像大小的一个较小比例,因此在进行超分辨率重建时,需要将低分辨率图像放大到与高分辨率图像相同的大小,这就需要使用上采样操作。而上采样的倍率就是超分辨率因子,即 SRF。

因此,在超分辨率算法中,常常会看到 SRF 的设置,用来指定超分辨率因子,也就是放大倍数。例如,如果 SRF=2,则表示将低分辨率图像放大2倍,得到高分辨率图像。这也是为什么在很多超分辨率数据集中,数据集的文件名通常会标注 SRF 值,方便进行比较和评估。

1.2 xxx_img

  • gt_img:对应的高分辨率图像。
  • sr_img:超分辨率算法输出的图像
  • hr_img:高分辨率图像。
  • lr_img:低分辨率图像。

对于一个训练样本,它包含一个低分辨率图像和一个对应的高分辨率图像,这两张图像就分别对应着ESRT中的lr_img和hr_img。

模型的训练过程就是输入低分辨率图像lr_img,输出对应的超分辨率图像sr_img,并计算sr_img与对应的高分辨率图像gt_img之间的差异,以此来更新模型参数。

在测试过程中,sr_img指的是模型输入低分辨率图像lr_img后输出的超分辨率图像,而gt_img是参考答案,即高分辨率图像。

超分辨率算法的目标就是尽可能准确地将低分辨率图像转换为高分辨率图像,因此模型输出的sr_img与真实的高分辨率图像gt_img应该尽量接近。

1.3 裁剪

shave()函数是用于对模型输出的超分辨率图像进行修剪的函数。

具体来说,由于超分辨率算法会对低分辨率图像进行上采样处理,因此在得到超分辨率图像后,我们需要将其裁剪成与原始高分辨率图像相同的大小。

1.4 超分模型评估标准

常用的评估指标包括峰值信噪比(PSNR)结构相似性(SSIM)感知质量指标(LPIPS) 等。这些指标可以帮助评估模型的超分辨能力和图像质量,从而确定模型是否适合用于特定的应用场景。

compute_psnr()函数要求的两张图片是原图(ground-truth image,gt_img)和重建图(super-resolution image,sr_img)。

其中,原图是指高分辨率的参考图像,也就是输入超分辨率算法的高分辨率图像。重建图是指由超分辨率算法生成的低分辨率图像的超分辨率重建图像,是与原图相对应的输出图像。

compute_psnr()函数的作用是计算两张图片的 PSNR 值。通过比较重建图与原图之间的 PSNR 值,可以评估超分辨率算法的性能。

在ESRT模型中,avg_psnravg_ssim 是两个用来评估模型性能的指标。

PSNR是图像质量评估中常用的一种指标,代表峰值信噪比(Peak Signal-to-Noise Ratio),通常用来衡量重构图像与原始图像之间的差异,公式如下:

PSNR = 10 * log10( 2552 / MSE)

其中,MSE是均方误差(Mean Squared Error),255代表图像中每个像素的最大值。

在ESRT模型中,avg_psnr 是指模型对所有测试图像进行预测后,预测结果与原始高分辨率图像之间的PSNR的平均值。该指标的值越大,表示模型预测的结果越接近于原始高分辨率图像。

SSIM是图像质量评估中另一种常用的指标,代表结构相似性(Structural Similarity),通常用来衡量重构图像与原始图像之间的结构相似性,公式如下:

SSIM(x, y) = (2 * μ_x * μ_y + c1) * (2 * σ_xy + c2) / (μ_x2 + μ_y2 + c1) * (σ_x2 + σ_y2 + c2)

其中,x和y分别代表原始高分辨率图像和模型预测的结果,μ表示像素的均值,σ表示像素的标准差,c1和c2是常数,通常为(0.01 * 255)^2和(0.03 * 255)^2。

在ESRT模型中,avg_ssim 是指模型对所有测试图像进行预测后,预测结果与原始高分辨率图像之间的SSIM的平均值。该指标的值越接近于1,表示模型预测的结果越接近于原始高分辨率图像。

2. LCB、LTB 模块

具体而言,ESRT 的网络架构包含了局部特征提取(Local Context Block, LCB)和局部特征融合(Local Transformer Block, LTB)两个部分,以及多层的 Transformer Encoder 和 Decoder。

  • LCB 用于提取低分辨率图像的局部特征
  • LTB 则用于对这些局部特征进行有效的融合
    ET只使用了transformer中的encoder

每个 Transformer Encoder 包含一个 Multi-Head Self-Attention 层,一个 Feed-Forward 层,以及一个残差连接。
每个 Transformer Decoder 则包含一个 Multi-Head Self-Attention 层、一个 Multi-Head Cross-Attention 层、一个 Feed-Forward 层,以及一个残差连接。

通过 LCB 和 LTB 模块的组合,ESRT 算法能够充分提取图像的局部信息,同时增强图像的多尺度特征表示,从而实现更加准确、细致的超分辨率重建。

2.1 序列模型

sequential(*args) 函数是用来创建一个序列模型的函数。该函数将一系列网络层传入,按照传入的顺序将它们打包成一个序列模型,并返回该模型。

例如,下面的代码创建了一个包含三个卷积层和三个批量归一化层的序列模型:

model = sequential(nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1),nn.BatchNorm2d(64),nn.ReLU(inplace=True),nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=1),nn.BatchNorm2d(64),nn.ReLU(inplace=True),nn.Conv2d(64, 3, kernel_size=3, stride=1, padding=1),nn.BatchNorm2d(3)
)

3. 损失函数

ESRT 采用了一种混合损失函数,同时考虑了 L1 Loss 和 Perceptual Loss。此外,为了提高模型的鲁棒性,ESRT 还采用了一种增量训练方法

4. 部署运行

4.1 数据集

4.1.1 训练集

下载DIV2K数据集,https://data.vision.ee.ethz.ch/cvl/DIV2K/

下载如下标注的数据集即可。
在这里插入图片描述

4.1.2 验证集

Set5/Urban100/BSD100……

下载链接如下:
https://www.aliyundrive.com/s/JD4ZkSmbH1g
提取码: 71fe

任选其中一种即可。

4.1.3 测试集

自己的低分辨率数据集即可。

4.2 数据集转换

python scripts/png2npy.py --pathFrom /path/to/DIV2K/ --pathTo /path/to/DIV2K_decoded/
python scripts/png2npy.py --pathFrom E:\Projects\pythonprojects\ESRT-main\DIV2K\ --pathTo E:\Projects\pythonprojects\ESRT-main\DIV2K_decoded\

4.3 训练

python train.py --scale 4 --patch_size 192

注意:scale的参数根据SRF而定。

4.4 测试

python test.py --is_y --test_hr_folder datasets/Set14/HR/ --test_lr_folder datasets/Set14/LR_bicubic/x4/ --output_folder results/Set14/x4 --checkpoint experiment/checkpoint_ESRT_x4/epoch_990.pth --upscale_factor 4python test2.py --is_y  --test_lr_folder datasets/Set14/LR_bicubic/x4/ --output_folder results/Set14/x4 --checkpoint experiment/checkpoint_ESRT_x4/epoch_990.pth --upscale_factor 4python test.py --is_y  --test_lr_folder datasets/Set14/LR_bicubic/x4/ --output_folder results/Set14/x4 --checkpoint experiment/checkpoint_ESRT_x4/epoch_990.pth --upscale_factor 4

4.5 效果

在只有低分辨率的图像上进行测试,为了能够得到较好的分辨率效果。

设置SRF为4,一张3K的图像超分之后变成了70多M。且不说与MOT结合的价值意义,反正看高清电影是不用愁了。


http://www.ppmy.cn/news/27013.html

相关文章

华为OD机试真题Python实现【最长连续子串】真题+解题思路+代码(20222023)

最长连续子串 题目 给定一个字符串 只包含字母和数字 按要求找出字符串中的最长连续子串的长度 字符串本身是其最长的子串 子串要求 只包含一个字母(a~z A~Z)其余必须是数字字母可以在子串中的任意位置 如果找不到满足要求的子串 比如说,全是字母或数字则返回-1 🔥🔥🔥…

ChatGPT来了,英语不能丢,但我不想上班

文 / 谷雨(微信公众号:王不留) 好久没写文,可能大伙已把我忘了。春节之后,状态一直不太好。我在2月1号时从老家直接来到了深圳出差,而后以996的工作状态疲于应付工作中的各种问题。 终于这周末休息了两天&a…

华为OD机试真题Python实现【敏感字段加密】真题+解题思路+代码(20222023)

敏感字段加密 题目 给定一个由多个命令字组成的命令字符串; 字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号命令字之间以一个或多个下划线_进行分割可以通过两个双引号""来标识包含下划线_的命令字或空命令字(仅包含两个双引号的命令字…

Kotlin-面向对象

本片博客主要写创建对象,创建接口,创建抽象类,data关键字的作用 创建对象 如何声明一个对象,使用class关键字 格式为: class 对象名字(对象属性名:属性类型…){} 如果对象没有函数…

【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

学成在线项目笔记

业务层开发 DAO开发示例 生成实体类对应的mapper和xml文件 定义MybatisPlusConfig,用于扫描mapper和配置分页拦截器 MapperScan("com.xuecheng.content.mapper") Configuration public class MybatisPlusConfig {Beanpublic MybatisPlusInterceptor myb…

React学习笔记

React学习笔记 概述 React是用于构建用户界面的JavaScript库。 现在前端领域最为流行的三大框架: VueReactAngular 其中,Vue和React是国内最为流行的两个框架。 React的特点: 1、声明式编程:它允许我们只需要维护自己的状态…

【网络】网络基础

🥁作者: 华丞臧. 📕​​​​专栏:【网络】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文章…