用機器學習生成圖片:GAN的局限性以及如何GAN的更爽

2021-01-14 人工智慧頭條


大家好,我是為人造的智能操碎了心的智能禪師。

又到了 Weekend Eve,大家應該都出去玩了吧?看到今天的標題還敢點進來看的人,禪師敬你是個肥宅。肥宅永遠快樂。

今天轉載的文章,來自譯智社的小夥伴。這是一群來自全國多所頂級高校、很有理想的年輕人,因為熱愛人工智慧,組成了一個社團(字面意義的社團),努力推進人工智慧的普及。說起來跟本禪師的願景很一致嘛。

可能很多人不知道,今天其實是國際平靜日(Day of Peace)。所以,今天大家應該 燥!起!來!

全文大約1500字。讀完可能需要下面這首歌的時間

👇


用機器學習生成圖片(上)—— GAN 和 pix2pix


本文翻譯、總結自朱俊彥的線上報告,主要講了如何用機器學習生成圖片。

來源:

https://games-cn.org/games-webinar-20180913-64/


主講嘉賓


姓名:朱俊彥(Jun-Yan Zhu)

現狀:

麻省理工學院博士後(PostDoc at MIT)

計算機科學與人工智慧實驗室(Computer Science and Artificial Intelligence Laboratory, CSAIL) 

個人主頁

http://people.csail.mit.edu/junyanz/


主持人


姓名:周曉巍

現狀:

浙江大學 CAD&CG 國家重點實驗室 

個人主頁:

https://fling.seas.upenn.edu/~xiaowz/dynamic/wordpress/


這是機器學習滴時代!


計算機視覺(Computer Vision, CV)領域近年來發生了巨大的變化。在 2012 年之前,CV 的主要研究方法是使用人工設計(hand-designed)的特徵完成各種任務(見下圖)。



2012 年使用深度神經網絡(Deep Neural Network, DNN)在 ImageNet 的分類任務上取得了巨大成功(見下圖)。



從此深度學習(Deep Learning)的相關研究如火如荼地展開了,比如說下面這三個慄子: 

物體識別(Object detection) 

[Redmon etal., 2018]

對人體的理解(Human understanding)

[Guler et al., 2018] 

自動駕駛(Autonomous driving) 

[Zhao et al., 2017]



圖形學中的嘗試:趁手的武器 or 白費功夫?


在傳統的圖形學管線(pipeline)中,輸出圖像需要經過建模、材質貼圖、光照、渲染等一系列繁瑣的步驟(見下圖)。



現在大家看到了 Deep Learning 的潛力,那我們自然的就有個想法:有沒有可能使用 Deep Learning 簡化計算機圖形學(Computer Graphics)的研究呢?


一個直接的想法是把 DNN 「倒過來用」。之前的 DNN 可能是輸入一幅圖像,輸出一個標籤(比如說貓),那我們能不能輸入「貓」這個字,輸出一張貓的照片呢?



很遺憾,答案是 No!因為這種任務實在太複雜啦!我們很難讓 DNN 憑空輸出圖像這樣的高維數據(High dimensional data)(這裡的「高維」可以理解成數據量大)。實際上,在很長一段時間裡,DNN 只能輸出數字這種簡單的、低分別率的小圖像,就像下面這樣:



而想要生成想遊戲場景這類的圖片,這種方法根本沒用。所以,我們必須得想出更厲害滴東西完成這項任務(使命感爆棚)!


GAN 就完了?Naive!


於是…在月黑風高的某一天(畫風逐漸跑偏),一個叫做生成對抗網絡 (Generative Adversarial Network),也就是大名鼎鼎的 GAN —— 的東西橫空出世。作者是下面這位小哥和他的小夥伴們:



那麼,我們該怎麼 GAN 出圖像呢?且聽我細細道來~


一般來說,GAN 中包含兩種類型的網絡 GD。其中,G 為 Generator,它的作用是生成圖片,也就是說,在輸入一個隨機編碼(random code)之後,它將輸出一幅由神經網絡自動生成的、假的圖片 G(z)。


另外一個網絡 D 為 Discriminator 是用來判斷的,它接受 G 輸出的圖像作為輸入,然後判斷這幅圖像的真假,真的輸出 1,假的輸出 0。



在兩個網絡互相博弈(金坷垃日本人:不邀噠架)的過程中,兩個網絡的能力都越來越高:G 生成的圖片越來越像真的圖片,D 也越來越會判斷圖片的真假。到了這一步,我們就能「卸磨殺驢」—— 丟掉 不要了,把 拿來用作圖片生成器。


正式一點兒講(上公式啦),我們就是要在最大化 D 的能力的前提下,最小化 D的判斷能力,這是一個最小最大值問題,它的學習目標是:



為了增強 D 的能力,我們分別考慮輸入真的圖像和假的圖像的情況。上式中第一項的 D(G(z)) 處理的是假圖像 G(z),這時候評分 D(G(z)) 需要盡力降低;第二項處理的是真圖像 x,這時候的評分要高。


GAN的局限性


即便如此,傳統的 GAN 也不是萬能的,它有下面兩個不足:


1. 沒有用戶控制(user control)能力


在傳統的 GAN 裡,輸入一個隨機噪聲,就會輸出一幅隨機圖像。



但用戶是有想法滴,我們想輸出的圖像是我們想要的那種圖像,和我們的輸入是對應的、有關聯的。比如輸入一隻喵的草圖,輸出同一形態的喵的真實圖片(這裡對形態的要求就是一種用戶控制)。



2. 低解析度(Low resolution)和低質量(Low quality)問題


儘管生成的圖片看起來很不錯,但如果你放大看,就會發現細節相當模糊



怎樣改善?


前面說過傳統的 GAN 的種種局限,那麼現在,我們相應的目標就是:


提高 GAN 的用戶控制能力

提高 GAN 生成圖片的解析度和質量


為了達到這樣的目標,和把大象裝到冰箱裡一樣,總共分三步:


pix2pix有條件地使用用戶輸入,它使用成對的數據(paired data)進行訓練。

CycleGAN使用不成對的數據(unpaired data)的就能訓練。

pix2pixHD生成高解析度、高質量的圖像。



下面分別進行詳細敘述~


pix2pix


pix2pix 對傳統的 GAN 做了個小改動,它不再輸入隨機噪聲,而是輸入用戶給的圖片:



但這也就產生了新的問題:我們怎樣建立輸入和輸出的對應關係。此時的 G 輸出如果是下面這樣,D 會判斷是真圖:



但如果 G 的輸出是下面這樣的,D 拿來一看,也會認為是真的圖片 QAQ…也就是說,這樣做並不能訓練出輸入和輸出對應的網絡 G,因為是否對應根本不影響 D 的判斷。



為了體現這種對應關係,解決方案也很簡單,你可以也已經想到了:我們把 G 的輸入和輸出一起作為 D 的輸入不就好了?於是現在的優化目標變成了這樣:



這項研究還是挺成功的,大家可以去在線體驗一下 demo,把草圖(sketch)變成圖片:

連結地址:https://affinelayer.com/pixsrv/



當然,有些比較皮的用戶輸入了奇形怪狀的草圖,然後畫風就變成了這樣:



應用


pix2pix 的核心是有了對應關係,這種網絡的應用範圍還是比較廣泛的,比如:


1. 草圖變圖片 [Isola, Zhu, Zhou, Efros, 2016]:



2. 灰度圖變彩色圖 [Isola, Zhu, Zhou, Efros, 2016]:



3. 自動著色 Data from [Russakovsky et al. 2015]:



4. 交互式著色 [Zhang*, Zhu*, Isola, Geng, Lin, Yu, Efros, 2017]:



下次會講 CycleGAN 和 pix2pixHD ,它們分別解決了數據不成對和圖像解析度低的問題。

相關焦點

  • 生成式對抗網絡GAN的高級議題
    生成對抗網絡(GAN)就是一個幫你實現的新朋友。"GAN是過去10年機器學習中最有趣的想法。" - Facebook AI人工智慧研究總監Yann LeCun深層生成模型分類本文的大部分內容將涉及編碼GAN以及對GAN的一些更高級實現的廣泛介紹。GAN的簡短回顧本文將講述GAN如何使用pandas實例工作。
  • 超全的GAN PyTorch+Keras實現集合
    匹配聚合後驗分布和先驗分布確保了從任意先驗空間中的採樣都能生成有意義的樣本。最後,對抗自編碼器的解碼器將學習一個深度生成模型以將先驗分布映射到數據分布中。作者們展示了對抗自編碼器如何應用於半監督分類、圖像內容和風格解析、無監督聚類、降維算法和數據可視化等內容。作者還實現了一些實驗,並在生成建模和半監督分類任務中取得了很好的性能。
  • 如何使用GAN做一個禿頭生產器
    看過這部劇後,我突然很想知道自己禿頭是什麼樣子,於是查了一下飛槳官網,果然它有圖片生成的模型庫。那麼,我們如何使用PaddlePaddle做出一個禿頭生成器呢。  判別網絡的輸入為真實樣本或生成網絡的輸出,其目的是將生成網絡的輸出從真實樣本中儘可能的分辨出來。而生成網絡則儘可能的欺騙判別網絡,兩個網絡相互對抗,不斷調整參數。生成對抗網絡常用於生成以假亂真的圖片。此外,該方法還被用於生成影片,三維物體模型等。
  • GAN(生成對抗網絡)萬字長文綜述
    GAN 生成 real-like 樣本的方式通過生成器(Generator)的前向傳播,而傳統方法的採樣方式非常複雜,有興趣的同學可以參考下周志華老師的《機器學習》一書中對各種採樣方式的介紹。 下面,我們圍繞上述兩點展開介紹。
  • GAN快速入門資料推薦:17種變體的Keras開原始碼,附相關論文
    夏乙 編譯整理量子位 出品 | 公眾號 QbitAI圖片來源:Kaggle blog從2014年誕生至今,生成對抗網絡(GAN)始終廣受關注,已經出現了200多種有名有姓的變體。在這類GAN變體中,生成器生成的每張圖像,都帶有一個類別標籤,鑑別器也會同時針對來源和類別標籤給出兩個概率分布。論文中描述的模型,可以生成符合1000個ImageNet類別的128×128圖像。
  • 萬字綜述之生成對抗網絡(GAN)
    GAN 生成 real-like 樣本的方式通過生成器(Generator)的前向傳播,而傳統方法的採樣方式非常複雜,有興趣的同學可以參考下周志華老師的《機器學習》一書中對各種採樣方式的介紹。 下面,我們圍繞上述兩點展開介紹。
  • 異父異母的三胞胎:CycleGAN, DiscoGAN, DualGAN
    這篇paper就是討論如何用獨自的語料來幫助翻譯。事實上,dualgan這篇paper的出發點就來源於此,並且這三篇文章的中心創新點(cycle consistentcy)就是dual learning中的想法。(雖然cyclegan似乎不知道這篇論文,並沒有引用dual learning)CycleGAN的出發點更抽象。
  • 用GAN來做圖像生成,這是最好的方法
    前言在我們之前的文章中,我們學習了如何構造一個簡單的 GAN 來生成 MNIST 手寫圖片。對於圖像問題,卷積神經網絡相比於簡單地全連接的神經網絡更具優勢,因此,我們這一節我們將繼續深入 GAN,通過融合卷積神經網絡來對我們的 GAN 進行改進,實現一個深度卷積 GAN。如果還沒有親手實踐過 GAN 的小夥伴可以先去學習一下上一篇專欄:生成對抗網絡(GAN)之 MNIST 數據生成。
  • 乾貨| 直觀理解GAN背後的原理:以人臉圖像生成為例
    面部的數學運算: DGGAN-code (https://github.com/Newmu/dcgan_code#arithmetic-on-faces)那麼添插圖片會怎樣呢?給定兩張圖片,它能生成從一張圖片轉化成另一張圖片這個過程的所有圖片。還有許多你能讓人印象非常深刻,不是嗎?
  • 不到200 行代碼,教你如何用 Keras 搭建生成對抗網絡(GAN)
    在訓練過程中,兩個網絡最終都要學習如何處理任務。通常,我們會用下面這個例子來說明 GAN 的原理:將警察視為判別器,製造假幣的犯罪分子視為生成器。一開始,犯罪分子會首先向警察展示一張假幣。警察識別出該假幣,並向犯罪分子反饋哪些地方是假的。接著,根據警察的反饋,犯罪分子改進工藝,製作一張更逼真的假幣給警方檢查。這時警方再反饋,犯罪分子再改進工藝。
  • 暴力解剖GAN!MIT、港中文團隊GANpaint,一筆成畫不是夢
    那麼這款神器如何操作呢?先奉上傳送門:http://gandissect.res.ibm.com/ganpaint.html?project=churchoutdoor&layer=layer4首先,在界面下方選擇底圖;其次,在左側選擇一個對象,如「草」、「門」、「天空」等等;然後選擇要進行的操作,例如「繪畫」、「刪除」等;最後,只需要在圖片中想要更改的區域塗抹幾筆即可。
  • 用Keras搭建GAN:圖像去模糊中的應用(附代碼)
    這個GAN的一個特點就是輸入的是真實圖片而不是噪聲 。因此我們就有了一個對生成器輸出的直接反饋。接下來看看採用兩個損失如何充分利用這個特殊性。最後根據兩者的損失,可以相繼訓練判別器和生成器。用生成器生成假的輸入,訓練判別器區別真假輸入,並對整個模型進行訓練。
  • 只需130 行代碼,用 GAN 生成二維樣本的小例子
    PyTorch 平臺用 50 行代碼實現 GAN(生成對抗網絡),詳情參見:《GAN 很複雜?這是一份用一維均勻樣本作為特徵空間(latent space)樣本,經過生成網絡變換後,生成高斯分布樣本的代碼。結構非常清晰,卻有一個奇怪的問題,就是判別器(Discriminator)的輸入不是2維樣本,而是把整個mini-batch整體作為一個維度是batch size(代碼中batch size等於cardinality)那麼大的樣本。
  • 朱俊彥團隊提出GAN壓縮算法:計算量減少20倍,GPU、CPU統統能加速
    為了解決這個問題,作者提出了針對有效生成模型量身定製的訓練方案,並通過神經架構搜索(NAS)進一步提高壓縮率。下面,作者展示了如何從現有的cGAN生成器中獲得更好的架構設計空間,並在該空間內執行神經架構搜索(NAS)。卷積分解和層敏感性近來高效的CNN設計,廣泛採用了卷積分解的方法,證明了在性能與計算之間的權衡取捨。
  • 看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程
    下圖是 StyleGAN2 生成的圖像:潛在因子 z機器學習中的潛在因子通常彼此獨立,以簡化模型訓練過程。例如,身高和體重具備高度相關性(個子越高的人通常體重更大)。因此,基於身高、體重計算得到的身體質量指數(body mass index,BMI)較常用于衡量人體肥胖程度,其所需的訓練模型複雜度較低。而彼此獨立的因子使得模型更易於解釋。
  • 萬字長文解讀GAN:從基本概念、原理到實際應用
    在這部分,我們會探討 GAN 是如何處理隱空間及其屬性的,此外還將探討變分方法如何結合到 GAN 的框架中。2.1 隱空間分解GAN 的輸入隱變量 z 是非結構化的,我們不知道隱變量中的每一位數分別控制著什麼屬性。
  • 使用Wasserstein GAN生成小狗圖像
    最初我參照JensLee大神的講解,使用keras構造了一個DCGAN(深度卷積生成對抗網絡)模型,來對數據集中的256張小狗圖像進行學習,都是一些類似這樣的狗狗照片:他的方法是通過隨機生成的維度為1000的向量,生成大小為64*64的狗狗圖。
  • 大咖| GAN之父Ian Goodfellow在Quora:機器學習十問十答
    作為一個大二學生,我該如何進入人工智慧領域?更好的強化學習/深度學習和強化學習的整合;能夠可靠地學習如何控制機器人的強化學習算法等。更好的生成式模型;可以穩定地學習如何生成人類分不出真假的圖像、語音、文字的算法。
  • 我為什麼棄用GAN?
    ,可以看出SRFlow至少在兩個方面超越了GAN,一是生成結果的多樣性,二是提高圖片解析度後的保真度。如果不能,那麼該方法到底是真的提高解析度還是僅僅生成一個類似圖片?這點十分值得懷疑。但如果只是應對簡單的圖片生成任務,只需要一塊GPU就能完成對SRFlow的訓練。