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

2020-12-27 澎湃新聞

機器之心

選自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

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

✄------------------------------------------------

加入機器之心(全職記者 / 實習生):hr@jiqizhixin.com

投稿或尋求報導:content@jiqizhixin.com

廣告 & 商務合作:bd@jiqizhixin.com

原標題:《看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程》

閱讀原文

相關焦點

  • 如何使用GAN做一個禿頭生產器
    看過這部劇後,我突然很想知道自己禿頭是什麼樣子,於是查了一下飛槳官網,果然它有圖片生成的模型庫。那麼,我們如何使用PaddlePaddle做出一個禿頭生成器呢。  生成對抗網絡介紹  說到圖像生成,就必須說到GAN,它是一種非監督學習的方式,通過讓兩個神經網絡相互博弈的方法進行學習,該方法由lan Goodfellow等人在2014年提出。生成對抗網絡由一個生成網絡和一個判別網絡組成,生成網絡從潛在的空間(latent space)中隨機採樣作為輸入,其輸出結果需要儘量模仿訓練集中的真實樣本。
  • 使用GAN生成時間序列數據,DoppelGANger論文詳解
    鑑別器中經過精心設計的噪聲可使用差異會計處理策略的改進版本來提高模型的穩定性,從而使過程具有不同的私有性而不會降低數據質量。時序數據生成的常用方法用於時序數據生成的大多數模型都使用以下方法之一:動態平穩過程通過將時間序列中的每個點表示為確定性過程的總和(加上一些噪聲)而起作用。
  • 輕鬆構建 PyTorch 生成對抗網絡(GAN)
    生成對抗網絡(GAN)是一種生成式機器學習模型,它被廣泛應用於廣告、遊戲、娛樂、媒體、製藥等行業,可以用來創造虛構的人物、場景,模擬人臉老化,圖像風格變換,以及產生化學分子式等等。生成網絡產生『假』數據,並試圖欺騙判別網絡;判別網絡對生成數據進行真偽鑑別,試圖正確識別所有『假』數據。在訓練迭代的過程中,兩個網絡持續地進化和對抗,直到達到平衡狀態(參考:納什均衡),判別網絡無法再識別『假』數據,訓練結束。
  • 玩轉StyleGAN2模型:教你生成動漫人物
    由於其有趣的應用,如生成合成訓練數據、創造藝術、風格轉換、圖像到圖像的翻譯等,這個話題在機器學習界真的很受歡迎。GAN架構 [圖片由作者提供]GAN由2個網絡組成,即生成器和鑑別器。生成器將嘗試生成假樣本,並愚弄鑑別器,使其相信是真實樣本。鑑別器將試圖從真假樣本中檢測出生成的樣本。
  • GAN可生成動漫風格圖像 | 零點報數
    圖片來源:攝圖網數據算法研究人員提出 NLT 方法,它通過神經光傳輸(Neural Light Transport,NLT)對圖像進行二次打光圖片來源:攝圖網數據應用研究者推出生成對抗網絡(GAN),它可以生成新海誠
  • 想用StyleGAN生成老婆?來看看這個小哥的復現細節吧
    為了使圖片看起來好看,即使非寫實的圖片也需要一致的光源、解剖結構、紋理、視角、風格等等。這種依賴性也適用於音頻、對話、動漫、故事情節的自動生成。我認為生成式模型是當前能夠可靠地根據如此複雜的分布生成樣本的最佳方式。
  • 萬字綜述之生成對抗網絡(GAN)
    LSGAN 有兩大優點:穩定訓練:解決了傳統GAN訓練過程中的梯度飽和問題 改善生成質量:通過懲罰遠離判別器決策邊界的生成樣本來實現 對於第一點,穩定訓練,可以先看一張圖:上圖左邊是傳統 GAN 使用 sigmoid 交叉熵作為 loss 時,輸入與輸出的對照關係圖。上圖右邊是 LSGAN 使用最小二乘 loss 時,輸入與輸出的對照關係圖。
  • 精準生成Fake人臉!Amazon全新GAN模型給你全方位無死角美顏
    【新智元導讀】近日,來自 Amazon One 的研究人員提出了一個訓練 GAN 的框架,可以對生成的圖像進行顯式控制。該框架能夠通過設置確切的屬性(例如年齡,姿勢,表情等)來控制生成的圖像。Amazon One團隊最近提出了一個可以對生成的圖像進行顯式屬性控制的GAN訓練框架,能夠通過設置確切的屬性來控制生成的圖像,如年齡、姿勢、表情等。這篇論文目前已經發布在arxiv上,並且在Google網盤中有相應的補充說明。目前大多數編輯GAN生成的圖像的方法都是通過利用隱空間解構屬性來實現部分控制,這些屬性是在標準GAN訓練後隱式獲得的。
  • 讓StyleGAN告訴你
    圖源:Yatheesh Gowda 發自 Pixabay最後,你的 GAN 看起來是這樣的:圖源:https://skymind.ai/images/wiki/GANs.png小結總而言之,一步步創建基於 GAN 的圖像生成器的過程如下:生成器(帶有轉置卷積層的神經網絡)生成圖像,其中大部分圖像看起來像垃圾。
  • 超全的GAN PyTorch+Keras實現集合
    匹配聚合後驗分布和先驗分布確保了從任意先驗空間中的採樣都能生成有意義的樣本。最後,對抗自編碼器的解碼器將學習一個深度生成模型以將先驗分布映射到數據分布中。作者們展示了對抗自編碼器如何應用於半監督分類、圖像內容和風格解析、無監督聚類、降維算法和數據可視化等內容。作者還實現了一些實驗,並在生成建模和半監督分類任務中取得了很好的性能。
  • pokemon go怎麼控制依布進化? 雷依布進化方法詳解
    pokemon go怎麼控制依布進化? 雷依布進化方法詳解時間:2016-07-16 15:34   來源:川北在線整理   責任編輯:沫朵 川北在線核心提示:原標題:pokemon go怎麼控制依布進化? 雷依布進化方法詳解 pokemon go怎麼控制依布進化,怎麼進化成雷依布?
  • GAN(生成對抗網絡)的最新應用狀況
    涉及的圖像修改包括:單圖像超解析度(single image super-resolution)、交互式圖像生成、圖像編輯、圖像到圖像的翻譯等。單圖像超解析度單圖像超解析度任務(SISR)就是給定單張低解析度圖像,生成它的高解析度圖像。傳統方法一般是插值,但是插值不可避免地會產生模糊。GAN怎麼應用到這個任務上去呢?
  • 生成對抗網絡(GAN)的半監督學習
    如果您不熟悉圖像生成GAN,請參閱《生成對抗網絡簡介》。本文引用了該文章中描述的一些內容。網絡如圖2.,在構建用於生成圖像的GAN時,我們同時訓練了生成器和決策器。在訓練之後,我們可以放棄決策器,因為我們只用它來訓練生成器。
  • 英偉達人臉生成器高能進化,彌補重大缺陷
    初代StyleGAN生成人像,周圍總是出現水滴狀不明物體:如今,StyleGAN2生成的圖像裡,看不到奇怪的水滴了:不要急著驚訝,這只是其中一處,StyleGAN2解鎖的新技能還有不少。更美好的是,英偉達已經把算法開源了。所以,先來觀察一下它到底是怎樣進化的吧。水滴是如何消除的?
  • 圖像合成神器MSG-GAN入選CVPR2020,超越最先進GAN
    摘要雖然生成對抗網絡在圖像合成任務中取得了巨大的成功,但眾所周知,它們很難適應不同的數據集,部分原因是訓練過程中的不穩定性和對超參數的敏感性。這種不穩定性的一個普遍接受的原因是,當真實和虛假分布的支持沒有足夠的重疊時,從鑑別器到發生器的梯度變得不具信息性。
  • GAN快速入門資料推薦:17種變體的Keras開原始碼,附相關論文
    乾貨往下看:https://github.com/eriklindernoren/Keras-GANAC-GAN帶輔助分類器的GAN,全稱Auxiliary Classifier GAN。在這類GAN變體中,生成器生成的每張圖像,都帶有一個類別標籤,鑑別器也會同時針對來源和類別標籤給出兩個概率分布。
  • 不到200 行代碼,教你如何用 Keras 搭建生成對抗網絡(GAN)
    為此,本文將以深度卷積生成對抗網絡(Deep Convolutional GAN,DCGAN)為例,介紹如何基於 Keras 2.0 框架,以 Tensorflow 為後端,在 200 行代碼內搭建一個真實可用的 GAN 模型,並以該模型為基礎自動生成 MNIST 手寫體數字。  判別器判別器的作用是判斷一個模型生成的圖像和真實圖像比,有多逼真。
  • 騰訊AILab現場揭秘:實時視頻風格轉換是如何生成的SiggraphAsia...
    根據你提供的圖片內容和想要的風格重新「生成」一張新的圖片,是今年很多濾鏡粉玩過的一個爆火遊戲,但如何把這個「遊戲」遷移到視頻上,並實現高質量的視頻風格「生成」對於很多人來說並不熟悉,因為市面上這個功能大規模推向濾鏡粉的廠商還並不多,粉絲們對這個技術背後的算法也不甚了解。
  • 單張圖像就可以訓練GAN!Adobe改良圖像生成方法|已開源
    下面兩張就是它在圖像協調(image harmonization)和圖像編輯(image editing)上的效果。ConSinGAN是怎麼做到的呢?訓練架構優化:並行的SinGAN首先,我們先來看下SinGAN的訓練過程。
  • 單張圖像就可以訓練GAN!Adobe改良圖像生成方法 | 已開源
    試試從單個圖像入手吧。  去年穀歌就提出了SinGAN,是第一個拿GAN在單幅自然圖像學習的非條件生成模型(ICCV 2019最佳論文)。  而最近,來自Adobe和漢堡大學的研究人員,對這個方法做了改進,探討了幾種讓GAN在單幅圖像提高訓練和生成能力的機制。  研究人員將改進的模型稱作ConSinGAN。