使用 GAN 網路生成名人照片

使用 GAN 網路生成名人照片

來自專欄 AI研習社社區5 人贊了文章

本文為 AI 研習社編譯的技術博客,原標題為 Celebrity Face Generation using GANs (Tensorflow Implementation),作者 Shubham Sharma。

翻譯 | 王江舟 校對 | 吳曉曼 審核 | 餘杭

生成式對抗網路(GANs)是深度學習中最熱門的話題之一。 生成式對抗網路是一類用於無監督學習演算法的人工演算法,由兩個神經網路組成的系統實現:

  1. 生成器
  2. 鑒別器

兩個神經網路都在零和遊戲框架中相互競爭。 生成式對抗網路(GANs)是一組模型,他們基本上學習創建與其給出的輸入數據類似的合成數據。

鑒別器的任務是確定給定圖像是否看起來自然(即,是來自數據集的圖像)還是看起來它是人工創建的。 生成器的任務是創建與原始數據分布類似的自然外觀圖像,這些圖像看起來足夠自然以欺騙鑒別器網路。 首先給生成器一個隨機雜訊,使用它產生假圖像,然後將這些假圖像與原始圖像一起發送到鑒別器。

鑒別模型的任務是確定給定圖像看起來是自然的(來自數據集的圖像)還是人工創建的。 這基本上是一個二元分類器,它採用普通卷積神經網路(CNN)的形式。 生成器的任務是創建與原始數據分布類似的自然外觀圖像。

生成器試圖矇騙鑒別器,而鑒別器試圖不被生成器矇騙。當模型通過交替優化訓練時,兩種方法都被改進到「假圖像與數據集圖像無法區分」的點。

生成對抗式網路的數學方程

我們可以認為這個方程由兩部分組成,第一部分是從原始數據分布中採樣的數據,第二部分是從雜訊數據分布中採樣的數據。

第一部分

鑒別者總是希望最大化其圖像分類的正確率。 這裡的圖像是從原始數據分布中採樣的,原始數據分布是真實數據本身。 D(x)是顯示圖像是真實的概率,所以鑒別器總是想要最大化D(x),因此log(D(x))應該最大化並且在這一部分內容中必須最大化。

第二部分

z是隨機雜訊樣本,G(z)是使用雜訊樣本生成的圖像。 這個術語的解釋和之前很相似。 生成器總是希望最大化鑒別器被生成的圖像矇騙的概率。 這意味著,生成器想要最大化D(G(z)),因此它應該最小化1-D(G(z)) 也意味著(1-D(G(z)))最小化。

使用GANs 生成名人圖像

名人圖片數據集

CelebA數據集是超過200,000個帶注釋的名人面部圖像的集合。 因為在這個博客中,我只是想生成面孔所以我沒有考慮注釋。

1)獲取數據:

我創建了helper.py文件,你可以通過該文件下載CelebA數據集圖像。 在運行此代碼片段時,它將下載CelebA數據集。(源代碼鏈接如下)。

2)預處理圖像:

由於我僅在面部圖像上工作,為獲得良好的效果所以我將其調整到28 * 28。 我裁剪了圖像中不包含圖像部分的部分。

由於生成式對抗網路很難訓練(你可以查看此鏈接,以了解為什麼生成式對抗網路的訓練如此困難?)medium.com/@jonathan_hu

為了獲得準確的結果,我們應該擁有一個良好的GPU(4GB或更高版本),通過運行此代碼片段,你可以了解是否使用自己的GPU安裝了tensorflow。

3)模型輸入和網路結構

我將圖像的寬,高,channel和雜訊參數作為模型的輸入,隨後生成器也會使用它們生成假圖像。

生成器結構:

在解卷積層之後,生成器結構具有緻密層和全連接層(除輸出層外每一層都有批量標準化,leaky ReLu和dropout)。生成器將隨機雜訊向量z,之後把它重塑為4D形狀並把它傳遞給一系列上採樣層。每個上採樣層都代表一個轉置卷積運算,即反卷積運算。

所有轉置卷積的深度從1024一直減少到3 ,它表示RGB彩色圖像。 最後一層通過雙曲正切(tanh)函數輸出28x28x3張量。

鑒別器結構:

鑒別器的工作是識別哪個圖像是真實的,哪個是假的。鑒別器也是具有批量歸一化、lekeay Relu的4層 CNN(輸入層除外)。鑒別器接收輸出圖像(大小為28 * 28 * 3)並對其進行卷積。 最後,鑒別器使用Logistic Sigmoid函數顯示用於表示圖像是真或假的輸出概率。

當鑒別器看到圖像中的差異時,它將梯度信號發送到生成器,此信號從鑒別器流向生成器。

4)生成器損失和鑒別器損失

鑒別器從訓練圖像和生成器兩者接收圖像,因此在計算鑒別器的損失時,我們必須增加由於真實圖像和假圖像造成的損失。兩個網路被同時訓練,所以我們需要將生成器和鑒別器都進行優化。 如果圖像是真實的,我們希望從鑒別器輸出接近1的概率,如果圖像是假的,則輸出接近0的概率。

訓練和結果

當訓練過程正在進行時,生成器產生一組圖像,並且在每個 epoch 之後,它變得越來越好,使得鑒別器不能識別它是真實圖像還是假圖像。 結果生成如下

第1次Epoch和第2次Epoch之後

第3次Epoch和第4次Epoch之後

第5次Epoch和第6次Epoch之後

新面部圖像不斷地產生

我也從這裡獲得了預先訓練好的網路,如果你想使用這個預先訓練好的網路運行生成式對抗網路,那麼請使用我在這裡提供的這個python文件。

運行後,這將生成10個假圖像的集合。 他們之中有一些是:

這些是從給定的預訓練網路生成的假圖像。

到這裡就完成了與生成式對抗網路相關的內容。

medium.com/coinmonks/ce

一個專註於

AI技術發展和AI工程師成長的求知求職社區

誕生啦!

歡迎大家訪問以下鏈接或者掃碼體驗

https://club.leiphone.com/page/home?

club.leiphone.com

club.leiphone.com/page/ (二維碼自動識別)


推薦閱讀:

TAG:計算機視覺 | 圖像識別 | 生成對抗網路GAN |