第一部分在這裏:【GAN的魔法】生成對抗網絡技術進展及論文筆記1
3. CGAN的應用
CGAN,即Conditional GAN,是加了條件項的GAN。之前說到GAN不穩定,那麼一個想法就是給GAN加一些束縛是不是可以讓它變得穩定些。
那麼它的目標函數和GAN稍稍有點不一樣,在生成模型D和判別模型G的建模過程中加入條件變量y,這裏的y可以是類別啊,或者是一些屬性等等:
比如文獻2這篇文章就以人臉的屬性作爲條件變量去訓練GAN,最後它把屬性給可視化了:
第一行是GAN生成的人臉,第二行是以age作爲條件變量,加偏移讓他變得更老,第三行是以smile作爲條件變量,偏移讓人臉笑起來。(並不是所有屬性都可以明顯地表現在生成的人臉中,作者在文章中用了36種屬性,只有以上2種有明顯的變化。)
是不是覺得很驚豔?CGAN竟然能創造自己的人臉,並且讓它有表情,有年齡變化。那是怎麼做到的呢?包括兩個部分——GAN生成人臉,Conditional控制人臉屬性的變化。
首先GAN生成人臉的訓練過程大概是這樣的:
1. G剛開始的時候是一個特別傻的生成器,它輸出一些隨機噪聲來嘗試着騙D
2. D很快就學到了G的隨機噪聲和真正人臉之間的區別。但是D需要訓練足夠長的時間才能建立一個基本的區別法則——例如基於膚色的區分
3. G發現了它的失敗,開始生成帶有膚色的圖片來欺騙D
4. D又不斷地發現新的人臉結構,比如鼻子啊眼睛等,並用它們來區別真實的人臉和G的假人臉
5. G又跟隨D的腳步,學習去畫這些帶有人臉結構的圖片來欺騙D
以此循環,D學習新的可區分的特徵,G又嘗試着複製這些特徵。如下圖就是一個不斷學習的過程,可以看出生成模型從啥也沒有的噪聲開始,在不斷地學習人臉的關鍵特徵。
網絡如下所示,在沒有條件變量時,生成器的輸入只有z,加入條件變量以後其實和z的輸入方法是一樣的,兩個輸入並聯起來了,只不過y是已知的東西,如類別、屬性之類的,而z是需要學習用來生成樣本的一個隨機噪聲分佈。
CGAN用於人臉生成的效果如下所示,同一行表示CGAN在同一屬性加擾動後的結果,可以看出同一行的人臉還是相似的,不過有輕微的變化,就是因爲人臉屬性發生了改變。(最右一張圖片是用於訓練的數據庫中和生成的圖片最接近的一張圖,說明整個網絡確實是在生成人臉,而不是簡單地把訓練數據記憶下來)
本節參考文獻:
【1】《Conditional Generative Adversarial Nets》
【2】《Conditional generative adversarial nets for convolutional face generation》
4. LAPGAN的應用
LAPGAN是Facebook的一個工作,它則是從另一種思路改進GAN的不穩定。想法就是不要讓 GAN一次完成全部任務,而是一次生成一部分,分多次生成一張完整的圖片,這樣不就比較容易學習了嗎。
LAPGAN引入了拉普拉斯金字塔,這個東西是指同一幅圖像在不同分辨率下的一系列過濾圖片,例如下圖中的
那麼既然生成器是用來生成殘差的,判別器自然就是用來判別殘差是否爲真實的殘差的。真實的殘差和生成的殘差可以分別如下公式表示:
那麼生成模型生成的殘差則是
整個LAPGAN的結構如下圖所示,生成模型的目標是從模糊的圖片中生成殘差,判別模型的作用則是判別殘差到底是真實的
LAPGAN的一個用途就是重建高清圖像,從模糊的圖像中生成更加清晰的圖像。
本節參考文獻:《Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks》
下一部分在這裏:【GAN的魔法】生成對抗網絡技術進展及論文筆記3