GAN在图像超分辨领域的应用

        本篇博客介绍了对抗生成网络GAN在图像超分辨领域的应用,包括(SRGAN, ESRGAN, BSRGAN, Real-ESRGAN),详细介绍了论文内容,方法,网络结构并对其做了相关总结。相关GAN原理的介绍大家可以查看我之前的几篇博客,链接如下:生成对抗网络-GANhttps://blog.csdn.net/xs1997/article/details/130277123?spm=1001.2014.3001.5501
条件生成对抗网络-CGANhttps://blog.csdn.net/xs1997/article/details/130278117?spm=1001.2014.3001.5501

GAN在图像转译领域的应用-CycleGAN&Pix2Pixhttps://blog.csdn.net/xs1997/article/details/130903541?spm=1001.2014.3001.5501OK, 接下来步入正题~

1.SRGAN(CVPR2017)

paper:https://arxiv.org/pdf/1609.04802.pdf

https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1609.04802

https://link.zhihu.com/?target=https%3A//github.com/zsdonghao/SRGAN

内容概述

        Twitter在CVPR2017提出SRGAN,这是第一篇将GAN引入超分领域的论文,旨在提升画面的真实性。在这篇文章中,将生成对抗网络(Generative Adversarial Network, GAN)用在了解决超分辨率问题上。文章提到,训练网络时用均方差作为损失函数,虽然能够获得很高的峰值信噪比,但是恢复出来的图像通常会丢失高频细节,使人不能有好的视觉感受。SRGAN利用感知损失(perceptual loss)对抗损失(adversarial loss)来提升恢复出的图片的真实感。感知损失是利用卷积神经网络提取出的特征,通过比较生成图片经过卷积神经网络后的特征和目标图片经过卷积神经网络后的特征的差别,使生成图片和目标图片在语义和风格上更相似。SRGAN的工作就是: 生成器G通过低分辨率的图像生成高分辨率图像,由判别器D判断拿到的图像是由生成的还是真实图像。当生成器G能成功骗过判别器D的时候,就通过这个GAN完成超分辨率。

网络结构

        超分辨率是一个病态问题,一个低清图像块可以对应多个高清图像块。而MSE得到的结果就像是这多个高清图像块(红色框框的图像块)的一个平均,这样所得图像很模糊,不符合真实高清图像(有高中低频信息)的分布,而GAN可以将其拉向真实高清图像的分布(黄色框框的图像块)

        用均方误差优化SRResNet(SRGAN的生成网络部分),能够得到具有很高的峰值信噪比的结果。在训练好的VGG模型的高层特征上计算感知损失来优化SRGAN,并结合SRGAN的判别网络,能够得到峰值信噪比虽然不是最高,但是具有逼真视觉效果的结果。SRGAN网络结构如下图所示。

        生成网络(SRResNet)部分包含多个残差块,每一个block有Conv-BN-PReLU-Conv-BN-Sum的结构。跳跃连接有两个地方:1)在block内部有skip-connection; 2) 多个block也由skip-connection进行连接。生成器一共有16个blocks。每个残差块中包含两个3×3的卷积层,卷积层后接批规范化层(BN)和PReLU作为激活函数,两个2×亚像素卷积层(sub-pixel convolution layers)被用来增大特征尺寸。

        判别网络包含8个卷积层,随着网络层数加深,特征个数不断增加,特征尺寸不断减小,选取激活函数为LeakyReLU,最终通过两个全连接层和最终的sigmoid激活函数得到预测为自然图像的概率。

tip:BN层的引入可加速网络的训练,但是BN层测试时采用的是训练集数据均值和方差的统计量。当测试数据和训练数据分布不一致时,结果会产生artifacts(所以ESRGAN的时候作者去掉了BN层)

损失函数

        使用感知损失perceptual loss来提升图像真实度,perceptual loss= content loss + adversarial loss。在像素层面计算损失容易使图像模糊,缺乏高频信息。而在特征层面进行损失计算比像素层面好。因为特征层面会各种结构化信息如边缘、形状等,当在特征层面约束生成图像和真实图像一致可以避免生成的图像模糊,提升视觉感知。

内容损失content loss便采用VGG19网络进行特征提取,在特征层面对生成图像和真实图像进行约束,vgg损失所计算的feature map越由高层网络得到,网络越生成更好的纹理细节。通过VGG19网络中第i个最大池化层之前的第j个卷积(激活之后)获得的特征映射,我们将VGG损失定义为重建图像的特征表示与高分辨率参考图像之间的欧氏距离。

对抗损失定义adversarial loss为:判别器在所有的样本上的概率判断

评价指标

        评价指标不单纯使用PSNR(Peak Signal to Noise Ratio):峰值信噪比,因为PSNR主要受MSE影响。而MSE倾向生成模糊结果。所以当PSNR高时并不代表图像符合人的视觉感知,而是图像比较模糊。

        平均主观意见分MOS分则是让用户看图像并从1-5进行打分,1为最差,5为最好,然后统计分值。该评价指标所得结果可以说明人的视觉感知。当MOS分高时表示图像符合人的视觉感知,否则不符合。

        MOS结果中HR的MOS分最高,因为其本身就是高清图像;SRGAN其次,说明了SRGAN在提升图像真实度上是可信的。

2.ESRGAN(ECCV2018)

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

论文源码链接:https://github.com/xinntao/ESRG

内容概述

        Twitter提出将Gan(SRGAN)引入到超分辨率领域以提升恢复出图像的视觉感知,但是该框架生成细节的同时还伴随着artifacts, 前面已经介绍过,原因是在SRGAN中使用BN层来加速网络的训练,但是BN层测试时采用的是训练集数据均值和方差的统计量。当测试数据和训练数据分布不一致时,结果会产生artifacts。因此,如何进一步提升恢复图像的全局的视觉感知是一个需要研究的问题。

        为了进一步提高视觉质量,论文深入研究了SRGAN的三个关键组成部分——网络结构、对抗损失和感知损失,并对它们进行改进,得出了增强型SRGAN (ESRGAN)。ESRGAN比SRGAN获得了更好的视觉质量,纹理更加逼真和自然,并在PIRM2018-SR挑战赛中获得了第一名。主要改进如下:

  • 引入未经批归一化的残差密集块Residual-in-Residual Dense Block(RRDB)作为基本构建单元
  • 借鉴了relativistic GAN的思想,让鉴别器预测相对真实度而不是绝对值。
  • 提出了一种改进的感知损失,利用激活前的VGG特征来代替SRGAN中激活之后的VGG特征,为亮度一致性和纹理恢复提供更强的监督。

网络结构

左:移除了SRGAN残差块中的BN层。右:RRDB块用在我们的更深模型中,β是残差尺度参数。采用SRResNet的基本体系结构,大多数计算是在LR特征空间中完成的。

        在不同的面向PSNR的任务中,已证实移除BN层可以提高性能并降低计算复杂度。BN层在训练中使用一批数据的均值和方差对特征进行归一化,并在测试中使用整个训练集估计的均值和方差。当训练集和测试集的统计差别很大时,BN层趋向于引入令人不快的伪影并限制泛化能力。

        在GAN架构下训练且网络较深时,BN层更可能带来伪影。这些伪影有时会在迭代中间和不同的设置下出现,违背了训练过程中对于稳定性能的需求。因此,为了进一步改进SRGAN复原的图像质量,ESRGAN对生成器G的架构进行了两个修改:

1)移除所有的BN层;

2)用提出的残差套残差密集块(RRDB)替换原始的基本块,它结合了多层残差网络和密集连接。

        除了改进生成器架构之外,还在相对GAN 的基础上增强了判断器。不同于SRGAN中的标注判别器D,D估算输入图像x是真实自然的概率,相对判别器尝试预测真实图像xr比假图像xf相对更真实的概率,如下图所示为标准判别器和相对判别器的差异。

损失函数

        通过在激活之前而不是在SRGAN中实践的激活之后限制特征来开发更有效的感知损失Lpercep,使用激活层之前的特征有两个缺点:

(1)激活特征非常稀疏,尤其是在非常深的网络之后,稀疏的激活提供了弱监督,导致性能较差

(2)与真实图像相比,使用激活之后的特征也会导致重建亮度不一致

        图像“狒狒”激活之前和激活之后代表性的特征映射。随着网络加深,大多数激活之后的特征变得不活跃而激活之前的特征包含更多的信息

方法总结

        ESRGAN模型比以前的SR方法始终取得更好的感知质量。就感知指数而言,该方法在PIRM-SR挑战赛中获得了第一名。论文构建了一种包含一些没有BN层的RDDB块的新颖架构。此外,采用了包括残差缩放和较小初始化的有用技术,以促进提出的深度模型的训练。还介绍了使用相对GAN作为判别器,其学习判断一张图像是否比另一张更真实,引导生成器恢复更详细的纹理。此外,通过使用激活之前的特征增强了感知损失,它提供了更强的监督,从而恢复了更精确的亮度和真实纹理。

3.BSRGAN(ICCV2021)

Paper: https://arxiv.org/abs/2103.14006

Code: https://github.com/cszn/BSRGAN

内容概述

        针对有现有退化模型存在的问题,提出并设计了一种复杂但实用的新型退化方案,包含对模糊、下采样以及噪声退化的随机置换(也就是说每种退化对应多种类型,且顺序会进行随机调整)。具体来说,模糊退化通过两个卷积(各向同性与各向异性高斯模糊)进行模拟;下采样从最近邻、双线性以及双三次插值中随机挑选;噪声则通过不同噪声水平的高斯噪声、不同压缩质量的JPEG压缩、逆转ISP生成的传感器噪声等。

        基于所设计的新型退化方案,对RRDBNet进行模型训练,无论是合成数据还是真实场景数据,所得模型均取得了SOTA性能&绝佳的视觉感知质量

主要贡献包含以下几点:

  • 提出了一种针对SISR的实用退化模型,它考虑并设计了更复杂的退化空间;
  • 基于上述所设计的退化模型合成的训练数据训练了盲SISR,所得模型在不同类型真实退化数据上取得了非常好的效果;
  • 首个针对广义盲超分采用手工方式设计退化模型的方案;
  • 突出了精确的退化模型对于DNN-SR实用的重要性。

现有方法

        现有的图像超分多用bicubic或blur-down方式制作训练数据;稍微复杂点的则采用模糊、下采样、噪声组合的方式。噪声往往假设为加性高斯白噪声,它往往难以匹配真实图像的噪声分布;事实上,噪声往往源于传感器噪声和JPEG压缩噪声,而这两种噪声通常具有信号依赖性、非均匀性。无论模糊退化精确与否,如果噪声不能有效匹配均会导致严重的超分性能下降。因此,现有的退化模型面对真实图像退化是仍有很大的改善空间

除了人工模拟退化外,盲图像超分方案有几个研究方向:

  • 先对LR图像估计退化参数,然后采用非盲方案生成HR图像。非盲方案对退化误差非常敏感,生成的结果过度锐利、平滑;
  • 同时进行模糊核与HR图像估计,没有考虑噪声,模糊核估计不准确,影响HR重建质量。
  • 采用监督方式采集LR/HR数据对,比如RealSR、DRealSR。成对训练数据的收集成本非常高,同时所学习得到的模型会受限于LR域图像。
  • 基于非成对训练数据,采用类似CycleGAN的思路进行模型的训练,然后对Source与Target两个域图像同时进行退化制作训练数据。尽管这类方法精确的退化模糊核估计非常关键,如果模糊核估计不准确会导致模型性能变得比较差。

网络结构

        BSRGAN从四个角度(模糊、下采样、噪声以及随机置换策略)来设计退化模型,在退化模型中设计了一种随机置换策略。具体来说,对退化序列进行顺序随机置换,随机置换可以大幅扩展退化空间

上图是退化模型的示意图。对于HR图像,可通过调整不同的退化操作、参数生成不同的LR图像。

训练细节

        BSRGAN目的是在未知退化前提下,解决更广义的盲图像超分。选择了ESRGAN作为基线模型,并做了几点改动:

  • 训练数据方面采用DIV2K、Flickr2K、WED以及源自FFHQ的2000人脸图像;
  • 采用了更大的图像块72*72;
  • 损失方面采用了L1、VGG感知、PatchGAN三个损失的组合,组合系数1,1,0.1。

优化器为Adam,batch=48,固定学习率。整个训练大约花费10天(亚马逊云,4个V100)

4.Real-ESRGAN(ICCV2021)

论文链接:Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data

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

内容概述

SR算法通过数据学习低清图像到高清图像的映射,通过映射可以将低清图像恢复为高清图像。由于高清图像到低清图像的退化是复杂且多样的,所以SR算法在真实场景中受限,往往在一批数据上训练的模型在另外一批数据上表现就不佳,也就是泛化性不佳。那怎样得到一个可用于真实场景中的泛化性强的模型是SR现在的一个问题。

 盲超分任务介绍

        单图像超分辨率 (SISR) 的目标是从其低分辨率观测中重建高分辨率图像。目前已经提出了基于深度学习的方法的多种网络架构和超分网络的训练策略来改善 SISR 的性能。SISR 任务需要一张高分辨率的 HR 图和一张低分辨率的 LR 图。

        超分模型的目的是根据后者生成前者,而退化模型的目的是根据前者生成后者。经典超分任务 SISR 认为:低分辨率的 LR 图是由高分辨率的 HR 图经过某种退化作用得到的,这种退化核预设为一个双三次下采样的模糊核 (downsampling blur kernel)。但在实际应用中,这种退化作用十分复杂,不但表达式未知,而且难以简单建模。 双三次下采样的训练样本和真实图像之间存在一个域差。以双三次下采样为模糊核训练得到的网络在实际应用时,这种域差距将导致比较糟糕的性能。这种退化核未知的超分任务我们称之为盲超分任务

        真实世界场景的复杂退化核通常是不同退化过程的复杂的组合,比如:相机的成像系统、图像编辑过程和互联网传输等等多个过程的退化作用的结合。

SR算法根据所得LR图像的退化过程分为两类:

算法类型

获得LR图像的退化方式

问题

显式建模

HR进行退化,例如模糊、下采样、噪声和JPEG压缩

真实数据退化更加复杂和多样,简单的退化组合难cover真实数据,造成训练的模型泛化性不佳

隐式建模

使用GAN学习LR图像的数据分布(例如cyclegan)

使用gan所得数据也会让生成的数据趋于训练集的分布,当训练集的分布单一时所得LR也单一,造成训练的模型泛化性不佳

模型架构

Real-ESRGAN Generator

        采用了与 ESRGAN 相同的生成器,即一个具有若干 Residual-in-Residual Dense Blocks (RRDB) 的深度网络。 由于 ESRGAN 是一个较重的网络,作者首先通过 Pixel-Unshuffle 操作 (Pixel-Shuffle 的反操作,Pixel-Shuffle可理解为通过压缩图像通道而对图像尺寸进行放大来减少空间分辨率,并扩大 channel 数)。以降低图像分辨率为前提,对图像通道数进行扩充,然后将处理后的图像输入网络进行超分辨重建。因此,大部分计算是在较小的分辨率空间中执行的,这可以减少 GPU 内存和计算资源的消耗。

Real-ESRGAN Discriminator

        由于 Real-ESRGAN 旨在解决比 ESRGAN 大得多的退化空间,ESRGAN 中的 Discriminator 的原始设计就已经不再适用了。Real-ESRGAN 中的 Discriminator 对于复杂的训练输出需要更大的鉴别能力。而且之前的 ESRGAN 的 Discriminator 更多的集中在图像的整体角度判别真伪,而使用 U-Net Discriminator 可以在像素角度,对单个生成的像素进行真假判断,这能够在保证生成图像整体真实的情况下,注重生成图像细节。U-Net 结构和复杂的退化也增加了训练的不稳定性。通过加入 Spectral Normalization Regularization,可以缓和由于复杂数据集合复杂网络带来的训练不稳定问题。

训练过程

  1. 首先,作者用 L1 Loss 训练一个 PSNR 导向的模型。得到的模型命名为 Real-ESRNet。
  2. 再通过 Real-ESRNet 的网络参数进行网络初始化, 并用 L1 Loss,Perceptual Loss 和 GAN Loss 的组合来训练最终的网络 Real-ESRGAN。

        训练集使用 DIV2K,Flickr2K,OutdoorSceneTraining。训练的 HR Patch size 是256,batch size 是48。Real-ESRNet 是从 ESRGAN Fine-tune 而来的,可实现更快的收敛。训练 Real-ESRNet 1000K iterations,训练 Real-ESRGAN 400K iterations。L1 Loss,Perceptual Loss 和 GAN Loss 的权重分别是 1.0,1.0,0.1。

实验结果

        作者使用几个不同的测试数据集 (都是 real-world images),包括 RealSR,DRealSR,OST300,DPED,ADE20K 和一些来自互联网的图像。如下图所示是不同方法的生成图片的质量可视化。Real-ESRGAN 在去除伪像和恢复纹理细节方面都优于以前的方法。Real-ESRGAN+ (用锐化的地面事实训练) 可以进一步提高视觉锐度。

 方法总结

        真实世界场景的复杂退化核通常是不同退化过程的复杂的组合,比如:1 相机的成像系统、2 图像编辑过程和3 互联网传输等等多个过程的退化作用的结合。例如,当我们用手机拍照时,照片可能会有一些退化,如相机导致的模糊、传感器的噪声、锐化伪像和 JPEG 压缩。然后我们做一些编辑并上传到一个社交媒体应用程序,这引入了进一步的压缩和没办法预测的噪音。当图像在互联网上被多次共享时,上述过程就会变得更加复杂。以上三个过程的复合作用导致的 Real-world 场景的复杂退化是没办法用一个简单的退化模型来准确表达或建模的。

        Real-ESRGAN 引入高阶退化模型来更准确地模拟真实世界场景的复杂退化作用,为了合成更实际的退化,采用 sinc filters 来模拟常见的振铃和过冲伪像。此外,Real-ESRGAN 引入了 U-Net 形式的 Discriminator 在像素角度,对单个生成的像素进行真假判断,这能够在保证生成图像整体真实的情况下,注重生成图像细节。实验结果表明用合成数据训练的 Real-ESRGAN 能够增强细节,同时消除大多数真实世界图像中令人不愉快的伪像。

        OK,这是我目前我整理的关于GAN在图像超分辨领域应用的几篇非常经典的论文,GAN的相关应用领域还有很多,也可以做很多有意思好玩的事情,欢迎大家一起交流学习~

猜你喜欢

转载自blog.csdn.net/xs1997/article/details/131747566