SISR学习

一.Swinir

论文名称:SwinIR: Image Restoration Using Swin Transformer(ICCV 2021)

论文链接:https://openaccess.thecvf.com/content/ICCV2021W/AIM/papers/Liang_SwinIR_Image_Restoration_Using_Swin_Transformer_ICCVW_2021_paper.pdf

代码: GitHub - JingyunLiang/SwinIR: SwinIR: Image Restoration Using Swin Transformer (official repository)

一、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具有更少的参数,且取得了更好的效果。

二、原理分析

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

浅层特征提取只使用一层卷积进行提取。

给定一个低质量(LQ)输入(H,W和Cin分别是图像的高度、宽度和输入通道数),首先用一个3×3卷积HSF提取浅层特征

2)deep feature extraction

深层特征提取模块由若干个残差 SwInTransformer 块 (RSTB) 和卷积块构成,具体结构如下图。

(1) 首先将来自浅层特征提取模块的特征图分割成多个不重叠的 patch embeddings;
(2) 再通过多个串联的残差 SWin Transformer 块 (RSTB);
(3) 将多个不重叠的 patch embeddings 重新组合成与输入特征图分辨率一样;
(4) 最后通过一个卷积层 (1 层或3 层卷积) 输出;
(5) 在每个 RSTB 中都引入残差连接。

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

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

3)image reconstruction modules

图像重建模块其实就是卷积+上采样的组合,在这块论文提出 4 种结构。(:这是一个容易改进的地方)

(1) 经典超分 (卷积 + pixelshuffle 上采样 + 卷积);
(2) 轻量超分 (卷积 + pixelshuffle 上采样);
(3) 真实图像超分 (卷积 + 卷积插值上采样 + 卷积插值上采样 + 卷积);
(4) 像去噪和 JPEG 压缩去伪影 (卷积 + 引入残差)。

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

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

4)损失函数

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

其中,I RHQ以I  LQ为SwinIR的输入,I HQ为对应的Ground Truth。对于真实世界的图像SR,我们使用像素损失、GAN损失和感知损失的组合来提高视觉质量。
图像去噪任务和压缩任务采用Charbonnier loss,式中ɛ通常设置为10-3。

2 Residual Swin Transformer Block

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

残差 SwInTransformer 块 (RSTB) 中的 STL 就是 SwIn Transformer Layer 的意思,具体结构如下图。

(1) 首先通过一个归一化层 LayerNorm;
(2) 再通过多头自注意力 (Multi-head Self Attention) 模块;
(3) 在多头自注意力结尾引入残差;
(4) 再通过一个归一化层 LayerNorm;
(5) 最后通过一个多层感知机 MLP;
(6) 结尾同样引入残差。

Swin变压器层(STL)是基于原变压器层的标准多头自关注来实现的。主要区别在于局部注意和窗口机制。如上图所示,给定大小为H×W×C的输入,Swin变压器首先通过将输入划分为不重叠的M × M局部窗口,来重构特征的输入,其中为窗口总数。然后,它分别计算每个窗口的标准自注意(即局部注意)。对于局部窗口特征,查询、键和值矩阵Q、K和V计算为:

其中, 是跨不同窗口共享的投影矩阵。一般来说,我们有。因此,利用局部窗口中的自注意机制计算出的注意矩阵为:

 其中B是可学习的相对位置编码,注意这里和绝对位置编码是不同的。在实践中,我们并行执行h次的注意函数,并将多头自注意(MSA)的结果连接起来。

 接下来,使用一个多层感知器(MLP),它有两个完全连接的层,它们之间具有GELU非线性,以进行进一步的特征变换。在MSA和MLP之前都添加了LayerNorm(LN)层,并且对这两个模块都采用了残差连接。整个过程被表述为:

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

3. 总结

(1)内容的交互作用,可以解释为空间变化的卷积。

(2)的远程依赖建模可以通过移位的窗口机制来启用。

(3)用更少的参数具有更好的性能。例如,如图1所示,与现有的图像SR方法相比,SwinIR以更少的参数实现了更好的PSNR。

二.ESRGAN

论文名称:ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks(2018ECCV)

论文链接:https://arxiv.org/abs/1809.00219

代码链接:GitHub - xinntao/ESRGAN: ECCV18 Workshops - Enhanced SRGAN. Champion PIRM Challenge on Perceptual Super-Resolution. The training codes are in BasicSR.

1 Introduction

这篇文章,作者主要从三个方面对SRGAN进行改进:网络结构、对抗损失、感知损失。

  1. 网络结构:引入了 Residual-in-Residual Dense Block (RRDB)来代替SRGAN中的resblock;移除了网络单元的BN层;增加了residual scaling,来消除部分因移除BN层对深度网络训练稳定性的影响。我认为,这主要是借用了EDSR的网络思想。
  2. 对抗损失:SRGAN的对抗损失的目的是为了让真实图像的判决概率更接近1,让生成图像的判决概率更接近0。而改进的ESRGAN的目标是,让生成图像和真实图像之间的距离保持尽可能大,这是引入了真实图像和生成图像间的相对距离(Relativistic average GAN简称RaGAN),而不是SRGAN中的衡量和0或1间的绝对距离。(具体说来,ESRGAN目的是:让真实图像的判决分布减去生成图像的平均分布,再对上述结果做sigmoid处理,使得结果更接近于1;让生成图像的判决分布减去真实图像的平均分布,再对上述结果做sigmoid处理,使得结果更接近于0。)
  3. 感知损失:(基于特征空间的计算,而非像素空间)使用VGG网络激活层前的特征图,而不像SRGAN中使用激活层后的特征图。因为激活层后的特征图有更稀疏的特征,而激活前的特征图有更详细的细节,因此可以带来更强的监督。并且,通过使用激活后的特征图作为感知损失的计算,可以带来更加锐化的边缘和更好视觉体验。
     

之前的网络大都以优化PSNR为导向,但这样会使生成的图像更光滑,而损失掉高频细节信息。自从SRGAN以来,网络开始使用残差块和以感知损失为导向,这样,虽然PSNR会降低,但人对图像的感受会变好。从而也可知PSNR指标并不可靠。而ESRGAN则对SRGAN的三个部分做进一步的改进,以进一步提升网络表现。
文章中提到了新的图像质量评估标准(无参照评估):Ma’s score 和NIQE,计算公式为:perceptual index(即PI) = 1/2 ((10 − Ma) + NIQE),PI值越小,感知质量越好。

2 Proposed Methods

网络目标为提升图片的整体感知质量,主要涉及四个方面:

  1. 网络结构;
  2. 判别器;
  3. 感知损失;
  4. 网络插值(平衡感知质量和PSNR).

1.Network Architecture

ESRGAN对SRGAN的生成器部分做了两处修改:

  1. 移除BN层;
  2. 将原始的resblock替换为Residual-in-Residual Dense Block (RRDB)。这样的block既融合了多级残差网络的思想,也融合了密集连接的思想。

修改如下图所示:

在这里插入图片描述

RRDB包含三个Dense Block,每一个Dense Block由五层conv进行密集连接。

 移除BN层的好处:1. 增加了网络的表现;2. 降低了以PSNR为导向的图像重建任务的计算复杂度,在一定程度上也节约了存储资源。BN层是通过使用每个batch的均值和方差对特征完成正规化,而在测试时,BN则使用整个训练集数据的均值和方差完成对测试数据的正规化。这变出现一个问题,用训练接数据的均值和方差来估计测试数据的均值和方差是否合理?答案往往是否定的,且这样做可能使越深的GAN网络生成的SR图像引入越多的伪影。并且由于不同网络的不同参数设置,BN的引入有时还能造成网络不稳定。
使用图4中的RRDB替代下图3中的basic block(resblock):
在这里插入图片描述

首先的目的是在网络深度上下功夫,因为已经被证明越深的网络感受野越好,利用周围环境的信息量越大,越能够构建出出色的SR图像。并且,更深的网络往往有更复杂的非线性映射和复杂的计算。而dense connection是为了避免正反向传递过程中的信息丢失问题(图像信息、梯度等)。

除了上述的两个对于网络结构的较大变化外,作者还提到了两个小的点子:

  • residual scaling:通过对学习到的残差乘上一个0-1间的常数,然后再和主通路上的特征信息做加法,有利于增强网络的稳定性。
  • smaller initialization:实验得出,初始化方差越小,网络越容易训练
     

2.Relativistic Discriminator

aderversarial loss

SR使用了修改后的gan loss,虽说对于原生gan loss降低了训练gan的难度,但是其本身仍是判断一张图像是否为真实图像。ESRGAN中使用相对gan,判别器需要同时输入一组图像,其任务变成了相对其中一张图像另一张图像为真的概率。

在这里插入图片描述

前面介绍,相对gan的判别器的输入是两张图像,则公式表示为:

 

判别器loss:

生成器loss:

论文中介绍,在生成器loss(也就是adversarial loss)中,梯度来自生成图像和真实图像两部分,这个比SRGAN仅有生成图像的loss表现好。

perceptual loss

perceptual loss的目的是在feature空间中约束生成图像和真实图像一致,这样所得结果不像pixel空间那么模糊。SRGAN中使用vgg特征层激活函数后的feature map做约束。ESRGAN分析激活后的特征是很稀疏的,监督力度小。

ESRGAN对比多个通道下激活层前后的信息表示(如下图)。从图像中可以看出,feanture map中有大量小于0的数值,经过激活层后该点对应点数值区域0,相当于无明确信息。当网络越来越深时,被激活的信息大量减少。以vgg19网络为例,在第5个池化层前的第4个卷积层(vgg19-54)后激活函数后的信息仅有11.17%,以该结果做监督,监督力度很弱,这个致使网络效果的结果不佳。

所以ESRGAN提出使用激活函数前的特征计算损失依次训练网络,这样监督信息不是稀疏的,监督力度更强

 除了上面在网络结构、两个loss上进行改进,但仍然存在问题:gan loss指导的网络所得图像容易产生artZts,然而无gan loss指导的网络所得图像过于模糊。为缓解该问题,ESRGAN提出使用网络插值的方式平衡细节和artifacts。

 

 三 Real-ESRGAN

论文名称:ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks(2018ECCV)

论文链接:https://arxiv.org/abs/1809.00219

代码链接:GitHub - xinntao/Real-ESRGAN: Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration.

 一、介绍

深度学习超分模型有几个里程碑:SRCNN > SRGAN > ESRGAN > Real-ESRGAN,SRCNN 和SRGAN 有些古老了,现在基本用不上, Real-ESRGAN是在ESRGAN的基础上做的升级,于是我们主要介绍Real-ESRGAN,用ESRGAN作为补充

二、优化

Real-ESRGAN的优化是在ESRGAN的基础上做的,主要内容如下:

  1.  给出了一个数据高阶退化过程。即拼接几个典型退化过程来建模(其中还包括sinc filter),从而获得更加接近现实的低质图像。最终作者采用了一个二阶退化过程,以求在简单性和有效性之间取得良好的平衡。这很重要,我们后面重点介绍。
  2. 判别器用U-Net代替VGG。Real-ESRGAN中的鉴别器对复杂的训练输出需要更大的鉴别能力,它还需要为局部纹理产生精确的梯度反馈,而不是只区分全局样式。因此使用更加强大的U-Net作为判别器。输出每个像素的真实度值,并可以向生成器提供详细的每像素反馈,增强了图像对细节上的对抗学习。判别器我们下面也会重点介绍。
  3.  引入谱归一化(Spectral Normalization)以稳定由于复杂数据集和U-Net判别器带来的训练不稳定情况。

三、生成器结构

1.整体结构

        我们以batch_size=1,输入64x64的4x超分为例,生成器整体结构如下:

可以看到整体模型结构并不复杂,大体是一个序贯的结构,数据经过了23个RRDB模块,每个RDDB块由3个ResidualDenseBlock组成,输入和输出形状一样;然后进行两次Unsample,Unsample采用nearest插值,每次Unsample之后会有卷积层来细化插值细节;最后通道数变成3输出。

        其实生成器的大体机构和SRGAN是一致的,但是将Unsample前的16个残差块换成了23个RRDB模块,这极大的提升了特征提取能力,这也是为什么SRGAN能很好的还原图片细节的原因。每个RDDB块由3个ResidualDenseBlock组成,在底部做Add之前,使用了前面提到的网络插值,即输出乘以0.2再和输出相加,这提高了训练的稳定性。

2.RRDB结构

        Real-ESRGAN核心是RRDB,特点是密集的残差链接,同时残差边两端以Concat的方式相连,结构图如下

 是不是很dense,看上去热闹,其实是有规律,也就是每个卷积激活层的输出会作为下面所有节点的输入。因为有4个concat操作,每个Concat节点的度(出度+入度)都是4。

四、判别器结构

        判别器使用带有谱归一化的U-Net,结构如下:

判别器分三部分:

  • Downsample:三层带有谱归一化的卷积层,每层通道翻倍,宽高减半。
  • Unsample:使用nearest插值做上采样,三层带有谱归一化的卷积层,每层通道减半,宽高翻倍,同时与Downsample有残差边相连。
  • 输出层:两层有谱归一化的卷积、一层卷积输出层。

五、高阶退化模型

        高阶退化模型(High-order Degradation Model)是Real-ESRGAN最重要的创新点。经典的退化模型不能模拟一些复杂的退化问题,特别是未知的噪声和复杂的伪影,这是因为合成的低分辨率图像与现实的退化图像仍然有很大的差距。因此,Real-ESRGAN将经典的退化模型扩展到高阶过程,以模拟更实际的退化。

        所谓高阶退化模型通俗的说就是将经典退化算法排列组合,本文将退化算法分为Blur、Resize、Noise、JPEG Compression四类,如下图:

  1. Blur:概率选择使用sinc filter还是其他模糊算法(iso/aniso/generalized_iso/generalized_aniso/plateau_iso/plateau_aniso),sinc filter概率默认10%。sinc filter是为了模拟振铃伪影(ring artifacts)和过冲伪影(overshoot artifacts)。
  2. Resize:随机放大或缩小,插值方式area/bilinear/bicubic选一个;
  3. Noise:噪声分布随机选择gaussian/poisson;噪声形式随机选择color/gray,color噪声就是三通道数值不一样(默认概率60%),gray噪声三通道数值一样(默认概率40%);
  4. JPEG compression:JPEG压缩,默认质量30-950;
  5. Blur:默认80%概率执行,同1.1;
  6. Resize:同1.2;
  7. Noise:同1.3;
  8. JPEG compression:这一步比较特殊,有两个组合可选[resize back + sinc filter] + JPEG compression  / JPEG compression + [resize back + sinc filter], 其中resize back是吧突变resize成gt_size

六、损失函数

        先说明一下数学符号:

 1.生成模型损失函数

   生成模型损失函数:

   λ默认0.1,η默认1

  Lpercep:感知损失,将gt和生成模型的输出分别送入预训练VGG19,取conv1_2(bx64x256x256)、conv2_2(bx128,128x128)、conv3_4(bx256x64x64)、conv4_4(bx512x32x32)、conv5_4(bx512x16x16)层的数据,然后计算L1loss,公式如下:   
                                       

   LG:GANLoss,将生成模型的输出送入判别模型(U-Net),将结果(bx1x256x256)和babel(全是1)计算二进制交叉熵损失(BCELoss),公式如下:

                                    

  L1:gt和生成模型的输出直接计算L1loss,公式如下:

                                    

2.判别模型损失函数

        Real-ESRGAN的判别模型优化分两步:

(1)优化判别真的能力,即构造一个全是1的yr,然后计算D(yi)和yr的BECLoss,公式如下:

(2)优化判别假的能力,即构造一个全是0的yf,然后计算D(yi)和yf的BECLoss,公式如下:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值