玩转StyleGAN2模型:教你生成动漫人物
正文字數(shù):2840 ?閱讀時長:6分鐘
生成式對抗網(wǎng)絡(luò)(GAN)是一種能夠生成新內(nèi)容的生成模型。由于其有趣的應(yīng)用,如生成合成訓(xùn)練數(shù)據(jù)、創(chuàng)建藝術(shù)、風(fēng)格轉(zhuǎn)換、圖像到圖像的翻譯等,這個話題在機器學(xué)習(xí)的領(lǐng)域中非常流行。
Posted by?Fathy Rashad?
url :?https://www.yanxishe.com/TextTranslation/2826
生成式對抗網(wǎng)絡(luò)
GAN架構(gòu)?[Image by Author]
GAN由2個網(wǎng)絡(luò)、即發(fā)生器/生成器和鑒別器組成。生成器將嘗試生成假樣本,并欺騙鑒別器相信它是真實樣本。鑒別器將嘗試從真樣本和假樣本中檢測生成的樣本。這個有趣的對抗概念是由伊恩·古德費羅(Ian Goodfellow)在2014年提出的。已經(jīng)有很多資源可以用來學(xué)習(xí)GAN,因此我不解釋GAN以避免冗余。
我建議閱讀Joseph Rocca 的這篇文章來了解GAN。
理解生成式對抗網(wǎng)絡(luò)(GANs)
https://medium.com/m/global-identity?redirectUrl=https%3A%2F%2Ftowardsdatascience.com%2Funderstanding-generative-adversarial-networks-gans-cd6e4651a29
風(fēng)格GAN2
2018年,NVIDIA發(fā)布了StyleGAN論文“A Style-Based Architecture for GANs”。該文提出了一種新的GAN生成器結(jié)構(gòu),允許他們控制生成的樣本的不同層次的細節(jié)水平,從粗略的細節(jié)(如頭部形狀)到更精細的細節(jié)(如眼睛顏色)。
StyleGAN還融合了Progressive GAN的思想,即網(wǎng)絡(luò)最初在較低分辨率(4x4)上訓(xùn)練,然后在穩(wěn)定后逐漸添加更大的層數(shù)。通過這樣做,訓(xùn)練時間變得更快,訓(xùn)練也更加穩(wěn)定。
漸進式增長GAN?[Source: Sarah Wolf]
StyleGAN進一步改進了它,增加了一個映射網(wǎng)絡(luò),將輸入向量編碼成一個中間的潛伏空間,w,然后將有單獨的值用來控制不同層次的細節(jié)。
StyleGAN生成器架構(gòu) [Image by Author]
為什么要增加一個映射網(wǎng)絡(luò)?
GAN的一個問題之一在于它的糾纏潛碼表示(輸入向量,z)。例如,假設(shè)我們有2個維度的潛伏碼,它分別代表了臉的大小和眼睛的大小。在這種情況下,臉的大小與眼睛的大小高度糾纏在一起(眼睛越大,臉也越大)。另一方面,我們可以通過存儲臉部和眼睛的比例來簡化這一點問題,這將使我們的模型更簡單,因為無糾纏的表示方式更容易被模型解釋。
在糾纏表示下,數(shù)據(jù)分布可能不一定遵循正態(tài)分布,我們希望從中采樣輸入向量z。例如,數(shù)據(jù)分布會有這樣一個缺失的角點,它表示眼睛和臉部的比例變得不現(xiàn)實的區(qū)域。
[Source: Paper]
如果我們從正態(tài)分布中采樣z,我們的模型也會嘗試生成缺失的區(qū)域,并且其中的比例是不現(xiàn)實的,因為沒有具有這種特性的訓(xùn)練數(shù)據(jù),生成器將生成較差的圖像。因此,映射網(wǎng)絡(luò)的目的是拆分潛伏表征,并扭曲潛伏空間,使其能夠從正態(tài)分布中采樣。
[Source: Paper]
另外,在每個層次上有單獨的輸入向量w,使得生成器可以控制不同層次的視覺特征。前幾層(4x4、8x8)將控制更高級別(相對粗糙的)的細節(jié),例如頭部形狀、姿勢和發(fā)型。最后幾層(512x512、1024x1024)將控制更精細的細節(jié)級別,例如頭發(fā)和眼睛的顏色。
粗糙細節(jié)的變化(頭部形狀,發(fā)型,姿勢,眼鏡) [Source: Paper]
細微層次細節(jié)的變化(發(fā)色)?[Source: Paper]
關(guān)于StyleGAN架構(gòu)的完整細節(jié),我建議您閱讀NVIDIA關(guān)于其實現(xiàn)的官方論文。這是從論文本身對整個體系結(jié)構(gòu)的說明和架構(gòu)圖。
基于風(fēng)格的全球行動網(wǎng)文件架構(gòu)
隨機變化
StyleGAN還允許您通過在各個圖層上給予噪聲來控制不同層次的細節(jié)的隨機變化。隨機變化是圖像上微小的隨機性,不會改變我們對圖像的感知或圖像的身份,例如不同的梳理的頭發(fā)、不同的頭發(fā)位置等。您可以在下面的動畫圖像中看到變化的效果。
粗糙的隨機變化?[Source: Paper]
精細的隨機變化[Source: Paper]
StyleGAN還做了一些其他改進,我在這些文章中就不一一介紹,比如AdaIN規(guī)范化和其他正則化/常規(guī)化。你可以閱讀官方論文,Jonathan Hui的這篇文章,或者Rani Horev的這篇文章來代替閱讀進一步的細節(jié)。
截斷技巧
當訓(xùn)練樣本中存在代表性不足的數(shù)據(jù)時,生成器可能無法學(xué)習(xí)樣本,并產(chǎn)生較差的結(jié)果。為了避免這種情況,StyleGAN使用了一種“截斷技巧”,截斷中間的潛在向量w,使其接近平均值。
????(psi)是閾值,用來截斷和重新采樣高于閾值的潛向量。因此,如果使用更高的????,你可以在生成的圖像上獲得更高的多樣性,但它也有更高的機會生成奇怪或破碎的面孔。對于這個網(wǎng)絡(luò)來說,????的值在0.5到0.7之間,根據(jù)Gwern的說法,似乎可以得到一個具有足夠多樣性的好圖像。雖然,可以隨意試驗一下閾值。
3x3 Grid Images generated with 0.3 psi (left) vs 0.7 psi (middle) vs 1.3 psi (right)
生成動漫人物
我將使用Aaron Gokaslan預(yù)先訓(xùn)練好的Anime StyleGAN2,以便我們可以加載模型直接生成動畫臉。所以,打開你的Jupyter筆記本或googlecolab,讓我們開始編碼。
注意:如果你遇到困難,可以參考我的Colab筆記本
因此,首先,我們應(yīng)該克隆styleGAN repo。
$ git clone https://github.com/NVlabs/stylegan2.git如果您使用的是googlecolab,可以在命令前面加上“!'以命令的形式運行它:!!"git clone https://github.com/NVlabs/stylegan2.git
接下來,我們需要下載預(yù)先訓(xùn)練好的權(quán)重并加載模型。當您使用googlecolab時,請確保您是使用GPU運行時運行的,因為模型被配置為使用GPU。
這段代碼是從這個筆記本上修改而來的
現(xiàn)在,我們需要生成隨機向量z,作為我們的生成器的輸入。讓我們創(chuàng)建一個函數(shù),從給定的種子生成潛在代碼z。
然后,我們可以創(chuàng)建一個函數(shù),將它生成的隨機向量z,生成圖像。
現(xiàn)在,我們可以嘗試生成一些圖像并查看結(jié)果。
該函數(shù)將返回一個PIL.Image的數(shù)組. 在googlecolab中,可以通過打印變量直接顯示圖像。這是第一個生成的圖像。
Image by Author
讓我們在一個圖像網(wǎng)格中顯示它,這樣我們可以一次看到多個圖像。
然后我們可以在一個3x3的網(wǎng)格中顯示生成的圖像。
Image by Author
GAN的一個優(yōu)點是它具有平滑和連續(xù)的潛伏空間,而不像VAE(變分自動編碼器Variational Auto Encoder)那樣有間隙。因此,當您在潛伏空間中獲取兩個將生成兩個不同面的點時,您可以通過在兩個點之間采用線性路徑來創(chuàng)建兩個面的過渡或插值。
潛伏空間的插值 ?[Source: Joseph Rocca]
讓我們在代碼中實現(xiàn)這一點,并創(chuàng)建一個函數(shù)來在z向量的兩個值之間進行插值。
讓我們看看插值結(jié)果。您可以看到第一個圖像逐漸過渡到第二個圖像。
Image by Author
現(xiàn)在我們已經(jīng)完成了插值。最后我們可以嘗試在上面的縮略圖中制作插值動畫。我們將使用moviepy庫創(chuàng)建視頻或GIF文件。
當您運行代碼時,它將生成一個插值的GIF動畫。您還可以使用頂部的變量修改持續(xù)時間、網(wǎng)格大小或fps。
生成的StyleGAN2插值GIF [Image by Author]
如果你成功了,恭喜你!你已經(jīng)使用StyleGAN2生成了動畫人臉面孔,并學(xué)習(xí)了GAN和StyleGAN架構(gòu)的基礎(chǔ)知識。
接下來我們應(yīng)該做什么
既然我們已經(jīng)完成了,你還能做些什么來進一步改進呢?這里有一些你可以做的事情。
其他數(shù)據(jù)集
顯然,StyleGAN不僅僅局限于動畫/動漫數(shù)據(jù)集,還有許多可以使用的預(yù)先訓(xùn)練得數(shù)據(jù)集,比如真實的臉、貓、藝術(shù)和繪畫的圖像。
查看此GitHub repo(https://github.com/justinpinkney/awesome-pretrained-stylegan2),了解可用的預(yù)訓(xùn)練權(quán)重。另一方面,您還可以使用自己選擇的數(shù)據(jù)集訓(xùn)練StyleGAN。
有條件的GAN
目前,我們無法真正控制我們想要生成的特征,例如頭發(fā)顏色、眼睛顏色、發(fā)型和配飾。條件GAN允許您在輸入向量z旁邊給出一個標簽,從而將生成的圖像調(diào)整為我們想要的樣子。或者,您可以嘗試通過回歸或手動來理解潛伏空間。如果你想朝這個方向發(fā)展,斯諾·哈爾西Snow Halcy repo或許能幫到你,因為他已經(jīng)做了,甚至在這個Jupyter筆記本上做了互動。
特別鳴謝
我要感謝gwenn Branwen就如何用StyleGAN生成動畫人臉做了大量的文章和解釋,我在文章中強烈提到了這一點。我完全建議你訪問他的網(wǎng)站,因為他的著作是知識寶庫。此外,看看訪問waifudoesnotex(https://www.thiswaifudoesnotexist.net/)網(wǎng)站,它擁有StyleGAN模型來生成動畫人臉和GPT模型來生成動畫情節(jié)。
LiveVideoStackCon 2020?北京
2020年10月31日-11月1日
點擊【閱讀原文】了解更多詳細信息
總結(jié)
以上是生活随笔為你收集整理的玩转StyleGAN2模型:教你生成动漫人物的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【音频技术:逼近人耳极限】
- 下一篇: 【一切为了QoE】