总结两篇用生成对抗网络做超分辨率图像的文章,SRGAN(Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network)和ESRGAN(Enhanced Super-Resolution Generative Adversarial Networks)。 可连系我以前的文章https://zhuanlan.zhihu.com/p/66941397 一起看。
一、SRGAN
这是twitter发在CVPR2017的工作,第一次把gan用于4倍下采样图像的rg重建。开篇就讲到图像超分辨率的工作大都集中于以均方差(MSE)作为损失函数,这样会造成生成图像过于平滑,缺少高频纹理细节。提出了一个由adversarial loss和content loss组成的损失函数,损失函数作为GAN的判别器损失函数来对生成图像进行判别。
GAN的生成器是残差块+卷积层+BN层+ReLU,对于GAN的判别器就是VGG+LeakyReLU+max-pooling,具体结构如图。
感知损失函数大概就是不从像素层面判断生成图像的质量好不好,而是从观感的角度来判别(也就是高层抽象特征进行对比),由判别器来判别。感知函数由两个部分组成:Content Loss+Adversarial Loss。
在基于预训练的VGG19的RELU激活层来定义Content loss函数:
Adversarial Loss 是GAN网络生成器部分损失,
是生成图像被判别为高分辨率图像的概率:
二、ESRGAN
文章是香港中文(深圳)本科生在eccv2018的文章,该方法在PIRM218-SR比赛取得冠军。论文分析SRGAN能够生成更多的纹理细节,但它纹理往往不够自然,也常伴随着一些噪声。然后深入研究并改进了SRGAN的三个关键部分——网络结构、对抗损失函数和感知损失函数。具体就是引入了一个新网络结构单元RRDB (Residual-in-Resudal Dense Block);借鉴了相对生成对抗网络(relativistic GAN)让判别器预测相对的真实度而不是绝对的值;还使用了激活前的具有更强监督信息的特征表达来约束感知损失函数。
ESRGAN针对SRGAN进行了四项改进:
- 引入对生成器架构的更改(从Residual Blocks切换到RRDB,删除批量规范化)。
- adversarial loss方面的改进主要是运用了relativistic GAN【2】使relative realness instead of the absolute value.
- perceptual loss方面使用激活之前的特征进行计算(以前是用激活后的特征)。
- 预先训练网络以首先针对PSNR进行优化,然后使用GAN对其进行微调。
架构方面
ESRGAN还受益于密集连接(如DenseNet的作者所提出的)。这不仅可以增加网络的深度,还可以实现更复杂的结构。这样,网络可以学习更精细的细节。
ESRGAN不使用批量标准化。学习如何规范化层之间的数据分布是许多深度神经网络中的一般做法。BN层通过在训练中使用一批数据的均值和方差规范化特征并且在测试时通过使用在整个训练集上预估后的均值和方差规范化测试数据。当训练集和测试集的统计结果相差甚远时,BN层常常趋向于引入一些不太爽的伪影并且限制了模型的泛化能力,删除批量标准化可提高稳定性并降低计算成本(减少学习参数)。
adversarial loss方面
相对鉴别器:原本判别器仅针对输入图xx判断其是真实且自然的概率,而相对判别器尝试去预测真实图像xrxr相对生成结果(假的)xfxf更加真实地概率。相对gan可以看这两篇文章12。
本文基于这一网络提出了一种平均相对判别器,具体生成器损失函数如下:
判别器损失:
perceptual loss方面
末尾激活函数对感知损失结果输出具有负面影响。
可以发现通过激活函数后,输出特征经过平滑后明显有所损失,所以为了尽可能保留特征细节,因此作者选用了去掉VGG末尾后的网络从取得感知损失结果。总损失函数如下:
网络插值(Network Interpolation)
为了去除基于GAN产生的噪声结果,本文提出了一种高效的策略——网络插值。具体操作如下:首先训练一个以PSNR导向的网络GPSNRGPSNR,之后再使用一个基于GAN网络的GGANGGAN来进行调优,通过两个网络参数结合来提升生成结果。