當前位置:
首頁 > 知識 > GAN 學習指南:從原理入門到製作生成 Demo,總共分幾步?

GAN 學習指南:從原理入門到製作生成 Demo,總共分幾步?

AI 研習社送書咯!

參與文章評論

社長將挑選當天點贊數量最多的用戶

贈送《深度學習》一本

還有什麼想看的 AI 資料 & 書籍

歡迎在評論區留言告訴社長!

AI研習社註:本文作者何之源,復旦大學計算機科學碩士在讀,研究人工智慧計算機視覺方向。本文由AI研習社編輯整理自作者知乎專欄,獲授權發布。

生成式對抗網路(GAN)是近年來大熱的深度學習模型。最近正好有空看了這方面的一些論文,跑了一個 GAN 的代碼,於是寫了這篇文章來介紹一下 GAN。

本文主要分為三個部分:

介紹原始的 GAN 的原理

同樣非常重要的 DCGAN 的原理

如何在 Tensorflow 跑 DCGAN 的代碼,生成如題圖所示的動漫頭像,附送數據集哦 :-)

一、GAN 原理介紹

說到 GAN 第一篇要看的 paper 當然是 Ian Goodfellow 大牛的 Generative Adversarial Networks,這篇 paper 算是這個領域的開山之作。

GAN 的基本原理其實非常簡單,這裡以生成圖片為例進行說明。假設我們有兩個網路,G(Generator)和 D(Discriminator)。正如它的名字所暗示的那樣,它們的功能分別是:

G 是一個生成圖片的網路,它接收一個隨機的雜訊 z,通過這個雜訊生成圖片,記做 G(z)。

D 是一個判別網路,判別一張圖片是不是 「真實的」。它的輸入參數是 x,x 代表一張圖片,輸出 D(x)代表 x 為真實圖片的概率,如果為 1,就代表 100% 是真實的圖片,而輸出為 0,就代表不可能是真實的圖片。

在訓練過程中,生成網路 G 的目標就是盡量生成真實的圖片去欺騙判別網路 D。而 D 的目標就是盡量把 G 生成的圖片和真實的圖片分別開來。這樣,G 和 D 構成了一個動態的 「博弈過程」。

最後博弈的結果是什麼?在最理想的狀態下,G 可以生成足以 「以假亂真」 的圖片 G(z)。對於 D 來說,它難以判定 G 生成的圖片究竟是不是真實的,因此 D(G(z)) = 0.5。

這樣我們的目的就達成了:我們得到了一個生成式的模型 G,它可以用來生成圖片。

以上只是大致說了一下 GAN 的核心原理,如何用數學語言描述呢?這裡直接摘錄論文里的公式:

簡單分析一下這個公式:

整個式子由兩項構成。x 表示真實圖片,z 表示輸入 G 網路的雜訊,而 G(z) 表示 G 網路生成的圖片。

D(x) 表示D 網路判斷真實圖片是否真實的概率(因為 x 就是真實的,所以對於 D 來說,這個值越接近 1 越好)。而 D(G(z)) 是 D 網路判斷 G 生成的圖片的是否真實的概率。

G 的目的:上面提到過,D(G(z)) 是D 網路判斷 G 生成的圖片是否真實的概率,G 應該希望自己生成的圖片 「越接近真實越好」。也就是說,G 希望 D(G(z)) 儘可能得大,這時 V(D, G) 會變小。因此我們看到式子的最前面的記號是 min_G。

D 的目的:D 的能力越強,D(x) 應該越大,D(G(x)) 應該越小。這時 V(D,G) 會變大。因此式子對於 D 來說是求最大 (max_D)

下面這幅圖片很好地描述了這個過程:

那麼如何用隨機梯度下降法訓練 D 和 G?論文中也給出了演算法:

這裡紅框圈出的部分是我們要額外注意的。第一步我們訓練 D,D 是希望 V(G, D) 越大越好,所以是加上梯度 (ascending)。第二步訓練 G 時,V(G, D) 越小越好,所以是減去梯度 (descending)。整個訓練過程交替進行。

二、DCGAN 原理介紹

DCGAN 的原理和 GAN 是一樣的,這裡就不在贅述。它只是把上述的 G 和 D 換成了兩個卷積神經網路(CNN)。但不是直接換就可以了,DCGAN 對卷積神經網路的結構做了一些改變,以提高樣本的質量和收斂的速度,這些改變有:

取消所有 pooling 層。G 網路中使用轉置卷積(transposed convolutional layer)進行上採樣,D 網路中用加入 stride 的卷積代替 pooling。

在 D 和 G 中均使用 batch normalization

去掉 FC 層,使網路變為全卷積網路

G 網路中使用 ReLU 作為激活函數,最後一層使用 tanh

D 網路中使用 LeakyReLU 作為激活函數

DCGAN 中的 G 網路示意:

三、DCGAN in Tensorflow

好了,上面說了一通原理,下面說點有意思的實踐部分的內容。

DCGAN 的原作者用 DCGAN 生成 LSUN 的卧室圖片,這並不是特別有意思。之前在網上看到一篇文章 Chainer で顔イラストの自動生成 - Qiita ,是用 DCGAN 生成動漫人物頭像的,效果如下:

這是個很有趣的實踐內容。可惜原文是用 Chainer 做的,這個框架使用的人不多。下面我們就在 Tensorflow 中復現這個結果。

1. 原始數據集的搜集

爬蟲代碼如下:

這個爬蟲大概跑了一天,爬下來 12 萬張圖片,大概是這樣的:

可以看到這裡面的圖片大多數比較雜亂,還不能直接作為數據訓練,我們需要用合適的工具,截取人物的頭像進行訓練。

2. 頭像截取

截取頭像和原文一樣,直接使用 github 上一個基於 opencv 的工具:nagadomi。

簡單包裝下代碼:

截取頭像後的人物數據:

這樣就可以用來訓練了!

如果你不想從頭開始爬圖片,可以直接使用我爬好的頭像數據(275M,約 5 萬多張圖片):百度雲盤 提取碼:g5qa

3. 訓練

DCGAN 在 Tensorflow 中已經有人造好了輪子:carpedm20/DCGAN,我們直接使用這個代碼就可以了。

不過原始代碼中只提供了有限的幾個資料庫,如何訓練自己的數據?在 model.py 中我們找到讀數據的幾行代碼:

這樣讀數據的邏輯就很清楚了,我們在 data 文件夾中再新建一個 anime 文件夾,把圖片直接放到這個文件夾里,運行時指定 --dataset anime 即可。

運行指令(參數含義:指定生成的圖片的尺寸為 48x48,我們圖片的大小是 96x96,跑 300 個 epoch):

python main.py --image_size 96 --output_size 48 --dataset anime --is_crop True --is_train True --epoch 300

4. 結果

第 1 個 epoch 跑完(只有一點點輪廓):

第 5 個 epoch 之後的結果:

第 10 個 epoch:

200 個 epoch,仔細看有些圖片確實是足以以假亂真的:

題圖是我從第 300 個 epoch 生成的。

四、總結和後續

簡單介紹了一下 GAN 和 DCGAN 的原理。以及如何使用 Tensorflow 做一個簡單的生成圖片的 demo。

一些後續閱讀:

Ian Goodfellow 對 GAN 一系列工作總結的 ppt,確實精彩,推薦:GAN 之父 NIPS 2016 演講現場直擊:全方位解讀生成對抗網路的原理及未來(http://it.sohu.com/20161210/n475485860.shtml)

GAN 論文匯總,包含 code:zhangqianhui/AdversarialNetsPapers(https://github.com/zhangqianhui/AdversarialNetsPapers)

新人福利

【超過 1000G 神經網路/AI/大數據、教程、論文!】

福利二:截止至本公眾號下次推送時

在本文留言區評論,獲得最多贊的社友,

社長將送出花書(《深度學習》Ian Goodfellow)1 本

昨天的獲獎同學是魯鯤

周一社長就會把獎品寄出!

話題討論

你有動手實現過GAN么?

有什麼感想和感受?

歡迎在評論區交流討論

AI 研習社

點這個,CVPR 2017 精彩論文解讀!

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 唯物 的精彩文章:

CVPR 2017 精彩論文解讀:顯著降低模型訓練成本的主動增量學習
七步即可學會R語言,從此數據分析不再怕!
讓深度學習幫你創作爵士樂
DCU博士講解蘋果第一篇獲獎論文,不容錯過!
看完立刻理解 GAN!初學者也沒關係

TAG:唯物 |

您可能感興趣

eFPGA入門指南
Python入門學習指南
Python入門指南
Portal+MAC 速成指南
ChinaJoy最全VR/AR跑會指南
土著指南-Venice Beach,LA
Python Web入坑指南一
Python 機器學習 Scikit-learn 完全入門指南
紐約造型的終極指南:A-Z of New York Style
SHOPBOP × Sugar&Spice | 開年第一單怎麼買?SS 種草最強指南
著名的五分鐘 Case VPN 使用指南
Jordan Brand × PSG入手指南(球場篇)
帶E-Marker晶元的USB Type-C公頭PCB設計指南
Katherine-NT-AU 生活指南
從入門到熟練:KeePass全網最詳使用指南
IOS 11 Human Interface Guidelines-視覺設計指南
搭配指南請收藏!西山徹上腳DESCENDANT x adidas Originals聯乘款!
Golang指南:頂級Golang框架、IDE和工具列表
Linux系統管理員的Bash指南,11條Bash實踐經驗!
NVIDIA GeForce 20系列Vs 10系列的比較指南