GAN及其改进算法
GAN:G生成器生成数据,G判别器判别生成器生成的数据是否是真实的数据。也就是生成器拟合真实数据的分布。所以对于不同数据集,分布会不同,也就需要重新训练,非常麻烦。
SRGAN:有一个生成器和一个判别器,判别器的主体使用 VGG19,生成器是一连串的 Residual block 连接,同时在模型后部也加入了 subpixel 模块,让图片在最后面的网络层才增加分辨率,提升分辨率的同时减少计算资源消耗。
DCGAN:
(1)去掉了G网络和D网络中的pooling layer。
(2)在G网络和D网络中都使用Batch Normalization
(3)去掉全连接的隐藏层
(4)在G网络中除最后一层使用RELU,最后一层使用Tanh
(5)在D网络中每一层使用LeakyRELU。
WGAN:
(1)彻底解决了训练不稳定的问题,不再需要设计参数去平衡判别器和生成器;
(2)基本解决了collapse mode 的问题,确保了生成样本的多样性;
(3)训练中有一个向交叉熵、准确率的数值指标来衡量训练的进程,数值越小代表GAN 训练得越好,同时也就代表着生成的图片质量越高;
(4)不需要精心设计网络结构,用简单的多层感知器就能够取得比较好的效果
WGAN理论上给出了GAN训练不稳定的原因,即交叉熵(JS散度)不适合衡量具有不相交部分的分布之间的距离,转而使用wassertein距离去衡量生成数据分布和真实数据分布之间的距离,理论上解决了训练不稳定的问题。
◆ 解决了模式崩溃的(collapse mode)问题,生成结果多样性更丰富。
◆ 对GAN的训练提供了一个指标,此指标数值越小,表示GAN训练的越差,反之越好。可以说之前训练GAN完全就和买彩票一样,训练好了算你中奖,没中奖也不要气馁,多买几注吧。
风格迁移代码:https://github.com/xiaoqian19940510/python-/tree/master/GAN
后续会上传图像补全,超分辨率的code