[Paper] Feature Quantization Improves GAN Training
在門外漢的影像轉譯文章中,我們定義了 unpaired image-to-image translation 問題,並列舉了幾種不同類別的演算法。其中 attention-based 的 U-GAT-IT 演算法曾經是多項資料集 SOTA 保持者。我們今天所要談的, 是名為“Feature Quantization Improves GAN Training” 的論文,該論文在大多的資料集中,打敗了 U-GAT-IT 並刷新 SOTA 紀錄。
這篇論文,提出 FQ-GAN,在已存在的 GAN 架構中建立一層 Feature Quantization (FQ)layer,並修改了 loss function,以配合架構上的改變。 實驗中所用上的 GAN 架構包括了 BigGAN,StyleGAN 1 和 2 以及 U-GAT-IT。
在這篇文章中,我們會先介紹 Feature Quantization 怎麼併入 GAN 架構中成為 FQ-GAN,最後在引用論文中的一些結果。
什麼是 Feature Quantization 和 Feature Matching
對於連續的特徵(feature),可以就特徵在空間上的相近或其他選擇條件,而放在同一個類別中,因此而離散化,可稱為 Feature Quantization。使用 K-Means clustering 的結果而離散化特徵,就是屬於 Feature Quantization 任務。另一種方式,則是使用 dictionary learning。
在 dictionary learning 演算法,主要是透過 signal recovery 或其他方法而得到指定大小的 dictionary。在此篇論文使用的是 dictionary learning 完成 Feature Quantization 的任務。Dictionary,E, 的定義如下:
K 是E的大小,而每一個元素,ek 都是一個維度為 D 的向量,如下圖所示:
Feature Matching 在此脈絡中指的是將 quantized feature map (上圖左,由不同 features 所構成的立方體)分別對應到 dictionary 中的元素(共有5個向量)中。本文是使用 nearest neighbor 來決定每一個連續向量 h 再經過 quantization/lookup function 來對映到 h’,也就是在 dictionary 中的元素, ek。而這個索引值 k ,則是連續向量 h 逐一比較完 dictionary 中所有元素後,使其等於距離最小的 ej 的索引值後得出。如果將以上敘述,轉為公式後如下:
至於在 dictionary 的尺寸上,本論文發現 dictionary 的尺寸是愈小愈好,甚至小到只有 2 個元素。
如何從 GAN 到 FQ-GAN
在數篇 GAN 論文中已經引入了 feature matching 作為訓練 GAN 的目標函式。在這裡, feature matching 指的是在原本的特徵空間中,嵌入一個 boolean random variable 的向量空間,也是兩特徵透過比較 mean 或 covariance 來決定是否相近的函式輸出。然而這些連續特徵在進行 featrue matching 時,尤其在巨量資料的生成中,表現不盡理想。
所以本文作者便希望能使用透過 feature quantization 來做特徵離散化,並使用 quantified 特徵來做 feature matching。而加入 feature quantization 於 GAN 的流程如下:
在圖 (a) 左,是 generator 的架構,給定一個 latent vector,z,生成一個 fake 的影像。這個影像會與真的影像交互訓練 Discrimiantor(圖 (a) 右)去判別。在 Discriminator 中,藉由分解 Discriminator network,fw,成為兩部分,靠近 bottom 的 fwB 和靠近輸出的 fwT,我們在這兩個 subnetworks 中間實現了 FQ layer,而成為
關於圖解這三個 subnetworks,則可以看上圖(a) 右。
其中 Discriminator 的部分則遵從原構造,而 FQ 的部分則如前所述,擁有一個 lookup function, fQ,將連續特徵向量映對到離散的單一 dictionary 元素(上圖(b))。
本論文的實驗結果則指出,愈多 FQ layers 其表現愈好。而加入 FQ layer 到 generator 的架構中,則沒有什麼差別。
FQ 層的學習是將 feature quantization loss 也被併入在 GAN 損失函式中。我們稱呼 feature quantization loss 的損失為 LQ,它分別有兩個項式:
Dictionary loss 是指進行 dictionary learning ,將量測 dictionary 元素是否為一個好的量化基準。在這個損失中,我們會使用 stop gradient (sg) operation 固定連續向量,不使之從 back propagation 中學習。而 commitment loss 則是固定 dictionary 的元素不使之學習的情況下,學習連續向量表示法,並量測連續特徵離散化的損失。總損失為:
在損失項旁的係數,都為可調參數。在實驗中, 他們發現 α = 1 和 β = 0.25 ,模型有最佳表現。
如何動態進行 Dictionary learning
然而在進行學習時,仍有一個問題存在:那就是透過 mini-batch 的方式估算 dictionary 每一個元素的 feature mean。本論文則是使用 moving average 的方式來估算。計算的方式如下:
對每一個元素而言,有兩個值會以 moving average 的方式估算,分別是加權 feature 總和以及加權個數總和。加權個數總和計算中,會加入 nk 。nk 是會被 lookup function 對映到 ek 的 feature 個數,而 Nk 又是會對應到 ek 特徵的 moving average。同樣的,h(i,k) 則是被對映到 ek 的第 i 個連續向量,其總和則是對映到 ek 的所有向量總和。而 mk 則是對映到 ek 的 feature 總和的加權總和。ek 即是這兩個 moving aveage 的值相除,mk/Nk,而得到 moving average 版本的 ek。
在估算 moving average 的過程中,不需要記憶所有歷史的 mk 或 Nk 值,相對地,我們使用一個 Momentum decay λ,其值會位在 0 到 1 之間,用來控制 moving average 需要多少關於歷史估算的資訊。若, λ 靠近 1,那麼則 moving average 結果,會比較接近歷史估算,若靠近 0,則 moving average 的結果,會比較接近目前的 batch。
在本文的實驗中,發現 λ =0.9 有最佳表現。
實驗結果
在實驗結果中,本文作者分別探索了幾個重要的 hyper-parameters,與 BigGAN 和 StyleGAN 1 和 2 的結果。筆者在這篇文章中只會放入 image-to-image 與 U-GAT-IT 的表現比較結果。有興趣的讀者,可以自行閱讀原始論文。
以下表格是比較 UNIT,CycleGAN,U-GAT-IT 和 FQ-U-GAT-IT 四個方法。比較方法是使用 Kernel Inception Distance(KID),該值愈小,則代表生成的影像品質較高。可以看到除了 dog2cat 是 U-GAT-IT 勝出,photo2vangogh 是 UNIT 勝出和 vangogh2photo 是CycleGAN 勝出外,其餘都為 FQ-U-GAT-IT 勝出。
這裡要注意的事, 雖然在 vangogh2photo 不是由 FQ-U-GAT-IT 勝出,但 vangogh2photo 中,FQ-U-GAT-IT 比 U-GAT-IT 表現為佳。同樣的情形,並沒有發生在 photo2vangogh 。
而實際生成的影像如下:可以看到在 selfie2anime 資料集中,U-GAT-IT 在頭髮生成上,會產生不必要且不真實的雜訊,而 FQ-U-GAT-IT 則自動補全這些雜訊,使其更加真實,然而卻與真實影像不甚相同。
另外,在本論文的附錄下也有提供 selfie2anime 和反向(anime2selfie)的生成,但使用於 anime2selfie 的漫畫人臉並不是從 selfie2anime 的生成漫畫人臉轉譯而來。比較反向結果發現, FQ-U-GAT-IT 的生成人臉,其色彩風格會受到大面積的色彩所影響(如,頭髮),而呈現相同色澤(如 anime2selfie 的第二欄和最後一欄)。至於 U-GAT-IT 則呈現非常不真實的人臉輪廓。