SRGAN损失函数(目标函数)详解

概要

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损失(内容):

def vgg_loss(y_true, y_pred):
    
    vgg19 = VGG19(include_top=False, weights='imagenet', input_shape=image_shape)
    vgg19.trainable = False
    for l in vgg19.layers:
        l.trainable = False
    loss_model = Model(inputs=vgg19.input, outputs=vgg19.get_layer('block5_conv4').output)
    loss_model.trainable = False
    return K.mean(K.square(loss_model(y_true) - loss_model(y_pred)))

正则化损失(全变分损失):

import keras.backend as K
def total_variation_loss(input_img):
	a = K.square(
		x[:,:img_height-1,:img_width-1,:]-
		x[:,1:,img_width-1,:])
	b = K.square(
		x[:,:img_height-1,:img_width-1,:]-
		x[:,:img_height-1,1:,:])
	return K.sum(K.pow(a+b,1.25))

其实就是将所有的上一列减去下一列,上一行减去下一行。

  • 8
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值