如何評價谷歌最近在人臉數據集上取得驚人效果的BEGAN模型?

arXiv地址:Boundary Equilibrium Generative Adversarial Networks

Tensorflow實現:carpedm20/BEGAN-tensorflow

在CelebA人臉數據集上與其他模型的對比效果:

一些疑問:

1. 論文強調了「平衡生成器G與判別器D」這樣一個議題,但是此議題僅僅在原始GAN的Loss設定下有意義,原因是過度訓練D的話會導致G梯度消失,所以才要平衡;而在BEGAN所用的WGAN框架下,判別器D訓練程度應當是越大越好,為何這個議題還有意義?

2. BEGAN訓練的目標是先讓D使得真實樣本的重構誤差小、生成樣本的重構誤差大,讓G使得生成樣本的重構誤差小,所以整個訓練過程中應該是真實樣本的重構誤差小於生成樣本的重構誤差。接著論文在公式(5)中給出了平衡係數gamma的定義(該平衡係數也是論文的主要貢獻之一):

按照上述說法,gamma應當是一個大於1的數,然而論文給出的gamma範圍卻在0-1之間,應當如何理解?

3. 如上圖所示,實驗給出的生成人臉效果對比中,其他模型用的數據集是帶有較多背景的,而BEGAN模型所用的數據集縮小了人臉截取範圍,使得背景部分少了很多,這樣是否還能夠進行公平的比較?


應邀。

從文章報告的效果來看確實非常好。但如題主所指出的,裡面很多細節都存在問題。

最重要的是作者的訓練數據集和標準集差別很大:首先是沒有背景,而且看上去人臉的角度和姿態變化不大,都是非常正規的人物照,看上去是專業攝影師給名人排的人物照片。這點和標準集celebA區別很大。 celebA基本是在開放環境下拍出來的,背景複雜,人臉的角度和姿態變化也非常大,這個都增加了難度。所以,作者把這兩個數據集混在一起比較、得到的結果就缺少一定的說服力,特別是考慮到目前作者也沒有共享自己的數據集,也增加了大家和BEGAN比較的難道。

另外,作者的圖2,與EBGAN的比較也有問題。EBGAN很明顯是在celebA上訓練出的結果,而BEGAN的結果是自己數據集上訓練出來的。把兩個不同模型在不同數據集上得到的結果放在一起比較,這有點奇怪。道理上,作者應該很容易在同一個數據集,或者celebA或者自己的數據集,上給出一個一致的比較。

最後,非常奇怪的是,作者沒有在任何一個公開數據集上做一個比較,如果作者不能公開數據集,這會讓後面的研究非常困難。因為一旦大家認可這樣的state-of-the-art,後面的相關文章都需要和BEGAN比較。如果即沒有代碼也沒有共同的數據集可以使用,後面的研究就無法和BEGAN做公平的對比。

具體後面作者會如何響應,我們可以拭目以待。


這篇裡面的Generative Model和普通的GAN有以下區別:

  • Discriminator用Auto-Encoder而不是classification網路
  • GAN是通過match fake和real image的分布,而BEGAN是通過match fake和real image在Auto Encoder(Discriminator) 上的分布,Discriminator的主要任務是重構real image和「不好好重構」 fake image
  • 用參數k來幫助D和G的平衡
  • 用超參數γ來平衡圖像質量和多樣性
  • 用measure這個變數來指示BEGAN是否收斂

效果還是很impressive的,而且他的網路結構很簡單,我訓練128的圖的時候,把filter數目從64增加到128,後面生成的128的圖質量比64的好,猜測如果加上類似BN的trick,效果會更好。

有一點很tricky的就是,之前實現128的時候,直接center crop了celebA,後面出現了很嚴重的mode collapse,然後從Heumi/BEGAN-tensorflow這裡偷了個先detect和crop人臉的預處理方法,mode collapse就沒有了,所以題主的第三個問題,我覺得這種比較是不公平的,我猜測BEGAN在比較「乾淨」,結構性強的數據集上效果好,但是在背景複雜的數據集上不一定效果好。

最後,我的pytorch實現: sunshineatnoon/Paper-Implementations,以及一些其他的實現:

Heumi/BEGAN-tensorflow

artcg/BEGAN

carpedm20/BEGAN-tensorflow

RuiShu/began


更新:我正在寫一篇文章:BEGAN的填坑之路 - 知乎專欄,歡迎拍磚和圍觀。

--------------------------------------以下是原答案--------------------------------------

我是吃瓜群眾,我來貼一下實驗結果吧。

我用的不是carpedm20寫的版本,是artcg寫的artcg/BEGAN。carpedm20寫的那個版本mode collapse太嚴重。

30個epoch跑了10來個小時。這是gamma=0.75,epoch=30的結果:

下面這個是gamma=1.2,epoch=30的結果

實驗結果表明,gamma並不是如文中所說取值只能在0-1之間,它也可以大於1。

我的理解跟題主一樣,gamma似乎應該大於1。文章的實驗結果可能是經過挑選的,不帶背景的圖像生成質量會高一些。

另外,這個文章雖然有好多問題,不過實驗結果表明,生成圖像的多樣性確實很好。


說一下我的理解吧。

第一個問題:

全篇文章從首至尾都沒有提到梯度消失問題,確實梯度消失會導致生成器和判別器失衡,而一般的做法也是平衡兩者。但不要忘了,原文旨在擬合重構誤差的分布而不是sample的分布,WGAN和之前的方法都是在做數據分布的擬合,對應的loss可以看做數據域的distance,但是這裡的loss對應真實樣本和假樣本重構誤差分布的distance,這個平衡可能不是為了解決梯度消失問題。

第二個問題:

先摘錄原文一句話

我的理解是這個gamma用於控制G階段和D階段的更新權重,一個低的gamma取值相當於判別器(這裡既是判別器,又是auto-encoder)編碼出來的抽象特徵需要照顧到G(z)而不是單純為了區分G(z)和x,可以這樣理解,如果我們用某一特徵來判別G(z)和x,那麼這個特徵上重構G(z)和x的誤差的差一定很大,反之當這個特徵難以判別G(z)和x了以後,就可以輕易重構G(z)和x了。

所以這裡我贊同你的觀點

BEGAN訓練的目標是先讓D使得真實樣本的重構誤差小、生成樣本的重構誤差大,讓G使得生成樣本的重構誤差小,所以整個訓練過程中應該是真實樣本的重構誤差小於生成樣本的重構誤差。

但是其實個人感覺並不一定訓練過程中gamma大於1,我們就要把這個值設為大於1的了。既然說了這是個超參,那麼這個gamma就可以人為設定的。把gamma設為[0,1],只是表達了我們「想要」這種效果,而非「已經達到」這種效果。

第三個問題:

確實有問題。。。可以跑代碼看看效果


1. 據我所知和 Reddit 上的討論,好像 WGAN 那小節就是個幌子。

2. 你正好是理解反了。

3. 從生成的數據中挑出一部分好看的這個過程確實比較 subtle,可能自己跑一下比較好。


最近做了一個GAN用於照片級的特定身份正面人臉合成的工作,可用於識別。Beyond Face Rotation: Global and Local Perception GAN for Photorealistic and Identity Preserving Frontal View Synthesis 論文在arxiv上可以獲得,歡迎關注!


第一個問題,應該是實踐中的經驗。除了梯度消失,還有可能G陷入局部最小之類的。

第二個問題,作者在文章里已經解釋為什麼gamma&<1了,在具體演算法流程那塊。你們用大於1的gamma也能訓練出結果是因為最開始作者強行把那個真正發揮作用的值設為0了,然後那個值的lr還特別小。多訓練幾輪應該就不收斂了。或者你們可以試試把那個值初始化為1

第三個問題,都已經人眼判斷哪組結果好了,還在乎什麼公平不公平啊。。後面好像還有個在cifar10上的結果

arxiv打不開了,paper白天看的,憑記憶強答一發。。


關於平衡G與D:
BEGAN並不是在"WGAN框架下"吧。WGAN是優化G(z)與x之間的Wasserstein距離,BEGAN完全不是。個人感覺BEGAN里使用Wasserstein距離的那一段只是論證了「L2距離可以理解為倆正態分布之間Wasserstein距離的近似」,對後文影響不是很大...

BEGAN和EBGAN(Energy-based GAN)更相似些。EBGAN也是用auto-encoder來做判別器,也需要平衡G與D。

關於gamma&<1: 跟真實圖片x相比,生成的圖片G(z)對auto-encoder來說一般更容易重構,所以通常L(G(z)) &< L(x)。如果gamma過大,為了讓圖片難以重構G(z)會生成更多的artifact。

關於可比性:
論文里強調了"We must keep in mind that these are trained on different datasets so direct comparison is difficult."


推薦閱讀:

請問如何將深度學習Caffe做成一個動態庫,方便在其他應用程序中調用?
卷積神經網路(CNN)學習資料推薦?
如何繪製caffe訓練過程中的loss和accurary的曲線??
batch normalization的multi-GPU版本該怎麼實現?

TAG:深度學習DeepLearning | 生成對抗網路GAN |