SRGAN是在SRResnet的基础上加上一个鉴别器。GAN的作用,是额外增加一个鉴别器网络和2个损失(g_loss和d_loss),用一种交替训练的方式训练两个网络。
模型可以分为3部分:main(生成)模块,adversarial模块,和vgg模块。只在训练阶段会用到adversarial模块进行计算,而在推断阶段,仅仅使用G网络。
对任何一个问题,都可以让训练过程“对抗化”。“对抗化”的步骤是:先确定该问题的解决方法,把原始方法当成GAN中的G网络 ,再另外增加一个D网络(二分类网络),在原来更新main模块的loss中,增加“生成对抗损失”(要生成让判别器无法区分的数据分布),一起用来更新main模块(也就是GAN中的G网络),用判别损失更新GAN中的D网络。[1]
SRGAN损失包括两部分:内容损失和对抗损失,用一定的权重进行加权和。
内容损失
1.G网络,产生y_fake,和y_real求得MSE loss,可以得到很高的信噪比,但是这样的方式产生的图像存在高频细节缺失的问题。
2.因此,作者定义了以预训练19层VGG网络的ReLU**层为基础的VGG loss,求生成图像GθG(ILR)和参考图像IHR特征表示的欧氏距离。在已经训练好的vgg上提出某一层的feature map,将生成的图像的这一个feature map和真实图像这一个map比较。
对抗损失
生成对抗损失:生成让判别器无法区分的数据分布。DθG(GθG(ILR))表示的是判别器将生成器生成的图像
GθG(ILR)判定为为自然图像的概率
辨别器对假数据的损失原理相同,最终达到的目标是对于所有的真实图片,输出为1;对于所有的假图片,输出为0。
生成器的目标是愚弄辨别器蒙混过关,需要达到的目标是对于生成的图片,输出为1(正好和鉴别器相反).
代码实现:
[1]https://blog.csdn.net/DuinoDu/article/details/78819344