首頁?學習  »   正文

用StyleGAN生成“權力的游戲”人物(下)

昨天的文章中我們借由《權利的游戲》講了生成式對抗網絡,會不會引起你的興趣呢?

傳送門:用StyleGAN生成“權力的游戲”人物(上)

本文目錄

  • StyleGAN
  • 映射網絡
  • 自適應實例規范化(AdaIN)
  • 學習常數輸入
  • 混合風格
  • 隨機噪聲
  • 塑造你最喜歡的《權力的游戲》角色

StyleGAN

深度學習領域發展迅速,自2014年以來,在《權力的游戲》中,與粉絲喜愛的角色死亡相比,更多的是GAN的創新。

因此,即使您使用了我在上面討論過的出色的GAN培訓框架,生成的圖像最多也只是像灰色油炸牛油果一樣的東西。

要真正使GANs在實踐中工作,我們需要使用一套巧妙的技術。

如果你想征服GANseteros的七個王國,GitHub repo列出了過去幾年大多數關鍵的GAN創新(GANnovations?)然而,令人印象深刻的是,除非你有像伊蒙·坦格利安一樣多的時間,否則你可能連看完一半的時間都做不到。

用StyleGAN生成“權力的游戲”人物(下)

因此,我將只關注一個特定模型的關鍵方面—StyleGAN。

Nvidia的研究小組提出了StyleGAN在2018年底,而不是試圖創建一個花哨的新技術來穩定GAN訓練或引進一個新的架構,該論文稱他們的技術是“正交于正在進行的關于GaN損失函數、正則化和超參數的討論”。

這意味著,在2045年,當人類發明了超級巨大的、瘋狂的BigGAN時,我將要展示的東西仍然有效。

用StyleGAN生成“權力的游戲”人物(下)

現在這已經足夠了。我來告訴你為什么Stylegan不會浪費你的時間。

映射網絡

一般來說,GAN中的生成器網絡會接受一個隨機向量作為輸入,并使用轉置卷積將這個隨機向量變形為一個真實的圖像,就像我在上面展示的那樣。

這個隨機向量叫做潛向量。

潛在向量有點像圖像的樣式說明。它描述了它想要生成器繪制的圖片類型。

如果你在向法醫描述一個潛在的罪犯,你會告訴他/她一些嫌疑人的“特征”,比如頭發的顏色、面部毛發和眼睛之間的距離。

用StyleGAN生成“權力的游戲”人物(下)

唯一的問題是,神經網絡無法理解“頭發顏色、面部毛發和眼睛之間的距離”。“他們只理解CUDATensors和FP16s。

潛在向量是神經網絡語言對圖像的高級描述。

如果你想生成一個新的圖像,你必須選擇一個新的向量,這是有意義的-改變輸入,你改變輸出。

但是,如果您想要對圖像的樣式有很好的控制,那么這就不是很好。由于無法控制生成器如何選擇對可能的潛在向量進行分布建模,因此無法精確控制最終圖像的樣式。

由于GAN學習將潛在向量映射到圖像的方法,所以出現了這個問題。GAN可能不太高興符合人類規范。

你可以試著改變你生成的臉的頭發顏色,只需在潛在向量中輕推一個數字,但是輸出可能有眼鏡,不同的膚色,甚至可能是不同的性別。

這個問題叫做特征糾纏。StyleGAN的目標是減少它。

理想情況下,我們希望有一個更整潔的潛在空間表示。它允許我們對輸入的潛在向量做一些小的修改,而不會使輸出的圖像/人臉看起來有很大的不同。

StyleGAN試圖做到這一點的方法是包括將輸入向量映射到GaN使用的第二中間潛在向量的神經網絡。

用StyleGAN生成“權力的游戲”人物(下)

具體來說,Nvidia選擇使用8層網絡,輸入512維矢量,輸出512維矢量。但是,請注意,這些選擇是任意的,如果需要,您可以使用超參數。

假設,添加這個神經網絡來創建一個中間的潛在向量,將允許GAN找出它想要如何使用向量中的數字,我們通過專用的密集層喂給它,而不是試圖找出如何直接從轉置卷積中使用潛在向量。

映射網絡應該減少特性糾纏(關于為什么這不僅僅是浪費寶貴的計算的完整討論,我建議您閱讀官方StyleGAN論文)。

如果這個想法對你來說不是很直觀,不要擔心。重要的是,通過整個“微型神經網絡將輸入向量映射到中間潛在向量”的工作很好,所以我們寧愿這樣做。

現在我們有了一個映射網絡,可以更有效地利用潛在空間。太好了。但是我們還可以做很多工作來更好的控制它。

自適應實例規范化(AdaIN)

回到法醫類比,想想描述嫌疑人的過程。

你不會這樣說:“嘿,有個長著大紅胡子的瘦高個兒。他搶劫了一家銀行之類的。不過,不管怎么說,我要趕一個電視節目,所以我晚些時候再去找你,警官們,祝你們玩得愉快。”

用StyleGAN生成“權力的游戲”人物(下)

不,你會呆一會兒去描述嫌疑犯,等法醫畫出草圖,提供更多細節,然后循環繼續,直到你們兩個可以合作,達到對嫌疑犯面部的精確再現。

換句話說,你,功能和信息的來源(即潛在的向量),會不斷地將信息注入藝術家,即將描述呈現為可見的、有形的東西的人(即生成器)。

然而,在傳統的GANs公式中,潛在的向量并沒有“停留足夠長的時間”。“一旦你把潛在向量作為輸入輸入到生成器中,它就再也不會被使用了,這相當于你打包走人。”

StyleGAN模型解決了這個問題,它所做的正是您所期望的——它使潛在的向量“逗留”的時間更長。通過在每一層將潛在向量注入生成器,生成器可以不斷地引用“樣式指南”,就像法醫可以不斷地問您問題一樣。

用StyleGAN生成“權力的游戲”人物(下)

現在,讓我們進入技術難題。

在類比的世界里,這一切都是簡單明了的,但無禮的電視迷和骨瘦如柴的紅胡子銀行劫匪不會轉化為數學方程式。

“那么StyleGAN究竟是如何在每一層將潛在向量注入生成器的呢?”您可能會問。

“自適應實例規范化”,我將非常客氣地回答。

AdaIN(歸一化自適應實例;來吧,我真的需要擴展它嗎)是一種技術,最初用于樣式轉換,但后來發展成為StyleGAN。

AdaIn使用了一個線性層(在原文中更準確地稱為“學習仿射變換”),它將潛在向量映射到兩個標量上,我們將其稱為Ys和Yb。

“s”代表比例,“b”代表偏差。

一旦你有了這些標量,下面是你如何執行AdaIN:

用StyleGAN生成“權力的游戲”人物(下)

在這里,f(w)表示一個已知仿射變換,Xi是我們應用AdaIN的一個實例,和y是兩個標量的集合,(Ys和Yb)控制生成圖像的“樣式”。

如果您以前使用過BatchNorm,這看起來可能很熟悉,這是有意的。然而,一個關鍵的區別是,平均值和方差是按每個通道和每個樣本計算的,而不是按整個微型批處理計算的,如下所示:

用StyleGAN生成“權力的游戲”人物(下)

用StyleGAN生成“權力的游戲”人物(下)

這種將樣式注入生成器隱藏層的方法乍一看可能有些奇怪,但最近的研究表明,控制增益和偏置參數(即,i.e., Ys和Yb次序排列)在隱層激活時,樣式轉換圖像的質量會受到很大的影響。所以繼續吧。

通過進行所有這些標準化的工作,我們能夠以比僅僅使用輸入潛在向量更好的方式將樣式信息注入生成器。

生成器現在有了一種“描述”,它需要構造什么樣的圖像(多虧了映射網絡),而且它還可以隨時引用這種描述(多虧了AdaIN)。

但我們還可以做得更多。

Learned Constant Input

學習常數輸入

如果你曾經嘗試過“用5個簡單的步驟畫出迪斯尼人物”,但毫無疑問都失敗了,你就會知道這些步驟都是從那個令人毛骨悚然的苗條男人輪廓開始的。

用StyleGAN生成“權力的游戲”人物(下)

注意,您可以使用相同的基線骨架創建一組不同的角色面孔,然后慢慢地添加更精細的細節。

同樣的想法也適用于法醫。他/她可能對人臉的大致樣子有一個相當不錯的概念,即使你根本沒有說明任何細節。

回想一下,在傳統的GAN生成網絡中,我們輸入一個潛在向量作為輸入,然后使用轉置卷積將這個潛在向量映射到圖像。

我們需要這個潛在向量的原因是我們可以在生成的圖像中提供變化。通過采樣不同的向量,我們得到了不同的圖像。

如果我們用一個恒定向量把它映射到一個圖像,我們每次都會得到相同的圖像。那會很無聊的。

用StyleGAN生成“權力的游戲”人物(下)

然而,在StyleGAN中,我們已經有了另一種將風格信息放入生成器的方法——AdaIN。

那么,當我們能夠學習它的時候,為什么我們甚至需要一個隨機向量作為輸入呢?結果我們沒有。

你看,在常規GAN中,變化和風格數據的唯一來源是輸入潛在向量,我們再也不會接觸到它了。但是,正如我們在前一節中看到的,這是相當奇怪和低效的,因為生成器不能再次“看到”潛在向量。

StyleGAN通過自適應實例范數將潛在向量“注入”到每一層中,解決了許多問題,從而糾正了這一錯誤。這還有另一個副作用——我們不需要從一個隨機向量開始,我們可以學習一個向量,因為任何可以提供的信息都將由AdaIN提供。

更具體地說,StyleGAN選擇了一個已知的常量輸入4×4×512張量可以認為是4×4圖像,512?個通道。再次注意,這些維度完全是任意的,您可以在實踐中使用任何您想使用的維度。

用StyleGAN生成“權力的游戲”人物(下)

這背后的原理和迪士尼公主畫圈的原理是一樣的——生成器可以學習一些關于所有圖像的標準“骨架”的概念,這樣它就可以從藍圖開始,而不是從零開始。

所以在很大程度上,你們已經知道了。這是StyleGAN。在實踐中,還有一些其他的技巧可以讓生成的圖像看起來更真實。

如果你不是很關心這些細節,祝賀你!現在你明白了,在整個宇宙中,一個最有創新精神的人對GANs的看法是什么?(GANiverse嗎?天哪,我真的不應該說這些雙關語了)。

但如果你想要絕佳的照片,看看瓊恩和丹妮莉絲的孩子長什么樣,繼續讀下去。

混合風格

還記得我是怎么告訴你們的嗎?

如果我們不只是注入一個潛在向量,而是兩個呢?

想一想。我們的生成器中有很多置換卷積和AdaIN層(在Nvidia的實現中有18層,但這完全是任意的)。在每個AdaIN層,我們獨立地注入一個潛在的向量。

用StyleGAN生成“權力的游戲”人物(下)

因此,如果注入到每一層是獨立的,我們可以把不同的注入到不同的層。

如果你認為那是個好主意,那么,Nvidia?也這么認為。利用他們的奇思妙的圖形處理器,該團隊嘗試使用不同層次的不同“人”對應的不同潛在用戶。

這個實驗是這樣設置的:取3個不同的潛在向量,當單獨使用時,將產生3個真實的人臉。

然后,他們將這些向量注入三個不同的點:

  1. 在“粗糙”層中,隱藏表示在空間上很小的層從4×4到8×8;
  2. 在“中等”層,其中隱藏的表示是中等大小的層-從16×16到32×32;
  3. 在“精細”層中,隱藏的表示在空間上很小從64×64到1024×1024。

你可能會想,“哦,天哪,這些精細的層確實占據了大部分的層。從64到1024?這太多了。間距不是應該更均勻些嗎?”

好吧,其實不是。如果您閱讀過ProGAN的論文,您就會知道生成器可以快速獲取信息,較大的層主要對前一層的輸出進行細化和銳化。

然后,他們試著把這三個潛在的矢量從最初的點移動一點,看看得到的圖像在質量上是如何變化的。

結果如下:

結果非常準確,令人毛骨悚然。但是,嘿,它是有效的。

隨機噪聲

在Nvidia?用StyleGAN做了那么多很酷的事情之后,很抱歉我讓你們失望了,沒有把最好的留到最后。

在制作了假臉,甚至以新穎的方式混合后,如果你發現了一張你喜歡的臉呢?

您可以生成100個相同圖像的副本,但是這將非常枯燥。

所以,我們希望有一些相同圖像的變化。也許是發型略有不同的變體,或者是更多的雀斑。像這樣的小變化。

用StyleGAN生成“權力的游戲”人物(下)

當然,你也可以用普通的GAN方法,在潛在向量中加入一些噪聲,就像這樣:

用StyleGAN生成“權力的游戲”人物(下)

G是發生器,和?是一個隨機采樣的向量的分量很小的數字。

但我們有StyleGAN,顧名思義,我們可以控制圖像樣式。

就像我們對潛在向量進行分層注入一樣,我們也可以對噪聲進行分層注入。我們可以選擇在粗糙層、中間層、精細層或三者的任意組合上添加噪聲。

在本文中,StyleGAN噪聲是逐像素添加的,這是有意義的,因為這是歷史上最常見和自然的添加噪聲的方式,而不是干擾潛在的向量。

用StyleGAN生成“權力的游戲”人物(下)

在噪音的影響下產生了一些有趣的風格效果(上帝,這篇文章的魅力會結束嗎?)

在創作《權力的游戲》角色時,我不喜歡噪音,因為我只想創作一些高質量的圖像。但很高興看到研究團隊已經考慮過這個問題。

塑造你最喜歡的《權力的游戲》角色

既然你已經了解了StyleGAN是如何運作的,那么是時候做你們一直期待的事情了——預測瓊恩和丹妮莉絲的兒子/女兒會是什么樣子。

廢話不多說,我向大家介紹一下Djonerys,(根據二者的名字結合而來,機智吧?):

用StyleGAN生成“權力的游戲”人物(下)

如果你不知道,Djonerys就是右下角的那個人

您正在查看的未來領域的保護者是使用前面討論過的混合風格技術生成的。

最后,在與維斯特洛英雄一起慶祝8周年之際,讓我們向瓊恩·雪諾這些年來的成長致敬。

用StyleGAN生成“權力的游戲”人物(下)

一旦你對角色有了潛在的特征有了了解,你還可以做很多其他的事情,比如創造一個孩子卓戈·卡奧或者把詹姆變成一個女人。

權游中你最喜歡誰?最想嘗試誰的反性別角色?現在,放手嘗試吧,七大帝國盡在你手。

歡迎關注ATYUN官方公眾號,商務合作及內容投稿請聯系郵箱:[email protected]

發表評論