破解AI唇語同步密碼:SyncNet論文核心原理解析
譯者 | 朱先忠
審校 | 重樓
簡介
你有沒有看過配音糟糕的電影,嘴唇動作和臺詞不同步?或者在視頻通話中,對方的嘴型和聲音不同步?這些同步問題不僅僅是煩人,而是視頻制作、廣播和實(shí)時通信中一個真正的問題。Syncnet論文(見“項(xiàng)目源碼”一節(jié))通過一種巧妙的自監(jiān)督方法正面解決了這個問題,該方法可以自動檢測并修復(fù)音視頻同步問題,無需任何手動注釋。特別酷的是,修復(fù)同步問題的同一個模型,通過學(xué)習(xí)嘴唇動作和語音之間的自然關(guān)聯(lián),也能識別出在擁擠的房間里是誰在說話。
核心應(yīng)用程序
使用訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò)的輸出可以執(zhí)行的下游任務(wù)具有重要的應(yīng)用價(jià)值,包括確定視頻中的唇形同步誤差、在多人臉場景中檢測說話者以及唇讀。開發(fā)唇形同步誤差應(yīng)用程序時,如果同步偏移存在于-1到+1秒范圍內(nèi)(此范圍可能有所不同,但通常足以滿足電視廣播音視頻的需求),即視頻滯后于音頻或音頻滯后于視頻,時間范圍為-1到+1秒,我們就可以確定偏移量。例如,假設(shè)音頻滯后視頻200毫秒,這意味著視頻比音頻領(lǐng)先200毫秒,在這種情況下,我們可以將音頻向前移動200毫秒,從而使偏移同步問題接近于0;因此,它也可以用于使音視頻同步(如果偏移量在我們在此處取的-1到+1秒范圍內(nèi))。
自我監(jiān)督訓(xùn)練方法
論文中提供的訓(xùn)練方法是自監(jiān)督的,這意味著無需人工注釋或手動標(biāo)記;用于訓(xùn)練模型的正樣本對和負(fù)樣本對無需手動標(biāo)記即可生成。此方法假設(shè)我們獲得的數(shù)據(jù)已經(jīng)同步(音頻和視頻同步);因此,我們已獲得音頻和視頻同步的正樣本對,并通過將音頻偏移±幾秒使其異步來制作音頻和視頻不同步的假樣本對(用于訓(xùn)練網(wǎng)絡(luò)的假樣本對)。這樣做的好處是,只要數(shù)據(jù)同步且源數(shù)據(jù)中沒有同步問題,我們就可以擁有幾乎無限量的數(shù)據(jù)進(jìn)行訓(xùn)練,從而可以輕松地制作用于訓(xùn)練的正樣本對和負(fù)樣本對。
網(wǎng)絡(luò)架構(gòu):雙流CNN
談到架構(gòu),它有兩個流:音頻流和視頻流,或者用外行的話來說,該架構(gòu)分為兩個分支:一個用于音頻,一個用于視頻。兩個流都需要0.2秒的輸入;其中,音頻流需要0.2秒的音頻,視頻流需要0.2秒的視頻。音頻和視頻流的網(wǎng)絡(luò)架構(gòu)都是基于CNN的,需要2D數(shù)據(jù)。對于視頻(幀/圖像),CNN似乎很自然;但是,對于音頻,也需要訓(xùn)練基于CNN的網(wǎng)絡(luò)。對于視頻和相應(yīng)的音頻,首先完成各自的數(shù)據(jù)預(yù)處理,然后將它們輸入到各自的CNN架構(gòu)中。
音頻數(shù)據(jù)預(yù)處理
音頻數(shù)據(jù)預(yù)處理——原始的0.2秒音頻經(jīng)過一系列步驟,得到一個13x20的MFCC矩陣。其中,13是與該音頻塊相關(guān)的DCT系數(shù),代表該音頻的特征;20是時間方向的,因?yàn)镸FCC頻率為100Hz,所以對于0.2秒,會有20個樣本,每個樣本的DCT系數(shù)由13x20矩陣的一列表示。13x20矩陣是CNN音頻流的輸入。網(wǎng)絡(luò)的輸出是一個256維的嵌入,表示0.2秒的音頻。
視頻數(shù)據(jù)預(yù)處理
視頻預(yù)處理——此處的CNN期望輸入尺寸為111×111×5(W×H×T),即5幀(h,w)=(111,111)的灰度口部圖像。對于25fps的幀率,0.2秒相當(dāng)于5幀。0.2秒的原始視頻以25fps的幀率進(jìn)行視頻預(yù)處理,轉(zhuǎn)換為111x111x5的圖像,并輸入到CNN網(wǎng)絡(luò)。網(wǎng)絡(luò)的輸出是一個256維的嵌入向量,用于表示0.2秒的視頻。
音頻預(yù)處理比視頻更簡單,復(fù)雜度也更低。讓我們了解如何從原始源中選擇0.2秒的視頻及其對應(yīng)的音頻。我們的目標(biāo)是獲得一個視頻片段,其中0.2秒內(nèi)只有一個人并且沒有場景變化,只有一個人在0.2秒內(nèi)說話。在此階段,除此之外的任何內(nèi)容對我們的模型來說都是壞數(shù)據(jù)。因此,我們對視頻運(yùn)行視頻數(shù)據(jù)預(yù)處理,其中我們進(jìn)行場景檢測,然后進(jìn)行人臉檢測、人臉跟蹤,裁剪嘴部并將視頻的所有幀/圖像轉(zhuǎn)換為111×111的灰度圖像并將其提供給CNN模型,相應(yīng)的音頻部分轉(zhuǎn)換為13×20矩陣并提供給音頻CNN。人臉數(shù)量>1的片段將被拒絕;由于我們在流程中應(yīng)用了場景檢測,因此0.2秒片段中沒有場景變化。因此,我們最終得到的是一段有音頻且視頻中有一個人物的視頻,這滿足了數(shù)據(jù)管道的基本需求。
聯(lián)合嵌入空間學(xué)習(xí)
網(wǎng)絡(luò)學(xué)習(xí)一個聯(lián)合嵌入空間,這意味著音頻嵌入和視頻嵌入將被繪制在一個共同的嵌入空間中。在聯(lián)合嵌入空間中,同步的音頻和視頻嵌入彼此靠近,而不同步的音頻和視頻嵌入在嵌入空間中相距較遠(yuǎn)。同步的音頻和視頻嵌入之間的歐氏距離會更小,反之亦然。
損失函數(shù)和訓(xùn)練細(xì)化
使用的損失函數(shù)是對比損失。對于正樣本對(例如,同步音頻-視頻0.2秒),音頻和視頻嵌入之間的歐氏距離平方應(yīng)該最??;如果該值過高,則會受到懲罰。因此,對于正樣本對,歐氏距離平方應(yīng)最小化;對于負(fù)樣本對,應(yīng)最小化max(margin–歐氏距離,0)2。
我們通過移除數(shù)據(jù)中的假陽性來精煉訓(xùn)練數(shù)據(jù)。我們的數(shù)據(jù)仍然包含假陽性(噪聲數(shù)據(jù)),首先在噪聲數(shù)據(jù)上訓(xùn)練同步網(wǎng)絡(luò),然后移除那些未達(dá)到特定閾值的正樣本對(標(biāo)記為同步音視頻正樣本對),以此來移除假陽性。噪聲數(shù)據(jù)(假陽性)的出現(xiàn)可能是由于配音視頻、有人從后面說話、音視頻不同步,或者這些因素在精煉步驟中被過濾掉了。
推理與應(yīng)用
現(xiàn)在,神經(jīng)網(wǎng)絡(luò)已經(jīng)訓(xùn)練完畢,讓我們來討論一下從訓(xùn)練模型中得出的推理和實(shí)驗(yàn)結(jié)果。
測試數(shù)據(jù)中存在音頻-視頻的正對和負(fù)對,因此我們的模型的推斷應(yīng)該為測試數(shù)據(jù)中的正對給出較低的值(最小歐氏距離),為測試數(shù)據(jù)中的負(fù)對給出較高的值(最大歐氏距離)。這是我們模型的一種實(shí)驗(yàn)或推斷結(jié)果。
確定偏移量也是一種實(shí)驗(yàn),或者說是我們訓(xùn)練好的模型推理的一種應(yīng)用。輸出將是偏移量,例如音頻領(lǐng)先200毫秒或視頻領(lǐng)先170毫秒——確定視頻或音頻滯后的同步偏移值。這意味著,調(diào)整模型確定的偏移量應(yīng)該可以解決同步問題,并使片段從不同步變?yōu)橥健?/p>
如果通過偏移值調(diào)整音頻視頻可以解決同步問題,則意味著成功;否則,模型失敗(假設(shè)在我們正在計(jì)算固定視頻(0.2秒)和各種音頻塊(每個0.2秒,在-x到+x秒范圍內(nèi)滑動,x=1秒)之間的歐幾里得距離的范圍內(nèi)的那個固定視頻存在同步音頻)。源剪輯的同步偏移可以通過計(jì)算源剪輯中1個0.2秒視頻的同步偏移值來確定,也可以通過對源剪輯中的幾個0.2秒樣本進(jìn)行平均然后給出平均偏移同步值來確定。后者比前者更穩(wěn)定,測試數(shù)據(jù)基準(zhǔn)也證明取平均值是更穩(wěn)定、更好的告知同步偏移值的方法。
模型會給出與此偏移量相關(guān)的置信度分?jǐn)?shù),稱為AV同步置信度分?jǐn)?shù)。例如,假設(shè)源片段存在偏移量,音頻領(lǐng)先視頻300毫秒,置信度分?jǐn)?shù)為11。因此,了解這個置信度分?jǐn)?shù)的計(jì)算方法非常重要,讓我們通過一個例子來理解。
實(shí)際示例:偏移量和置信度分?jǐn)?shù)計(jì)算
假設(shè)我們有一個10秒的源片段,并且我們知道這個源片段有一個同步偏移,即音頻領(lǐng)先視頻300毫秒?,F(xiàn)在我們來看看如何使用同步網(wǎng)絡(luò)來確定這個偏移。
我們?nèi)∈畟€0.2秒的視頻作為v1,v2,v3……v10。
讓我們了解如何計(jì)算v5的同步分?jǐn)?shù)和置信度分?jǐn)?shù),并且所有10個視頻片斷/樣本/塊都會發(fā)生類似的情況。
源剪輯:共10秒
v1:0.3-0.5秒 [–]
v2:1.2-1.4秒 [–]
v3:2.0-2.2秒 [–]
v4:3.1-3.3秒 [–]
v5:4.5-4.7秒 [–]
v6:5.3-5.5秒 [–]
v7:6.6-6.8 秒 [–]
v8:7.4-7.6 秒 [–]
v9:8.2-8.4秒 [–]
v10:9.0-9.2秒 [–]
我們將v5作為一個時長0.2秒的固定視頻。現(xiàn)在,我們將使用訓(xùn)練好的syncnet模型,計(jì)算多個音頻塊(將使用滑動窗口方法)與這個固定視頻塊之間的歐氏距離。具體方法如下:
v5的音頻采樣將在3.5秒到5.7秒(v5的±1秒)之間進(jìn)行,這為我們提供了2200毫秒(2.2秒)的搜索范圍。
設(shè)定重疊窗口參數(shù)如下:
- 窗口大?。?00毫秒(0.2秒)
- 跳長(Hop length):100ms
- 窗戶數(shù)量:21
于是有如下結(jié)果數(shù)據(jù):
Window 1: 3500-3700ms → Distance = 14.2
Window 2: 3600-3800ms → Distance = 13.8
Window 3: 3700-3900ms → Distance = 13.1
………………
Window 8: 4200-4400ms → Distance = 2.8 ← MINIMUM (audio 300ms early)
Window 9: 4300-4500ms → Distance = 5.1
………………
Window 20: 5400-5600ms → Distance = 14.5
………………
Window 21: 5500-5700ms → Distance = 14.9
v5的同步偏移=-300ms(音頻領(lǐng)先視頻300ms),Confidence_v5=中位數(shù)(~12.5)-最小值(2.8)=9.7
因此,300毫秒偏移的v5的置信度得分為9.7,這就是syncnet給出的置信度得分的計(jì)算方式,它等于固定v5的中位數(shù)(所有窗口或音頻箱)-最小值(所有窗口或音頻箱)。
類似地,每個其他視頻箱都有一個偏移值和相關(guān)的置信度分?jǐn)?shù)。
v1 (0.3-0.5s): Offset = -290ms, Confidence = 8.5
v2 (1.2-1.4s): Offset = -315ms, Confidence = 9.2
v3 (2.0-2.2s): Offset = 0ms, Confidence = 0.8 (silence period)
v4 (3.1-3.3s): Offset = -305ms, Confidence = 7.9
v5 (4.5-4.7s): Offset = -300ms, Confidence = 9.7
v6 (5.3-5.5s): Offset = -320ms, Confidence = 8.8
v7 (6.6-6.8s): Offset = -335ms, Confidence = 10.1
v8 (7.4-7.6s): Offset = -310ms, Confidence = 9.4
v9 (8.2-8.4s): Offset = -325ms, Confidence = 8.6
v10 (9.0-9.2s): Offset = -295ms, Confidence = 9.0
平均值(忽略低置信度v3)是:(-290–315–305–300–320–335–310–325–295)/9=-305ms
或者,如果包含所有10個基于置信度的加權(quán)平均:最終偏移≈-300ms(音頻領(lǐng)先視頻300ms):這就是計(jì)算源剪輯偏移的方式。
【重要提示】要么根據(jù)置信度得分進(jìn)行加權(quán)平均,要么刪除置信度較低的得分,因?yàn)椴贿@樣做會導(dǎo)致:
簡單平均值(包括靜音)–錯誤:(-290–315+0–305–300–320–335–310–325–295)/10=-249.5ms,這與真正的300ms相差甚遠(yuǎn)!
這解釋了為什么該論文使用平均樣本時準(zhǔn)確率能達(dá)到99%,而使用單樣本時準(zhǔn)確率只有81%。適當(dāng)?shù)幕谥眯哦鹊倪^濾/加權(quán)可以消除誤導(dǎo)性的靜默樣本。
多人場景中的說話人識別
同步得分的另一個重要應(yīng)用是多人場景中的說話人識別。當(dāng)有多張人臉可見但只能聽到一個人的聲音時,Syncnet會根據(jù)同一條音頻流計(jì)算每張人臉的同步置信度。我們并非針對一張人臉按時間順序滑動音頻,而是在同一時間點(diǎn)評估所有人臉——將每張人臉的口部動作與當(dāng)前音頻進(jìn)行比較,以生成置信度得分。說話的人臉自然會產(chǎn)生較高的置信度(視聽相關(guān)性強(qiáng)),而沉默的人臉則會產(chǎn)生較低的置信度(無相關(guān)性)。通過對10-100幀的測量結(jié)果進(jìn)行平均,眨眼或運(yùn)動模糊造成的瞬態(tài)誤差會被濾除,類似于同步檢測中處理靜默期的方式。
結(jié)論
Syncnet證明,有時最佳解決方案源于徹底重新思考問題。它無需繁瑣的手動標(biāo)記同步錯誤,而是巧妙地利用了大多數(shù)視頻內(nèi)容一開始就同步正確的假設(shè),將普通視頻轉(zhuǎn)化為無限的訓(xùn)練數(shù)據(jù)集。其妙處在于其簡單易用:訓(xùn)練兩個CNN,創(chuàng)建嵌入向量,使同步的音視頻對自然地聚類在一起。該方法在對多個樣本進(jìn)行平均時準(zhǔn)確率高達(dá)99%,并且能夠處理從廣播電視到各種YouTube視頻的各種內(nèi)容,事實(shí)證明它非常穩(wěn)健。無論你是在后期制作中修復(fù)同步問題,還是構(gòu)建下一代視頻會議應(yīng)用,Syncnet背后的原理都為大規(guī)模解決現(xiàn)實(shí)世界中的音視頻對齊問題提供了實(shí)用藍(lán)圖。
項(xiàng)目源碼和實(shí)施
- 本文項(xiàng)目的GitHub實(shí)現(xiàn):??SyncNet模型的Python實(shí)現(xiàn)??
- ??官方項(xiàng)目頁面??:Chung, Joon Son和Andrew Zisserman,《超越時空:野外自動唇形同步》;亞洲計(jì)算機(jī)視覺大會(ACCV),臺北,中國臺灣,2016年,第251-263頁。Springer國際出版社;牛津大學(xué)工程科學(xué)系視覺幾何團(tuán)隊(duì)。
譯者介紹
朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計(jì)算機(jī)教師,自由編程界老兵一枚。
原文標(biāo)題:??The SyncNet Research Paper, Clearly Explained??,作者:Aman Agrawal

















