图像复原 ---SwinIR

系列文章目录


论文名称:Image Restoration Using Swin Transformer
论文地址:http://arxiv.org/abs/2108.10257
代码地址:https://github.com/jingyunliang/swinir
发表时间:2021
引用邻域:图像超分辨、图像去噪(本文仅关注去噪部分)
主要模块:浅层特征提取、深层特征提取、重建模块



摘要

在本文中,我们提出了一个强大的基线模型SwinIR,用于基于Swin Transformer的图像恢复。SwinIR由三部分组成:浅层特征提取、深层特征提取和高质量图像重建。特别地,深度特征提取模块由几个残差Swin Transformer块(RSTB)组成,每个有几个Swin Transformer层和一个剩余连接。我们对三个代表性任务进行了实验:图像超分辨率(包括经典、轻量级和真实世界图像超分辨像超分辨率)、图像去噪(包括灰度和彩色图像去噪)和JPEG压缩伪影减少。实验结果表明,SwinIR在不同任务上由于最先进的方法高达0.14 -0.45dB,而参数总数最多可减少67%。

Introduction

CNN balabala
卷积存在的两个问题:1.使用相同的卷积核来恢复不同的图像区域可能不是最好的选择。2.在局部处理的原则下,卷积对于远程依赖建模是无效的。

当下Transformer模型存在的问题:1.边界像素不能利用补丁外的相邻像素进行图像恢复。2.恢复后的图像可能会在每个补丁周围引入边界伪影。虽然两个问题可以通过补丁重叠来缓解,但它会引入额外的计算负担

Swin Transformer优势:1.由于局部注意机制,它具有CNN处理大尺寸图像的优势。2.它具有Transformer的优势,可以使用移位窗口方案对远程依赖进行建模。

在本文中,我们提出了一种基于Swin Transformer的图像恢复模型,即swinIR.更具体地说,swinIR由三个模块组成:浅层特征提取、深度特征提取和高质量图像重建模块。浅层特征提取模块使用卷积层提取浅层特征,直接传递给重建模块,以保留低频信息。深度特征提取模块主要由残差Swin Transformer块(RSTB)组成,每个块都利用多个Swin Transformer层进行局部注意和跨窗口交互。此外,我们在块的末尾添加一个卷积层以增强特征,并使用残差连接为特征聚合提供捷径。最后,在重建模块中融合浅层和深层特征以进行高质量图像重建。

与流行的基于CNN的图像恢复模型相比,基于transformer的SwinIR有几个好处:1.图像内容和注意力权重之间基于内容交互,可以解释为空间变化的卷积attention cnnpaddleVit。2.移动窗口机制支持远程依赖建模。3.用更少的参数获得更好的性能。
在这里插入图片描述

Realated work(相关工作)

Image Restoration(图像复原)

与通常基于模型的传统图像恢复方法相比,基于学习的方法,尤其是基于CNN的方法,由于其令人印象深刻的性能而变得更受欢迎。它们经常从大规模配对数据集中学习低质量和高质量图像之间的映射。自从开创性工作SRCNN(用于图像SR)、DnCNN(用于图像去噪)、和ARCNN(用于JPEG压缩伪影减少)以来,一系列基于CNN的模型已经出现建议通过使用更精细的神经网络架构设计来提高模型表示能力,例如残差块DPIR、密集块RDN和其他FDDNetRNAN。其中一些利用了CNN框架内的注意力机制,例如通道注意力、非局部注意力NLRN和自适应补丁聚合。

Vision transformer(ViT)

最近,自然语言处理模型Transformer在计算机视觉社区中广受欢迎。当用于图像分类、目标检测、分割和人群计数,它通过探索不同区域之间的全局交互来学习关注重要的图像区域地区。由于其令人印象深刻的性能,Transformer也被引入用于图像恢复。陈等。提出了一种基于标准Transformer的用于各种恢复问题的骨干模型IPT。然而,IPT依赖于大量参数(超过115.5M参数)、大规模数据集(超过1.1M图像)和多任务学习以获得良好的性能。曹等提出了VSR-Transformer,它使用自注意力机制在视频 SR 中更好地融合特征,但图像特征仍然是从 CNN 中提取的。 此外,IPT 和 VSR-Transformer 都是 patch-wise attention,可能不适用于图像恢复。 此外,一项并行工作提出了一种基于 Swin Transformer的 U 形架构

Method

在这里插入图片描述

Network architecture(网络架构)

如图2所示,SwinIR由三个模块组成:浅层特征提取、深度特征提取和高质量(HQ)图像重建模块。 我们对所有恢复任务使用相同的特征提取模块,但对不同的任务使用不同的重建模块。

Shallow and deep feature extraction(浅层深层特征提取)

给定一张低质量(LQ) I L Q ∈ R H × W × C i n I_{LQ} \in \mathbb{R}^{H \times W \times C_{in}} ILQRH×W×Cin作为输入(H、W和 C i n C_{in} Cin分别是图像高度、宽度和输入通道数),我们使用3*3卷积层 H S F ( ⋅ ) H_{SF}(\cdot) HSF()从输入低质量的图像中提取浅层特征 F 0 ∈ R H × W × C F_0 \in \mathbb{R}^{H \times W \times C} F0RH×W×C
F 0 = H S F ( I L Q ) F_0 = H_{SF}(I_{LQ}) F0=HSF(ILQ) (1)
其中c是特征通道数。卷积层擅长早期视觉处理,使得更稳定的优化和更好的结果。它还提供了一种将输入图像空间映射到更高维特征空间的简单方法。然后我们从 F 0 F_0 F0中提取更深层次的特征 F D F ∈ R H × W × C F_{D F}\in\mathbb{R}^{H\times W\times C} FDFRH×W×C
F D F = H D F ( F 0 ) F_{DF}=H_{DF}(F_0) FDF=HDF(F0) (2)
其中 H D F ( ⋅ ) H_{D F}(\cdot) HDF()是深度特征提取模块,它包含k个残差Swin Transformer块(RSTB)和一个3 * 3卷积层。更具体地说,中间特征F1,F2,…, F k F_k Fk和输出的深度特征 F D F F_{DF} FDF逐块提取为
F i = H R S T B i ( F i − 1 ) , i = 1 , 2 , … , K F_i=H_{RSTB_i}(F_{i-1}),\quad i=1,2,\ldots,K Fi=HRSTBi(Fi1),i=1,2,,K
F D F = H C O N V ( F K ) F_{DF}=H_{CONV}(F_{K}) FDF=HCONV(FK) (3)
其中,HRSTBI(·)表示第i个RSTB,HCONV是最后一个卷积层.在特征提取的最后一层用一个卷积可以将卷积操作的归纳偏差带入基于Transformer的网络中,为后期浅层和深层的聚合打下更好的基础。

Image reconstruction(图像重建)

以SR(图像超分)为例,我们通过聚合浅层和深层特征来重建高质量图像 I R H Q I_{R H Q} IRHQ
I R H Q = H R E C ( F 0 + F D F ) I_{RHQ}=H_{REC}(F_0+F_{DF}) IRHQ=HREC(F0+FDF) (4)
其中 H R E C H_{REC} HREC(·)是重构模块的函数。 浅层特征主要包含低频特征,而深层特征则侧重于恢复丢失的高频特征SwinIR通过较长的跳过连接,将低频信息直接传递给重构模块,帮助深度特征提取模块聚焦高频信息,稳定训练。 对于重构模块的实现,我们使用亚像素卷积层对特征进行上采样。
对于图像去噪、JPEG压缩伪影降低等不需要上采样的任务,采用单个卷积层进行重建。 此外,我们利用残差学习来重建LQ图像与HQ图像之间的残差,而不是HQ图像。 这表示为
I R H Q = H S w i n I R ( I L Q ) + I L Q I_{RHQ}=H_{SwinIR}(I_{LQ})+I_{LQ} IRHQ=HSwinIR(ILQ)+ILQ (6)
其中 H s w i n I R H_{swinIR} HswinIR(·)表示swinIR的函数。

Loss funcion(损失函数)

对于图像去噪和JPEG压缩伪影减少,我们使用Charbonnier损失
L = ∥ I R H Q − I H Q ∥ 2 + ϵ 2 \mathcal{L}=\sqrt{\|I_{RHQ}-I_{HQ}\|^2+\epsilon^2} L=IRHQIHQ2+ϵ2 (7)
其中 ϵ \epsilon ϵ是根据经验设置为 1 0 − 3 10^{-3} 103的常数

Residual Swin Transformer Block (RSTB)

如图2(a)所示,残差Swin Transformer块(RSTB)是一个带有Swin Transformer层(STL)和卷积层的残差块。给定第i个RSTB的输入特征 F i , 0 F_{i,0} Fi,0,我们首先提取中间特征 F i , 1 F_{i,1} Fi,1 F i , 2 F_{i,2} Fi,2 F i , L F_{i,L} Fi,L,通过L Swin Transformer层为
F i , j = H S T L i , j ( F i , j − 1 ) , j = 1 , 2 , … , L F_{i,j}=H_{STL_{i,j}}(F_{i,j-1}),\quad j=1,2,\ldots,L Fi,j=HSTLi,j(Fi,j1),j=1,2,,L (8)
H S T L i , j ( ⋅ ) H_{S T L_{i,j}}(\cdot) HSTLi,j()卷积层是第i个RSTB的第j个Swin Transformer层。然后我们在残差连接前加一个卷积层。RSTB输出的公式如下:
F i , o u t = H C O N V i ( F i , L ) + F i , 0 F_{i,out}=H_{CONV_i}(F_{i,L})+F_{i,0} Fi,out=HCONVi(Fi,L)+Fi,0 (9)
H C O N V i ( ⋅ ) H_{CONV_i}(\cdot) HCONVi()是第i个RSTB的卷积层。这种设计有两个好处。首先,虽然,Transformer可以被视为空间变化卷积的特定实例,但具有空间不变滤波器的卷积层可以增强SwinIR的平移等变性。其次,残差连接提供了从不同块到重建模块的基于身份的连接,允许聚合不同级别的特征。

Swin Transformer layer

Swin Transformer层是基于标准的多头注意力的原始Transformer层 。主要的不同之处在于局部注意力和移动窗口机制。如图2(b)所示。给定输入的大小HWC,Swin Transformer首先将输入输入重塑为通过M*M的非局部窗口将输入划分为 a H W M 2 × M 2 × C \text{a}\frac{HW}{M^2}\times M^2\times C aM2HW×M2×C的特征图, H W M 2 \frac{H W}{M^{2}} M2HW是所有的窗口数量。然后,它分别为每个窗口计算标准自注意力(即局部注意力)。对于局部窗口特征 X ∈ R M 2 × C X\in\mathbb{R}^{M^{2}\times C} XRM2×C,query、key、value计算为:
Q = X P Q , K = X P K , V = X P V Q=XP_Q,\quad K=XP_K,\quad V=XP_V Q=XPQ,K=XPK,V=XPV (10)
其中, P Q P_Q PQ P K P_K PK P V P_V PV是在不同窗口之间共享的投影矩阵。一般来说,我们有 Q , K , V ∈ R M 2 × d Q,K,V\in\mathbb{R}^{M^{2}\times d} Q,K,VRM2×d。因此,注意力矩阵有局部窗口种的自注意力机制计算为:
Attenion ( Q , K , V ) = SoftMax ( Q K T / d + B ) V \text{Attenion}(Q,K,V)=\text{SoftMax}(QK^T/\sqrt{d}+B)V Attenion(Q,K,V)=SoftMax(QKT/d +B)V (11)
其中 B 是可学习的相对位置编码。 在实践中,按照[76],我们并行执行 h 次注意力函数,并将结果连接起来用于多头自注意力 (MSA)。 接下来,多层感知器 (MLP) 具有两个完全连接的层,它们之间具有 GELU 非线性,用于进一步的特征转换。 在 MSA 和 MLP 之前添加了 LayerNorm (LN) 层,并且两个模块都使用了残差连接。 整个过程表述为
X = MSA ⁡ ( LN ⁡ ( X ) ) + X X=\operatorname{MSA}(\operatorname{LN}(X))+X X=MSA(LN(X))+X
X = Mlp ⁡ ( LN ⁡ ( X ) ) + X X=\operatorname{Mlp}(\operatorname{LN}(X))+X X=Mlp(LN(X))+X (12)
然而,当不同层的分区固定时,局部窗口之间没有连接。 因此,交替使用常规和移位窗口分区来启用跨窗口连接,其中移位窗口分区意味着在分区之前将特征移动 ( ⌊ M 2 ⌋ , ⌊ M 2 ⌋ ) (\lfloor\frac{M}2\rfloor,\lfloor\frac M2\rfloor) (⌊2M,2M⌋)像素。

Experiments

Experimental Setup(实验设置)

对于经典图像SR、真实世界图像SR、图像去噪和JPEG压缩伪影减少,RSTB数、STL数、窗口大小、通道数和注意力头数一般分别设置为6、6、8、180和6 . 一个例外是窗口大小设置为 7 以减少 JPEG 压缩伪影,因为我们观察到使用 8 时性能显着下降,这可能是因为 JPEG 编码使用 8 × 8 图像分区。对于轻量级图像 SR,我们将 RSTB 数量和通道数量分别减少到 4 和 60。 当在测试中使用自集成策略时,我们用符号“+”标记模型,例如 SwinIR+。 由于篇幅限制,培训和评估细节在补充中提供。

Ablation Study and Discussion

对于消融研究,我们在 DIV2K上为经典图像 SR (×2) 训练 SwinIR,并在 Manga109上对其进行测试。
在这里插入图片描述
在这里插入图片描述

Impact of channel number, RSTB number and STL number(通道数、RSTB数和STL数的影响)

我们给出了RSTB中的信道数、RSTB数和STL数对模型性能的影响。 如图3(a)、3(b)和3©所示。 观察到PSNR与这三个超参数呈正相关。 对于通道数,虽然性能不断增加,但参数总数以二倍的速度增长。 为了平衡性能和模型大小,我们在其余实验中选择180作为通道数。 对于RSTB数和层数,性能增益逐渐饱和。 我们对两者都选择6,以获得一个相对较小的模型。

Impact of patch size and training image number; modelconvergence comparison(补丁大小和训练图像数量的影响; 模型收敛性比较)

我们将所提出的 SwinIR 与代表性的基于 CNN 的模型 RCAN 进行比较,以比较基于 Transformer 和基于 CNN 的模型的差异。 从图 3(d)可以看出,SwinIR 在不同的 patch size 上表现优于 RCAN,并且当 patch size 较大时 PSNR gain 变大。 图 3(e) 显示了训练图像数量的影响。 当百分比大于 100%(800 张图像)时,使用来自 Flickr2K 的额外图像进行训练。 有两个观察结果。 首先,正如预期的那样,SwinIR 的性能随着训练图像数量的增加而提高。 其次,与 IPT 中观察到的基于 Transformer 的模型严重依赖大量训练数据不同,SwinIR 比使用相同训练数据的基于 CNN 的模型取得了更好的结果,即使数据集很小(即 25%, 200 张图像)。 我们还在图 3(f)中绘制了 SwinIR 和 RCAN 训练期间的 PSNR。 很明显,SwinIR 比 RCAN 收敛得更快更好,这与之前的观察结果相矛盾,即基于 Transformer 的模型通常会出现模型收敛速度慢的问题。

Impact of residual connection and convolution layer in RSTB(RSTB中残差连接和卷积层的影响)

表1给出了RSTB中的四种残差连接变体:无残差连接、使用1×1卷积层、使用3×3卷积层和使用三个3×3卷积层(中间层的通道数设置为网络通道的四分之一) 数字)。 从表中,我们可以有以下观察结果。 首先,RSTB 中的残余连接很重要,因为它将 PSNR 提高了 0.16dB。 其次,使用 1 × 1 卷积带来的改进很小,可能是因为它不能像 3×3 卷积那样提取局部邻近信息。 第三,虽然使用三个 3×3 卷积层可以减少参数数量,但性能略有下降。

Results on Image Denoising

我们分别在表5、表6种显示了灰度图像和彩色图像去噪的结果。同传统模型BM3D、WNNM,基于cnn的模型 DnCNN、IRCNN、FFDNet、N3Net、NLRN、FOCNet、RNAN、MWCNN和DRUNet相比较,比较从噪声水平包括15、25和50.可以看到,我们的模型比所有比较方法都获得了更好的性能。特别是,在具有100张高分辨率测试图像的大型Urban100数据集上,它超过了最先进的DRUN模型0.3dB。值得指出的是,SwinIR只有12.0M个参数,而DRUN有32.7M个参数。这表明SwinIR体系结构在学习用于恢复的特征表示方面是高效的。图6和图7显示了不同方法的灰度和彩色图像去噪的视觉比较。正如我们所看到的,我们的方法可以去除严重的噪声破坏,并保留高频图像细节,从而获得更清晰的边缘和更自然的纹理。相比之下,其他方法要么过于平滑,要么过于清晰,无法恢复丰富的纹理。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Conclusion

在本文中,我们提出了一种基于Swin Transformer的图像恢复模型SwinIR。该模型由三部分组成:浅层特征提取、深层特征提取和HR(高分辨率图像)重建模块。 特别是,我们使用一堆残差 Swin Transformer 块 (RSTB) 进行深度特征提取,每个 RSTB 由 Swin Transformer 层、卷积层和残差连接组成。 大量实验表明,SwinIR 在三个代表性图像恢复任务和六个不同设置上实现了最先进的性能:经典图像 SR、轻量级图像 SR、真实世界图像 SR、灰度图像去噪、彩色图像去噪和 JPEG 压缩伪影 减少,这证明了所提出的 SwinIR 的有效性和普遍性。 将来,我们会将模型扩展到其他恢复任务,例如图像去模糊和去雨。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字图像在获取的过程中,由于光学系统的像差、 光学成像衍射、 成像系统的非线性畸变、 摄影胶片的感光的非线性、 成像过程的相对运动、 大气的湍流效应、环境随机噪声等原因, 图像会产生一定程度的退化。因此,必须采取一定的方法尽可能地减少或消除图像质量的下降,恢复图像的本来面目, 这就是图像复原, 也称为图像恢复图像复原图像增强有类似的地方, 都是为了改善图像。但是它们又有着明显的不同。图像复原是试图利用退化过程的先验知识使已退化的图像恢复本来面目,即根据退化的原因, 分析引起退化的环境因素,建立相应的数学模型, 并沿着使图 像降质的逆过程恢复图像。从图像质量评价的角度来看, 图像 复原就是提高图像的可理解性。而图像增强的目的是提高视感 质量,图像增强的过程基本上是一个探索的过程, 它利用人的心理状态和视觉系统去控制图像质量, 直到人们的视觉系统满意为止。 图像复原是利用退化现象的某种先验知识,建立退化现象的数学模型,再根据模型进行反向的推演运算,以恢复原来的景物图像。因而,图像复原可以理解为图像降质过程的反向过程。建立图像复原的反向过程的数学模型,就是图像复原的主 要任务。经过反向过程的数学模型的运算,要想恢复全真的景物图像比较困难。所以, 图像复原本身往往需要有一个质量标 准, 即衡量接近全真景物图像的程度,或者说,对原图像的估 计是否到达最佳的程度。 由于引起退化的因素众多而且性质不同,为了描述图像退化过程所建立的数学模型往往多种多样,而恢复的质量标准也往往存在差异性,因此图像复原是一个复杂的数学过程,图像复原的方法、技术也各不相同。
基于Swin Transformer的图像分割是一种利用Swin Transformer模型进行图像语义分割的方法。Swin Transformer是一种基于注意力机制的深度学习模型,它在自然语言处理和计算机视觉任务中取得了很好的效果。 在图像分割任务中,Swin Transformer结合了CNN和Transformer的优势,既能够进行全局建模,又具备定位能力。为了进一步提高性能,研究人员提出了两种基于Swin Transformer的图像分割方法:TransUnet和TransFuse。 TransUnet是一种将CNN和Transformer顺序堆叠的编码器结构。它利用CNN提取图像的低级特征,并将其作为输入传递给Transformer进行高级特征的建模和语义分割。 TransFuse是一种同时执行CNN和Transformer功能的混合结构。它利用Swin Transformer提取图像的全局特征,并使用简单的渐进式上采样恢复空间分辨率。 这些基于Swin Transformer的图像分割方法在遥感图像和医学图像等领域取得了很好的效果,能够准确地分割出图像中的不同语义区域。 以下是一个基于Swin Transformer的图像分割的示例代码: ```python import torch import torch.nn as nn from torchvision.models import resnet50 from swin_transformer import SwinTransformer class SwinUnet(nn.Module): def __init__(self, num_classes): super(SwinUnet, self).__init__() self.backbone = SwinTransformer() self.decoder = nn.Sequential( nn.Conv2d(1024, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(512, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(256, num_classes, kernel_size=1) ) def forward(self, x): x = self.backbone(x) x = self.decoder(x) return x # 创建模型实例 model = SwinUnet(num_classes=2) # 加载预训练权重 checkpoint = torch.load('swin_unet.pth') model.load_state_dict(checkpoint['model_state_dict']) # 输入图像 input_image = torch.randn(1, 3, 256, 256) # 进行图像分割 output = model(input_image) # 输出分割结果 print(output.shape) # 输出:torch.Size([1, 2, 256, 256]) ``` 这是一个简单的基于Swin Transformer的图像分割示例,其中使用了一个SwinUnet模型,该模型包含了Swin Transformer作为编码器和一个简单的解码器。你可以根据自己的需求进行模型的修改和训练。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值