BEGAN(Boundary Equilibrium GenerativeAdversarial Networks)-pyTorch實現

前言

近期對GAN做了些瞭解,目前GAN除了DCGAN,還有WGAN,WGAN-GP, LSGAN, EBGAN,BEGAN這些,簡單瞭解了下,大多數涉及到數學的,我都沒看懂,WGAN從很理論的角度提出了一些改進,但是一些paper說他收斂速度還不如DCGAN,目前還沒有全部仔細閱讀相關paper。

BEGAN:Boundary Equilibrium GenerativeAdversarial Networks中的例子可以生成128*128大小的清晰人臉,所以打算先以BEGAN做一個簡單的嘗試。

之前寫了一個DCGAN的tensorflow實現,這次就換pyTorch試試。目前github上很多項目都是以pyTorch寫的,瞭解一下有利於後續閱讀大神的代碼。tensorflow的api的確有些臃腫,在用的時候往往不知道該用哪個api。解決辦法只有唯一一種最佳實現方式這樣感覺學習起來會更容易一些,不會花太多時間在瞭解不同方法之間的異同比較上,能更集中精力做需要學習的事,畢竟越來越覺得時間不容易把握,分心的事情太多。

所以這次參考pyTorch官方DCGAN教程改寫了一個BEGAN的實現,同時熟悉一下pyTorch. pyTorch的tutorial做得真不錯,描述很詳細清晰,每一步的原因邏輯也很清晰。

paper原理和細節

優點

貢獻點如下

  • 簡單但魯棒的GAN結構,快速穩定收斂
  • 提出一種均衡概念來平衡discriminator和generator
  • 提出一種新的方式來平衡生成圖像的視覺質量和樣本的多樣性
  • 有一個可以標示收斂性的指標,除了WGAN以外第二個有此特性的GAN.

數學相關

作爲一個數學學渣,這部分沒看太懂,後續看懂了的話再補充。

網絡架構

網絡架構比較簡單,一個encoder,一個是decoder

  • generator和decoder的結構一樣
  • dicriminator則是encoder+decoder,輸入是圖片,輸出也是一樣大小的圖片
  • 每個卷積層後的激活函數是ELU
    在這裏插入圖片描述

損失函數

BEGAN的Discriminator的結構是比較特別的,其他的GAN的Disciminator出來的往往是輸入樣本是否爲真樣本的概率,而BEGAN則引入autoencoder到d裏面,D輸出的是和輸入一樣大小的一張圖片,其損失函數爲輸入數據xx和經過D(x)之後輸出的圖像之間按照pixelwise計算的差異作爲損失函數,作者建議用L1loss。

給定網絡結構和以下的迭代更新公式,即可復現原paper的論文了。
在這裏插入圖片描述

收斂度量

BEGAN提出了一個衡量GAN訓練收斂質量的測試量
Mglobal=L(x)+(γL(x)L(G(z))) M_{global} = L(x) + (\gamma L(x) - L(G(z)))

實驗結果

依然是64*64的人臉圖像大小,不過這次數據集是在celeba的基礎上用openface裁切出的人臉區域,頭髮帽子等背景的影響儘量降低了,也降低了GAN的難度,畢竟我只是個新手試水。

訓練了大概13\frac{1}{3}個epoch之後生成的圖像如下, 可能由於BEGAN是學習error分佈,前期較長時間在較爲模糊的一個狀態中,DCGAN在相同訓練數據的時候已經可以看到一些比較清晰的人臉了。但是BEGAN的大部分人臉還是比較模糊,只有個輪廓在,可能和損失函數是pixel-wise有關,更容易生成一些平滑的圖像。樣本多樣性倒是還可以,64個隨機樣本沒有看到生成一樣的人臉的。
在這裏插入圖片描述

23\frac{2}{3}個epoch之後效果明顯變好,各個人臉的五官都清晰很多,就是眼睛有點偏小的感覺,不知道我是我的覺還是訓練數據集裏面缺少大眼男神和女神,哈哈哈。
在這裏插入圖片描述

訓練完成一個epoch後,臉部細節基本都比較清晰了

在這裏插入圖片描述
訓練5個epoch後,眼睛也睜開了,細節更清晰逼真,看來之前訓練不夠,導致眼睛都像閉上一樣顯得小,足夠訓練之後,眼睛也比較清晰了,能看出眼球和神態表情了。部分圖片感覺光線有點暗。不同角度性別膚色表情的人臉都有,多樣性還不錯。帶眼鏡的沒有,可能不容易生成。
在這裏插入圖片描述
gif變化圖,前期模糊差異比較大,生成人臉後變化較小。

在這裏插入圖片描述

訓練過程中的loss變化曲線
loss 曲線作者提出的convergence measure變化曲線,感覺和loss差異也不大。從中來看,網絡在前期極速下降,20k次迭代後趨於收斂。
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20190206063212641.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM4Njg4MA==,size_16,color_FFFFFF,t_70

感想

從目前一些paper來看,深度學習的一些改進還是需要很深的數學基礎做鋪墊,要不就只能像我一樣看明白了,能實現出來但是不知道爲啥這樣效果會好,學習道路深遠。最近也的確感覺兩句話更有體會:

  1. 書讀百遍其義自見。
  2. 紙上得來終覺淺,絕知此事要躬行。

淺顯的道理很早就明白了,但是真實體會感覺還是不一樣的,希望能慢慢變成大神。

目前GAN嘗試了DCGAN和BEGAN兩種方案,據說18年之後對於GAN理論上的沒有太大突破,更多paper都集中與應用了,看到cycleGAN的效果感覺真酷,年後有空趕緊實現體驗膜拜一下。

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