📃帶你了解 NVIDIA Audio2Face 技術原理 — Audio-Driven Facial Animation by Joint End-to-End Learning of Pose and Emotion
在 2022 年 GTC 上,黃仁勳執行長將數位孿生視為今年 NVIDIA 的重點開發項目,其中一項主力產品就是 Audio2Face,其作用簡單來說就是輸入一段音訊給 Audio2Face,Audio2Face 可以依照音訊來控制虛擬頭像 (Avatar) 的面部表情,還可以動態控制情緒表達,例如一段話可以選擇喜怒哀樂等等情緒來表達,而且還是即時控制 (Real-time),這就必須要求模型夠輕量。
Audio-Driven Facial Animation by Joint End-to-End Learning of Pose and Emotion
Audio2Face 的架構如圖一,輸入為一段 Audio window 以及 Emotional state,兩者都是一個向量, Audio window 為一段 520ms 的訊號, Emotional state 是用來控制情感的向量,輸出是 5022 個 3D 座標點,所以共有 15066 個回歸預測值,而 Avatar 的臉就是由這 5022 個點來控制的。那為何我們需要 Emotional state 呢 ? 原因在於一段聲音可以用不同情緒的臉來表達,例如生氣的臉、開心的臉等等,如果沒有 Emotional state 的話,那模型的輸入與輸出就是一段 Audio window 與多種表情,但是這對於神經網路來說是不可能的,因為同一個輸入只會有同一個輸出,這時候就需要另外一個輸入 Emotional state 來組合成一組輸入搭配一個輸出。
整個網路由三個模組組成,Formant analysis network、Articulation network 以及 Output network。
Input preprocessing
Audio window 輸入給 Audio2Face 之前會先經過 chunking 前處理,假設 Audio window 長度為 520ms,會以 sliding window 的方式取出多個 frame,每個 frame 為 16ms 且移動過程中彼此重疊 (overlap) 8ms,經過處理後,共可取出 64 個 frame,每個 frame 為 16ms,在這邊將此矩陣稱作 X。 64 視為時間序列,16ms 則是特徵維度,搭配採樣率 16 kHz 的話就是 256。
Formant analysis network
如圖二,輸入為矩陣 X,首先第一層為 Autocorrelation,又稱為自相關,是統計學中用來計算時間序列內相關性的方法,例如上週與上上週每天天氣之間的相關性、一段音訊中不同片段之間的相關性等等。在 Autocorrelation 中有一個參數 K 稱為相位差,例如一段訊號為 [1,2,3,4,5],若 K=1 就是 [1,2,3,4] 與 [2,3,4,5] 計算相關性。在論文中 K=32,所以 X 經過 Autocorrelation 後得到1x64x32 的輸出。當然這邊也能夠使用其他種頻譜分析方法。接著再通過多層卷積層,每一層都是一維卷積 (1x3),卷積的維度主要是後方的特徵維度 32,作者稱為 Formant axis,最後得到輸出 X1 256x64x1。
Articulation network
Articulation network 的目的在於同時處理 Audio 特徵以及 Emotional state,運作方式為將 X1 通過卷積然後與 Emotional state 做 concatenate,圖二中 256+E 就是 concatenate,重複此步驟 5 次就得到輸出結果。觀察這模組的卷積核大小為 3x1,卷積的維度主要是時間維度 (64),作者稱為 Time axis,最後得到輸出 X2 (256+E)x1x1。
Output network
最後來到輸出層,輸出層主要的目的就是預測 5022 個 3D 座標。中間有一層全連接層神經元數量為 150,這個數字是有道理的,論文中先對資料進行 PCA,分析幾個主成分可以達到理想的可解釋變異 (explained-variance),並以該主成分的數量當成神經元個數,論文中使用 150 個主成分可以解釋 99% 的變異。這種使用 PCA 主成分數量當成神經元個數的方法還蠻常見的,其想法在於 PCA 是一種線性降維,與全連接層一樣都是一種線性降維方式,使用此方式可以在決定神經元個數時不需要一開始就用 512, 1024 等等這麼多的神經元。
Emotional state
Emotional state 主要決定臉部表情的情緒,而人類的情緒是千變萬化的,論文作者認為不可能在一開始歸納出所有情緒,所以 Emotional state 是由網路學習出來的,其作法是將前處理後的輸出 X 再通過卷積得到 Emotional state,隨著 Articulation network 的卷積層數的增加,就會多做一個卷積,例如 Articulation network 的第一層所接的 Emotional state 維度就是 Ex32;第二層所接的 Emotional state 是 Ex32 再做一次卷積得到 Ex16,後面以此類推,其中 E 是 Emotion 數量。
有趣的是,一開始我們並不知道到底有幾種情緒,所以 E 視為一個超參數,在論文中一開始 E 設為 100。另外,每個 E 所代表的情緒一開始也不知道,所以論文中設計了三個過濾步驟來統整所有的 E。
Emotional state 過濾步驟一:
圖三是使用一段音訊搭配所有的 Emotional state 產生的熱圖,並觀察講話過程中嘴巴的閉合過程,顏色越趨近紅色表示嘴巴打開,反之藍色表示嘴巴閉合,x 軸是時間維度,y 軸是所有的 Emotional state。正常來說,講話過程中嘴巴是一閉一合的,不可能從頭到尾都是開 (always open) 或是關 (not opening),透過這方式將異常的 Emotional state 過濾掉。
Emotional state 過濾步驟二:
第二種過濾方式如圖四,這個步驟在於決定每個 Emotional state 代表什麼情緒,圖四中表示多個 Emotional state 所產生的 3D 人臉,人臉產生後手動主觀決定其情緒。
Emotional state 過濾步驟三:
此步驟使用現實中的 Audio,搭配所有的 Emotional state 進行生成,並過濾出人臉變化異常的 Emotional state,例如人臉不正常的抽動、扭曲等等。
通過以上步驟,最後剩下的 Emotional state 就是真正可用的情緒表達向量。以 NVIDIA Audio2Face 軟體上的介面來說,最後採用了 12 種 Emotional state,如圖五右下方 12 種情緒,而且還能夠控制 12 種情緒的高低起伏。
Ensemble
論文中還使用了 Ensemble 來防止嘴唇運動時可能產生不正常的抖動,如圖六,嘴唇紅點是測量位置,橘線是使用單一個預測值的效果,綠線是 Ensemble 的結果,可以看到橘線相較於綠線抖動程度更加厲害。其中 Ensemble 的方法就是將時間上的預測結果進行平均,每次間隔 4ms,例如第一次預測是使用 1~520 ms,第二次則是 5~524 ms,藉此嘴唇消除不正常的抖動。
最後,我們 MetAI 也會在接下來推出一系列的數位孿生 Avatar 教學,其中就包含了 Audio2Face,歡迎對數位孿生有興趣的朋友關注我們!
References:
📃 Audio-Driven Facial Animation by Joint End-to-End Learning of Pose and Emotion: https://users.aalto.fi/~laines9/publications/karras2017siggraph_paper.pdf
NVIDIA Audio2Face: https://www.nvidia.com/zh-tw/omniverse/apps/audio2face/
關於我們
「MetAI」是由 Metaverse 與 AI 融合而成的單字,同時意味著 Met (遇見) AI (人工智慧),是以人工智慧以及元宇宙為主要研究主題的社群,立意在於推動創新科技應用以及產業數位轉型。
關注我們
若我們的內容對您有幫助,請不吝幫我們分享、按讚。您的反饋會讓我們知道自己的內容方向是否有價值、能否做得更好,也讓更多需要的朋友也能獲得有用的知識。