【GAN超分辨】Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data

0.前言

本文为ESRGAN的扩展,提出一个能够完全在合成数据上训练的面向真实场景的超分模型——Real-ESRGAN。

本文的模型生成器采用ESRGAN为骨干结构,而判别器却采用U-Net的结构,更好地提取图像中各部分的纹理特征。

本文使用复杂的退化模型来模拟真实场景的退化,所谓复杂,其实是复杂退化上又套了层复杂。

Github项目网址:https://github.com/xinntao/Real-ESRGAN/

#1.介绍
传统退化模型包括模糊、下采样、加噪声和JPEG压缩。真实场景下,相机的模糊、传感器噪声、JPEG压缩和网络传说等等可能会导致获得到图像有着复杂的退化方式。这也就是为啥本文要用更加复杂的“high-order"退化模型来模拟真实场景的退化。

模拟真实场景的退化带来的一个问题就是退化的空间变得非常大,这对于网络学习是一个非常大的挑战。为了应对这个挑战,作者采用类似U-Net结构的判别器和SN(谱归一化层)。

根据原文总的来说,本文有三个贡献:

  1. 提出high-order退化处理模型去建模真实场景的复杂退化,使用sinc核去建模振铃和过冲伪影;
  2. 使用U-Net判别器和SN层改进训练复杂度;
  3. Real-ESRGAN仅仅在合成的数据上训练就能够具有恢复真实场景图像的能力。

2.方法

2.1 传统的退化模型

传统模型将退化方式建模为下面这个式子:
在这里插入图片描述
这个其实很好理解,先对y做的卷积(卷积核为k)就是模拟模糊的过程,下箭头r代表下采样的过程,加了n代表添加噪声的过程,最后JPEG是压缩的过程,这个过程其实也就是为了模拟振铃和过冲伪影。

  • 模糊可以用这样的高斯核来实现:
    在这里插入图片描述
    【GAN超分辨】Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data_第1张图片
    这里作者还提了下高斯核被用的比较广泛,可能不符合真实的相机模糊,所以还引入了一个符合高原型状分布的新的核:,而且高斯核也引入了不同形状,其中beta就是形状参数,但这个参数具体是咋工作的我还不太懂。
  • 噪声加了两种类型:
    加性高斯噪声和泊松噪声。同时还分为颜色噪声和灰度噪声,也就是一个图像的三个通道,如果每个通道加的噪声都是不同的,那就是颜色噪声,如果每个通道的都加相同的噪声,那就是灰度噪声。泊松噪声通常是用来模拟传感器带来的噪声。
  • 下采样有多种方式:
    最邻近、区域、双线性、双三次。这些除了最邻近,本文都有用到。而最邻近没有被用到的原因是因为他会带来像素不匹配的问题。
  • JPEG压缩
    本文使用Pytorch的实现方式-DIffJPEG,这东西我没有具体研究过。

以上就是传统的退化模型,他们可以被称为first-order。而本文提到的high-order,其实就是first-order的多次重复使用。

2.2 High-order退化模型

这部分原文篇幅不小,但其实感觉没啥太多内容,上一个图和一个公式就很清晰了。
【GAN超分辨】Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data_第2张图片
在这里插入图片描述
这个公式就是实际的退化模型,他实际就是把3.1的内容重复了n次,就称作high-order。这样多次的重复退化(ps:套娃行为)会让合成的数据更加符合真实的退化数据。本文在实际操作时,发现second-order也就是重复两次的效果是最好的。

2.3 振铃和过冲伪影

对于这两个伪影我了解的不多,但是它们基本上就是由于JPEG压缩导致的,你经常看到的那种模糊就是这两个伪影,如下图:
【GAN超分辨】Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data_第3张图片
为了模仿这两个伪影的产生,作者用了这样一个sinc过滤核,如下:
在这里插入图片描述
其中的J1就是first-order的函数,用这样一个核就会产生下面这样的结果:
【GAN超分辨】Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data_第4张图片
这就很好地模拟了振铃和过冲伪影。

2.4 网络结构与训练过程

网络结构中生成器和ESRGAN没啥区别,如下:

【GAN超分辨】Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data_第5张图片
判别器采用了更加复杂并且性能更好的结构,如下:
【GAN超分辨】Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data_第6张图片
U-Net让判别器不仅仅关注图像的整体,还关注每个部分的特征,SN可以缓和由于复杂数据集和复杂网络带来的训练不稳定的问题,SN的具体做法是在每一次更新权值W之后都除以W最大的奇异值,具体的内容可以参考知乎文章:Spectral Normalization 谱归一化

训练分两个阶段,首先训练生成器,使用L1损失,然后训练判别器,使用GAN损失和感知损失。

在训练的时候,文中还提到一个小的trick,就是用到了一种图像预处理的方法,使用USM锐化训练集的groundtruth图像,会有更好的效果。训练的结果如下:
【GAN超分辨】Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data_第7张图片

3.总结

个人感觉,本文只是在ESRGAN的基础上增加许多许多个训练和数据处理的trick(当然ESRGAN也是本文作者提出的),但是值得学习的是,每一个文中出现的trick,作者都有非常强大的理论支持,每一部分写的都有理有据。Respect!

你可能感兴趣的:(深度学习,计算机视觉,计算机视觉,深度学习,人工智能,神经网络)