0
本文作者: AI研習(xí)社-譯站 | 2020-09-23 14:47 |
字幕組雙語(yǔ)原文:玩轉(zhuǎn)StyleGAN2模型:教你生成動(dòng)漫人物
英語(yǔ)原文:Generating Anime Characters with StyleGAN2
翻譯:雷鋒字幕組(Icarus、)
生成式對(duì)抗網(wǎng)絡(luò)(GAN)是一種能夠生成新內(nèi)容的生成式模型。由于其有趣的應(yīng)用,如生成合成訓(xùn)練數(shù)據(jù)、創(chuàng)造藝術(shù)、風(fēng)格轉(zhuǎn)換、圖像到圖像的翻譯等,這個(gè)話題在機(jī)器學(xué)習(xí)界真的很受歡迎。
GAN架構(gòu) [圖片由作者提供]
GAN由2個(gè)網(wǎng)絡(luò)組成,即生成器和鑒別器。生成器將嘗試生成假樣本,并愚弄鑒別器,使其相信是真實(shí)樣本。鑒別器將試圖從真假樣本中檢測(cè)出生成的樣本。這個(gè)有趣的對(duì)抗性概念是由Ian Goodfellow在2014年提出的。已經(jīng)有很多資源可以用來(lái)學(xué)習(xí)GAN,因此為了避免冗余,我就不解釋GAN了。
我推薦大家閱讀Joseph Rocca寫的這篇理解GAN的美文。
理解生成式對(duì)抗網(wǎng)絡(luò)(GANs)
英偉達(dá)在2018年發(fā)表了StyleGAN論文《A Style-Based Architecture for GANs》。該論文為GAN提出了一種新的生成器架構(gòu),允許他們控制生成樣本的不同細(xì)節(jié)水平,從粗糙的細(xì)節(jié)(如頭部形狀)到更精細(xì)的細(xì)節(jié)(如眼睛顏色)。
StyleGAN還融合了Progressive GAN的思想,即網(wǎng)絡(luò)最初在較低分辨率(4x4)上進(jìn)行訓(xùn)練,穩(wěn)定后再逐步增加更大的層數(shù)。這樣做,訓(xùn)練時(shí)間變得更快,訓(xùn)練也更穩(wěn)定。
漸進(jìn)式增長(zhǎng)GAN[來(lái)源:薩拉-沃爾夫]
StyleGAN進(jìn)一步改進(jìn)了它,增加了一個(gè)映射網(wǎng)絡(luò),將輸入向量編碼成一個(gè)中間的潛伏空間,w,然后將有單獨(dú)的值用來(lái)控制不同層次的細(xì)節(jié)。
StyleGAN生成器架構(gòu) [圖片由作者提供]。
為什么要增加一個(gè)映射網(wǎng)絡(luò)?
GAN的問題之一是它的糾纏潛碼表示(輸入向量,z)。例如,假設(shè)我們有2個(gè)維度的潛伏碼,它代表了臉的大小和眼睛的大小。在這種情況下,人臉的大小與眼睛的大小高度糾纏在一起(眼睛越大也就意味著人臉越大)。另一方面,我們可以通過存儲(chǔ)臉部和眼睛的比例來(lái)簡(jiǎn)化這個(gè)問題,這將使我們的模型更簡(jiǎn)單,因?yàn)闊o(wú)糾纏的表示方式更容易讓模型解釋。
在糾纏表示下,數(shù)據(jù)分布不一定遵循正態(tài)分布,我們希望從那里抽取輸入向量z的樣本。例如,數(shù)據(jù)分布會(huì)有這樣一個(gè)缺角,它代表了眼睛和臉部的比例變得不現(xiàn)實(shí)的區(qū)域。
如果我們從正態(tài)分布中對(duì)z進(jìn)行采樣,我們的模型會(huì)試圖也生成缺失的區(qū)域,其中的比例是不現(xiàn)實(shí)的,由于沒有具有這種特征的訓(xùn)練數(shù)據(jù)Is,生成器會(huì)生成不良的圖像。因此,映射網(wǎng)絡(luò)的目的是拆分潛伏表征,并扭曲潛伏空間,使其能夠從正態(tài)分布中采樣。
此外,在每個(gè)層次上有單獨(dú)的輸入向量w,允許生成器控制不同層次的視覺特征。前幾層(4x4,8x8)將控制更高級(jí)別的細(xì)節(jié),如頭型、姿勢(shì)和發(fā)型。最后幾層(512x512,1024x1024)將控制更精細(xì)的細(xì)節(jié),如頭發(fā)和眼睛的顏色。
粗層次細(xì)節(jié)的變化(頭型、發(fā)型、姿勢(shì)、眼鏡)[來(lái)源:文件]
細(xì)部細(xì)節(jié)的變化(發(fā)色)[來(lái)源:文件]
關(guān)于StyleGAN架構(gòu)的完整細(xì)節(jié),我推薦大家閱讀NVIDIA官方關(guān)于他們實(shí)現(xiàn)的論文。下面是論文本身的完整架構(gòu)圖示。
[來(lái)源:基于風(fēng)格的全球行動(dòng)網(wǎng)文件架構(gòu)]
StyleGAN還允許你通過在各自的圖層上給予噪聲來(lái)控制不同層次的細(xì)節(jié)的隨機(jī)變化。隨機(jī)變化是圖像上的小隨機(jī)性,不會(huì)改變我們的感知或圖像的身份,如不同的梳理的頭發(fā),不同的頭發(fā)位置等。你可以在下面的動(dòng)畫圖像中看到變化的效果。
粗隨機(jī)變化[來(lái)源:論文]
精細(xì)隨機(jī)變化[來(lái)源:論文]
StyleGAN還做了一些其他的改進(jìn),我在這些文章中就不一一介紹了,比如AdaIN的規(guī)范化和其他常規(guī)化。你可以閱讀官方論文,Jonathan Hui的這篇文章,或者Rani Horev的這篇文章來(lái)代替閱讀進(jìn)一步的細(xì)節(jié)。
當(dāng)訓(xùn)練樣本中存在代表性不足的數(shù)據(jù)時(shí),生成器可能無(wú)法學(xué)習(xí)樣本,生成效果不佳。為了避免這種情況,StyleGAN使用了一個(gè) "截?cái)嗉记?quot;,通過截?cái)嘀虚g的潛伏向量w,迫使其接近平均值。
?(psi)是閾值,用來(lái)截?cái)嗪椭匦虏蓸痈哂陂撝档臐撓蛄?。因此,如果使用更高?,你可以在生成的圖像上獲得更高的多樣性,但它也有更高的機(jī)會(huì)生成奇怪或破碎的面孔。對(duì)于這個(gè)網(wǎng)絡(luò)來(lái)說,?的值在0.5到0.7之間,根據(jù)Gwern的說法,似乎可以得到一個(gè)具有足夠多樣性的好圖像。雖然,可以隨意試驗(yàn)一下閾值。
用0.3磅/平方英寸(左)與0.7磅/平方英寸(中)與1.3磅/平方英寸(右)生成的3x3網(wǎng)格圖像。
我將使用Aaron Gokaslan預(yù)先訓(xùn)練好的Anime StyleGAN2,這樣我們就可以直接加載模型并生成動(dòng)漫臉。所以,打開你的Jupyter筆記本或Google Colab,讓我們開始編碼吧。
注:如果你有困難,可以參考我的Colab筆記本。
所以首先,我們應(yīng)該克隆styleGAN repo。
$ git clone https://github.com/NVlabs/stylegan2.git |
如果你使用的是 Google Colab,你可以在命令前加上'!'來(lái)作為命令運(yùn)行。!"git clone https://github.com/NVlabs/stylegan2.git
接下來(lái),我們需要下載預(yù)訓(xùn)練的權(quán)重并加載模型。當(dāng)你使用Google Colab時(shí),請(qǐng)確保你是在GPU運(yùn)行時(shí)運(yùn)行,因?yàn)槟P捅慌渲脼槭褂肎PU。
這段代碼是從這個(gè)筆記本上修改而來(lái)的。
現(xiàn)在,我們需要生成隨機(jī)向量z,作為生成器的輸入。讓我們創(chuàng)建一個(gè)函數(shù),從給定的種子中生成潛伏代碼z。
然后,我們可以創(chuàng)建一個(gè)函數(shù),將生成的隨機(jī)向量z,生成圖像。
現(xiàn)在,我們可以嘗試生成一些圖像,看看結(jié)果。
該函數(shù)將返回一個(gè)PIL.Image的數(shù)組。在Google Colab中,你可以直接通過打印變量來(lái)顯示圖像。這里是第一張生成的圖片。
圖片由作者提供
讓我們用圖片的網(wǎng)格來(lái)顯示,這樣我們就可以同時(shí)看到多張圖片。
然后我們可以將生成的圖像顯示在3x3網(wǎng)格中。
圖片由作者提供
GAN的一個(gè)好處是,GAN有一個(gè)平滑和連續(xù)的潛伏空間,而不像VAE(Variational Auto Encoder)有間隙。因此,當(dāng)你在潛伏空間中取兩個(gè)點(diǎn),將產(chǎn)生兩個(gè)不同的面,你可以通過在兩個(gè)點(diǎn)之間取一個(gè)線性路徑來(lái)創(chuàng)建兩個(gè)面的過渡或插值。
潛在空間的插值[來(lái)源:Joseph Rocca]
讓我們?cè)诖a中實(shí)現(xiàn)這一點(diǎn),并創(chuàng)建一個(gè)函數(shù)來(lái)在z向量的兩個(gè)值之間進(jìn)行插值。
讓我們看看插值結(jié)果。你可以看到,第一幅圖像逐漸過渡到第二幅圖像。
圖片由作者提供
現(xiàn)在我們已經(jīng)完成了插值工作。我們終于可以嘗試制作上面縮略圖中的插值動(dòng)畫了。我們將使用moviepy庫(kù)來(lái)創(chuàng)建視頻或GIF文件。
當(dāng)你運(yùn)行這段代碼時(shí),它會(huì)生成一個(gè)插值的GIF動(dòng)畫。你還可以使用頂部的變量修改持續(xù)時(shí)間、網(wǎng)格大小或fps。
生成的StyleGAN2插值GIF [圖片由作者提供]。
如果你做到了這一步,恭喜你! 你已經(jīng)使用StyleGAN2生成了動(dòng)畫面孔,并學(xué)會(huì)了GAN和StyleGAN架構(gòu)的基礎(chǔ)知識(shí)。
現(xiàn)在我們已經(jīng)完成了,你還可以做什么,進(jìn)一步改進(jìn)呢?以下是你可以做的幾件事。
其他數(shù)據(jù)集
顯然,StyleGAN并不局限于動(dòng)漫數(shù)據(jù)集,還有很多可用的預(yù)訓(xùn)練數(shù)據(jù)集,你可以盡情玩耍,比如真實(shí)的臉部圖像、貓咪、藝術(shù)和繪畫。請(qǐng)查看這個(gè)GitHub repo,了解可用的預(yù)訓(xùn)練權(quán)重。另一方面,你也可以用自己選擇的數(shù)據(jù)集來(lái)訓(xùn)練StyleGAN。
有條件的GAN
目前,我們無(wú)法真正控制我們想要生成的特征,如頭發(fā)的顏色,眼睛的顏色,發(fā)型和配件。條件GAN允許你在輸入向量z旁邊給出一個(gè)標(biāo)簽,從而將生成的圖像調(diào)節(jié)成我們想要的樣子。另外,你也可以嘗試通過回歸或手動(dòng)來(lái)理解潛伏空間。如果你想往這個(gè)方向走,Snow Halcy repo也許能幫到你,因?yàn)樗呀?jīng)做了,甚至在這個(gè)Jupyter筆記本上做了互動(dòng)。
鳴謝
我要感謝Gwern Branwen的大量文章和關(guān)于用StyleGAN生成動(dòng)漫面孔的解釋,我在文章中強(qiáng)烈提到了這一點(diǎn)。我完全推薦你訪問他的網(wǎng)站,因?yàn)樗闹魇且粋€(gè)知識(shí)的寶庫(kù)。此外,還可以去ThisWaifuDoesNotExists網(wǎng)站看看,那里有StyleGAN模型生成動(dòng)漫臉譜和GPT模型生成動(dòng)漫情節(jié)。
雷鋒字幕組是一個(gè)由AI愛好者組成的翻譯團(tuán)隊(duì),匯聚五五多位志愿者的力量,分享最新的海外AI資訊,交流關(guān)于人工智能技術(shù)領(lǐng)域的行業(yè)轉(zhuǎn)變與技術(shù)創(chuàng)新的見解。
團(tuán)隊(duì)成員有大數(shù)據(jù)專家,算法工程師,圖像處理工程師,產(chǎn)品經(jīng)理,產(chǎn)品運(yùn)營(yíng),IT咨詢?nèi)耍谛熒?;志愿者們?lái)自IBM,AVL,Adobe,阿里,百度等知名企業(yè),北大,清華,港大,中科院,南卡羅萊納大學(xué),早稻田大學(xué)等海內(nèi)外高校研究所。
如果,你也是位熱愛分享的AI愛好者。歡迎與雷鋒字幕組一起,學(xué)習(xí)新知,分享成長(zhǎng)。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。