概要
SRGAN的特点之一就是引进了损失感知函数,由此提升了超分辨率之后的细节信息。本文主要像您介绍SRGAN使用的损失函数,及其Keras实现。
损失函数公式
这是原文中给出的损失函数。
容易看出,此损失函数包括两部分,第一部分是感知损失,第二部分是正则化损失。
感知损失
感知损失是由李飞飞团队提出的一种损失函数。
感知损失分了两部分,内容损失和对抗损失。
内容损失
论文中给出的内容损失如下:
论文中指出:传统的超分辨率任务中直接使用的均方根误差(MSE)的损失函数,虽然有助于提高超分辨率任务的峰值信噪比(PSNR),但是对于图像的细节却是起到了模糊作用。本文使用的内容损失,是将生成器生成的假高分辨率图像和真实的高分辨率图像送入VGG19网络中进行特征提取,然后在提取的特征图上再使用均方根误差。这里并非是利用全部的VGG19网络提取特征,而是仅仅利用其中一部分。所以对应不同层数的VGG19网络进行提取。例如使用前9层进行特征提取,或者前7层进行特征提取。公式下方也讲了:这里的i和j分别就是指第i层最大池化前的第j个卷积层。作者进行了实验,在VGG网络不同位置提取出的特征图,并将其均方根误差作为内容损失进行了训练。作者选取的层数如下:
SRGAN-MSE是直接使用MSE在假高分图像和真高分图像之间计算。SRGAN-VGG22:是利用第二个最大池化前的第二个卷积层之前的网络进行特征提取,在假高分图像和真高分图像进行MSE均方根误差的计算。也就是VGG19网络的前4层进行特征提取。SRGAN-VGG54:是利用第五个最大池化前的第四个卷积层之前的网络进行特征提取,在假高分图像和真高分图像进行MSE均方根误差的计算。也就是VGG网络的前16层的输出。实验结果表明,SRGAN-VGG54的细节信息最好,人眼的观赏效果也最好。显然,直接使用MSE的效果是不佳的。VGG22和VGG54效果是逐渐提升的。
对抗损失
论文中的对抗损失如下:
这实际上是GAN作者自己提出的一种改进型的生成器损失函数。最小化此式,也就是最大化判别器给予生成器所生成的图像为真的概率。
正则化损失
文章中使用的正则化损失是一种基于全变分范数的正则化损失函数。
这种正则化损失倾向于保存图像的光滑性,防止图像出来变得过于像素化。
代码的实现
vgg损失(内容):