使用 GAN 網路生成名人照片
來自專欄 AI研習社社區5 人贊了文章
本文為 AI 研習社編譯的技術博客,原標題為 Celebrity Face Generation using GANs (Tensorflow Implementation),作者 Shubham Sharma。
翻譯 | 王江舟 校對 | 吳曉曼 審核 | 餘杭
生成式對抗網路(GANs)是深度學習中最熱門的話題之一。 生成式對抗網路是一類用於無監督學習演算法的人工演算法,由兩個神經網路組成的系統實現:
- 生成器
- 鑒別器
兩個神經網路都在零和遊戲框架中相互競爭。 生成式對抗網路(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。 我裁剪了圖像中不包含圖像部分的部分。
由於生成式對抗網路很難訓練(你可以查看此鏈接,以了解為什麼生成式對抗網路的訓練如此困難?)https://medium.com/@jonathan_hui/gan-why-it-is-so-hard-to-train-generative-advisory-networks-819a86b3750b
為了獲得準確的結果,我們應該擁有一個良好的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個假圖像的集合。 他們之中有一些是:這些是從給定的預訓練網路生成的假圖像。
到這裡就完成了與生成式對抗網路相關的內容。
https://medium.com/coinmonks/celebrity-face-generation-using-gans-tensorflow-implementation-eaa2001eef86
一個專註於
AI技術發展和AI工程師成長的求知求職社區
誕生啦!
歡迎大家訪問以下鏈接或者掃碼體驗
https://club.leiphone.com/page/homehttps://club.leiphone.com/page/home (二維碼自動識別)
推薦閱讀: