角色定製系統是角色扮演類遊戲(Role-Playing Games,RPG)的一個重要部分,該系統允許玩家依照自己的喜好編輯遊戲角色的面部外觀,而不是使用默認模板。網易伏羲AI實驗室提出了一種根據輸入的面部照片自動創建遊戲角色的方法,相關論文已經被ICCV2019錄用發表。該方法通過解決大量具有物理意義的面部參數優化問題,依據面部相似性度量和參數搜索範式制定上述“藝術創作”過程。
爲了有效地最小化生成圖像與真實面部圖像間的距離,作者設計了“判別損失”和“面部內容損失”這兩個損失函數。由於遊戲引擎的渲染過程是不可微的,因此作者設計了一個生成網絡作爲“模擬器”來模擬遊戲引擎的生成過程,以便論文提出的方法可以在神經風格遷移框架下實現,並能通過梯度下降法對模型參數進行優化。
實驗結果表明,使用論文提出的方法生成的遊戲角色與輸入的人臉圖像在全局外觀和局部細節方面都達到了高度相似的水平。該方法已經在網易去年的新遊戲中部署,現在已經被超過100萬玩家使用。
1 背景介紹
角色定製系統允許玩家根據自己的喜好編輯遊戲內角色的形象,例如使用一個流行明星或玩家自己的實際形象生成遊戲角色形象。在最近的一些RPG類遊戲中,爲了提高玩家的沉浸式體驗,角色定製系統發展地越來越精細。但是,對於大多數玩家來說,角色定製過程變得越來越耗時且困難。例如,在《Grand Theft Auto Online》、《Dark Souls III》以及《Justice》這幾個遊戲中,玩家爲了給遊戲人物“捏臉”需要耗費好幾個小時調整上百個參數,即使是一位經驗豐富的老玩家也需要很長的時間來創建他的自定義遊戲角色。
創建RPG遊戲角色的一個標準工作流程需要配置大量的面部參數,遊戲引擎將這些詳細的面部參數作爲輸入然後產生一個3D人臉模型。理論上來講,遊戲角色定製可以看成是“單目3D人臉重建”或“風格遷移”問題的一個特殊情況。長期以來,生成包含語義結構的3D圖像在計算機視覺領域都是一個非常困難的任務。但如今,計算機已經可以使用CNN自動生成具有新風格的圖像,甚至是由單張面部圖像生成3D重構結果,這都要歸功於近年來深度學習的發展。
但是由於一些因素的限制,通用的風格遷移或3D重建算法不能直接用於遊戲環境。具體原因如下:
-
通用的方法不是爲生成參數化的角色而設計,它們通常是使用圖像或3D點陣作爲輸入。而遊戲引擎通常是使用用戶自設的參數進行生成。
-
這些方法的用戶交互通常都不是很友好,多數用戶不直接編輯3D點陣或柵格化的圖像。
-
遊戲引擎使用用戶自定義的參數進行渲染的過程是不可微的,這限制了基於深度學習的方法在遊戲環境中的應用。
考慮到上述問題,這篇文章提出了一種自動化的遊戲角色生成過程,該方法使用一張輸入的人臉圖像進行角色創建,如圖1所示。以往的3D人臉重構方法會生成3D人臉點陣,而該方法則對具有清晰物理意義參數進行預測,生成骨架驅動的3D模型。在該方法中,每個參數控制着每個面部組件的獨立屬性,包括位置、方向和尺度。更重要的是,該方法支持用戶在基礎的創建結果上基於他們的需求進行額外的用戶交互。由於遊戲引擎的渲染過程是不可微的,作者設計的了一個生成網絡G作爲一個模擬器來模擬遊戲引擎的生成過程,以便提出的方法可以使用神經風格遷移框架實現,並通過梯度下降法對面部參數進行優化。考慮到該方法的特性,作者將該方法定義爲一種“人臉-參數”(Face-to-Parameter,F2P)翻譯方法。
論文的貢獻:
-
我們提出了一種端到端的方法用於人臉-參數翻譯和遊戲角色自動生成。據我們所知,目前爲止僅有很少一部分工作在該問題上進行研究。
-
介紹了一種由生成網絡構成的模擬器,它可以模擬遊戲引擎的行爲。通過這種方法,梯度可以平滑的反向傳播,從而可以使用梯度下降法更新面部參數。
-
針對跨域人臉相似性度量,分別設計了兩個損失函數。在多任務學習框架中,該方法的目標函數可以被聯合優化。
2 方法
論文提出的人臉-參數模型由一個模擬器G(x)和一個特徵提取器F(y)組成。前者使用用戶自定義的面部參數x來模擬遊戲引擎的生成過程,並生成一個“預渲染”的面部圖像y。後者則用來決定特徵空間,使得面部相似性度量方法可以被用於優化面部參數。整個方法的處理框架如圖2所示。
2.1 模擬器
作者訓練了一個卷積神經網絡作爲模擬器,以適應遊戲引擎的輸入-輸出關係,從而使角色定製系統可微。模擬器G(x)採用了與DCGAN類似的網絡配置,它由8個轉置卷積層組成。模擬器的框架結構如圖3所示。爲了簡單起見,作者設計的模擬器G僅對面部模型的正視圖以及相應的面部定製參數進行模擬。
作者將模擬器的學習和預測構建爲一個基於深度學習的標準迴歸問題,其中該任務的目標是最小化遊戲中渲染圖像與生成的圖像在原始像素空間中的差異。訓練模擬器使用的損失函數如下:
其中x表示輸入的人臉參數,G(x)表示模擬器的輸出:
表示遊戲引擎渲染的輸出。作者使用l1損失函數作爲約束,因爲相比於l2損失,l1損失能減少更多的模糊。輸入參數x採樣自多維正態分佈u(x)。最終,訓練時的目標函數可寫爲:
在訓練階段,作者使用遊戲“Justice”的引擎隨機生成了20000個獨立的人臉以及相應的面部自定義參數。80%的人臉樣本用於訓練,其餘的則用於測試。圖4展示了三個由模擬器“渲染”得到的樣本。由於訓練樣本都是從面部參數的標準分佈模型中隨機生成的,因此對於大部分角色來說看起來可能會比較奇怪(這部分內容在論文的補充材料中有詳細解釋)。然而,正如我們可圖4中看到的那樣,即使在具有複雜紋理的一些區域中,生成的面部圖像和直接由渲染得到真實圖像仍具有高度的相似性,例如頭髮區域。這表明模擬器不僅適合低維面部流形的訓練數據,而且還能學會解耦不同面部參數之間的相關性。
2.2 面部相似性度量
一旦我們獲得了訓練好的模擬器G,由面部參數生成面部圖像的過程本質上就成爲了一個面部相似性度量問題。由於輸入的人臉照片和渲染出的遊戲角色圖像屬於不同的圖像域,爲了有效地度量面部相似度,作者設計了兩個損失函數分別從全局表觀和局部細節兩方面進行度量。作者借鑑了神經風格遷移的框架在特徵空間計算這些損失,而不是在原始的像素空間計算它們的損失值。參數的生成過程可以視爲在模擬器所在的流形進行搜索的過程,作者通過尋找最優點:
來最小化y和參考圖像y_r之間的距離,如圖5所示。
#2.2.1 判別損失
作者引入了一個人臉識別模型F1來度量兩張人臉的全局表觀損失,如人臉形狀以及大致表情。同時,作者受到感知距離(perceptual distance,在圖像風格轉換、圖像超分辨率重建、以及特徵可視化等領域有廣泛應用)的啓發。假設對於同一個人的不同肖像照片,它們的特徵應該具有相同的表示。最終,作者使用了目前領先的人臉識別模型“Light CNN-29 v2”來提取256維的人臉嵌入表示,然後使用該特徵計算兩張人臉之間的餘弦距離作爲它們的相似度表示。作者將該損失定義爲“判別損失”,因爲它的功能是判斷真實照片和由模擬器生成的圖像是否屬於同一個身份。上述的判別損失可以寫爲下面這種形式:
其中,兩個向量間的餘弦距離可以表示爲:
2.2.2 面部內容損失
除了判別性損失之外,作者還使用人臉語義分割模型提取了局部面部特徵,並通過計算這些特徵在像素級的誤差定義了一個面部內容損失。面部內容損失可以被視爲對兩個圖像中不同面部成分的形狀和位移的約束,例如,眼睛、嘴巴和鼻子。由於面部內容損失更關心的是面部圖像特徵差異而不是日常圖像,因此作者沒有使用在ImageNet數據集上訓練的語義分割模型,而是使用非常著名的Helen人臉語義分割數據庫對模型進行了訓練。作者使用Resnet-50作爲語義分割模型的基礎結構,移除了最後的全連接層,並將其輸出分辨率從1/32增加到了1/8。爲了提高面部語義特徵的姿態敏感度,作者使用分割結果(類級的概率響應圖)作爲特徵圖的權重來構建姿態敏感的面部內容損失函數。最終,面部內容損失可以定義爲:
其中F_2表示從輸入圖像到面部語義特徵映射的過程,w表示特徵的像素級權重,例如w_1表示眼-鼻-嘴響應圖。
最終,模型的總損失函數可以寫爲判別損失和麪部內容損失的線性組合:
其中參數Alpha用於平衡兩個任務的重要性。上文中提到的特徵提取器如圖6所示,作者使用了梯度下降法來解決下面這個優化問題:
其中:
表示需要優化的面部參數,y_r表示輸入的參考人臉照片。針對作者提出方法,其完整優化過程可以總結爲:
-
階段1:訓練模擬器G、人臉識別網絡F_1以及人臉分割網絡F_2
-
階段2:固定G、F_1和F_2,初始化並更新人臉面部參數x,直到接近迭代的最大次數:
2.3 實現細節
模擬器:作者設計的模擬器使用了4*4大小的卷積核,轉置卷積的步長設爲了2,以便將每個卷積操作後的特徵圖大小翻倍。批歸一化和ReLU激活函數被嵌入了模擬器的每個卷積層之後,除了輸出層。此外,作者使用SGD優化器進行訓練,批大小設爲了16,動量爲0.9。學習率設爲了0.01,學習率每50代衰減10%,整個訓練過程進行了500代。
面部分割網絡:作者使用了Resnet-50作爲分割網絡的骨幹網絡,並移除了其全連接層且在頂部增加了一個額外的1X1卷積層。此外,爲了增加輸出特徵圖的分辨率,作者將Conv_3和Conv_4的步長由2設置爲了1。作者使用了在ImageNet上與訓練的權重進行模型的初始化,然後在Helen人臉語義分割數據集上使用像素級的交叉熵損失對模型進行了微調。訓練時的學習率設爲了0.001,其餘配置均與模擬器的訓練參數相同。
面部參數:面部參數D的維度針對男性角色和女性角色分別設爲了264和310。在這些參數中,208個參數是連續值(例如眉毛長度、寬度和濃密程度),其餘的則是離散值(如髮型、眉毛風格、鬍子風格和嘴脣風格)。這些離散參數被處理爲獨熱編碼形式與連續參數拼接起來表示完整的面部參數。由於獨熱編碼難以優化,作者使用了softmax函數來對離散變量進行平滑處理:
其中,D’表示離散參數獨熱編碼的維度。Beta>0控制了平滑等級。作者將beta設置爲了100以加速優化過程。在初始化面部參數時,作者使用了“平均臉”,即將連續參數均設置爲0.5而離散參數全設置爲0。
優化:在階段2,Alpha設置爲0.01,最大迭代數爲50,學習率mu設置爲10並且每5次迭代衰減20%。
人臉對齊:作者使用了dlib人臉工具庫對輸入特徵提取器之前的圖像進行了人臉對齊操作,並使用渲染的“平均臉”作爲其參考圖像。
3 實驗結果及分析
作者使用了50個人臉特寫照片來進行實驗。圖7展示了一些輸入照片和生成的人臉參數。可以看出,遊戲引擎可以在多個視角渲染出遊戲內角色,並且渲染結果與輸入照片體現出高度的相似性。
3.1 消融學習
作者進行了消融學習實驗來驗證提出的框架中每個組件的重要性,包括1)判別損失和2)面部內容損失。在對判別損失進行驗證時,作者使用Gatys提出的內容損失作爲基準方法。如圖8所示,可以看出當使用了判別損失時,輸入圖像與渲染結果的相似性有了顯著提高。
圖9展示了使用面部內容損失的消融實驗結果。爲了更清楚地展示,作者提取了參考圖像的面部語義圖和麪部組件邊緣,紅色的像素表示生成人臉的部件位置。可以看出,當使用面部內容損失時,輸入圖像和生成人臉之間在像素位置上有更好的相關性。
此外,作者還展示了主觀評價結果,如表1所示。可以看出使用兩種損失函數結合時,模型生成的角色外觀的主觀評價結果更好。
3.2 與其他方法的比較
作者還將該文論提出的方法與一些流行的神經風格遷移方法進行了比較,包括全局風格方法[1]和局部風格方法[2]。儘管這些方法不是專爲角色生成這一任務設計的,作者還是與它們進行了比較,因爲在很多方面上它們與該論文提出的方法有相似性。圖10對這些結果進行了展示,通過圖10可以看出如果將圖像風格從內容中分離出來再對其進行組合,很難生成生動的遊戲角色。這是因爲生成圖像並不是嚴格地從遊戲角色所在流形上採樣得到的,因此這些方法很難用於RPG環境中。作者同時也與流行的單目3D人臉重構方法3DMM-CNN進行了比較,結果在圖10的最右側。可以看出即使3DMM-CNN能夠根據相似的面部輪廓生成蒙板,使用該論文提出的方法自動生成的遊戲角色依然與輸入具有更高的相似度。
爲了定量地評價生成人臉和遊戲內風格圖像的相似度,作者使用了Mode Score(MS)和Frechet Inception Distance(FID)作爲度量方式。對於每個測試圖像,作者從模擬器的訓練集隨機選擇一張圖像作爲參考,然後計算整個測試集的平均MS和FID。作者重複了5次實驗,然後計算了它們的均值和方差,結果如表2所示。此外,作者還對運行時間進行了統計。可以看出,該論文提出的方法具有更高的風格相似度同時具有更快的運行速度。
4 結論
在這篇論文中,作者提出了一種基於人臉圖像自動化生成遊戲角色的方法。作者在面部相似性測量和參數搜索範式下制定了該創造過程。實驗結果表明該論文提出的方法在生成結果的相似度和魯棒性方面達到了目前領先的水平。
參考文獻
[1] Leon A. Gatys, Alexander S. Ecker, and Matthias Bethge. Image style transfer using convolutional neural networks. In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), June 2016.
[2] Shuyang Gu, Congliang Chen, Jing Liao, and Lu Yuan. Arbitrary style transfer with deep feature reshuffle. In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), June 2018.