1. 程式人生 > >手把手教你在Tensorflow實現BEGAN 達到驚人的人臉影象生成效果

手把手教你在Tensorflow實現BEGAN 達到驚人的人臉影象生成效果

 

 

全球人工智慧

文章來源:GitHub 作者:Heumi 翻譯:馬卓奇

文章投稿:[email protected]

相關文章:

導讀:本文是基於谷歌大腦(Google Brain)發表在 arXiv 的最新論文《BEGAN:邊界平衡生成對抗網路》實現的。該工作針對GAN 面臨的一些難題,例如如何衡量收斂,如何控制分佈多樣性以及如何維持鑑別器和生成器之間的平衡等問題,提出了改善。作者使用了很簡單的網路結構以及標準的訓練過程,在人臉生成任務中取得了優異的視覺效果,達到了目前最先進水平。

論文摘要

作者提出了一種新的能夠促成平衡(Equilibrium)的方法,以及配套的損失函式,這個損失的設計由Wasserstein 距離(Wasserstein distance)衍生而來,Wasserstein 距離是用於訓練基於自編碼器的生成對抗網路(auto-encoder based Generative Adversarial Networks)的。該方法在訓練階段能夠維持生成器和鑑別器之間的平衡。除此之外,該方法還提供了一種新的近似收斂策略,實現了快速穩定的訓練,並且達到了很高的視覺質量。作者還推匯出一種能夠控制影象多樣性和視覺質量之間的權衡的方法。該工作中,作者主要關注影象生成任務,即使是在更高解析度的情況下,也建立了視覺質量的新里程碑。並且僅是使用一個相對簡單的模型結構和標準的訓練流程就實現了這些。

論文有以下四個創新點:

  1. 一個簡單且魯棒的 GAN 結構,使用標準的訓練步驟實現了快速且穩定的收斂

  2. 一個平衡的概念,用於平衡判別器和生成器的競爭力

  3. 一種控制影象多樣性和視覺質量之間的權衡的新方法

  4. 一種近似衡量收斂的方法。目前已發表的這類方法的工作只有一個,就是 Wasserstein GAN(WGAN)

網路設計方法

鑑別器:

在鑑別器的設計上,作者使用自編碼器作為生成對抗網路的鑑別器,這一思想最早在EBGAN(Energy-based generative adversarialnetwork)中提出。

生成器:

在生成器的設計上,BEGAN 則借鑑了 Wasserstein GAN 定義損失(loss)的思路。傳統的GAN會嘗試直接匹配資料分佈,作者提出的方法是使用從Wasserstein距離衍生而來的損失去匹配自編碼器的損失分佈。這是通過傳統的GAN目標加上一個用來平衡鑑別器和生成器的平衡項實現的。

平衡:

在深度神經網路中,生成器的函式G和鑑別器的函式D的表示能力是一個必須要考慮的因素。它們由模型實現函式的方法以及引數的數量共同決定。傳統情況下,G和D往往不能達到平衡,判別器D往往在訓練早期就能競爭過生成器G。為了解決這一問題,作者引入了平衡的概念。

作者提出了一個衡量生成樣本多樣性的超引數 γ : 生成樣本損失的期望與真實樣本損失的期望值之比。在作者的模型中,判別器有兩個目標:對真實影象自編碼,並且將生成影象與真實影象區分開。這個超引數能夠平衡這兩個目標。γ 值比較低會導致影象多樣性較差,因為判別器太過於關注對真實影象自編碼。

EBGAN網路結構:

作者使用帶有指數線性單元(ELUs)的3x3卷積。每一層都重複2次。每次下采樣卷積濾波都線性增加。下采樣操作通過子取樣完成,取樣步長為2,上取樣通過最近鄰方法實現。在編碼器和解碼器的邊界處,處理過的資料塊通過全卷積層,不需要任何非線性操作對映到嵌入態。

作者表示他們的方法訓練過程更簡單,並且與傳統的GAN相比,網路結構也更簡單:不需要批歸一化(batch normalization),丟棄操作(dropout),反捲積(transpose convolutions),或者卷積濾波的指數增長(exponential growth for convolution filters)。

實驗結果

實驗資料:來自celeA資料庫的360000張名人人臉影象,保證了影象多樣性與質量。

基於能量的生成對抗網路(EBGAN)與作者提出的方法結果對比:

超引數 γ 值分別為0.7,0.5和0.3時的生成結果對比,隨著 γ 值增加,多樣性也有了增加,但是人工效果也更明顯:

空間連續性:

不同生成模型的影象在隱空間的插值結果:

影象質量與收斂性關係圖:

收斂性度量和影象質量評價:從圖中可以看出模型收斂很快,我們提出的衡量BEGAN收斂的方法與影象保真度之間有很好的聯絡。

總結

作者提出了一個新的平衡方法用來平衡對抗網路。使用該方法,網路可以收斂得到多樣化且視覺效果喜人的影象。即使在更高的解析度上進行細小的修改也能保持這一效果。訓練過程穩定,快速,並且對引數變化魯棒,並且不需要進行復雜的迭代訓練。

程式碼實現——BEGAN的Tensorflow實現實現細節:

訓練的模型是基於64x64的影象的。128x128的之後會更新。與原文不同的是訓練損失更新方法,以及學習速率衰減。首先,論文的損失更新方法是Loss_G以及Loss_D同時進行更迭。但是當我嘗試這種方法時,模型會崩潰。所以,這個程式碼使用了一種替代方法。第二,每2000次迭代,學習速率衰減為0.95。這個引數只是訓練經驗值,你可以改動或檢視論文的設定。

訓練過程:

如果想看訓練過程,請下載“dropbox”資料夾,並且執行tensorboard--logdir='./',我上傳了兩個訓練好了的模型(64x64 和 128x128)

Kt圖。當你訓練模型時,可以參考這個結果。達不到1.0.在我的設定下,可以收斂到0.08:

收斂度量(M_global),與論文的圖相同:

生成器的輸出和解碼器輸出對比:

使用方法:推薦你下載這個“dropbox”資料夾(https://www.dropbox.com/sh/g72k2crptow3ime/AAAhkGlHCw9zQh0aE-Ggdt3Qa?dl=0)

製作訓練資料:

1、下載celeA 資料集(img_align_celeba.zip)(http://pan.baidu.com/s/1eSNpdRG#list/path=%2FCelebA%2FImg)並且解壓到 'Data/celeba/raw'

2、執行 ' python ./Data/celeba/face_detect.py '

訓練(參考main.py中的began_cmd):

測試(參考main.py中的began_cmd):

環境需求:

  • TensorFlow 1.0.0

  • Python 2.7.12, Opencv, scipy0.18.1, numpy 1.11.2

程式碼實現結果:

1、這是我訓練的模型的隨機選取的結果。gamma從0.3到0.5。沒有進行擇優。Gamma為0.3時,結果很好但是比較偏向女性的臉。gamma為0.4時,效果最佳。gamma為0.5時,紋理很好但是會出現空洞的問題。

2、128x128影象和64x64影象。128x128影象十分震撼。中間四張影象看起來像女性的真實的面孔。

3、從初始圖到200000次迭代的結果。

論文地址:https://arxiv.org/pdf/1703.10717.pdf

GitHub資源:https://github.com/Heumi/BEGAN-tensorflow