【杂谈】如何系统性地学习生成对抗网络GAN
1 了解GAN基本原理和应用
有三说GANs
2 GAN的重要理论
GAN优化目标
3 GAN实战专栏
好记性不如烂笔头,终究还是要靠实战,于是我们在有三AI知识星球的网络结构1000变中添加了GAN专栏,内容会包括论文详细解读,部分包括代码解读和实战,形式如下:
有三AI知识星球-网络结构1000变
SRGAN
SRGAN(super-resolution GAN)是第一个基于GAN的图像超分辩模型,能够取得4倍的高分辨率放大。
作者/编辑 言有三
早期的基于CNN模型的超分辨率框架如SRCNN,ESPCN都使用MSE损失作为优化目标,它们能取得较高的PSNR和SSIM指标,但是存在结果过于平滑的问题。全局的MSE指标较小并不能保证局部细节的清晰度,较大的MSE指标也并不意味着结果差,比如图偏移一个像素后与原图的MSE可能很大,但是感知结果非常相近,因此人眼对结果的感知评价并不完全与这些指标相符。
为了获得与人眼感知更加相符的结果,研究者从风格迁移等任务中进行借鉴,使用了感知损失替代MSE损失,它就是基于特征空间的欧式距离。
在文[2]中将SRCNN模型[1]的像素损失改为感知损失后,显著提高了视觉效果,如下图的倒数第二幅图与最后一幅图的比较。
另外,随着生成对抗网络GAN的发展,生成器和判别器的对抗学习机制在图像生成任务中展现出很强大的学习能力。
基于以上两个特点,SRGAN[3]被提出,它使用ResNet作为生成器结构,使用VGG作为判别器结构,具体结果如上图。
生成器结构包含了若干个不改变特征分辨率的残差模块和两个基于亚像素卷积的后上采样模块,因此它实现了4倍的分辨率提升。
判别器结构则包含了若干个通道数不断增加的卷积层,每次特征通道数增加一倍时,特征分辨率降低为原来的一半。
损失函数包括两部分,分别是内容损失和对抗损失。
根据内容损失选择MSE损失还是感知损失,以及是否添加GAN损失,作者比较了多个模型,SRResNet-MSE, SRResNet-VGG22,SRGAN-MSE, SRGAN-VGG22, SRGAN-VGG54。SRResNet即不使用GAN损失,MSE和VGG22分别表示不同的内容损失。
上图展示了对比结果,其中SRResNet就是SRResNet-MSE。可以看出添加GAN损失能显著改善视觉效果,而使用感知损失的结果细节也比MSE损失更好。
下图统计了一些自然的图像块,基于MSE生成的图像块和基于GAN生成的图像块的对比,也可以发现MSE的结果更加平滑。
github的tensorflow和pytorch开源代码如下:
https://github.com/brade31919/SRGAN-tensorflow
https://github.com/leftthomas/SRGAN
上图展示了一些结果,感兴趣的读者可以使用自己的数据进行训练。
参考文献
[1] Dong C, Loy C C, He K, et al. Image super-resolution using deep convolutional networks[J]. IEEE transactions on pattern analysis and machine intelligence, 2015, 38(2): 295-307.
[2] Johnson J, Alahi A, Fei-Fei L. Perceptual losses for real-time style transfer and super-resolution[C]//European conference on computer vision. Springer, Cham, 2016: 694-711.
[3] Ledig C, Theis L, Huszár F, et al. Photo-realistic single image super-resolution using a generative adversarial networ k[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 4681-4690.
一些内容预览如下: