「史上最強GAN影象生成器」BigGAN的demo出了!
BigGAN 一經提出即引起了大量關注,被稱為「史上最強 GAN 影象生成器」。今日,DeepMind放出了 BigGAN 的拿來即用 TF Hub demo,可以在 Colab 上執行影象生成和影象插值任務。
-
TF Hub demo 地址: ofollow,noindex" target="_blank">https://tfhub.dev/s?q=biggan
ICLR 2019 大會將在明年 5 月 6 日於美國舉行,9 月 27 日論文提交截止後很多論文引起了大家的關注,其中就有一篇 GAN 生成影象的論文。該研究生成影象的目標和背景都高度逼真、邊界自然,並且影象插值每一幀都相當真實,簡直稱得上「創造物種的 GAN」。該論文還引起了Oriol Vinyals、Ian Goodfellow的關注。上週,ICLR 2019 的論文評審結果出爐,評審們已經在論文的 openreview 頁面公佈了他們的評論和分數。這篇 BigGAN 論文獲得了 8、7、10 的評分,三位評審人員對該論文給出了很高的評價,參見: https://openreview.net/forum?id=B1xsqj09Fm 。
BigGAN 簡介
該論文出自DeepMind,提出了一種新型 GAN 模型 BigGAN,該模型因其出色效能被稱為「史上最強 GAN 影象生成器」。該研究的創新點是將正交正則化的思想引入 GAN,通過對輸入先驗分佈 z 的適時截斷大大提升了 GAN 的生成效能,在ImageNet資料集下 Inception Score 竟然比當前最好 GAN 模型 SAGAN 提高了 100 多分(接近 2 倍)!
該研究展示了 GAN 可以從訓練規模中顯著獲益,並且能在引數數量很大和八倍批大小於之前最佳結果的條件下,仍然能以 2 倍到 4 倍的速度進行訓練。作者引入了兩種簡單的生成架構變化,提高了可擴充套件性,並修改了正則化方案以提升條件化(conditioning),這可論證地提升了效能。作為修改方法的副作用(side effect),該模型變得服從「截斷技巧」,這是一種簡單的取樣技術,允許對樣本多樣性和保真度進行精細控制。此外,該研究發現大規模 GAN 帶來的不穩定性,並對其進行經驗的描述。從這種分析中獲得的洞察表明,將一種新型的和已有的技術結合可以減少這種不穩定性,但要實現完全的訓練穩定性必須以顯著降低效能為代價。
由 BigGAN 生成的類條件樣本。
(a)增加截斷的效應。從左到右,閾值=2, 1.5, 1, 0.5, 0.04。(b)應用截斷和效能差的條件生成模型的飽和度偽影。
由 BigGAN 在 512x512 解析度下生成的其它樣本。
BigGAN 生成網路結構。
現在DeepMind終於放出了 BigGAN 的 TF Hub demo,讓我們來一探究竟。
教你怎麼用 Colab Demo
這個 Colab Demo 的使用非常簡單,直接用 Chrome 瀏覽器開啟 Colab 地址,登陸你的谷歌賬號,就可以開始耍了。
剛開啟 Colab 時,我們可以看到程式碼總體上分成四大塊,分別是 BigGAN Demo、Setup、Explore BigGAN samples of a particular category、Interpolate between BigGAN samples。前面兩塊給出了大致的使用說明,以及具體實現(從 TF Hub 載入預訓練模型、定義函式、建立會話和初始化變數等),之後兩塊才是重點,提供了特定類別的影象樣本生成,以及指定兩個類別的影象插值兩個任務演示。只需要點選幾個按鈕,我們就能輕鬆啟動執行和修改引數,完全不需要修改程式碼。
這個 Colab 的環境配置如下,開啟「修改」-「筆記本設定」就可以看到。該 Colab 在 Python 2 環境和 GPU 上執行,這個不用修改,也不能修改,會報錯。
那麼要怎麼開始呢?很簡單,直接開啟「程式碼執行程式」-「全部執行」,就可以了。該 GPU 能提供 11G 左右的記憶體,執行過程中經常會出現記憶體不足的情況,如果沒有報錯,直接忽略就行。如果報錯了,就開啟「程式碼執行程式」-「重置所有程式碼執行程式」,重新開始吧。
在執行過程中,我們不一定需要同時執行生成和插值兩個任務。為此,我們可以選中 Explore BigGAN samples of a particular category 這個單元格,然後開啟「程式碼執行程式」-「運行當前單元格之前的所有單元格」,然後再分別執行之後的其中一個單元格,這樣也能避免記憶體不足的問題。
在大部分情況下,記憶體不足並沒有導致報錯。在啟動一個任務後,大概等待 10 秒左右的時間,我們就可以看到生成和插值的結果。
上圖是樣本生成單元格的控制介面,可以控制:生成樣本數量、截斷值、噪聲種子、和類別的引數。我們可以看看下圖的例子來說明各自的作用。
如上圖所示,很容易看出,生成樣本數量(10)和類別(芝士漢堡)就是字面的意思,那麼截斷值、噪聲種子分別有什麼作用呢?僅用一張圖看不出來,我們修改一下引數看看區別就行了。
這時,我們只需要拖動滑塊來修改引數,然後 Colab 會立刻執行新引數設定下的任務,但這也意味著我們一次只能修改一個引數。
經過多次實驗,我們發現,截斷值越大,生成樣本的多樣性越大;實際上,截斷值控制的是隱變數分佈(一般呈高斯型)的截斷距離,也就是取樣範圍,因此不難理解其對多樣性的作用。
從上到下:截斷值為 0.02、0.26、0.58、1.0 的芝士漢堡生成結果。
而噪聲種子的值對生成結果的影響主要是每次生成樣本的初始條件,從而最終生成結果也會不同,可以用它來改善生成多樣性。
最後是類別引數的控制,該 Colab 中提供了 1000 個類別選項,可玩性很足,但要找到自己想要的類別實在有點困難。可以這樣操作,雙擊這個單元格,程式碼會顯示在左側,右側會出現鉛筆圖示,點選該圖示後就能檢視完整列表,在這個列表下用 Ctrl+F 搜尋類別的編號,再返回修改,這樣就簡單多了。
我們嘗試生成了埃及貓(285)和大熊貓(388)的樣本:
可以發現,埃及貓的眼神不太對,大熊貓有點營養不良。論文給出的結果很真實自然,但在這個 Colab 實驗中我們也能發現存在很多「不自然」的生成樣本。
接下來,我們來嘗試影象插值任務。
如上圖所示,這個任務的可控引數有:樣本數量、插值數量、截斷值、噪聲種子、以及用於插值的影象類別 A 和 B。樣本數量是指每次插值時類別 A 和類別 B 的的初始樣本數量,如下圖所示樣本數量為 2。下圖展示了一些示例,供大家參考。注意該影象插值是生成樣本之間的插值,所以左右兩側的原圖也會有些不自然。
影象插值結果示例,其中樣本數量為 2、插值數量為 5、截斷值為 0.2、噪聲種子為 0、類別 A 為金毛、類別 B 為雞。
其它引數不變,插值數量為 10 的插值結果示例。
金毛和埃及貓的影象插值結果。
知道怎麼用了吧?自己去耍吧~