當前位置:
首頁 > 知識 > 瓊恩·雪諾和龍母的孩子會長啥樣?讓StyleGAN告訴你

瓊恩·雪諾和龍母的孩子會長啥樣?讓StyleGAN告訴你

選自blog.nanonets

作者:Ajay Uppili Arasanipalai

機器之心編譯

參與:張倩、shooting

權游馬上迎來大結局了,根據目前的劇情推測,龍母和雪諾喜結連理 and 早生貴子大概是看不到了。但利用 GAN 測一測他們的孩子會長啥樣還是可以做到的。來看看機器學習的「相面之術」如何?

你有沒有好奇過自己喜歡的電影或電視劇里的人物性別變換後是長啥樣的?比如說,下面這位?

權游里「弒君者」轉換性別的效果圖

咦……長得真不咋樣,還是男性的詹姆斯好看。不過,托英偉達 StyleGAN 的福,你可以用GAN盡情探索神奇的維斯特洛大陸了。

StyleGAN 還可以生成下面這種令人毛骨悚然的笑臉:

根據單張圖像生成的笑臉

不過別急。在用神經網路預測丹妮莉絲和瓊恩孩子長啥樣之前,我們得穩住,確保沒幹下面這種蠢事。

圖源:https://imgs.xkcd.com/comics/machine_learning.png

本文的目的是利用 StyleGAN 預測龍母和雪諾的孩子長啥樣,因此我將簡單概述一下 GAN。

如果你想深入了解 GAN,那我建議你去讀 Ian Goodfellow 2016 年發表在 NeurIPS 大會的論文。這是了解 GAN 的最好來源之一(參加:深度|NIPS 2016 最全盤點:主題詳解、前沿論文及下載資源(附會場趣聞))。

閑言少敘,進入正題。

生成對抗網路

大部分人喜歡將 GAN 的生成器和判別器比作造假者和警察。

但我不認為這種方式最好,尤其是如果你已經沉迷在訓練神經網路的狂熱里。

我認為,生成對抗網路最重要的部分在於生成圖像的東西,即生成器。

生成器

生成器是一種神經網路,但不是普通的那種。

它使用一種特殊的層,稱為轉置卷積層(有時也叫解卷積)。

轉置卷積有時也被稱為 fractionally strided convolutions(我也不知道為啥叫這個名),它可以提升圖像質量。

要真正理解轉置卷積以及為什麼深度學習社區似乎難以為它定名,我建議你去看看 Naoki Shibuya 的這篇文章:

https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0?source=search_post---------0

簡而言之,下面這個動畫總結了如何使用轉置卷積將 2x2 矩陣提升為 5x5 的矩陣:

濾波器大小為 3,步長為 2 的轉置卷積。來源:https://arxiv.org/abs/1603.07285

圖像生成器的最終架構如下所示:

當然,如果沒有任何關於卷積濾波器權重的合理概念,我們的生成器模型目前只能發出隨機雜訊。那可就糟糕了。

現在,我們需要一個損失函數,而不是裝滿圖像的硬碟。

我們需要有個東西來告訴生成器它是對是錯,也就是一個老師。

對於圖像分類,下面這個損失函數就很好。當我們配對好圖像和標籤後,可以這樣做:

當然,這取決於你的任務,有時你可能想要用交叉熵損失或類似的其它函數。

重點是,標註的數據要讓我們可以構建一個可微分的損失函數。

我們的生成器網路也需要類似的東西。

理想情況下,損失函數應該能夠告訴我們生成的圖像有多逼真。因為一旦我們有了這種損失函數,就可以根據已知的方法將其最大化(即反向傳播和梯度下降)。

但不幸的是,在對數函數和餘弦函數看來,珊莎·史塔克和高斯雜訊幾乎是一回事。

在圖像分類的例子中,我們有簡潔的損失函數數學方程,但是這裡我們沒有類似的方程,因為數學不能構建可微函數來告訴我們生成的圖像是真實的還是虛假的。

我再說一遍:就是輸入一張圖像,然後返回一個數字來表明生成圖像是真是假(返回 1 即為真,返回 0 即為假)。

輸入:圖像;輸出:二進位值。

明白了吧?這不是一個簡單的損失函數問題,而是一個完全不同的神經網路。

判別器

區分生成圖像真假的模型被稱為判別器網路。

判別器是一個卷積神經網路,被訓練用來預測輸出的圖像是真還是假。如果它認為圖像是真,即輸出「1」,否則,輸出「0」。

所以從生成器的角度來看,判別器的作用相當於損失函數。

生成器需要以這種方式更新參數:當生成的圖像被傳輸至判別器時,輸出的值會接近 0,然後生成器相應地更新其參數。

圖源:Yatheesh Gowda 發自 Pixabay

最後,你的 GAN 看起來是這樣的:

圖源:https://skymind.ai/images/wiki/GANs.png

小結

總而言之,一步步創建基於 GAN 的圖像生成器的過程如下:

生成器(帶有轉置卷積層的神經網路)生成圖像,其中大部分圖像看起來像垃圾。

判別器接收一堆圖像,其中有些是真圖像(來自大型數據集),有些是假圖像(來自生成器)。

判別器執行二元分類,以預測哪張圖像為真(輸出「1」),哪張為假(輸出「0」)。這時候,判別器的準確率和提利昂用弓箭的準頭差不多。

判別器更新其參數,以便更好地對圖像進行分類。

生成器將判別器當損失函數用,並相應地更新其參數,以便更好地生成逼真圖像來欺騙判別器。即讓判別器判斷偽造圖像為 0 來更新生成器。

這個過程繼續,直到生成器和判別器達到一個平衡點,這時判別器無法判斷生成器生成的圖像是真還是假。

現在,你可以扔掉判別器,並有了一個不錯的生成器,它生成的大部分圖像看起來不像垃圾。

StyleGAN

深度學習領域發展迅猛,自 2014 年以來,GAN 方面的創新甚至比權游中死掉的角色都多。

即便用了上述 GAN 訓練框架,你生成的圖像充其量也就像個灰色的油炸牛油果(?)。

要想讓 GAN 真正派上用場,我們需要一套好用的技術。

如果你想征服 GANseteros 的七個王國,可以參考一個 GitHub repo,該 repo 列出了過去幾年主要的 GAN 創新。但除非你像伊蒙學士一樣閑,否則你連其中的一半都看不完。

所以,本文將重點介紹 StyleGAN。

StyleGAN 是英偉達的研究團隊於 2018 年底提出的。英偉達在這篇論文中表明,他們沒有創建一種新奇的技術來穩定 GAN 的訓練,也沒有引入新的架構。他們的技術不同於當下有關 GAN 損失函數、正則化和超參數的討論。

也就是說,到 2045 年人們發明巨大無比的 BigGAN 時,我將要展示的這些依然不會過時。

映射網路

通常來講,GAN 中的生成器網路會將隨機向量作為輸入,並使用轉置卷積將這個隨機向量變為一個真實的圖像,如前所述。

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

潛在向量有點像圖像的風格說明。該向量描述了它想讓生成器繪製的圖像。

如果你在向法醫藝術家描述一個嫌疑人,你會告訴他/她嫌疑人的一些「特徵」,比如頭髮的顏色、面部毛髮特徵以及眼睛之間的距離。

圖源:Kelly Sikkema

唯一的問題在於,神經網路不理解「頭髮顏色、面部毛髮特徵以及眼距。」它們只理解 CUDA 張量和 FP16.

潛在向量是用神經網路語言對圖像的一種高級描述。

如果你想生成一幅新的圖像,那麼你就要選擇一個新的向量,也就是說改變輸入才能改變輸出。

然而,如果你想精確控制生成圖像的風格就沒那麼容易了。因為你無法控制生成器如何選擇在可能的潛在向量上建模分布,所以你也無法精確控制生成圖像的風格。

由於 GAN 學習將潛在向量映射到圖像需要……被 GAN 學習,這一問題由此產生。GAN 可能不太樂意遵守人們的準則。

你可以嘗試通過小幅改變潛在向量中的一個數字來改變生成人臉圖像的頭髮顏色,但輸出的圖像可能會有眼鏡,膚色甚至人種都會出現差別。

這一問題叫做特徵糾纏(feature entanglement)。StyleGAN 旨在減少特徵糾纏。

理想情況下,我們想要的是乾淨整潔的潛在空間表徵。它允許我們對輸入潛在向量做細微改變,同時保證輸出的圖像/人臉不發生較大變化。

StyleGAN 試圖採用的方式是包含一個神經網路,該神經網路將一個輸入向量映射到 GAN 用到的第二個中間潛在向量。

圖源:https://www.lyrn.ai/wp-content/uploads/2018/12/StyleGAN-generator-Mapping-network.png

具體來說,英偉達選擇使用一個 8 層的網路,該網路以一個 512 維的向量作為輸入,另外一個 512 維的向量作為輸出。這些選擇都是任意的,你可以選擇自己的參數。

假設添加這個神經網路來創造一個中間隱藏向量可以讓 GAN 知道自己想如何利用向量中的數字,我們通過專用的密集層來傳輸它,而不是嘗試找出如何直接從轉置卷積中使用潛在向量。

映射網路應該減少特徵糾纏(相關討論見 StyleGAN 論文)。

如果這個想法對你來說不夠直觀,沒有關係。你只需要知道,通過「利用微型神經網路將輸入向量映射到中間潛在向量」這種做法非常好用,因此我們寧願選擇這種做法。

現在有了一個允許我們更加高效地利用潛在空間的映射網路,但要更好地控制生成圖像的風格,還需要做很多工作。

自適應實例歸一化(ADAIN)

回到向法醫藝術家描述嫌疑人的例子,想想真實的描述過程。

你不能簡單地說「他是一個瘦高的傢伙,留著大紅鬍子。他搶了一家銀行之類的。抱歉警官,我要趕一個電視節目,有空再找你……」然後打包走人。

圖源:Andy Beales

你要描述嫌疑人的樣子,然後等法醫藝術家描出嫌疑人的輪廓,接下來你會提供更多細節,這個過程會一直持續下去,直到你們兩人可以合作創作出嫌疑人的精確肖像。

換句話說,你是特徵和信息(即潛在向量)的來源,會不斷地將信息灌輸給藝術家,後者將你的描述轉化為有形的可見事物(即生成器)。

然而,在 GAN 的傳統形式中,潛在向量不會「停留足夠長的時間」。一旦你將潛在變數作為輸入饋送至生成器中,它就不會被再次使用了,這就相當於你打包走人。

StyleGAN 模型解決了這個問題。它可以讓潛在向量「停留」地久一點。通過將潛在向量注入每一層的生成器,生成器可以不斷地參考「風格指南」,就像藝術家可以不斷地向你發問一樣。

圖源:Thiago Barletta

現在來看一下比較難的技術部分。

類比非常簡潔,但無禮的電視迷和高瘦的紅鬍子銀行搶劫犯不會自己轉化為數學方程。

那麼 StyleGAN 是如何在每一層將潛在向量注入生成器的呢?

答案是自適應實例歸一化(Adaptive instance normalization,AdaIN)。

AdaIN 最初用在風格遷移中,但後來在 StyleGAN 中也派上了用場。

AdaIN 利用一個線性層(原論文中將其稱之為「學到的仿射變換」),該層將潛在向量映射到兩個標量中,即 y_s 和 y_b。「s」代表大小,「b」代表偏差。

有了這些標量,你就可以按以下方式執行 AdaIN。

此處的 f(w) 表示一個學習到的仿射變換,x_i 是我們應用 AdaIN 的一個實例,y 是一組控制生成圖像「風格」的兩個標量(y_s, y_b)。

如果你之前用過批歸一化,這裡你可能覺得非常眼熟。但一個很大的不同之處在於,均值和方差是逐通道、逐樣本計算的,而不是為整個小批次計算,如下所示:

圖源:https://nealjean.com/assets/blog/group-norm.png

這種將風格融入生成器隱藏層的做法可能乍看起來有點奇怪,但最新研究表明,控制隱藏層激活函數中的收益和偏差參數(即 y_s 和 y_b)可以極大地影響風格遷移圖像的質量。

完成所有這些歸一化工作之後,與僅使用一個輸入潛在向量相比,我們就能將風格信息更好地注入生成器中。

生成器現在有了一種「描述」,知道自己要構建的是哪種圖像(借用映射網路),而且它還能隨時參考這個描述(借用 AdaIN)。但是我們還可以再做一些工作。

學習到的常數輸入

如果你曾嘗試過「只用 5 步畫出一個迪士尼人物」但卻以失敗告終,你就會知道畫這些東西通常都是從輪廓開始的。

注意,你可以用一個相同的基線輪廓畫出一堆不同的人物面孔,並慢慢添加更多細節。

這一想法也適用於法醫藝術家。Ta 對人臉的大致樣子有一個相當不錯的把握,甚至不需要你提供任何細節。

在傳統的 GAN 生成器網路中,我們將一個潛在變數作為輸入並利用轉置卷積將潛在變數映射到圖像中。

那個潛在變數的作用是為我們的生成圖像添加變化。通過對不同的向量進行採樣,我們可以得到不同的圖像。

如果我們利用一個常數向量並將其映射到圖像中,我們每次都會得到相同的圖像。那將非常無聊。

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

既然我們可以學到向量,那我們為什麼還需要一個隨機向量作為輸入呢?事實證明,我們不需要。

在常規 GAN 中,變化和風格數據的唯一來源就是我們後面都不會再碰的輸入潛在向量。但正如我們在之前的章節中所看到的,這點非常奇怪,也不夠高效,因為生成器無法再次「看到」這一潛在向量。

StyleGAN 利用自適應實例歸一化將潛在變數「注入」每一層,以此來修正上述問題,由此解決了很多問題。但這也帶來了一些附加效應——我們不需要從一個隨機向量開始,我們可以學習一個向量,因為可以提供的任何信息都會由 AdaIN 提供。

說得更具體一點,StyleGAN 選擇一個學習到的常數作為輸入(一個 4x4x512 的張量),你可以將其當做一個擁有 512 個通道的 4x4 圖像。再次注意,這些維度完全是任意的,你可以在實踐中使用任何你想要的維度。

圖源:https://www.lyrn.ai/wp-content/uploads/2018/12/StyleGAN-generator-Input.png

這背後的原理與迪士尼公主畫圈圈是一樣的:生成器可以學習一些大致的「輪廓」,這些輪廓對所有圖像來說都適用。這樣它就是從輪廓開始學習,而不是從零開始。

這就是 StyleGAN。實際上,還有其它一些巧妙的技術可以讓你生成更逼真的圖像。

現在,你大概理解了所有 GAN 中最新 GAN 的核心。

風格混合

還記得我說的怎麼把潛在向量分別注入每一層嗎?

那麼,如果我們沒有注入一個,而是注入兩個潛在向量呢?

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

圖源:https://www.lyrn.ai/wp-content/uploads/2018/12/StyleGAN-generator-AdaIN.png

所以,如果對每一層的注入是獨立的,我們可以將不同的潛在向量注入不同的層。

這個主意不錯吧,英偉達也是這麼想的。他們團隊使用 GPU,嘗試用不同的潛在向量來對應不同層的「人臉」。

實驗步驟設置如下:採用 3 個不同的潛在向量,單獨使用這些向量時,將生成 3 個逼真的人臉圖像。

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

在「coarse」層,隱表徵占的空間很小,從 4×4 到 8×8。

在「medium」層,隱表徵的層大小中等,從 16×16 到 32×32。

在「fine」層,隱表徵的層在空間上也很小,從 64×64 到 1024×1024。

你可能會想,「天哪,這些精細層確實占太多層了吧。從 64 到 1024?太多了。間距不是應該更均勻嗎?」

其實,並不完全是這樣的。如果你讀了論文《Progressive Growing of GANs for Improved Quality, Stability, and Variation》,就會知道生成器會很快獲取信息,而較大的層主要細化和銳化前幾層的輸出。

然後,他們試著將三個潛在向量從初始位置移動一點,再查看圖像如何定性地發生變化。

隨機雜訊

在看過英偉達用 StyleGAN 做了那麼多好玩的東西後,抱歉讓你失望了,但我最後保留的肯定不是最好的。

如果你生成很多張假臉圖像並以新的方式將之混合後,如果找到一張最喜歡的你會怎麼辦?

你可以用那張圖像生成一百個副本,但這樣做未免太無趣了。

所以,我們可以對同樣的圖像做一些小小的改動。可能是稍微改變髮型,或者是雀斑。反正是這類微小的改動。

圖源:https://arxiv.org/pdf/1812.04948.pdf

當然,你也可以像普通的 GAN 那樣做,在潛在向量中引入一些雜訊:

其中 G 是生成器,?是向量,其組成部分是隨機採樣的小數字。

但我們有 StyleGAN,正如其名,我們可以控制圖像風格。

就像我們對潛在向量所做的逐層注入一樣,我們也可以對雜訊這麼做。我們可以選擇在粗糙層、中間層、精細層或三者的任何組合中添加雜訊。

StyleGAN 雜訊是以像素為單位添加的,這樣做是有意義的,因為這種給圖像添加雜訊而不是干擾潛在向量的方式更為常見,也更自然。

圖源:https://www.lyrn.ai/wp-content/uploads/2018/12/StyleGAN-generator-Noise.png

在製作權游中的角色時,我沒有使用雜訊,因為我只想製作一些高質量的圖像。

用 StyleGAN 探索你最喜歡的權游角色

現在你已經知道了 StyleGAN 的工作原理,是時候磨刀霍霍,不,摩拳擦掌試試我們最想要的效果了:預測瓊恩和丹妮莉絲的孩子長啥樣。

現在,我給大家隆重介紹 Djonerys(根據二者的名字結合而來,機智吧?):

喏,右下角的那個就是 Djonerys。

怎麼樣,帥不帥?一看就是龍母和瓊恩親生的。眉眼之間皆是兩人的影子,比如那高高尖尖的鼻子,似顰非顰的眉頭,盡得真傳的雙眼皮大眼睛……

呼,好一美少年,就是看起來比他爹少了一點陽剛之氣。小編賭十塊,Djonerys 是龍母和瓊恩的孩子,鑒定完畢。

作為帝國的下一任守護者——Djonerys 是根據風格混合技術生成的,上面已討論過該技術。

最後,為了慶祝維斯特洛大陸 8 周年紀念,下面我們用動畫演示瓊恩多年來的成長。

不同年齡段的瓊恩——由 StyleGAN 生成

只要你有角色的潛在表徵,就可以做點什麼了。比如,生成孩童時期的卓戈·卡奧(龍母亡夫)或創建女版的詹姆斯。

其實小編最想嘗試的是布蘭·史塔克和艾莉亞·史塔克。猶記得在權游中剛出場的小布蘭,白白嫩嫩玉雪可愛,像個女娃娃一樣。但是後期飽經磨難之後,布蘭變得越來越糙了。雖然依舊好看,但沒有那麼精緻了。想知道利用前期的照片生成女版的布蘭是什麼樣子,我猜一定是個很可愛的女孩紙。

而艾莉亞·史塔克,出場就是爬城牆的野小子,明明是個貴族小姐,性子卻像個野小子。後期發展成為女刺客,一點也不令人意外。而且越到後來長得越中性,好奇她的男版會長怎樣?

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

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

------------------------------------------------


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

對抗樣本並非bug,它們只是特徵罷了
2018 ACM博士論文獎公布:伯克利博士獲獎,清華姚班馬騰宇榮譽提名

TAG:機器之心 |