科技 新浪科技 谷歌程序員自製禿頭生成器,一鍵get張東升同款髮型

谷歌程序員自製禿頭生成器,一鍵get張東升同款髮型

原標題:谷歌程序員自製禿頭生成器,一鍵get張東升同款髮型

原創 Synced 機器之心

機器之心報道

參与:蛋醬、澤南

頭可斷,髮型不能亂。

6934-ivwfwmp4869034.jpg

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

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

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

d08e-ivwfwmp4869017.jpg

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

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

9a04-ivwfwmp4869136.gif

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

1f9d-ivwfwmp4869132.gif

望著禿頭的自己,一瞬間,心就涼了:

6d1d-ivwfwmp4869206.gif

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

d7c9-ivwfwmp4870167.jpg

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

b38b-ivwfwmp4869589.jpg

詳細教程

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

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

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

4fa2-ivwfwmp4869593.jpg

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

第一步:潛碼估計

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

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

d07e-ivwfwmp4869652.jpg

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

帶邊界語義編輯

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

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

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

髮際線:後退髮際線;

面部毛髮:鬍子、鬢角。

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

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

6961-ivwfwmp4869653.jpg

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

9178-ivwfwmp4869685.jpg

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

0244-ivwfwmp4869697.gif

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

作者介紹

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

b272-ivwfwmp4869755.jpg

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

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

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

5a72-ivwfwmp4869756.jpg

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

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

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

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

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

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

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

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

編程不易,且編且珍惜。

原標題:《谷歌程序員自製禿頭生成器:一鍵get張東升同款髮型,今天你脫髮了嗎?》