Real-ESRGAN

Real-ESRGAN论文阅读

Abstract

尽管当前有很多在超分领域的工作,但是应用的效果并不好,比如ESRGAN。本文提出Real-ESRGAN,使用一个高阶的模拟退化以及带有SN正则的U-NET判别器,能够更好的模拟真实世界复杂的图像退化过程。通过大量的实验也表明,它的视觉效果比以前的方法在各种数据集上表现的都好。

Introduction

图像退化过程模拟重建

单图像超分(SR):其目的是从低分辨率(LR)重建一个高分辨率(HR)图像。SRCNN开创了深度学习在SR领域的发展,但是之后的所有工作都是通过一个双边降采样核获得LR数据后进行学习,现实生活图像的退化无法用简单的双边采样模拟重建的。(cv2.resize((),bicubic))
REAL-ESRGAN目标是通过生成更接近现实生活中的LR图像去重建HR图像,从而获得更好的泛化性能。

退化过程

真正的复杂退化通常来自于不同退化过程的复杂组合,如照相机成像系统、图像编辑和互联网传输。例如,当我们用手机拍照时,照片可能会有几个退化情况,如相机模糊、传感器噪声、锐化伪影和JPEG压缩。
比如:用户A用手机拍照,将照片上传到一个社交媒体应用程序,图片会进行压缩和噪音的添加;之后用户B进行图片下载,又会进行压缩和添加噪音;用户B将图片转发给用户C,在互联网传输的过程之中图像进一步退化。真实情况只会更加复杂。

Real-ESRGAN解决方案

这促使经典的“一阶”退化模型扩展到现实世界退化的“高阶”退化模型。Real-ESRGAN使用二阶退化模型,二阶即简单又有效,并且在退化过程中加入了sinc滤波器来模拟常见的振铃伪影。`

artifacts(振铃伪影):图像的灰度剧烈变化处产生的震荡,就好像钟被敲击后产生的空气震荡。振铃伪影通常出现在图像的锐利边缘附近以伪边缘形式出现。如图:振铃伪影
很明显看到,在梯度变化剧烈,比如第一幅图的黑色出现的地方,周围出现白色的一圈,这就是振铃伪影。

Discrimination结构改变

图像的退化过程变得复杂,就要求判别器能够拥有更强大的能力。

Real-ESRGAN解决方案

使用U-Net代替VGG,因为需要梯度反馈提供更加强大的局部细节信息来判断fake和real图像,而U-Net输入输出是一样的大小,结合U-Net的网络结构,能够提供更多的信息。
但是U-Net的结构和复杂的退化也增加了训练的不稳定性。所以Real-ESRGAN使用SN正则和EMA帮助稳定训练。

spectral normalization (SN) regularization:(简单做介绍)我们知道损失函数缺什么就加什么样的正则项。SN正则的目的就是让模型具备更好的泛化性能,让模型朝着目标点附近平坦的地方前进。
EMA(指数移动平均):【炼丹技巧】指数移动平均(EMA)的原理及PyTorch实现 - 知乎 (zhihu.com)可以看这篇文章的解释

Related Work

这部分主要讲了SR领域,显式建模、隐式建模的方法以及退化模型。

扫描二维码关注公众号,回复: 14627799 查看本文章

Methodology

退化模型退化模型

Classical Degradation Model

这一部分讲了退化模型的各个部件,以及实现。

  • Blur:使用广义高斯模糊和高原状分布概率分布为 1 n e x p ( − 1 2 ( C T ∑ − 1 C ) β \frac{1}{n}exp(-\frac{1}{2}(C^T\sum^{-1}C)^\beta n1exp(21(CT1C)β 1 n 1 1 + ( C T ∑ − 1 C ) β \frac{1}{n}\frac{1}{1+(C^T\sum^{-1}C)^\beta} n11+(CT1C)β1,所以在代码里面会看见一个sharpen parameter(β)。其中,Σ为协方差矩阵;C是高斯分布采样出来的坐标;N是归一化常数。
  • noise:加噪音,可以加高斯噪音、泊松噪音(泊松噪声的强度与图像强度成正比,不同像素处的噪声是独立的。)
  • Resize (Downsampling):下采样,最近邻插值、area resize、双线性插值和双边插值,由于最近邻插值引入了错位问题,排除它,其他随机选择(增加了退化模型复杂度)。
  • JPEG compression:JPEG压缩,使用pytorch的DiffJPEG实现。

High-order Degradation Model & Ringing and overshoot artifacts

主要讲了高阶退化模型如何实现,以及sinc的实现(看退化模型图就够了)

Networks and Training 训练

generator
Real-ESRGAN的generator
generator和ESRGAN基本一致,只在输入提供多个尺度。首先使用pixel-unshuffle来减小空间大小和扩大信道大小,之后进行输入,对应的最开始的网络input_channel也需要进行相应的改变(这部分train的时候没搞懂是怎么train的,论文实验部分也有说每个batch训练必须固定一个scale,所以使用一个training pair pool帮助多样性训练,还是不太懂,回头看源码)。
使用带有SN的U-Net的原因这里不再赘述。

训练

首先,训练了一个具有L1损失的面向PSNR的模型(ESRNet)。所得到的模型用Real-ESRNet进行命名。然后,使用训练过的面向PSNR的模型作为generator的初始化,并结合L1损失、感知损失和GAN损失来训练Real-ESRGAN。(和ESRGAN一致,感知损失使用VGG五层特征图的加权做损失)

Experiments

这部分讲了输入部分-退化模型的参数设置,比如高斯核什么的,还有上面说的感知损失使用了VGG五层的加权,以及training pair pool的设置。还有通过实验发现可以使用锐化过的图像作为gt,能够实现更好的锐度平衡和伪影抑制—Real-ESRGAN+。
实验部分还有很多细节,这里就不说了,可以结合代码看看,毕竟Real-ESRGAN的效果要比ESRGAN以及之前的所有工作都要好太多。

猜你喜欢

转载自blog.csdn.net/m0_51421744/article/details/128507917