一鍵生成禿頭!看看20年後的自己吧 太真實了

最近《隱秘的角落》可謂火爆全網,劇中秦昊扮演的張東升一角更是深入人心。如果盤點張東升的名場面,肯定少不了這一幕:「想看看二十年後的自己嗎?

一鍵生成禿頭!看看20年後的自己吧 太真實了

兩邊蜘蛛網,中間溜冰場,作為一名數學老師,張東升年級輕輕已經禿成這樣。雖然劇中是化妝特效,不過脫髮已經成為年輕人的普遍焦慮,尤其是從事科研、程式設計師等高壓行業的年輕人,好像禿頂已成為註定的宿命,有多少人曾想像過自己二十年後會禿成什麼樣?

在看完《隱秘的角落》後,B站Up主MarsLUL決定用程式碼來實現自己的「夢想」。MarsLUL是Google的一名在職程式設計師,曾在加利福尼亞大學(UC Irvine)學習電腦相關專業。

一鍵生成禿頭!看看20年後的自己吧 太真實了

在最近上傳的一則影片中,他利用StyleGAN自製了一款禿頂生成器,可以從發量濃密的現在分分鐘看到二十年後發量稀疏的自己。先來看一下效果如何?

先來還原東升哥禿頂的全過程,髮際線後移的速度著實讓人覺得恐怖。

一鍵生成禿頭!看看20年後的自己吧 太真實了

從生成效果來看,除了面部有些區別外,最終髮型還是非常一致的。

再來看MarsLUL的,這畫面簡直無法接受。

一鍵生成禿頭!看看20年後的自己吧 太真實了

網友們的評論更是扎心:彷彿看到了我的未來。

一鍵生成禿頭!看看20年後的自己吧 太真實了

一鍵生成禿頭!看看20年後的自己吧 太真實了

如果你也有脫髮焦慮,想看看二十年後的自己,不妨來如法炮製一下。接下來我們來詳細說說禿頂生成器是如何實現的。

基於StyleGAN的生成器原理

B站影片中,MarsLUL沒有詳細呈現程式碼的實現過程,但所用到的核心技術和詳細參考資料均已給出。

這款禿頂生成器所用到的技術,如市面上普遍的圖片生成器一樣,都是NVIDIA 開源的StyleGAN,StyleGAN在影像合成的品質和解析度方面具備出色的性能,通常我們看到的逼真的人臉交換都是基於它實現的。

基於StyleGAN技術,《Hairstyle Transfer-Semantic Editing GAN Latent Code》(鏈接見文末),這篇詳細講述了如何在保持人臉不變的情況下,改變髮型的全過程。

一鍵生成禿頭!看看20年後的自己吧 太真實了

GAN的基本原理是通過對抗式訓練學習從潛在空間分布到真實數據的非線性映射。通常情況下,潛在空間和語義屬性之間的關係是未知的。比如潛在程式碼如何確定生成的髮型屬性?又如何區別目標屬性與非目標屬性?

因此,潛碼估計和語義編輯是解決潛在空間與語義屬性的未知關係的關鍵。在這裡,研究人員對兩個模組的原理進行了詳細說明。

一鍵生成禿頭!看看20年後的自己吧 太真實了

潛在程式碼估計:

首先,將輸入影像發送至預訓練的殘差網路進行潛在程式碼估計,然後將生成的估計值發送給生成器。此時已經完成了對原始輸入影像的初步猜想。對於此影像,我們可以將預訓練影像分類器應用於特徵提取,同時,對輸入影像進行相同的特徵提取。

接下來,在特徵空間中執行梯度下降,將特徵向量L2損失最小化並更新潛碼估計(紅色箭頭)。相比於在像素損失上採用梯度下降的方法,這種在語義特徵向量執行梯度下降更具有優勢,因為直接在像素空間中使用L2優化會陷入不良的局部最優。

一鍵生成禿頭!看看20年後的自己吧 太真實了
生成潛在程式碼估計

帶邊界的語義編輯

所謂語義編輯是指在保留所有其他資訊的同時編輯具有目標屬性的影像,在這裡我們的目標屬性就是頭髮。

在編輯之前,我們需要在潛在空間中找到能夠分隔二進位屬性的特定邊界,其中每個邊界將對應一個頭髮屬性。如髮型、顏色、髮際線高低、面部毛髮等;

對於任何二進位屬性,在潛在空間中都存在一個超平面,使來自同一側的所有樣本都具有相同的屬性,這樣便可以訓練負責每個屬性的獨立線性SVM。因此,我們需要從StyleGAN的512維潛在空間中找到一個超平面。

要查找超平面,需要配對的潛在程式碼數據和該屬性的分數。最終研究人員決定使用在大型數據集(CelebA)上訓練過的預訓練分類器來獲取頭髮屬性。10個屬性匹配的10個分類器大約生成了20k個潛在程式碼和分數組。這些配對的潛在程式碼在頭髮屬性上訓練了獨立的線性SVM,通過驗證評估,其準確度達到了80%。

一鍵生成禿頭!看看20年後的自己吧 太真實了

對於每個輸入影像,首先在StyleGAN潛在空間中找到它的特定位置,然後沿著特定方向移動,並進行語義編輯。

一鍵生成禿頭!看看20年後的自己吧 太真實了

如上圖,研究人員在StyleGAN空間中發現了年輕萊昂納多·迪卡普里奧(Leonardo DiCaprio)影像的潛碼,畫出了一個與劉海超平面正交的方向,並沿該方向移動了潛碼的位置。最終創建了不同劉海狀態的萊昂納多。以下是最終的動態效果圖:

一鍵生成禿頭!看看20年後的自己吧 太真實了

關於條件邊界,研究人員談到許多屬性是相互耦合。比如髮際線的高低與年齡有關,髮型較長的通常為女性,男性的鬍子和鬢角更為明顯等。因此,將目標屬性與其相關屬性分開至關重要。

正是出於這一點,這種通過尋找超平面邊界來編輯人臉屬性的方法也存在一些不足。當使用一個屬性編輯面孔時,一些其他屬性也可能由於它們的相關性而被更改。另外,該模型也無法完成跨性別的人臉交換。研究人員稱或許更多的分類器和使用特殊的數據集訓練可以解決以上問題。

最後,MarsLUL坦言自己製作這款禿頂生成器,目的是警醒大家合理作息防脫髮!奉上完整影片鏈接,希望大家都能成為發量濃密的程式猿。

bilibili地址:

//www.bilibili.com/video/BV1ot4y197MG?from=search&seid=6465326088364452402