利用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上看到。

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