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

news2024/10/7 10:17:34

文章目录

  • 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 4


python 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 4


python 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.coloradmin.cn/o/362912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

直播预告 | 企业如何轻松完成数据治理?火山引擎 DataLeap 给你一份实战攻略!

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 企业数字化转型正席卷全球,这不仅是趋势所在,也是企业发展必然面对的考题,也是企业最关心、最难决策的难题,数字化不…

C/C++每日一练(20230222)

目录 1. 部分复制字符串(★) 2. 按字典顺序排列问题(★★) 3. 地下城游戏(★★★) 附录 动态规划 1. 部分复制字符串 将字符串2小写字母复制到字符串1:编写程序,输入字符串s2,将其中所有小写字母复制到字符串数组strl中。例如:aal1bb22cc33de4AA55…

简历上面的项目经历怎么写?怎么写才能显得突出?

项目经历可不可以是课堂项目? 其实对很多同学来说,不是不会写项目经历,而是根本不知道什么是项目经历,哪些内容可以写在项目经历中。所以看到简历中的项目经历模块,感觉不知道怎么写?那么对于大学生来说,即使你大学四年中没有太多活动、竞赛、科研的经历,但是你一定上过…

Leetcode力扣秋招刷题路-0088

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 88. 合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 …

学术贴 | FPGA 加速图数据库查询执行

导读本篇博客主要讲解发布于 Microprocessors and Microsystems 的文章《Semi-static Operator Graphs for Accelerated Query Execution on FPGAs》,介绍它所提出的算法与试验结果,并结合实际情况给出一些思考。一、背景介绍在当今的数据化场景越来越丰…

【11】FreeRTOS的延时函数

目录1.延时函数-介绍2.相对延时函数-解析2.1函数prvAddCurrentTaskToDelayedList-解析2.3滴答定时器中断服务函数xPortSysTickHandler()-解析2.4函数taskSWITCH_DELAYED_LISTS() -解析3.延时函数-实验4.总结1.延时函数-介绍 函数描述vTaskDelay()相对延时xTaskDelayUntil()绝对…

linux集群技术(三)--七层负载均衡-HAproxy(一)

HAproxy 概述HAproxy 特点案例1案例2-HAproxy动静分离 1.HAproxy 概述 1.1 关于4/7层负载均衡 1. 无负载平衡: 没有负载平衡的简单Web应用程序环境可能如下所示 在此示例中,用户直接连接到您的Web服务器,在yourdomain.com上,…

2023年,如何自学通过PMP?(含pmp资料)

自学需要解决的问题: 自学的难度很大,不管是零基础还是项目管理经验丰富,都要明白两个点: 1、复杂的报考流程; 2、学习毅力(通过率)。 第一点、复杂的考试流程 考试先英文报名,英文…

Apache DolphinScheduler 助力 Trino 快速实现湖仓一体数据建设

点亮 ⭐️ Star 照亮开源之路https://github.com/apache/dolphinscheduler作者 | 钟嘉杰 Apache DolphinScheduler PMCMember// 在面对联合查询和湖仓一体场景时,Trino 已经是不少开发者的不二之选。Trino 是一个查询引擎,在数仓、即席查询方面非常强大…

MyBatis分页插件

目录 分页插件 Mybatis插件典型适用场景 实现思考 第一个问题 第二个问题 自定义分页插件 分页插件使用 添加pom依赖 插件注册 调用 代理和拦截是怎么实现的 PageHelper 原理 分页插件 MyBatis 通过提供插件机制,让我们可以根据自己的需要去增强MyBati…

idea快捷键大全

idea快捷键大全idea快捷键大全一、速查版1.Idea常用快捷键2.Idea快捷键(全)二、分类版三、其他1.IDEA创建JAVA项目2.IDEA创建web项目3.tomcat安装配置环境4.IDEA中下载源码错误5.maven环境安装6.IDEA创建maven项目7.IDEA一个打开多个项目8.IDEA切换工作目录9.IDEA导入maven项目…

“clashx需要使用管理员权限安装更新一个帮助程序...“问题的解决过程

大家由于各种原因,经常需要出去看看,比如你想玩玩最近大火的人工智能技术chatgpt。但是如果你想玩chatgpt,那需要借助一些工具才能访问,我们都知道。有很多小伙伴会使用clashx这个开源软件,毕竟便宜,而且也…

从0到1一步一步玩转openEuler--21 openEuler 管理服务-改变运行级别

文章目录21 管理服务-改变运行级别21.1 Target和运行级别21.2 查看系统默认启动目标21.3 查看当前系统所有的启动目标21.4 改变默认目标21.5 改变当前目标21.6 切换到救援模式21.7 切换到紧急模式21 管理服务-改变运行级别 21.1 Target和运行级别 systemd用目标(t…

数据结构——复杂度讲解(2)

作者:几冬雪来 时间:2023年2月22日 内容:数据结构复杂度讲解 目录 前言: 复杂度讲解(2): 1.空间复杂度是什么: 2.空间复杂度讲解: 结尾: 前言&#x…

【深度探讨】哪些领域将迎来区块链爆发性增长

发表时间:2022年12月6日 信息来源:bsvblockchain.org 如果我们不在日常业务和政府流程中采用区块链技术,就会浪费太多的技术价值和资金。这意味着未来几年,我们可能会看到区块链技术的快速落地,而有些国家已经为这种爆…

实验室设计建设方案主要内容

实验室设计建设整体解决方案SICOLAB需要综合考虑实验室的功能需求、空间布局、设备选型、安全防护、节能环保等多方面因素。以下是一个基本的实验室设计建设方案的流程:一、需求分析:了解实验室的使用目的、实验内容、使用人数、设备种类、实验标准等&am…

程序员赚钱指南,兼职社区招募

👨‍💻作者简介:大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。 🎉专栏推荐:目前在写一个CV方向专栏,后期会更新不限于目…

正则表达式(Java)

定义 正则表达式(Regular Expression)是一种文本模式匹配的工具,可以用来搜索、替换或提取文本中的模式。它可以用来检查文本是否符合某种模式,或者从文本中提取出符合某种模式的部分 一般用法 未分组 public static void mai…

php+vue加油站会员服务系统 java微信小程序

目 录 1绪论 1 1.1项目研究的背景 1 1.2开发意义 1 1.3项目研究现状及内容 5 1.4论文结构 5 2开发技术介绍 7 2.5微信小程序技术 8 3系统分析 9 3.1可行性分析 9 3.1.1技术可行性 9 3.1.2经济可行性 9 3.1.3操作可行性 10 3.2网站性能需求分析 10 3.3网站功能分析 10 3.4系统…

九龙证券|市场化转融资业务试点上线首日平稳运行

2月21日,中国证券金融股份有限公司(下称“中证金融”)商场化转融资事务试点迎来首个买卖日。全天该事务试点平稳运转,商场化转融资规模合计10亿元。 业内人士以为,商场化转融资事务形式下,证券公司参加转融…