天天看點

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

頭可斷,發型不能亂。
谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

最近有一個男人的名字實在太火了,他叫「張東升」;比他本人更出名的,是他突然摘下假發後露出的發際線。

在看完《隐秘的角落》以後,你會不會突然腦洞大開,思考秃頂後的自己是什麼樣子呢?

結果就是這麼巧,幾天前,一位 UP 主隆重推出了自制的秃頭生成器,不管你現在有多年輕,頭發有多麼濃密,這個生成器都能讓你一眼望穿二十年後的自己。

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

衆所周知,目前機器學習領域大部分的圖檔生成工具都是基于 GAN(生成對抗網絡)來實作的。英偉達在 2018 年推出了 StyleGAN 之後,AI 生成的人臉已經極其逼真,很難用肉眼來分辨。随後,英偉達也開源了 StyleGAN 的代碼,從此,越來越多的假臉就這樣被創造了出來,并且發型、皮膚、五官等特征都可以随心變化。

不掏一分錢,也不用出門,在家程式設計就能實作自己秃頂的夢想。這可不就是程式員們常說的「代碼改變世界」?

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

直到看見了生成結果,這發際線後移的速度太過恐怖:

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

望着秃頭的自己,一瞬間,心就涼了:

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

雖然也知道自己終将會有這麼一天,但還是想逃避:

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

發量日漸稀疏的程式員看完之後表示:「技術不錯,但有被冒犯到。」

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

詳細教程

即使這樣你也要嘗試?UP 主暫時沒有分享出全部代碼,但你也可以如法炮制,預知一下自己未來秃頭後的顔值(誤)。

MarsLUL 提到,該生成器的思路和代碼大部分來源于一篇 Medium 教程《Hairstyle Transfer — Semantic Editing GAN Latent Code》。

教程位址;https://medium.com/swlh/hairstyle-transfer-semantic-editing-gan-latent-code-b3a6ccf91e82

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

這裡借用了湯曉鷗、周博磊等人在論文《Interpreting the Latent Space of GANs for Semantic Face Editing》提出的「InterfaceGAN」。

第一步:潛碼估計

首先,我們将輸入圖像發送到預訓練的殘差網絡中,以便在 StyleGAN 中進行初始潛碼估計。然後把這個估計值發送給生成器,這讓我們對原始輸入圖像有一個初步的猜測。對此圖像我們可以将預訓練的圖像分類器應用于特征提取。同時,我們将對輸入圖像也進行同樣的特征提取。

然後在特征空間中,我們執行梯度下降,将特征向量的 L2 損失最小化并更新潛碼估計(紅色箭頭部分)。

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

現在,我們就可以在 StyleGAN 潛在空間内查找任何圖像。

帶邊界語義編輯

在進行編輯之前,我們需要尋找可以在潛在空間中分離二進制屬性的特定邊界。每個邊界對應一個頭發屬性。比如:

發型:波浪 / 直發、劉海;

顔色:黑色 / 棕色 / 金色 / 灰色;

發際線:後退發際線;

面部毛發:胡子、鬓角。

但是如何找到邊界?首先要做潛在空間分離,

最終使用 10 個分别于屬性比對的分類器來生成 2 萬個潛碼和 score pairs。我們在頭發屬性上訓練獨立線性 SVM,然後在驗證集上進行評估,最終準确性可以達到 80%。

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

把它們放在一起,對于每個輸入圖像,我們先在 StyleGAN 潛在空間中找到其特定位置,然後将其按照特定方向移動,以進行語義編輯。

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

我們對每個屬性使用線性超平面,将其法線向量作為輸出面相對于目标屬性連續變化的方向。例如在上圖中,我們在 StyleGAN 空間中找到了年輕的萊昂納多 · 迪卡普裡奧的圖像隐代碼,繪制了與劉海超平面正交的方向,将隐代碼的位置沿該方向移動。這樣我們就可以建立不同劉海狀态的,迪卡普裡奧的圖檔了。

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

最後,說到條件邊界(Conditional Boundary),它也在 InterfaceGAN 中被引入。通常,許多屬性會互相耦合,比如發際線與人的年齡相關,長發更多出現在女性照片中,胡須僅出現在男性面部。但是把不同屬性區分開非常重要。

作者介紹

MarsLUL 大學畢業于同濟大學土木工程系,是一名頭發很多的年輕人。

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

2015 年,他進入 UC Irvine 開始學習計算機知識,後來成為一名程式員,并進入谷歌工作。

在以往的視訊作品中,他也分享了自己轉專業和求職的諸多經驗。

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

哔哩哔哩我是如何從零基礎小白到谷歌程式員的?小程式

首先就是,轉行計算機一定要以興趣為先,不能單純因為「待遇好」、「容易找工作」等因素,就紮進一個自己并不喜歡的專業,如此是得不償失的。

谷歌程式員自制秃頭生成器:一鍵get張東升同款發型,今天你脫發了嗎?

但如果決定了,下一步就是怎樣在最短的時間内掌握一門學科的知識體系。

他會将一門學科分為三條路線進行學習:基礎知識、專業知識和興趣知識。

基礎知識相當于建築的地基,也是另外兩條路線的先決條件,比如計算機專業的基礎知識就是算法、資料結構、作業系統等等。這些知識都可以在 Coursera 等課程網站上獲得。

然後是專業知識,在沒有從業經驗的時候,你可以嘗試參加一些教育訓練項目(比如 Udemy),來了解在真正的工作崗位上,一個程式員到底需要掌握什麼技能。

另外一方面,可以通過讀書和專業知識的論壇,進行興趣知識的補充。比如 Hacker News,簡直是程式員攝取相關知識的福地。書籍方面,MarsLUL 推薦了《免費的程式設計中文書籍索引》這個 GitHub 項目,分門别類地整理了多本書籍資源,學習者可以根據自己的興趣來挑選。

項目位址:https://github.com/justjavac/free-programming-books-zh_CN

在另一期視訊中,MarsLUL 也細緻地分享了作為一名轉專業人員,如何闖過履歷這一關。

最後的最後,關于制作秃頭生成器的初衷,UP 主也說了:「其實是為了告訴大家熬夜的危害,為了自己的頭發,能早點睡就早點睡吧。」

程式設計不易,且編且珍惜。