日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CVAE-GAN:Fine-Grained Image Generation through Asymmetric Training

發布時間:2023/12/29 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CVAE-GAN:Fine-Grained Image Generation through Asymmetric Training 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在幾年前,深度神經網絡的熱門話題是分類問題:

給定一張圖 x,神經網絡可以告訴你其中是什么內容,或者說屬于什么類別 c。

而近年來,深度神經網絡的熱門話題是生成模型,它想做的事情相反:

給定一個類別 c,神經網絡就可以無窮無盡地自動生成真實而多變的此類別的圖像 x。

這無疑聽上去更神奇,也更困難。這里介紹的 CVAE-GAN 方法,其論文是Fine-Grained Image Generation through Asymmetric Training?,它可以在各個數據集上生成目前綜合效果最好的結果:

請注意,以上的圖像都是神經網絡根據少量參考圖,憑空想象出來的全新圖片。而且它可以無窮無盡地自動生成下去,例如包括各種角度,表情,而且會在此過程中不斷進步(簡直正如 AlphaGo 可以無窮無盡地左右互搏)。

在人臉數據集上,效果已經好得驚人,栩栩如生。而在其它數據集上,雖然看似還有瑕疵,但這可能已經只是因為參考圖的數量不夠多(正如最近的[1707.02968] Revisiting Unreasonable Effectiveness of Data in Deep Learning Era?所述,目前的瓶頸可能已經在于數據,而非模型。文中發現,采用3億張訓練圖片作預訓練后,所有模型的效果都可以得到明顯提升。而且看上去3億張訓練圖片也沒有“喂飽”神經網絡,依舊會發現訓練圖片越多效果越好)。

我們將會看到,CVAE-GAN 的思想實際簡單而直接。它有四大組件,對應到四個神經網絡,互為補充,互相促進(這是否又讓我們想起 AlphaGo?是的,多個神經網絡協同組合,確實會有驚人的威力。而且其實還有更多的相似之處,因為它們最終都屬于博弈問題)。

1. 生成模型的派別:VAE 和 GAN

在最近幾年,生成模型分為 VAE 和 GAN 兩條路(其實還有一條值得繼續的路是 PixelCNN/RNN,另外我可能還有個不一樣的路子...)。十分有趣的是,它們擁有互補的長處和短處:

以上都加上了類別作為輸入,所以稱之為 CVAE 和 CGAN。直觀地看:

? CVAE 生成的圖像很中規中矩,但是模糊。

? CGAN 生成的圖像清晰,但是喜歡亂來。

所以剛好是互補。這其實來自于它們各自的構造。首先,在構造生成模型時,人們漸漸發現,最常用的是下面四個網絡:

? E:編碼器 Encoder。給定一張圖 x,可以將其編碼為隱變量 z(且希望滿足高斯分布)。如果還給定了類別 c,那么生成的隱變量就會質量更高(更隨機)。

? G:生成器 Generator。給定隱變量 z(如隨機噪聲),就可以生成像模像樣的圖像。如果還給定了類別 c,那么就會生成像模像樣的屬于類別 c 的圖像。

? C:分類器 Classifier。給定一張圖 x,輸出所屬類別 c。這是大家的老朋友。

? D:辨別器 Discriminator。給定一張圖 x,判斷它是真實的圖片,還是“電腦亂想出來的”。這是 GAN 首先引入的網絡,它可以和 G 左右互搏,互相進步。

那么,CVAE 是這樣的:

它來自于經典的自編碼器 AE,其實 E 有點類似于人腦把圖片變成文字描述的過程,z 就類似于文字描述,然后 G 試圖按 z 的描述還原圖片。VAE 的目標是, x' 接近 x,同時 z 接近高斯分布(這樣我們可以很容易地構造大量 z,從而生成大量 x')。

為什么 VAE 生成的圖像會模糊?如圖,可以真的很模糊:

最重要的原因是,它不容易找到合理的判斷 “x' 接近 x” 的標準,只能用 MSE 之類的粗略誤差。

而 CGAN 是這樣的:

也是有個 G(其實和之前的 VAE 的 G 類似,只是由于優化的目標不同,所以生成的圖像的特點不同),目標是從 z 生成盡量真實的 x',而且我們還再做了一個網絡 D,用于判斷“真實度”。

D 的做法很暴力,就是一直認為 x 是真的,x' 是假的,并以此訓練自己。而 G 的目標當然就是盡量騙過 D,做法也很暴力,直接把 D 的輸入梯度信息拿出來用于訓練自己,盡量生成“最能騙過 D 的圖像”。其實就像之前大家構造能騙過神經網絡 C 的圖片一樣,直接用輸入的梯度。

隨著 G 和 D 的互相斗爭,最終大家達成 Nash 均衡,生成的 x' 也就比較真實了。

為什么 GAN 生成的圖像喜歡亂來?我認為,原因之一是 D 的能力不夠,是因為 D 看過的樣本太單調(要么是固定的原始樣本,要么都是 G 生成的),所以辨別能力容易存在盲區,而 G 是發現空子就去鉆,所以就容易亂來了。

原因之二是 G 的鉆空子太暴力。比如說,如果 G 學會了每次都生成一模一樣的和訓練集中某個圖像一模一樣的圖?或者一個固定的特別容易騙過 D 的圖?那 D 就分辨不出來了,但生成這樣的圖片當然也沒有意義了。這其實就是個常見的問題,叫做模式的坍塌,就像下圖:

而之前 VAE 的 G 是不會犯這種錯誤,因為它必須有足夠的生成能力,對于訓練集中每個圖片,它都需要有能力生成相似的圖片。

其實,某種意義上,AlphaGo 的策略網絡類似于 G(試圖一步步生成“完美的神之棋局”),AlphaGo 的價值網絡類似于 D(如果勝率在走了某步之后倒向一方,就說明棋局不夠完美)。

2. 取長補短,E+G+C+D = CVAE-GAN

看 CVAE-GAN 的結構圖:

首先,之前說過了,VAE 的 G 比 GAN 的 G 更有前途,所以前面是 VAE 的結構。

然后,由于 VAE 的判斷 x' 和 x 相似的標準不夠好,所以要再加入 D 來判斷。

最后,我們還得真的保證生成的圖像是屬于 c 類別,所以還要加上 C。

所以 G 的 Loss 其實有三大部分:

? 對于從 x 生成的 z,G 應該更還原出接近 x 的 x' (像素上的接近)。稱為 L_G(img)。

? G 生成的圖像應該可以由 C 鑒別為屬于 c。稱為 L_G(C)。

? G 生成的圖像應該可以由 D 鑒別為屬于真實圖像。稱為 L_G(D)。

這三者都很重要。舉例,原始圖像 x:

CVAE-GAN 的復原 x',與 x 接近,只是少了皺紋之類的噪音,這也說明 D 對于皺紋是不在意的,它認為皺紋不是判斷“真實性”的標準,也許沒皺紋還會更“真實”:

如果我們去掉 D,馬上就模糊了:

如果我們去掉 C,那么 artifact 就多了:

如果我們去掉 img,那么就容易亂來了:

最終的隱變量 z 可以相當好地自動刻畫圖片:

編碼轉移,給定左邊的照片,要求網絡更換其中的明星,生成的是右邊的圖:

插值效果,給定左右兩張圖片,可以生成“中間的漸變過程”:

自動填充缺失區域的效果(左邊的原始圖片都是網絡從來沒有見過的全新圖片):

由于網絡生成的樣本質量很高,還可以用于增強訓練樣本集,使其它模型得到更好的效果:

最后,CVAE-GAN 的詳細架構如圖:

CVAE-GAN 的訓練算法如圖,其中的每一項都是很直觀的。注意里面還用了一個重要 trick,就是希望 x' 和 x 在 D 和 C 的網絡的中間層的特征也相似。這有助于穩定網絡:

3. 總結

通過使用 E+G+C+D 四大網絡, CVAE-GAN 實現了相當令人滿意的生成模型。目前的 GAN 變種非常多,大家都是把 E G C D 到處串起來,不過一般只用到三個,很少有用到四個的。本來我想試把四個都串起來,然后發現 CVAE-GAN 已經做了,效果也確實好。

最近還有一篇 Triple GAN?https://arxiv.org/pdf/1703.02291.pdf類似,但它沒有用 VAE 作為前端,少了 E 網絡,所以效果會不如。而 CycleGAN DualGAN DiscoGAN 等等把網絡串起來的方式,無疑可以與 CVAE-GAN 結合,進一步提升效果。相信 U-NET PatchGAN 等等 trick 也可以進一步提升效果。

總結

以上是生活随笔為你收集整理的CVAE-GAN:Fine-Grained Image Generation through Asymmetric Training的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。