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

2023-11-11

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结合的价值意义,反正看高清电影是不用愁了。

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

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

  • 香农公式说明了什么_香农公式理解

    1948 年 香农 Shannon 用信息论的理论推导出了带宽受限且有高斯白噪 声干扰的信道的极限信息传输速率 当用此速率进行传输时 可以做到不出差错 用公式表示 则信道的极限信息传输速率 C 可表达为 C B log2 1 S N b s
  • 中小微企业如何选择网络品牌推广公司?

    有人认为品牌推广是大型企业的事情 中小微企业没有必要做品牌推广 口碑侠营销顾问则不以为然 口碑侠认为小微企业之所以还是小微企业就是因为没有做有效的品牌推广 不是他们不需要品牌推广 而是资金和团队还做不了成规模的品牌推广 如果有足够的条件开展
  • PTI:通过枢轴完成人脸投影

    paper PTI Pivotal Tuning for Latent based Editing of Real Images 2022 ACM TOG StyleGan 人脸编辑相关 人脸投影 paper code 在StyleGAN中
  • Qt Qml 多媒体播放视频(MediaPlayer)遇到的问题及解决方法

    文章目录 前言 一 视频无法播放的原因 1 目录结构 2 正确代码 二 绝对路径 相对路径 三 路径中的转义字符 测试版本 前言 Qml 多媒体播放视频开发过程中遇到的问题 记录一下 一 视频无法播放的原因 创建的Qt Quick Ui P
  • 分布式管理和集中式管理的优劣-----项目架构和配置分离

    模块化是不可逆转的趋势 模块化是不可逆转的趋势 面向接口编程的优势 集中式管理的优劣 分布管理的优劣 高内聚和低耦合 高内聚 低耦合 总结 现如今 在整个项目开发的过程中模块化以他独特的优势引领了一股项目架构潮流 灵活 可复用 后期易维护
  • 2023年使用率超高的10个Figma插件

    大家好 我是不知名设计师 l1m0 今天分享内容为 10个使用率超高的Figma插件 文末我还会为大家解答 Figma有汉化版吗 这个问题 埋个伏笔 接着往下看吧 Figma 相信屏幕前的大家都很熟悉了 作为一款功能超强大的设计工具 Fig
  • android 控件之checkbox自定义样式

    1 首先在drawable文件夹中添加drawable文件checkbox style xml

随机推荐

  • Unity人机交互—Input

    文章目录 键盘输入方法 鼠标输入方法 虚拟轴 按键 设置虚拟轴 按键 常用的移动方法 官方组件角色控制器CharacterController 属性 方法 自己写的移动脚本和鼠标控制视角 通过虚拟按键来实现移动 镜头跟随鼠标旋转 键盘输入方
  • 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定 解决方法

    1 关注 公众平台安全助手 2 进入 公众平台安全助手 点击右上角的用户图标 进入公众号信息界面 3 进入 公众号信息 界面后 点击右上角的 图标 打开更多选项 4 打开 更多选项 后 选择设置选项 进入设置 5 进入 设置 后 请关闭消息
  • [网络安全提高篇] 一二二.恶意样本分类之基于API序列和机器学习的恶意家族分类详解

    终于忙完初稿 开心地写一篇博客 网络安全提高班 新的100篇文章即将开启 包括Web渗透 内网渗透 靶场搭建 CVE复现 攻击溯源 实战及CTF总结 它将更加聚焦 更加深入 也是作者的慢慢成长史 换专业确实挺难的 Web渗透也是块硬骨头 但
  • ServletContext介绍和用法

    ServletContext介绍和用法 1 介绍 ServletContext 2 用法 1 getInitParameterNames 和 getInitParameter 2 getMajorVersion 和 getMinorVers
  • STL空间配置器详解-《STL源码剖析第二章学习笔记》

    个人学习笔记 可能有点乱 有理解不对的地方可以给我留言 个人网站www liujianhua xyz STL空间配置器 https www cnblogs com lang5230 p 5556611 html 空间配置器 空间配置器概括
  • 图信号处理基础------Foundations in Graph Signal Processing

    本篇博文意在用例子的形式解释图信号处理基础 目的是记录总结自己的学习过程 有兴趣的读者也可也一起交流 前言 图是一种包含多种数据属性的不规则结构 然而 传统的图论处理方法都注重分析底层的图结构而不是图上的信号 随着多传感器测量技术的快速发展
  • 字节跳动后端实习一面(凉)

    问啥啥不会的一面 基础知识 进程和线程的区别 进程和线程死掉会不会影响其它进程线程 线程共享的方式 物理地址和虚拟地址 当输入一个URL之后发生了什么 每一个网址都会查浏览器中的缓存么 三次握手中的参数是什么 socket 为什么要有TIM
  • JDK源码剖析之PriorityQueue优先级队列

    写在前面 版本信息 JDK1 8 PriorityQueue介绍 在数据结构中 队列分为FIFO LIFO 两种模型 分别为先进先出 后进后出 先进后出 后进先出 栈 而一切数据结构都是基于数组或者是链表实现 在Java中 定义了Queue
  • linux系统图形界面突然打不开解决方法之一

    有很多朋友都会遇到这样的情况 上次用的linux的图形界面还是好好的 现在就突然不能进入了 造成这样的原因 有2种可能 就我个人而言 a 你的设备突然断电造成linux系统某些数据被破坏 b 你的 分区已经满了 考研通过df 命令查看 b的
  • lv4 嵌入式开发-4 标准IO的读写(二进制方式)

    目录 1 标准I O 按对象读写 2 标准I O 小结 3 标准I O 思考和练习 文本文件和二进制的区别 存储的格式不同 文本文件只能存储文本 除了文本都是二进制文件 补充计算机内码概念 文本符号在计算机内部的编码 计算机内部只能存储数字
  • SpringCloud搭建分布式服务架构(通俗易懂,步骤清晰)(转载)

    问题引入 什么是SpringCloud 在了解这个之前需要有微服务的概念 基于springBoot的一套实现微服务的框架 提供了微服务所需的配置管理 基于Http协议的restful风格 返回异步数据 SpringCould组件架构图 在这
  • python如何安装sklearn库_1.sklearn库的安装

    sklearn库 sklearn是scikit learn的简称 是一个基于Python的第三方模块 sklearn库集成了一些常用的机器学习方法 在进行机器学习任务时 并不需要实现算法 只需要简单的调用sklearn库中提供的模块就能完成
  • 微信小程序:canvas生成图片分享

    背景 小程序通常会开发生成图片 分享到朋友圈的功能 如图所示该图片由 背景图 用户上传图片 用户昵称 小程序码构成 首先 在小程序里进行绘图操作需要用到
  • java 方法引用无效_java – 方法引用 – 无效的方法引用 – 不能从静态上下文引用...

    因为StringJoiner length占用零个参数 所以方法引用总是需要一个StringJoiner 任意实例 并返回一个整数 换句话说 第一个分配的方法ref等效于 Function lengthFunc new Function O
  • Ubuntu12.0.4 安装xmpp 服务器ejabberd

    http www cnblogs com dyingbleed archive 2013 04 04 2999885 html
  • 计算机图形学常用算法实现3 多边形扫描转换算法-扫描线算法

    运行环境 vs2015 winform 其他环境只需要替换对应的画点画线算法即可 这个算法其实很复杂的 实现起来需要有耐心 一步一步按照算法思路来写代码 在算法中 我使用的是静态链表 c 没有指针 下面的AET为活性边表 NET存储新边表
  • JS 数组转其他格式

    let arr 1 2 const arr 1 2 const newArr arr map item gt return key item value item console log newArr key 1 value 1 key 2
  • PyTorch学习笔记9

    PyTorch学习笔记9 整理笔记视频来源 问答系统 文本摘要系统 大规模预训练语言模型 一 问答系统 SQuAD数据集 给定一段文字作为context 给定一个问题question 从context中寻找一段连续的文字 text span
  • 毕业三周年,又一个离别季

    今天应该算是一个特别的日子 2011年的6月23日 我正式离校了 当时分别的场景还依稀在眼前展现 虽然我们没有跟别人一样哭的稀里哗啦 但是谁心里都明白 以后见面的日子真的不会太多 今天是2014年6月23日 看着很多人在空间发表大学生涯结束
  • 【超分顶会详解+部署】ESRT:Transformer for Single Image Super-Resolution

    文章目录 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 验