看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

選自Medium

作者:Jonathan Hui

機器之心編譯

參與:魔王、杜偉

GAN 能夠有條不紊地控制其生成圖像的風格嗎?

你瞭解自己的風格嗎?大部分 GAN 模型並不瞭解。那麼,GAN 能夠有條不紊地控制其生成圖像的風格嗎?

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

原版 GAN 基於潛在因子(latent factor)z 生成圖像。通常,潛在因子 z 採樣自正態或均勻分佈,它們決定了生成內容的類型和風格。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

基於此,我們需要解答以下兩個重要問題:

為什麼 z 是均勻或正態分佈?

既然 z 包含元信息,那麼它是否應在每個卷積層生成數據的過程中發揮更主要的作用?(而不是僅作為第一層的輸入)

注意:本文將使用「風格」(style)來指代元信息,其包含類型信息和風格信息。

下圖是 StyleGAN2 生成的圖像:

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

潛在因子 z

機器學習中的潛在因子通常彼此獨立,以簡化模型訓練過程。例如,身高和體重具備高度相關性(個子越高的人通常體重更大)。因此,基於身高、體重計算得到的身體質量指數(body mass index,BMI)較常用於衡量人體肥胖程度,其所需的訓練模型複雜度較低。而彼此獨立的因子使得模型更易於解釋。

在 GAN 中,z 的分佈應與真實圖像的潛在因子分佈類似。如果我們從正態或均勻分佈中採樣 z,則優化後的模型可能需要 z 來嵌入類型和風格以外的信息。例如,我們為軍人生成圖像,並基於男性化程度和頭髮長度這兩個潛在因子來可視化訓練數據集的數據分佈。下圖中缺失的左上角表示男性軍人不允許留長髮。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

如果我們均勻採樣此空間,則生成器會試圖生成留長髮的男性軍人圖像。這不會成功,因為我們沒有相關的訓練數據。換個角度來看,當採樣使用正態或均勻分佈時,模型學習的是哪些潛在因子呢?這似乎更加錯綜複雜了。正如 StyleGAN 論文所寫的那樣:「這導致了一定程度上不可避免的糾纏(entanglement)」。

在 logistic 迴歸中,我們利用基變換(change of basis)來創建二分類類別的線性邊界。而 StyleGAN 使用一種叫做映射網絡(mapping network)的深度網絡,將潛在因子 z 轉換成中間潛在空間 w。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

從概念上來看,StyleGAN 將可進行均勻或正態分佈採樣的空間(下圖中)扭曲成潛在特徵空間(下圖左),從而輕鬆生成圖像。該映射網絡旨在創建彼此獨立的特徵,以便生成器更容易地執行渲染,同時避免訓練數據集中不曾出現的特徵組合。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

StyleGAN 引入映射網絡 f,利用八個全連接層將 z 轉換成中間潛在空間。w 可被視為新的 z (z』)。通過該網絡,512 維的潛在空間 z 可被轉換為 512 維的中間潛在空間 w。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

基於風格的生成器

在原版 GAN 中,潛在因子 z 僅作為深度網絡第一個層的輸入。我們可能認為,隨著網絡的深入,z 的作用會逐漸消失。

而基於風格的生成器使用單獨學得的仿射運算 A 在每一層中轉換 w。轉換後的 w 將作為風格信息作用於空間數據。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

StyleGAN 論文最初使用的是 Progress GAN 網絡,並重用了很多超參數,包括 Adam 優化器參數。然後研究者更改模型設計進行多次試驗,查看模型性能是否有所改進。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

第一個改進版本 (B) 用雙線性採樣(bilinear sampling)來替換判別器和生成器中的最近鄰上採樣/下采樣。然後進一步調參,模型訓練時間也會增加。

第二個改進版本 (C) 添加了映射網絡和風格化(styling)。對於後者,AdaIN(自適應實例歸一化)取代 PixelNorm 對空間數據執行風格化處理。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

AdaIN 的定義如下:

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

在此過程中,首先對輸入特徵圖應用實例歸一化。然後,StyleGAN 利用風格信息對每個歸一化空間特徵圖執行縮放,添加偏置(μ 和 σ 分別表示輸入特徵圖 xᵢ 的平均差和標準差)。StyleGAN 計算每一層的風格值對 (y(s, i), y(b, i)) 作為 w 的縮放值和偏置值,從而將風格應用於空間特徵圖 i。歸一化特徵影響應用於空間位置的風格化程度。

在原版 GAN 中,第一層的輸入是潛在因子 z。實驗結果表明,向 StyleGAN 第一層添加可變輸入毫無益處,因此將可變輸入替換為常量輸入。

至於改進版本 (D),其第一層的輸入被替換為學得的常數矩陣,矩陣維度為 4×4×512。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

StyleGAN 論文中的「Style」指數據的主要屬性,如姿勢和身份。在改進版本 (E) 中,SytleGAN 向空間數據引入噪聲,從而創建隨機變化(stochastic variation)。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

例如,實驗中添加的噪聲可以為頭髮(見下圖)、胡茬、雀斑或毛孔創建不同的隨機變化。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

例如,對於 8×8 的空間層,創建一個 8×8 的矩陣,且其中元素包含不相關的高斯噪聲(Gaussian noise)。該矩陣被所有特徵圖共享。但是 StyleGAN 為每個特徵圖分別學習一個單獨的縮放因子,並將該因子與噪聲矩陣相乘,之後再添加至前一層的輸出。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

噪聲創建了渲染變體,與不包含噪聲或噪聲僅應用於特定分辨率的情況相比,其優勢如下圖所示。StyleGAN 論文還表示其緩解了其它 GAN 方法中常出現的重複模式問題。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

總之,當風格被全局應用於特徵圖時,它覆蓋圖像的關鍵屬性。噪聲引入了像素級局部變化,並帶來隨機變化,從而生成特徵的局部變體。

關於噪聲如何導致不同的圖像渲染結果,參見以下視頻:

00:00/00:00倍速

最後一個改進版本 (E) 涉及混合正則化。

風格混合與混合正則化

之前我們生成潛在因子 z,並作為生成風格的單一源頭。而使用混合正則化後,我們轉而使用另一個潛在因子 z₂,在達到特定空間分辨率之後再生成風格。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

如下圖所示,我們使用生成圖像「source B」的潛在因子得到粗糙空間分辨率(4×4 到 8×8)的風格,使用「source A」的潛在因子得到精細空間分辨率的風格。因此,生成的圖像具備 source B 的高級風格,如姿勢、髮型、臉型和眼鏡,而生成圖像中的所有顏色(眼睛、頭髮、光線)和更精細的人臉特徵則來自 source A。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

如下圖所示,如果我們使用 source B 的中分辨率(16×16 到 32×32)風格,則生成圖像從 source B 處繼承到較小規模的人臉特徵、髮型和眼睛狀態(睜開/閉上),而來自 source A 的姿勢、臉型和眼鏡則被保留。最後一列中,模型從 source B 中複製了高分辨率風格(64×64 到 1024×1024 分辨率),這主要影響圖像的色調和微結構。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

在訓練過程中,一定比例的圖像是使用兩個隨機潛碼(latent code)生成的,而不是僅使用一個。

訓練

與 CelebA-HQ 數據集相比,FFHQ(Flickr-Faces-HQ,高清人臉數據集)質量更高,覆蓋範圍更大,如年齡、種族、圖像背景以及眼鏡、帽子等配飾。在 StyleGAN 中,CelebA-HQ 數據集訓練過程中使用 WGAN-GP 作為損失函數,而 FFHQ 數據集則使用非飽和 GAN 損失函數和 R₁正則化項,如下所示:

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

w 中的截斷技巧

z 或 w 中的低概率密度區域可能不具備足以準確學習模型的訓練數據。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

因此,在生成圖像時,我們可以避開這些區域,以變化為代價來換取圖像質量的改進。這可以通過截斷 z 或 w 來實現。在 StyleGAN 中,截斷 w 即可實現此目標:

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

其中 ψ 表示風格縮放(style scale)。

但截斷僅在低分辨率層上執行(比如 4×4 至 32×32 空間層,ψ = 0.7)。這可以確保不影響高分辨率細節。

當 ψ 為 0 時,它生成的平均人臉如下圖所示。隨著 ψ 值的調整,我們可以看到人物視線、眼鏡、年齡、膚色、頭髮長度和性別等屬性的變化,如從戴眼鏡到不戴眼鏡。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

感知路徑長度

StyleGAN 論文還提出一種度量 GAN 性能的新型指標——感知路徑長度(perceptual path length)。GAN 逐步改變潛在因子 z 中的某個特定維度,進而可視化其語義。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

此類潛在空間插值可以得到令人震驚的非線性視覺變化。例如,兩端圖像中均未出現的特徵可能出現在中間圖像中。這標誌著潛在空間和變化因子具備高度相關性。因此,我們可以通過度量執行插值時的累積變化,來量化這些變化。

首先,我們使用 VGG16 嵌入來度量兩個圖像之間的感知差異。如果我們將潛在空間插值路徑分割為線性片段,則可以對每個片段添加所有感知差異。差異值越低,則 GAN 圖像的質量越高。詳細數學定義參見 StyleGAN 論文。

StyleGAN 中存在的問題

StyleGAN 生成圖像中存在類似水滴的斑狀偽影,在生成器網絡的中間特徵圖中此類偽影更加明顯。這一問題似乎出現在所有 64×64 分辨率特徵圖中,且在分辨率更高的特徵圖中更為嚴重。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

GAN 技術已經很成熟,現在我們可以很容易地放大圖像,查看偽圖像檢測過程中異常圖像模式出現的區域。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

StyleGAN2 論文將這一問題歸因於 AdaIN 中的實例歸一化。AdaIN 原本用於風格遷移,遷移過程中輸入的一些重要信息被丟失。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

StyleGAN2 論文將這一發現表述如下:

我們認為問題出在 AdaIN 運算,它可以分別對每個特徵圖的均值和方差執行歸一化,由此可能摧毀在特徵的幅度中找到的任何彼此相關的信息。我們假設這種水滴狀偽影出現的原因是生成器有意將信號強度信息傳遞通過實例歸一化:通過創建主導統計數據的強局部尖峰,生成器可以像在其它地方一樣有效縮放該信號。

此外,StyleGAN2 提出一種替代設計方案來解決漸進式增長導致的問題,以穩定高分辨率訓練。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

如上圖所示,即使使用漸進式增長生成的人臉圖像改變方向,其牙齒中縫(藍線)沒有發生變化。

在探討 StyleGAN2 之前,我們先重新繪製 StyleGAN 設計圖(下圖右)。該設計的 AdaIN 模塊同樣分為兩個模塊,但此圖添加了偏置,而原始設計圖中省略了這一項。(注意,目前模型設計沒有任何改變)

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

StyleGAN2

權重解調(weight demodulation)

在實驗結果的支持下,StyleGAN2 做出了以下改變:

移除(簡化)初期處理常數的方式;

歸一化特徵時無需求均值;

將噪聲模塊從風格模塊中移出。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

然後,StyleGAN2 利用權重解調簡化模型設計,如下圖所示。它重新訪問實例歸一化設計 (Norm std),意圖用另一種不會造成水滴狀偽影的歸一化方法取代它。下圖右是使用權重解調得到的新設計。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

權重解調增加了以下改變:

1. 調製 (mod std) 後是卷積 (Conv 3×3),二者組合起來可用於縮放卷積權重,並實現為上圖右中的 Mod。(這並未改變模型設計)

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

其中 i 是輸入特徵圖。

2. 然後用 Demod 對權重執行歸一化:

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

歸一化後的新權重是:

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

該公式添加較小值 ε,以避免數值不穩定問題。儘管從數學角度來看,這與實例歸一化不同,但它對輸出特徵圖執行歸一化後得到標準差,並實現了與其它歸一化方法類似的目標(即令訓練過程更加穩定)。實驗結果表明,水滴狀偽影問題得到了解決。

StyleGAN2 做出的改進

現在,我們來看 StyleGAN2 的改進版本。下圖總結了多種模型改動,以及對應的 FID 分數改進情況(FID 分數越小,模型性能越好)。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

懶惰式正則化(Lazy regularization)

StyleGAN 對 FFHQ 數據集應用 R₁正則化。懶惰式正則化表明,在成本計算過程中忽略大部分正則化成本也不會帶來什麼壞處。事實上,即使每 16 個 mini-batch 僅執行一次正則化,模型性能也不會受到影響,同時計算成本有所降低。

路徑長度正則化

如前所述,路徑長度可用於度量 GAN 性能。一個可能的麻煩是,插值路徑上不同片段之間的路徑距離變動很大。簡而言之,我們希望連續的線性插值點之間的圖像距離類似。也就是說,潛在空間中的位移會導致圖像空間中出現同樣幅度的變化,而這與潛在因子的值無關。因此,我們添加一個正則化項,如下所示:

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

當圖像空間中的變化與預計位移不同時,成本增加。圖像空間中的變化基於梯度計算得到,預計位移則近似於目前的運行平均值。

此處不再詳述,代碼參見:
https://github.com/NVlabs/stylegan2/blob/7d3145d23013607b987db30736f89fb1d3e10fad/training/loss.py,讀者可以據此運行 debugger。

漸進式增長

StyleGAN 使用漸進式增長來穩定高分辨率圖像的訓練。上文我們提到了漸進式增長的問題,StyleGAN2 尋求一種替代設計,允許深度較大的網絡也能具備良好的訓練穩定性。ResNet 使用殘差連接(skip connection)來實現這一目標。因此 StyleGAN2 探索了殘差連接設計和其它與 ResNet 類似的殘差概念。對於這些設計,我們使用雙線性濾波器對前一層執行上採樣/下采樣,並嘗試學習下一層的殘差值。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

下圖展示了判別器和生成器之間存在殘差連接的 MSG-GAN 模型。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

下表展示了不同方法的性能提升情況。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

大型網絡

在這些改動之後,我們進一步分析了高分辨率層對圖像生成的影響。StyleGAN2 論文度量了不同模型層輸出圖像的變化。下圖左表示每個層對生成圖像的貢獻,橫軸表示訓練過程。

在訓練初期,低分辨率層占主導地位。然而,隨著更多訓練迭代的完成,高分辨率層(尤其是 1024 × 1024 層)的貢獻不如預計的多。研究者懷疑這些層的容量不夠大。事實的確如此,當高分辨率層中的特徵圖數量翻倍時,其影響力顯著上升(右圖)。

看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程

原文鏈接:https://medium.com/@
jonathan_hui/gan-stylegan-stylegan2-479bdf256299


分享到:


相關文章: