聽說現在趕火車刷臉就進站了!Out,跟臉有關的最新玩法是你說什麼,表情包就演什麼
參與 shawn
十一結束,假期開工返鄉潮仍在繼續。就在昨日,一則視頻刷爆朋友圈。
視頻里,北京、廣州、上海、成都、武漢的火車站都相繼開通自助「刷臉」進站通道。
乘客驚呼「連化妝和美瞳都能識別出來,太神奇!」
其實,刷臉早已不是什麼新鮮事了!我們今天來聊一個更好玩的事兒,那就是你說話,AI給你配表情。讓你做個真正的虛擬人兒。
文章略枯燥,技術性的話術有點多,普通小白估計看起來夠嗆。技術宅們,上!
SIGGRAPH 2017曾經收錄過英偉達的一篇關於3D動畫人物面部表情研究的論文:Audio-Driven Facial Animation by Joint End-to-End Learning of Pose and Emotion,在該論文中,英偉達展示了通過音頻輸入實時、低延遲驅動3D面部表情的機器學習技術,從而實現了虛擬人物面部表情和音頻輸入完美配合。
為了幫大家更好地了解這一技術,AI科技大本營對這篇論文進行了重點內容的摘編,如果想了解完整論文,可參看文末的鏈接。
圖1. 根據語音推斷臉部動畫的深度神經網路
讓我們先從這張圖開始吧。以下「我們」一詞為論文作者的第一人稱。
當網路的輸入為時長大約半秒的音頻時,輸出是與音頻窗口的中心相對應的固定拓撲網格的3D頂點位置。該網路還有一個用於描述情緒狀態的二次輸入。其神經網路直接從訓練數據中學習情緒狀態,不進行任何形式的預標記(pre-labeling)。
我們提出了一種通過低延遲的實時音頻輸入驅動3D面部動畫的機器學習演算法。我們的深度神經網路可以學習從輸入音頻波形到臉部模型的3D頂點坐標的映射,同時還能找到一個簡潔的隱藏代碼,這個代碼可以用來區分只根據音頻無法解釋的面部表情變化。在進行干預時,隱藏代碼可以作為面部動畫情緒狀態的直覺控制(intuitive control)。
我們使用基於視覺的傳統表演捕捉法(performance capture methods)獲取了3-5分鐘的高質量動畫數據,並用這些數據對神經網路進行了訓練。我們的主要目標是模擬單個表演者的說話風格;在用戶研究中,當我們用不同性別、口音或講不同語言的說話者的語音驅動模型時,我們也能得到不錯的結果。這些結果可應用於遊戲對話、低成本本地化、虛擬現實頭像和遠程呈現等技術中。
CCS 概念: ? 計算方法論動畫;神經網路;基於回歸的監督學習;學習隱藏表徵;其他關鍵詞:面部動畫、深度學習、音頻
端對端網路架構
下面我們將闡述該網路的架構,以及關於音頻處理和從語音內容中分離出情緒狀態的細節。
輸入一小段音頻窗口,神經網路的任務是推斷該音頻窗口(window)中心的面部表情。我們將表情直接表示為面部固定拓撲網格中某一無情緒姿態(neutral pose)的逐頂點差分向量。當訓練好網路後,我們通過在音頻軌道滑動窗口來將網格變成動畫,在每個時間步長上對網路進行獨立評估。雖然網路本身沒有關於前幾幀動畫的記憶,但是在實踐中它可以生成暫時穩定的結構。
架構概覽
我們的深度神經網路由一個特殊用途層、10個卷積層以及2個完全連接層構成。我們將其切分為3個概念單元,如圖1和表1所述。
我們先將音頻窗口輸入到一個共振峰分析網路中,生成一個隨時間變化的語音特徵序列,之後我們會用這個序列驅動發音。該神經網路先利用固定函數自相關分析從音頻中提取出原始共振峰信息(請看原文第3.2節),然後再用其中5個卷積層優化這些信息。通過訓練,卷積層可以學習提取對面部動畫有用的短期特徵(shortterm features),例如語調、重讀和特定音素。第5個卷積層的輸出就是此類特徵隨時間變化的抽象表示。
接下來,我們將結果輸入到一個發音神經網路中。這個網路由5個卷積層構成,這些卷積層可以分享特徵的時序變化,並最終確定一個用於描述音頻窗口中心面部姿態的抽象特徵向量。
將情緒狀態的(學習)描述作為二次輸入連接到該發音神經網路中,用以區分不同的面部表情和說話風格(請看原文第3.3節)。我們將情緒狀態表示為一個E維向量,直接將其與發音神經網路每層的輸出連接在一起,這樣之後的層就可以相應地改變它們的行為。
每個l層都會輸出 Fl×Wl×Hl激活函數,其中Fl 是抽象特徵映射的數量,Wl是時間軸的維度,Hl是共振峰周的維度。在共振峰分析網路中,我們使用1×3的strided convolution逐漸減小Hl,逐漸增加Fl,也就是使原始共振峰信息向抽象特徵偏移,直到Hl= 1且Fl = 256為止。同樣,在發音神經網路中,我們利用3×1卷積減小Wl,也就是通過結合不同時間域(temporal neighborhood)的信息來對時間軸進行二次採樣(subsample)。
我們選擇了表1中列出的特定參數,因為我們發現這些參數在用數據集訓練的過程中始終表現良好,同時也保證了合理的訓練次數。雖然得出的結果對層數或特徵映射並不是很敏感,但是我們發現我們必須對兩個不同階段中的卷積進行調整以避免出現過度擬合。重要的是,共振峰分析網路在時間軸的每一個點上都執行相同的操作,因此我們可以在不同的時間偏移(time offsets)中使用相同的訓練樣本。
發音神經網路輸出一系列共同表示目標面部姿態的256+E抽象特徵,。我們將這些特徵輸入到一個輸出神經網路(output network)中,以在跟蹤網格中生成5022個控制頂點的最終3D位置。該輸出網路是一對可以對數據進行簡單線性轉換的全連接層。第一層將輸入特徵集映射到線性基本函數的權重上,第二層計算對應基向量(basis vectors)的加權總和,用它來表示最終頂點位置。我們將第二層預設為150個預先計算的PCA模塊,這些模塊總體可以解釋訓練數據99.9%的變化。理論上,我們可以用一個固定的基準來有效地訓練先前的層,生成150個PCA係數。但是我們發現,在訓練中任由基向量自行變化得出的結果反而更好一些。
音頻處理
網路的主要輸出是語音音頻信號,在信號輸入到網路之前我們將其轉換為16 kHz單聲道信號。在試驗中,我們對每個聲道的音量(volume)進行正則化,以確保可以利用完整的動態範圍[-1,+1],但是我們並沒有進行任何諸如動態範圍壓縮、降噪任何處理或預加強濾波器(pre-emphasis filter)的處理。
表1中的自相關層將輸入音頻窗口轉化為一個簡潔的2D表達,之後的卷積層。《語音生成source–filter模型》(filter model of speech production)[Benzeghiba等人. 2007;Lewis 1991]這篇論文啟發我們提出了這種方法,他們將音頻信號建模為線性濾波器(聲道)和激勵信號(聲帶)的混合體。眾所周知,線性濾波器的共振頻率(共振峰)攜帶有關於語音的音素內容的重要信息。激勵信號可以表示說話者聲音的音調、音色和其他特徵,我們假設對面部動畫而言這種信號並不重要,因此我們主要藉助共振峰來改善網路對不同說話者的泛化。
線性預測編碼(LPC)執行信號濾波器分離(source–filter separation)的標準方法。LPC將信號斷為數個短幀信號,根據首個自相關係數K計算出每幀信號的線性濾波器係數,並執行反向濾波以提取激勵信號。濾波器的共振頻率完全取決於自相關係數的值,因此我們選擇跳過大部分處理步驟,將自相關係數直接作為瞬時共振峰信息的表徵。這種方法在直覺上可行,因為自相關係數本質上表示的是一種壓縮形式的信號,其頻率信息與原始信號的頻譜(power spectrum)基本匹配。這種表示非常適合卷積網路,因為卷積層可以輕易地學習如何估計特定頻帶的瞬時頻譜。
在試驗中,我們將520ms的音頻作為輸入(關於預計輸出姿態的260ms歷史樣本和260ms未來樣本)。我們選擇這個數值的原因是,它可以使我們在不向網路提供過多數據(這樣會導致過度擬合)的情況下捕捉到諸如音素協同發音的相關效應。我們將輸出音頻窗口分為64個重疊為2x的音頻幀,這樣每幀音頻都對應16ms(256個樣本),並且連續的幀數之間間隔8ms(128個樣本)。在每幀音頻中,我們移除直流分量(DC component),用標準Hann窗口減緩時間域混疊效應(temporal aliasing effects)。最後,我們計算出自相關係數K = 32,總共獲得了64×32個輸入音頻窗口標量。雖然自相關係數小一點(例如K = 12)也足以確認單個音素,但是我們選擇更多地保留關於原始信號的信息,以確保之後的層也可以檢測出音調變化。
我們的方法不同於語音識別領域先前的絕大多數方法,這些方法的分析步驟通常都基於某一種專用的方法,例如梅爾頻率倒譜係數(MFCC)、感知線性預測係數(PLP)和rasta filtering [Benzeghiba等人. 2007]。這些方法之所以被廣泛採用是因為它們可以很好地線性分離音素,非常適合隱馬爾科夫模型(Hidden Markov Models)。在我們的早期測試中,我們嘗試了幾種不同的輸入數據表徵,結果發現我們方法的自相關係數明顯更好。
圖2.表演者不說話時動畫是什麼樣?這些是從表演者不說話的訓練集中抽取的樣本幀。
情緒狀態的表徵
根據語音推斷面部動畫本身就是一個不明確任務,因為同一語音可以對應不同表情。這一點尤其體現在眼睛和眉毛上,因為它們與語音的生成無任何直接關係。用深度神經網路處理此類不明確任務相當困難,因為訓練數據必然會涵蓋幾乎相同的語音輸入生成大不相同的輸出姿態的情況。圖2給出了幾個當輸入音頻剪輯完全無聲音時產生矛盾訓練數據的實例。如果網路除了音頻數據還有其他可用的數據,它就會學習輸出矛盾輸出的統計均值。
我們解決這些不明確任務的方法是向網路提供一個二次輸入。我們將每個訓練樣本都與一小部分附加的隱藏數據關聯起來,這樣網路就有足夠的信息用來明確地推斷出正確的輸出姿態。理想情況下,這些附加數據應編碼給定樣本時間域內所有無法根據音頻本身推斷出的動畫相關特徵,包括不同的表情、說話風格和自相關模式等。通俗地說,我們希望二次輸入能代表表演者的情緒狀態。除了能消除訓練數據中的歧義,二次輸入還對推斷很有幫助——它可以使我們能夠將不同的情緒狀態於同一給定聲帶混合併匹配在一起,以有效地控制得出的動畫。讓動畫實現情緒狀態的其中一種方法是,根據明顯的情緒對訓練樣本進行標記或分類[Anderson等人. 2013;Cao等人. 2005;Deng等人. 2006;Wampler 等人. 2007]。
這種方法並不算理想,但是因為它無法保證預定義的標記可以充分消除訓練數據中的歧義。我們並沒有選擇依賴預定義的標記,而是採用了一種由數據驅動的方法。在這種方法的訓練過程中,網路自動學習情緒狀態的簡明表徵。這樣只要給出足夠多樣的情緒,我們甚至可以從in-character片段(in-character footage)中提取出有意義的情緒狀態。我們將情緒狀態表示為E維向量,其中E是一個可調參數,在測試中我們將其設定為16或24,並初始化從高斯分布中提取出的隨機值的分量(components。)。
給每個訓練樣本都分配這樣一個向量,我們將保存這些隱藏變數的矩陣稱為「情緒資料庫」。如表1所示,發音神經網路所有的層的激活函數後都附有情緒狀態。這樣情緒狀態就作為損失函數(請看原文第4.3節)computation graph(計算圖)的一部分;由於E是一個可訓練的參數,因此在進行反向傳播時它會隨著網路權重的更新而更新。E維度兩種效應之間的均衡。如果E太低,情緒狀態就無法消除訓練數據變化的歧義,導致出現不理想的音頻反映。如果E太高,所有情緒狀態就會變得太過狹義,無法用於一般推斷(請看原文第5.1節)。
情緒資料庫的有這樣一個潛在問題:如果我們不能有效地限制情緒資料庫,它可能會學習明確地保存音頻中呈現的信息。如果不加限制,它可能會保存確定大部分面部表情的E blend形狀權重(E blend shape weights),弱化音頻的作用,並使網路無法處理訓練中未出現出的數據。
按照設計,音頻數據提供的信息應僅限於520ms間隔內的短期效應。因此,我們可以通過禁止情緒狀態包含短期變化來防止它們包含重疊信息。情緒狀態專門包含長期效應對推斷也很有幫助——當情緒狀態保持不變時,我們也希望網路能生成合理的動畫。為此,我們可以通過在損失函數中引入一個專用的正則項來懲罰情緒資料庫中的快速變化,這樣在訓練過程中情緒狀態就會逐漸平緩。我們的方法有一個較大的局限,我們無法正確模擬眨眼和眼部動作,因為它們與音頻無任何關係,也無法通過緩慢變化的情緒狀態來表示。
雖然在發音神經網路所有的層上都連接情緒狀態似乎有些多餘,但是我們發現在實踐中這樣做可以大幅改善結果。我們認猜測這是因為情緒狀態的作用是在多個抽象層(abstraction level)上控制動畫,通常抽象層越高學習難度就越大。連接靠前的層可以實現對精細動畫特徵(如協同發音)的精確控制,而連接靠後的層則只能加強對輸出姿態的直接控制。直覺上,當單個姿態得到很好的表示時,情緒狀態訓練早期應連接靠後的層,而到了訓練後期則應連接靠前的層。
學習的情緒狀態是無語義的數據(如「悲傷」、「高興」等)。但由於語義在網路架構或訓練中並無作用,相關的內容,可以詳見第5.1節。
營長說說:這篇文章真是有點佶屈聱牙,也不知道大夥看明白沒有,估計只有干這塊的專業技術宅才能真正看得趣味橫生。不過,不管技術多麼枯燥難懂,它卻給我們的生活創造了無比新鮮的快樂時光,正如營長曾經寫過一篇《獨家 我們扒出了這家中國創業公司,竟比蘋果iPhone X早兩年推出黑科技,還不用藉助深度攝像頭》的文章,他讓我們可以把表情玩得更加鮮活,玩出逼格的新高度。而這篇論文節選,則是為我們創造了一個智能,將語言更鮮活得賦予我們的虛擬表情。
也正是有了這些看似無趣的技術宅們的鑽研,才有了我們無比多彩而神奇,不斷推陳出新的美好世界。
原文地址
http://research.nvidia.com/publication/2017-07_Audio-Driven-Facial-Animation
PDF下載
http://research.nvidia.com/publication/2017-07_Audio-Driven-Facial-Animation
GIF/4K
限時乾貨下載
Step 1:長按下方二維碼,添加微信公眾號「數據玩家「fbigdata」」
※神經網路要從原子抓起:原來白花花的銀子才是神經晶元的未來
※合成肌肉獲重大進展,「道德」或成軟體機器人普及最大顧慮
※從三大神經網路,測試對比TensorFlow、MXNet、CNTK、Theano四個框架
TAG:數據玩家 |