利用GAN生成二次元头像项目对GAN训练的探索

代码放在了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模式,否则生成图片依然会偏亮。
3、discriminator太强时,生成器就已经学不到东西了。这里可以参考知乎上面一篇还算详细的推导:链接
4、我们一般在更新完discriminator后更新生成器,这时我们会重新产生一个生成器的输入,经过生成器拟合以后,然后再把生成器的输出拿给discriminator打分,并更新生成器参数。笔者尝试同时更新两者的参数:即
只产生一次输入,得到discriminator的输出后,同时计算loss,并对discriminator以及生成器进行更新。笔者对每种更新方式训练了大概10次,每次50个epoch(1280张图片),得到的平均损失函数图像如下所示:
在这里插入图片描述
从图中可以很明显看到同时更新参数的生成器训练的更好一些(红线),而对discriminator并没有明显影响。
5、discriminator的输入层不要接BatchNormalization,输出层加个sigmoid可以加快收敛。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章