《Face-to-Parameter Translation for Game Character Auto-Creation》智能捏臉論文解析

網易遊戲伏羲AI lab最近出了一片文章,《Face-to-Parameter Translation for Game Character Auto-Creation》,收錄於ICCV。這篇文章解決了一個問題:可以在遊戲的捏臉系統中實現輸入一張人臉照片,然後生成相似的遊戲角色。

如圖所示:

讓我們再細化一下這個問題,假設一個遊戲的捏臉參數有200個,那麼這個算法的功能就是:輸入一張人臉圖,輸出200個參數,而這200個參數可以在遊戲引擎裏渲染出與輸入的人臉圖相似的遊戲臉。

 

該算法的網絡結構如下圖所示:

 

首先我們看左邊部分,這個網絡首先要訓練一個Imitator,也就是一個生成器G(x),去模仿遊戲引擎,讓神經網絡能夠生成跟遊戲引擎渲染出來的圖片一樣的圖。

這個生成器的結構如下:

生成器G(x)的輸入爲遊戲捏臉參數,經過幾層反捲積,輸出爲圖片。然後將輸出的圖片與遊戲引擎渲染的真實圖片進行對比,讓它們儘量相似,所以用到的損失函數如下:

其實就是l1 loss。

有了生成器,我們就可以得到跟遊戲裏一樣的圖了,但是怎麼讓遊戲裏的捏臉圖跟輸入的人臉圖相像呢?

我們看看圖一中右邊的網絡:

這裏將y定義爲G(x),也就是生成器生成的圖。

有兩個Feature Extractor,上面的叫Face Recognition Model,稱爲F1,下面的叫Face Segmentation Model,稱爲F2。

F1用的網絡爲“Light CNN-29 v2”,L1loss爲:

作者稱其爲DiscriminativeLoss,其實就是算了兩張圖的餘弦距離,判斷兩張圖是否來自同一個人。

 

F2用的網絡爲Resnet50,只不過稍微改了一下結構。該網絡在Helen人臉語義分割數據集上進行預訓練。L2loss爲:

本質上也是一個l1loss,其中w爲語義分割得出的權重。整個L2loss就是爲了讓遊戲圖與輸入圖長得像。

介紹完網絡結構和損失函數,剩下的就是一些細節了:

模擬器:卷積核大小設置爲 4 × 4,每個轉置卷積層的步幅設置爲 2,使得特徵圖的大小在每次卷積後可以翻倍。批歸一化和 ReLU 激活函數嵌入在每個卷積層後,輸出層除外。使用 SGD 優化器進行訓練,批大小設置爲 16,動量爲 0.9。學習率設置爲 0.01,學習率衰減設置爲每 50epoch 下降 10%,訓練停止設置爲 500 個訓練 epoch。

 

人臉分割網絡:使用 Resnet-50 作爲主幹網絡(移除其全連接層,在其頂部添加一個 1 × 1 卷積層)。爲了提高輸出分辨率,研究者將 Conv 3 和 Conv 4 的步幅從 2 更改爲 1。該模型在 ImageNet 數據集上執行預訓練,然後在 Helen 人臉語義分割數據集上利用像素級交叉熵損失進行微調。模擬器配置同上,不過學習率被設置爲 0.001。

 

面部參數:面部參數的維度 D 被設置爲「男性」264、「女性」310。在這些參數中,208 個爲連續值(如眉毛長度、寬度和濃密度),其餘爲離散值(如髮型、眉型、鬍鬚類型和脣膏類型)。這些離散參數被編碼爲 one-hot 向量,並級聯爲連續向量。由於 one-hot 編碼很難優化,因此研究者使用 softmax 函數使離散變量變得平滑。

 

優化:至於第二階段中的優化,研究者將 α 設置爲 0.01,最大迭代數爲 50,學習率 μ 爲 10,學習率衰減率爲每 5 次迭代減少 20%。

 

人臉對齊:將輸入圖像傳輸到特徵提取器之前使用 dlib 庫對齊,使用渲染得到的「平均人臉」(average face)圖像作爲參考數據。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章