每日最新頭條.有趣資訊

輕叩次元壁——談談真人頭像的漫畫化

作者:李嘉銘

Google | Software Engineer

量子位 已獲授權編輯發布

轉載請聯繫原作者

在這篇自帶萌點的文章中,作者提出了一種新型模型TwinGAN,可以將真人頭像轉化成漫畫風的卡通頭像。打通二次元和三次元的世界的方法,都在這裡面了~

我成為宅之後一直抱有的一大遺憾,就是從小手殘不會畫畫,唯一能提的恐怕只有在美術課上,把新垣結衣畫成吳三桂之類的慘劇。

在接觸了機器學習之後,感覺手殘的我還可以拯救一下。畢竟現在的AI會下棋,會開車,還吟的一手好詩,會畫畫似乎也不是不可能。

為此我研究了如下的課題:能否打破次元壁,讓AI把現實中的人臉轉換成漫畫風格的圖片?

事實上近幾年來教AI畫畫的嘗試數不勝數。我曾經的文章裡介紹過其中的兩個:影像風格遷移和用生成對抗網絡(GAN)進行線稿上色,兩者都和我們的課題密切相關。

影像風格遷移

影像風格遷移最新成果

簡單來說,影像風格遷移是把一張畫作的風格遷移到照片上的過程。風格可以包括筆觸,用色,光影,物體比例等等。

自從Gatys在2015年發明了用神經網絡的影像遷移方法之後,一直困擾研究者的一個問題就是,由於影像風格遷移大多使用事先訓練好的物品識別網絡,而物品識別使用的訓練集是現實中的圖片,現有的影像遷移方法對於和現實中的物體比例不同的畫風束手無策。

具體到二三次元來說的話有兩者頭身比不同,眼睛鼻子大小不同等一系列問題。

其實最直接的解決方法也不難:花錢。請人標注一個專門用於藝術畫作方面的數據集,並重新訓練物品識別器,然而願意花錢做這個苦差事的研究者寥寥無幾。在用影像風格遷移把人臉轉換成二次元風格就這樣基本被堵死了。

GAN

如果影像風格遷移是打破次元壁的一條路,那另一條路則是生成對抗網絡,亦即所謂的GAN(Generative Adversarial Network)。

GAN是現在大名鼎鼎的研究者Ian Goodfellow在2014年提出的用於生成任何數據的算法,只要給予足夠的訓練數據和時間以及足夠強的神經網絡。通過兩個互相博弈的神經網絡,GAN可以模仿並生成真假難辨的影像。

比較有名的幾個應用例子如用於二次元頭像生成的MakeGirlsMoe,以及英偉達(Nvidia)研究所推出的高清晰度真人頭像生成模型PGGAN。

圖片引自PGGAN

經過幾年的改進,現在的GAN已經能生成品質相當高的圖片。不僅如此,GAN還能將一類圖片轉換成另一類。

在2016年年底,伯克利大學的Phillip Isola等人提出了名為pix2pix的模型。給定成對的兩類不同圖片(比如地圖和衛星圖),Pix2pix可以將兩種類型的圖片互相轉換。與此同時,在Preferred Networks工作的Taizan Yonetsuji也提出了基於UNet的線稿上色算法。

這兩種算法對於我們的人臉次元轉換課題來說再合適不過了,但可惜的是,兩個算法都要求成對的訓練圖片,而由於資金成本原因,至今沒有人發布過成對的二三次元人臉數據集。

圖片引自pix2pix

無配對跨領域影像轉換

必須使用不成對的圖片的限制,使影像類型轉換難度上升了一個等級,堪比在沒有辭典的情況下學習一門新語言。

幸好,被貧窮限制想象力的貌似不止我一個,還有Facebook人工智能研究所。在2016年Facebook發布了一篇名叫Unsupervised Cross-Domain Image Generation的論文,其核心內容便是如何在沒有成對數據,但一類影像有標注的情況下做到兩種類型圖片之間的互相“翻譯”。

不久之後的2017年,Jun-Yan Zhu等人提出了名為CycleGan的用於無標注不成對數據集的模型。

這兩個模型的一大共同之處便在於,為了解決數據集不配對的問題,兩個模型都做了如下的假設:先把A類圖片轉換成B類,再把B類轉換回A時,原圖和經過兩次翻譯的圖片之間不應該差太多。

用翻譯打個比方,把中文句子翻譯成英文之後,再把英語句子翻譯回中文時得到的應該是和一開始相同的句子,而二次翻譯之後與原輸入不同之處就可以當作循環誤差(cycle consistency loss)。

CycleGAN就是通過減少循環誤差來訓練神經網絡,並做到兩類不配對的圖片之間的互相轉化。

嘗試CycleGAN

好消息是,CycleGan有現成的開源代碼。找到現有的算法之後,我開始收集訓練所需的數據。我用CelebA的20萬張圖片作為三次元頭像數據庫,用MakeGirlsMoe裡提到的方法從日本遊戲網站Getchu截取了共計約3萬張二次元頭像。

二次元頭像數據集例子 圖片引自Getchu (佐倉大法好)

結果如下:

看上去過得去,但似乎哪裡不太對。。。事實證明,CycleGAN也有它的局限性。它對還原誤差的要求使它不得不將原圖中的所有資訊都一一對應到翻譯後的圖片中。

而在三次元到二次元的轉換過程中,二次元和三次元的資訊並不對稱。比如三次元的人臉在細節方面明顯多於二次元,而二次元的發色,瞳色又是三次元裡不常見的。要求二三次元之間一對一互相映射顯然是不太合理的,而用這種不合理的損失函數訓練的結果並不會好。

如何在沒有標注數據的情況下,盡量保留能夠互相對應的部分,而在無法一一對應之處有所創新,把三次元頭像轉換為二次元?

換個角度再試一次!

幸運的是,在現有的GAN算法行不通的時候,還有圖片風格遷移方面的經驗可以借鑒。

早在2016年,谷歌大腦(Google Brain)的Vincent Dumoulin等人便發現,僅僅讓神經網絡學習Batch Norm(批規範化層)中的兩個參數,就可以實現讓一張圖片轉換成許多不同風格的效果,甚至可以把不同的風格互相混搭。

他們的論文A Learned Representation For Artistic Style表明,本來用於讓神經網絡訓練更穩定的Batch Norm參數還有更多可發掘的潛力。

Twin-GAN - 技術細節

借鑒了以上提到的想法,並經過一些嘗試之後,我確定了如下名叫Twin-GAN的網絡結構:在影像生成器方面我用了至今效果最好的英偉達的PGGAN。

由於PGGAN的輸入是一個隨機的高維向量,而我們的輸入是一張圖片,所以我用了和PGGAN對稱的編碼器(encoder)將輸入的頭像圖片編碼為高維向量,並且為了還原圖片的細節,我用了UNet的結構將編碼器和影像生成網絡之間的卷積層連接了起來。

我的神經網絡的輸入和輸出主要有三種:

三次元頭像->編碼器->高維向量->PGGAN生成器+三次元用Batch Norm參數->三次元頭像

二次元頭像->編碼器->高維向量->PGGAN生成器+二次元用Batch Norm參數->二次元頭像

三次元頭像->編碼器->高維向量->PGGAN生成器+二次元用Batch Norm參數->二次元頭像

和Facebook的論文裡提到的一樣,讓三次元和二次元頭像共用一個編碼器和一個生成器的主要目的是讓神經網絡能夠認識到,雖然長的不太一樣,二次元和三次元的圖片所描繪的內容都是人臉。這對於二三次元的轉換至關重要。而最終決定是二次元還是三次元的開關就在Batch Norm參數裡。

損失函數方面,我主要用了以下四個函數:

三次元到三次元的還原損失函數(l1+GAN loss)

二次元到二次元的還原損失函數(l1+GAN loss)

三次元到二次元的GAN損失函數

三次元到二次元的循環損失函數(cycle consistency loss)。

成果

實際訓練完成後的效果如下:

Twin-GAN的功能不止於此。由於二三次元的圖片共享同一個embedding(嵌入向量),我可以抽取圖片的embedding用於最近鄰檢索(Nearest Neighbor Search),可以同時在二次元和三次元尋找與之最相似的圖片。

大部分還挺準的吧,從這裡可以看出我們訓練的神經網絡對於圖片的理解。

對於金色的頭髮它覺得和動漫裡的顏色差不多,而三次元的棕色顏色的頭髮它覺得對於二次元世界太過無聊,所以略施小計把大家都染了個發。

表情髮型在有些圖片中也能找到一些對應,而對於不能對應的部分神經網絡會有所創新。

比如中間靠右戴著俄羅斯冬帽的妹子,由於二次元數據集裡沒有戴這類帽子,所以神經網絡索性就把它當成了發飾。

不理想的地方也在這張圖中一目了然,有些時候它會把背景也當作頭髮的顏色來利用(如左下角),還有些時候他會把人的朝向弄反,這些錯誤在圖片轉換的時候也能見到。

其實我們的算法應用範圍不只是二三次元轉換,拿貓臉來訓練會怎麽樣?

喵!感覺被治愈了。儘管看上去還不錯,不過還是有許多時候,我可能對一張圖片的轉換效果不太滿意,比如原圖是黑發,而我想在轉換後二次元頭像裡有綠色的發色。

之前設計的網絡結構並不支持對這些細節的直接調整,因此我借鑒了Conditional generative adversarial nets,用illust2vec提取出角色的發色,瞳色,以及相關的一系列資訊,並在訓練神經網絡的同時把這些資訊通過特徵向量(embedding)提供給了生成器。

在生成圖片的時候,我額外給神經網絡一張二次元角色頭像作為輸入,轉換後的圖片會變成了那個角色的樣子,並保留了原三次元圖片的姿勢及表情(TODO)。效果大概是這樣的:

結果還遠不夠完美,可以進一步改進。但重要的是,我現在有了可以把三次元頭像變成動物,AI原創角色或者任何二次元角色的算法,再也不用擔心手殘了。

後記

現有算法最大的問題之一還是在數據集上,由於我收集的二次元頭像大多為女性,所以神經網絡會把三次元男性娘化成二次元女性。另外不正確的把背景當作發色,忽略以及錯誤的識別某些特徵之類的也常有發生,比如以下就是一個失敗的例子:

需要做的不止是改進優化現有的模型,此外,在三次元和二次元的互相轉換方面能做的其實還有很多,比如如何將生成的圖片從人臉拓展成更加豐富多樣的圖片,比如在生成結果不滿意的時候如何實時改進,又或將這個算法拓展到影片上等等。

值得一提的是,前幾個月由Shuang Ma提出的利用Attention Map的名為DA-GAN的圖片生成算法也有不錯的效果,其中的算法也有許多值得借鑒的地方。並且英偉達就在昨天公布了他們最新的研究,展示了能夠把貓變成狗的神經網絡。

這讓我更加期待將來影像轉換領域的進一步發展。This is exciting!

相關論文以及網站會視情況盡快推出,相關更新敬請關注我的知乎帳號(ID:李嘉銘)。感謝閱讀!

注:本文為了方便理解,簡化了許多論點,並不嚴謹,還請注意和諒解。對技術細節有興趣的可以讀引用部分的論文。

獲得更多的PTT最新消息
按讚加入粉絲團