自己跑了一些比较经典的GAN模型,其中加入了部分修改
DCGAN基本完全照搬PyTorch官方文档的代码,只在数据处理部分进行了修改。DCGAN的结构如下所示,其主要贡献是对生成器以及判别器的网络模型做了修改,使用卷积神替换掉了全连接。
WGAN在DCGAN的基础上增加了原始的WGAN改进,包括:
- 取消掉了判别器最后一层的sigmod
- 对生成器和判别器的损失函数做了修改,不取log
- 使用一个clip对每次参数更新的结果做出了一定的截取
- 优化器改用了RMSProp
WGAN-gp在WGAN的基础上又做了更改,舍弃clip转而采用gradient penalty(梯度惩罚)
WGAN-div在WGAN-gp的基础上做出改进,对梯度惩罚的计算方式做出了改进,引入了Wasserstein Divergence(Wasserstein散度)
PGGAN的核心理念是将让成器和分类器一步步放大图像的尺寸,从4×4最后放大到1024×1024。生成器和分类器也是放大一次增加一个block。而这个block的设计也是参考了resnet,因为突然放大会导致模型不稳定,用这种方法可以平滑过渡。
CycleGAN通过增加一个生成网络将生成数据还原为原本数据并计算还原后的数据与原数据相似度的方法,为生成器的生成做出一定限制,实现了无监督风格迁移的模型训练。
这里推荐李宏毅老师的cycleGAN讲解:https://www.youtube.com/watch?v=wulqhgnDr7E
Pytorch DCGAN的官方文档: https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html
eriklindernoren/PyTorch-GAN: https://github.com/eriklindernoren/PyTorch-GAN
rosinality/progressive-gan-pytorch: https://github.com/rosinality/progressive-gan-pytorch
数据集使用kaggle用户提供的数据:
anime-faces: https://www.kaggle.com/soumikrakshit/anime-faces
selfie2anime: https://www.kaggle.com/arnaud58/selfie2anime