利用深度可分离卷积(depth-wise seperable convolution)和DCGAN生成二次元头像

代码放在了github上:Mobilenet+GAN
因为国内对discriminator的叫法很多,所以笔者这里就直接用英文了。
二次元头像只需要利用最简单的DCGAN网络结构就可以稳定,快速地训练出来。因为本篇重点不是DCGAN,这里对DCGAN就不做介绍了。
笔者这次利用Mobilenet-v1中的depth-wise seperable 结构来做GAN的鉴定器,并与DCGAN进行对比。也对一些参数进行了调整以做对比。

1、depth-wise seperable 结构用作discriminator时,训练结果并不稳定,而且收敛较慢,效果不太好。
2、处理图片时,归一化到【-1,1】比【0,1】好,后者生成的图片偏亮。还有在保存生成的图片时,一定要讲生成器调为eval模式,否则生成图片依然会偏亮。
笔者遇到的生成图片偏亮除了面提到的原因以外还有:discriminator第一层卷积层后面放置BN层。

3、discriminator太强时,生成器就已经学不到东西了。这里可以参考知乎上面一篇还算详细的推导:链接
4、我们一般在更新完discriminator后更新生成器,这时我们会重新产生一个生成器的输入,经过生成器拟合以后,然后再把生成器的输出拿给discriminator打分,并更新生成器参数。笔者尝试同时更新两者的参数:即
只产生一次输入,得到discriminator的输出后,同时计算loss,并对discriminator以及生成器进行更新。笔者对每种更新方式训练了大概10次,每次50个epoch(1280张图片),得到的平均损失函数图像如下所示:
利用深度可分离卷积(depth-wise seperable convolution)和DCGAN生成二次元头像_第1张图片
从图中可以很明显看到同时更新参数的生成器训练的更好一些(红线),而对discriminator并没有明显影响。
5、discriminator的输入层不要接BatchNormalization,输出层加个sigmoid可以加快收敛。

其他效果图可以在github上看到。

你可能感兴趣的:(机器学习)