SwinIR: Image Restoration Using Swin Transformer(ICCV 2021)含代码复现

目录

一、Introduction

1 Motivation

2 Contribution

二、原理分析

1 Network Architecture

1)Shallow feature extraction

2) deep feature extraction

3) image reconsruction modules

4) loss function

2 Residual Swin Transformer Block

三、实验结果

1 经典图像超分辨率(Classical image SR)

2 轻量级图像超分辨率(Lightweight image SR)

3 Real-world image SR

四、小结

五、链接及代码


一、Introduction

1 Motivation

在图像超分辨率、图像去噪、压缩等图像修复(Image restoration)任务中,卷积神经网络目前仍然是主流。但卷积神经网络有以下缺陷:

(1)图像和卷积核之间的交互是与内容无关的;

(2)在局部处理的原则下,卷积对于长距离依赖建模是无效的。

作为卷积的一个替代操作,Transformer设计了自注意力机制来捕捉全局信息,但视觉Transformer因为需要划分patch,因此具有以下两个缺点:

(1)边界像素不能利用patch之外的邻近像素进行图像恢复;

(2)恢复后的图像可能会在每个patch周围引入边界伪影,这个问题能够通过patch overlapping缓解,但会增加计算量。

Swin Transformer结合了卷积和Transformer的优势,因此本文基于Swin Transformer提出了一种图像修复模型SwinIR。

2 Contribution

和现有的模型相比,SwinIR具有更少的参数,且取得了更好的效果。

Recently, Swin Transformer [56] has shown great promise as it integrates the advantages of both CNN and Transformer. On the one hand, it has the advantage of CNN to process image with large size due to the local attention mechanism. On the other hand, it has the advantage of Transformer to model long-range dependency with the shifted window scheme.

二、原理分析

1 Network Architecture

SwinIR的整体结构如下图所示,可以分为3个部分:shallow feature extraction、deep feature extraction、highquality (HQ) image reconstruction modules。对所有的复原任务采用相同的feature extraction modules,针对不同的任务采用不同的reconstruction modules。

1)Shallow feature extraction

首先用一个3x3卷积HSF提取浅层特征F0

将提取到的浅层特征F0,使用深层特征提取模块HDF进一步提取特征。深层特征提取模块由K个residual Swin Transformer blocks(RSTB)和一个3×3卷积构成。

2) deep feature extraction

每个RSTB的输出F1,F2,FK,以及输出的深层特征FDK如式(3)所示,式中HRSTBi表示第i个RSTB模块,HCONV表示最终的卷积层。卷积层能够将卷积的归纳偏置(inductive bias)引入基于Transformer的网络,为后续浅层、深层特征的融合奠定基础。

3) image reconsruction modules

以图像超分辨率为例,通过融合浅层特征F0和深层特征FDK来重建高质量图片IRHQ,式中HREC为重建模块。

浅层特征F0主要包含低频信息,而深层特征则专注于恢复丢失的高频信息。SwinIR采用一个长距离连接,将低频信息直接传输给重建模块,可以帮助深度特征提取模块专注于高频信息,稳定训练。在图像超分辨率任务中,通过sub-pixel convolution layer将特征上采样,实现重建。在其他任务中,则是采用一个带有残差的卷积操作,如公式(5)所示。

4) loss function

图像超分辨率任务采用L1损失,通过优化SwinIR生成的高质量图像IRHQ及其对应的标签IHQ的来优化模型。

图像去噪任务和压缩任务采用Charbonnier loss,式中ɛ通常设置为10-3。

2 Residual Swin Transformer Block

如下图所示,residual Swin Transformer block (RSTB)由残差块、Swin Transformer layers (STL)、卷积层构成。卷积操作有利于增强平移不变性,残差连接则有利于模型融合不同层级的特征。

Swin Transformer layer (STL)取自论文:Swin transformer: Hierarchical vision transformer using shifted windows,和原版Transformer中multi-head self-attention的不同之处主要有局部注意力(local attention)和滑动窗口机制(shifted window mechanism)。首先,将大小为H×W×C的输入特征reshape为(HW/M2)×M2×C,即将其划分为HW/M2个M×M的local windows,然后对每个windows计算自注意力,具体如式(10)、(12)所示。第一个式子表示Query、Key、Value的计算过程,三个权重在不同的window间共享参数;第二个式子表示multi-head self-attention以及add and norm;第三个式子表示feed forward network以及add and norm。

由于在local windows之间没有信息交互,因此本文交替使用常规窗口划分和滑动窗口划分来实现window间的信息交互。

三、实验结果

部分实验结果如下所示(仅选取了图像超分辨率相关的实验结果),包括经典图像超分辨率(Classical image SR)、轻量级图像超分辨率(Lightweight image SR)、真实世界图像超分辨率(Real-world image SR)。

1 经典图像超分辨率(Classical image SR)

作者对比了基于卷积神经网络的模型(DBPN、RCAN、RRDB、SAN、IGNN、HAN、NLSA IPT)和最新的基于transformer的模型(IPT)。得益于局部窗口自注意力机制和卷积操作的归纳偏置,SwinIR的参数量减少至11.8M,明显少于IPT的115.5M,甚至少于部分基于卷积神经网络的模型;模型的训练难度也随之减少,不再需要ImageNet那样的大数据集来训练模型。仅使用DIV2K数据集训练时,SwinIR的精度就超过了卷积神经网络模型;再加上Flickr2K数据集后,精度就超越了使用ImageNet训练、115.5M参数的IPT模型。

2 轻量级图像超分辨率(Lightweight image SR)

作者对比了几个轻量级的图像超分模型(CARN、FALSR-A、IMDN、LAPAR-A、LatticeNet),如下图所示,在相似的计算量和参数量的前提下,SwinIR超越了诸多轻量级超分模型,显然SwinIR更加高效。

3 Real-world image SR

图像超分辨率的最终目的是应用于真实世界。由于真实世界图像超分任务没有GT图像,因此作者对比了几种真实世界图像超分模型的可视化结果(ESRGAN、RealSR、BSRGAN、Real-ESRGAN)。SwinIR能够产生锐度高的清晰图像。

四、小结

Transformer在视觉领域魔改至今,Swin Transformer当属其中最优、运用最多的变体。因此SwinIR进一步把Swin Transformer中的block搬到了图像处理任务里,模型则仍然遵循目前超分网络中head+body+tail的通用结构,改进相对比较小。

另一方面,Swin Transforme把卷积神经网络中常用的多尺度结构用在了基于Transforme的模型中,但图像超分辨率中一般不用多尺度结构,这或许就是SwinIR不如Swin Transforme效果好的原因。

五、链接及代码

https://github.com/JingyunLiang/SwinIR?tab=readme-ov-fileicon-default.png?t=N7T8https://github.com/JingyunLiang/SwinIR?tab=readme-ov-filehttps://arxiv.org/pdf/2108.10257icon-default.png?t=N7T8https://arxiv.org/pdf/2108.10257

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/39863.shtml

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

相关文章

没有调用memcpy却报了undefined reference to memcpy错误

现象 在第5行出现了,undefined reference to memcpy’ 1 static void printf_x(unsigned int val) 2{ 3 char buffer[32]; 4 const char lut[]{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}; 5 char *p buffer; 6 while (val || p buffer) { 7 *(p) …

基于循环神经网络的一维信号降噪方法(简单版本,Python)

代码非常简单。 import torch import torch.nn as nn from torch.autograd import Variable from scipy.io.wavfile import write #need install pydub module #pip install pydub import numpy as np import pydub from scipy import signal import IPython import matplot…

C语言学习记录(十二)——指针与数组及字符串

文章目录 前言一、指针和数组二、指针和二维数组**行指针(数组指针)** 三、 字符指针和字符串四、指针数组 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、指针和数组 在C语言中 &#xff0…

【vscode插件】多行注释

最近在编写C程序的过程中,笔者发现,vscode默认的多行注释是使用单行注释拼起来的,对于笔者想要突出多行注释,同时便于后续修改的需求无法满足,随体验一下自己开发VSCODE插件。 可以说,整个插件的开发和上线…

软件开发生命周期(Software Development Life Cycle, SDLC)

目录 简介 简介 软件开发生命周期(Software Development Life Cycle, SDLC)是软件从概念到正式交付和维护的一系列阶段。每个阶段都有其特定的目标和活动,以下是软件开发生命周期中常见的几个阶段: 需求收集与分析(R…

IndexError: image index out of range

IndexError: image index out of range 这个错误通常意味着你尝试访问的图像索引超出了图像的实际尺寸范围。在你给出的代码行: s_img_point_color_list.append(s_pixels[coordinate[0], coordinate[1]])你正在尝试从 s_pixels 这个变量(很可能是一个图…

Android系统为什么lmkd杀到adj 100就代表有低内存?

在Android系统中,lmkd(Low Memory Killer Daemon,低内存终止守护进程)负责监控系统的内存状态,并在内存压力较高时通过终止不必要的进程来释放内存,以维持系统的稳定运行。关于lmkd为何在杀到adj&#xff0…

Nginx负载均衡及动静分离

目录 一、Nginx负载均衡【重点】 1.1 轮询 1.2 权重 1.3 ip_hash 二、Nginx动静分离【重点】 2.1 动态资源代理 2.2 静态资源代理 官方文档 nginx 一、Nginx负载均衡【重点】 Nginx为我们默认提供了三种负载均衡的策略: 轮询:将客户端发起的请求…

【chatgpt】pytorch中requires_grad=True

在 PyTorch 中,requires_gradTrue 是一个非常重要的标志,它指示 PyTorch 是否需要为某个张量计算梯度。这在训练神经网络时尤为关键,因为我们通常需要通过反向传播来更新模型参数,以最小化损失函数。 requires_gradTrue 的作用 …

Perl变量作用域全解析:掌握变量的可见之旅

Perl变量作用域全解析:掌握变量的可见之旅 Perl是一种灵活的脚本语言,以其对文本处理的强大能力而闻名。在Perl编程中,变量作用域的概念至关重要,它决定了变量在代码中的可见性和生命周期。本文将深入探讨Perl中变量作用域的定义…

AI降重,不再难:降AI率的实用技巧大揭秘

如何有效降低AIGC论文的重复率,也就是我们说的aigc如何降重?AIGC疑似度过高确实是个比较愁人的问题。如果你用AI帮忙写了论文,就一定要在交稿之前做一下AIGC降重的检查。一般来说,如果论文的AIGC超过30%,很可能会被判定…

CAS操作

CAS 全称:Compare and swap,能够比较和交换某个寄存器中的值和内存中的值,看是否相等,如果相等,则把另外一个寄存器中的值和内存进行交换. (这是一个伪代码,所以这里的&address实际上是想要表示取出address中的值) 那么我们可以看到,CAS就是这样一个简单的交换操作,那么…

基于SpringBoot房屋租赁管理系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 Java精品实战案例《1000套》 2025-2026年最值得选择的Java毕业设计选题大全&#xff…

TVBox自定义配置+软件密码版本

apk地址 : https://gitee.com/wheat-wheat/kekeda-duck-apk 1、安装安卓SDK Android SDK Windows 安装及环境配置教程_sdk manager windows-CSDN博客 修改点: 基础配置: java版本:

在系统已经存在postgres时,安装gitlab

以下作废,感觉直接装gitlab太不稳定了,现在转而使用dockers安装gitlab https://cloud.tencent.com/developer/article/2309562 https://www.cnblogs.com/lvzhenjiang/p/14949722.html https://cloud.tencent.com/developer/article/2256871 https://blo…

新火种AI|国产大模型展开决战,是资本游戏还是技术革命?

作者:一号 编辑:美美 资本角逐与技术革新,国产大模型的双线战场已然开启。 随着人工智能技术的不断进步,国产大模型正迅速成为行业关注的焦点。在这个由数据驱动的时代,资本的注入和技术创新的加速,让国…

Spring Cloud中的服务路由与过滤技术实现

Spring Cloud中的服务路由与过滤技术实现 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在微服务架构中,服务路由与过滤是确保服务之间通信有效性和安全性的重要技术。Spring Cloud作为…

Python28-6 随机森林

随机森林算法详细介绍 1. 理论背景 随机森林(Random Forest)是一种由Leo Breiman和Adele Cutler在2001年提出的集成学习方法。它结合了多个决策树的预测结果,以提高模型的准确性和鲁棒性。 2. 算法细节 随机森林的构建过程可以分为以下几…

Qt——升级系列(Level Eight):界面优化

目录 QSS 背景介绍 基本语法 QSS设置方式 指定控件样式设置 全局样式设置 从文件加载样式表 使用Qt Designer 编辑样式 选择器 选择器概况 子控件选择器 伪类选择器 样式属性 盒模型 控件样式示例 按钮 复选框、单选框 输入框 列表 菜单栏 登录界面 绘图 基本概念 绘制各种形…

[Go 微服务] Kratos 使用的简单总结

文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施,不限定于某种注册中心,或数据库ORM等,所以您可以十分轻松地将任意库集成进项目里,与Kratos共同运作。 API -&…