AC-GAN簡介 - Conditional Image Synthesis With Auxiliary Classifier GANs

Augustus Odena, Christopher Olah, Jonathon Shlens, “Conditional Image Synthesis With Auxiliary Classifier GANs”arXiv:1610.09585

ICML 2017 paper

我這篇文章是看20 Jul 2017 (v4)版本

後續有cgans with projection(ICLR 2018)也是在做相同的任務,

有興趣的可以看這篇我寫的cGANs with projection簡介

摘要

此篇論文提出一個新的圖像合成(image synthesis)方法,

它可以產生 128 X 128 解析度的圖片,

並且這個方法會學會一些特徵,

可以保留這些特徵轉換到其他的類別。

舉例來說要生成一個笑臉,

可以保持著笑臉的屬性,

然後產生不同人在笑。

除了提出圖像合成的方法外,

還提出如何基於每個物種(class)來測量圖片的辨識率(discriminability)以及判別生成的圖像是否擁有多樣性(diversity)。

最終在ImageNet - 1000 classes的dataset上展示此方法生成的 128 X 128之圖片,

辨別率:生成的128 X 128之圖片,為32 X 32辨識率的2倍, 從此可知並非單純的放大,

多樣性:用他的評測多樣性的方法,用此方法生成的圖片有84.7%的物種(class)比ImageNet中的物種(class)圖片更具多樣性。

簡介

以往的cgan都會將c(class label)輸入至Discriminator,

而AC-GAN不這樣做,

他做的事情反而是讓Discriminator有一個分類器當作輔助,

這就是為什麼就做AC-GAN(Auxiliary Classifier)

在這篇paper中會依序介紹下方的概念。

  • 對ImageNet - 1000的dataset做訓練,可產生128 X 128的圖像
  • 測量高解析度的圖像是否有實際的效果又或是單純從32X32進行bilinar放大而來
  • 測量圖片是否具有多樣性,或是只會用幾張圖片(mode collapse)騙過辨別器
  • 顯示AC-GAN的圖片合成方法並非只透過記憶幾張圖片

架構

先看架構,會有比較好的理解,

概念

  • latent variables z

z有100個,可以理解成每個z都是不同的特徵,

如眼睛、鼻子等等的,

希望model可以讓這些z學到不同的特徵,

  • classes variable

在AC-GAN的Generator model都只訓練10個classes,

將10個class轉成one hot encoding當作輸出。

Generator

G input = z(100) + c(10) = 110

因此可以看到下圖, 輸入的維度為110。

之後再透過FC layer輸出至784維(28X28),

再進入一連串的Deconv來轉成高解析度的圖片。

如何生成ImageNet的1000個classes

每個AC-GAN訓練10個classes(物種),

透過訓練100個AC-GAN來拼湊出ImageNet的1000個物種,

那為什麼要這樣做呢?

可以先看下面這張圖,總之y軸的MS-SSIM(等等會解釋)在這邊越低越好,

所以可以看到在classes數=10的時候,

分數最好。

測量高解析度的圖像是否有實際的效果

要將一張低解析度的圖片轉成高解析度的圖片,

最簡單的方式是透過bilinear放大,

但其實這會造成邊緣的模糊,

綜觀來說其實資訊量也沒有變多,

因此我們要做的事情是要確認說我們生成之 128X128 圖片,

是比32X32的圖片經由bilinear放大後有著更多的資訊量,

讓我們更能夠準確的辨認圖片。

因此這邊所採用的方式是 pre-trained Inception network (Szegedy et al., 2015)

給定一張圖片,它會對基於輸入的class(物種)給定一個分數,分數越高越好。

下方這張圖做的事也挺有趣的,

上方的圖

給定不同解析度的斑馬,算Inception的分數,

128 X 128的解析度是原本的大小,

我們將128X128透過bilinear放大至256X256會發現分數沒有上升,

但是將128X128縮小成64X64會發現準確度降低了,

因為有些資訊被丟掉了,因此分數降低很合理,

透過這種方式我們可以知道如果單純放大分數不會上升,

透過這種方式我們可以用來量測我們所生成的128X128的影像,是否真的擁有更多的資訊。

下方的圖

左下為給定 128X128(紅線) / 64X64(藍線) 的圖片將他透過bilinear放大縮小

看得出來剛剛在上方所講述的論點。

右下在說明ImageNet 1000有有84.4%的class使用128X128的解析度得出來的準確度會比32X32的準確度高。

測量圖片是否具有多樣性

GAN有個著名的問題是Mode collapse,

簡單來說就是Generator知道生成某一張圖片就能夠騙過Discriminator,

所以每次就是生成那一張,

那你看loss function就會覺得很棒,

等到實際上使用才會發現,怎麼都是同一張。

那因為我們的任務是圖像生成,

我們總不能每次都生成同一張,

因此要有一個判斷基準。

這邊所提出的想法是MS-SSIM(Multi-Scale-Structural Similarity Index):多層級結構相似性

MS-SSIM原本是用來評測圖像品質的,

這邊卻用來檢測Mode collapse的問題,

MS-SSIM大致的思維是給定2張圖,評斷兩張的像不像,如果感覺差不多分數就高。

用這種想法來檢測((論文提到好幾個點,這邊不贅述。

因為我們是基於class的label做生成,

因此圖片已經被限縮成某個範圍(class)了,

那如果同一個class的兩張圖片經由MS-SSIM評定的分數很低的話,

這樣就是說不像,那如果整個class的平均(隨機抽樣100組, 每組2張圖片)MS-SSIM分數低的話,

代表整個class沒有mode collapse的問題。

從上面這張圖能看到,右上角的artichoke(中譯:朝鮮薊)因為長得都很像所以平均的MS-SSIM分數很高,

ImageNet的1000個class,MS-SSIM分數最高class數值為0.25(不算像)。

顯示AC-GAN的圖片合成方法具有多樣性以及辨別性

下圖為MS-SSIM分數的圖表,越低越好。

  • x軸dataset
  • y軸AC-GAN生成圖片

有84.7%的生成圖片低於0.25的分數。

training data的平均MS-SSIM分數為0.05,

AC-GAN所產生的圖片平均MS-SSIM分數為0.18並不算太差。

至於辨別性則透過Inception-v3的分數做評斷,

AC-GAN所生成的1000個classes之圖片平均分數達到了78.8%挺高的。

我的結論

這篇paper我覺得最大的問題是,

每個AC-GAN竟然只能產生10個類別,

需要透過訓練100個AC-GAN才能夠生成ImageNet的1000個物種。

可能是因為我先看ICLR 2018的cGANs with projection discriminator才回來看這篇,

難免會覺得弱弱的吧!?

有興趣的可以看這篇我寫的cGANs with projection簡介

參考資料:

Conditional Image Synthesis With Auxiliary Classifier GANs

AC-GAN wiki


© XiaoSean 2018. All rights reserved.

Powered by Hydejack v7.5.1