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

2021-01-17 機器之心Pro

選自Medium

作者:Jonathan Hui

機器之心編譯

參與:魔王、杜偉

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

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

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

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

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

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

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

下圖是 StyleGAN2 生成的圖像:

潛在因子 z

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

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

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

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

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

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

基於風格的生成器

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

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

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

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

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

AdaIN 的定義如下:

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

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

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

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

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

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

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

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

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

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

風格混合與混合正則化

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

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

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

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

訓練

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

w 中的截斷技巧

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

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

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

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

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

感知路徑長度

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

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

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

StyleGAN 中存在的問題

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

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

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

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

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

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

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

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

StyleGAN2

權重解調(weight demodulation)

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

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

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

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

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

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

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

其中 i 是輸入特徵圖。

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

歸一化後的新權重是:

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

StyleGAN2 做出的改進

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

懶惰式正則化(Lazy regularization)

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

路徑長度正則化

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

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

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

漸進式增長

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

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

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

大型網絡

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

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

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

相關焦點

  • 如何使用GAN做一個禿頭生產器
    看過這部劇後,我突然很想知道自己禿頭是什麼樣子,於是查了一下飛槳官網,果然它有圖片生成的模型庫。那麼,我們如何使用PaddlePaddle做出一個禿頭生成器呢。  生成對抗網絡介紹  說到圖像生成,就必須說到GAN,它是一種非監督學習的方式,通過讓兩個神經網絡相互博弈的方法進行學習,該方法由lan Goodfellow等人在2014年提出。生成對抗網絡由一個生成網絡和一個判別網絡組成,生成網絡從潛在的空間(latent space)中隨機採樣作為輸入,其輸出結果需要儘量模仿訓練集中的真實樣本。
  • 生成式對抗網絡GAN的高級議題
    這種應用影響深遠,如果不僅僅是用於分析醫學圖像來描述圖像的特徵,從而消除了醫生對圖像的主觀分析。這也是另一種方式使圖像可以純粹從單詞生成。以下是用於執行此文本到圖像條件合成的多條件GAN(MC-GAN)的示例:mc-gan的實現,用於將單詞翻譯成圖像數據擴充GAN像在查看VAE時一樣學習數據生成分布。
  • 使用Wasserstein GAN生成小狗圖像
    最初我參照JensLee大神的講解,使用keras構造了一個DCGAN(深度卷積生成對抗網絡)模型,來對數據集中的256張小狗圖像進行學習,都是一些類似這樣的狗狗照片:他的方法是通過隨機生成的維度為1000的向量,生成大小為64*64的狗狗圖。
  • 玩轉StyleGAN2模型:教你生成動漫人物
    由於其有趣的應用,如生成合成訓練數據、創造藝術、風格轉換、圖像到圖像的翻譯等,這個話題在機器學習界真的很受歡迎。GAN架構 [圖片由作者提供]GAN由2個網絡組成,即生成器和鑑別器。生成器將嘗試生成假樣本,並愚弄鑑別器,使其相信是真實樣本。鑑別器將試圖從真假樣本中檢測出生成的樣本。這個有趣的對抗性概念是由Ian Goodfellow在2014年提出的。
  • 想用StyleGAN生成老婆?來看看這個小哥的復現細節吧
    為了使圖片看起來好看,即使非寫實的圖片也需要一致的光源、解剖結構、紋理、視角、風格等等。這種依賴性也適用於音頻、對話、動漫、故事情節的自動生成。我認為生成式模型是當前能夠可靠地根據如此複雜的分布生成樣本的最佳方式。
  • 用GAN來做圖像生成,這是最好的方法
    前言在我們之前的文章中,我們學習了如何構造一個簡單的 GAN 來生成 MNIST 手寫圖片。對於圖像問題,卷積神經網絡相比於簡單地全連接的神經網絡更具優勢,因此,我們這一節我們將繼續深入 GAN,通過融合卷積神經網絡來對我們的 GAN 進行改進,實現一個深度卷積 GAN。如果還沒有親手實踐過 GAN 的小夥伴可以先去學習一下上一篇專欄:生成對抗網絡(GAN)之 MNIST 數據生成。
  • GAN(生成對抗網絡)萬字長文綜述
    層級結構 GAN 對於高解析度圖像生成一直存在許多問題,層級結構的 GAN 通過逐層次,分階段生成,一步步提生圖像的解析度。典型的使用多對 GAN 的模型有StackGAN,GoGAN。使用單一 GAN,分階段生成的有 ProgressiveGAN。
  • 萬字綜述之生成對抗網絡(GAN)
    層級結構GAN 對於高解析度圖像生成一直存在許多問題,層級結構的 GAN 通過逐層次,分階段生成,一步步提生圖像的解析度。典型的使用多對 GAN 的模型有StackGAN,GoGAN。使用單一 GAN,分階段生成的有 ProgressiveGAN。
  • 超全的GAN PyTorch+Keras實現集合
    匹配聚合後驗分布和先驗分布確保了從任意先驗空間中的採樣都能生成有意義的樣本。最後,對抗自編碼器的解碼器將學習一個深度生成模型以將先驗分布映射到數據分布中。作者們展示了對抗自編碼器如何應用於半監督分類、圖像內容和風格解析、無監督聚類、降維算法和數據可視化等內容。作者還實現了一些實驗,並在生成建模和半監督分類任務中取得了很好的性能。
  • 乾貨| 直觀理解GAN背後的原理:以人臉圖像生成為例
    面部的數學運算: DGGAN-code (https://github.com/Newmu/dcgan_code#arithmetic-on-faces)那麼添插圖片會怎樣呢?給定兩張圖片,它能生成從一張圖片轉化成另一張圖片這個過程的所有圖片。還有許多你能讓人印象非常深刻,不是嗎?
  • GAN快速入門資料推薦:17種變體的Keras開原始碼,附相關論文
    在這類GAN變體中,生成器生成的每張圖像,都帶有一個類別標籤,鑑別器也會同時針對來源和類別標籤給出兩個概率分布。論文中描述的模型,可以生成符合1000個ImageNet類別的128×128圖像。(CNN),能根據周圍像素來生成圖像上任意區域的內容。
  • 在圖像生成領域裡,GAN這一大家族是如何生根發芽的
    如藍色虛線所示,較高的位置表示判別器認為樣本來自真實分布,較低位置則來自生成分布。直到藍色虛線一直處於中間位置,那麼它分辨不出兩個分布的差別,上圖從 a 到 d 展示的就是 GAN 的學習過程。雖然這種生成對抗的思路是通過 GAN 來發揚光大的,但是之前其實就有比較類似的思想。
  • 歷時6 年發展,GAN 領域當下最熱門的「弄潮兒」都有哪些?
    然而人們不甘止步於此,所以在近些年,大家又在關注如何將其利用到聲音、文字等其他數據場景。比如說:CycleGAN模型能夠將圖片從一個場景(domain)變到另一個場景。它所生成圖像的風格和樣式都比較隨意。比如說,一個從小貓數據集上訓練的GAN網絡能夠生成很多假的貓圖~這些貓在毛色、運動狀態、表情等等方面都很隨機。比如可能生成一張黑貓在吃飯的圖片,或是一張白貓在抓老鼠的圖片,也有可能是一張橘貓盯著自己的贅肉惆悵的圖片(狗頭保命),具有不可控的隨機性。當然了,它們都是一個鼻子兩個耳朵的正常貓,符合貓的特徵。
  • 用Keras搭建GAN:圖像去模糊中的應用(附代碼)
    生成對抗網絡訓練過程— 來源訓練過程主要有三步根據噪聲,生成器我們唯一的準則就是看判別器是否接受生成器的合成的例子。這些只是對生成對抗網絡的一個簡單回顧,如果還是不夠明白的話,可以參考完整介紹。數據Ian Goodfellow首次使用GAN模型是生成MNIST數據。
  • 圖像合成神器MSG-GAN入選CVPR2020,超越最先進GAN
    摘要雖然生成對抗網絡在圖像合成任務中取得了巨大的成功,但眾所周知,它們很難適應不同的數據集,部分原因是訓練過程中的不穩定性和對超參數的敏感性。這種不穩定性的一個普遍接受的原因是,當真實和虛假分布的支持沒有足夠的重疊時,從鑑別器到發生器的梯度變得不具信息性。
  • StyleGAN2玩出新高度!從華盛頓到川普,無縫切換生成美國總統
    從華盛頓到川普,無縫切換一鏡到底作者完成的這個項目使用了 StyleGAN2 & face aligner來生成美國歷任的總統圖片。StyleGAN2將生成一個細緻的看起來真實的方形人臉圖像,並使用優化算法探索潛在的空間,以便找到一個給定類型的現實生活中的例子的準確表示。艾森豪到甘迺迪的切換也是非常流暢和逼真,「髮際線的變化也十分的感人」。
  • 用機器學習生成圖片:GAN的局限性以及如何GAN的更爽
    用機器學習生成圖片(上)—— GAN 和 pix2pix本文翻譯、總結自朱俊彥的線上報告,主要講了如何用機器學習生成圖片。在兩個網絡互相博弈(金坷垃日本人:不邀噠架)的過程中,兩個網絡的能力都越來越高:G 生成的圖片越來越像真的圖片,D 也越來越會判斷圖片的真假
  • 不到200 行代碼,教你如何用 Keras 搭建生成對抗網絡(GAN)
    為此,本文將以深度卷積生成對抗網絡(Deep Convolutional GAN,DCGAN)為例,介紹如何基於 Keras 2.0 框架,以 Tensorflow 為後端,在 200 行代碼內搭建一個真實可用的 GAN 模型,並以該模型為基礎自動生成 MNIST 手寫體數字。
  • 一文詳解計算機視覺的廣泛應用:網絡壓縮、視覺問答、可視化、風格...
    ▌紋理生成(texture synthesis)和風格遷移(style transform) 給定一小張包含特定紋理的圖像,紋理合成旨在生成更大的包含相同紋理的圖像。給定一張普通圖像和一張包含特定繪畫風格的圖像,風格遷移旨在保留原圖內容的同時,將給定風格遷移到該圖中。
  • BAIR提出MC-GAN,使用GAN實現字體風格遷移
    選自BAIR作者:Samaneh Azadi機器之心編譯參與:Nurhachu Null、路近日,BAIR 發布博客提出 MC-GAN(Multi-Content GAN),可以快速生成相同風格的字體。左圖:已有的一張電影海報;右圖:使用 MC-GAN 生成的新電影名稱。