正文字數:4854 閱讀時長:7分鐘
將AI算法任務模塊化是一種解決AI音頻處理算法應用效果不夠好、通用/擴展性差、計算開銷大等問題的有效方法。網易雲信 資深音頻算法工程師 郝一亞在LiveVideoStackCon 2020北京站的演講中就「模塊化」是怎樣解決上述問題的,「模塊化」工程實現的可行性等問題進行詳細解析,並舉例介紹了目前市場中的幾個「模塊化」的成功案例。
文 / 郝一亞
整理 / LiveVideoStack
大家好,我是郝一亞,來自網易雲信,目前主要負責網易雲信在RTC領域的音頻算法的研發。本次我想要分享的題目是如何將AI音頻算法應用、結合到RTC中,我會結合自己在國外的一些研究和開發的經驗,包括網易雲信在AI音頻算法應用實戰當中的一些經驗總結,和大家一起聊一聊如何將AI音頻算法與RTC有機結合。
01
RTC中AI音頻的現狀
TITTLES
首先,第一個問題是RTC中AI音頻到底是處於一個什麼階段?可能大家會接收到比較極端的兩種不同信息:第一種就是目前AI算法如Deep Learning等在各行業都開始廣泛應用,效果也比較好;另外一種就是大家在實際的工作當中,可能會感受到AI在某些情況下,比如說在訓練集和一些特定Case下的感覺還不錯,但很難落地、上線到實際的產品當中,存在著各種各樣的問題和困難。那麼首先我們來簡單分析下目前AI音頻到底是處於一個怎樣的階段。
1.1 音頻處理中AI的力量
先來介紹一些好的方面,例如結合CNN的降噪,最早是因為AI在Computer vision領域成功的應用,我們就可以把這種語譜圖(如圖所示)作為一個圖像的概念。這樣的方式為CNN和降噪模塊的有機結合提供了一個契機。
圖中展示的就是一個CNN的降噪,我們可以看到,如左上角圖所示,右邊是傳統的降噪方法,Noisy Speech相對於原始信號,它的信噪比已經很低了。而左邊是一個MMSE的算法,相比於傳統方法是有一定提升的,特別是非語音段。但我們可以從中看到特別是高頻的部分,還是存在很多的殘留。從橫向對比來看,AI算法在基於傳統的方法之上,可以讓我們在非語音段有對噪聲有一個非常好的抑制,其結果對比原始信號,可以看到其實相似度非常高,肉眼基本很難區別。
下面的例子是一個場景的分類,說到有關分類的問題,其實我個人覺得這是AI比較擅長的一個方向。我們可以看到Noise Suppression、Sound Classification、Acoustic Echo Control,Blind Source Separation這四種方式其實都是結合神經網絡的方式。如圖左下角所示的AI Sound Classification是一個基於簡單的模型的方式,是不涉及任何神經網絡的。我們可以看到儘管因為任務的難度較大,所能達到的只有百分之六十左右的準確率,但和傳統方法相比還是有很大程度的提升。
之所以列舉出這兩個例子,是希望讓大家知道其實我們在音頻上有很多的模塊已經可以用AI來解決,包括這兩個例子在內,以及之前提到過的AEC,還有NLP(非線性處理)模塊其實現在也有很多研究是在結合AI來做,除此之外還包括BSS (盲源分離),目前我知道有些落地的項目也是基於AI的。所以總得來說AI在音頻算法中的應用是多種多樣的,是多點開花的。
1.2 音頻處理中AI的挑戰與局限
接下來介紹AI音頻的一些局限,在這裡我主要總結了三點:第一點我們能想到的就是AI的計算量和計算複雜度的問題。通常來說AI的模型,特別是現在神經網絡的模型,它的計算量平均來說會比傳統算法更大一些。對於大部分終端設備來說,其算力是有限的,PC設備相對還好一些,但是我們還需要保證實時性,因此將AI的模型全部附加在終端設備上,對於設備的硬體來說還是有比較大的壓力的。第二點是泛化能力。在數據驅動的方向上,泛化能力有限一直是一個問題。比如說我們有自己的數據集,那麼我們該怎麼用有限的數據來cover更多的結果,特別是由於RTC覆蓋的業務場景會非常多,比如教育領域、泛娛樂領域,每個領域的場景都會有所不同,AI算法要cover所有場景更是難上加難;最後一點是魯棒性,和泛化性略有相似,但更多的是指一些突發情況,比如在某些場景中突發的噪聲、時間上的跳變、參考時間的不齊等等。在這些情況的影響下,系統夠不夠穩定?系統會不會犯錯?犯的錯會不會是一個大錯?這其實很考驗AI的算法,就相當於我們把所有的東西丟到一個黑盒子裡面,看它是否能夠全部的、真正的運行正常。
總結上面提到的兩點,我認為AI的效果,它的優勢其實已經被證實了,但由於算力和數據等各方面的問題以及AI模型本身的一些問題,它現在還達不到完全替換傳統信號處理方法的階段。
RTC領域的Tsahi專門就這一問題做了很多的評估,這裡我們引用了Tsahi的一張圖,根據他的分析目前我們的位置剛好是處於一個臨界點。也就是從現在向後走,當我們的算力得到進一步提升,或者是我們在數學或各個基礎學科上有所突破,可能會迎來整個AI的一個大爆發,但就目前看來看我們正處於一個臨界的位置。所以今天我想和大家一起探討的是如何在臨界位置去揚長避短,如何應用AI的優勢,然後將它有機的結合在我們的RTC裡面。
02
「模塊化」
TITTLES
「模塊化」就是其中的一個有效途徑,模塊化對應的主要是:例如我們有一個端到端的長鏈路,有一個降噪的算法。長鏈路就是說從數據的輸入一直到數據的輸出,如果我們直接將其當成黑盒來訓練,這就是一個非常長的端到端的算法。那對應的模塊化就是我們「能不能將這個長鏈路分解成一些小的模塊」,其中一些小的模塊是很適合用AI去做的,我們用小的模塊去做,既節省了開銷,也能夠解決很多之前我們提到的問題,就像是讓專業的人去做對應專業的事情。
示例一:音頻降噪中的AI算法
舉個例子,這裡是一個比較通用的端到端的AI降噪算法。我們來看如圖下方所示的訓練的過程,首先將輸入的信號放到頻域STFT,然後就直接拿它的Magnitude,先不用相位,直接把它的一些頻點拿去,將它的一些Feature提取出來做Training,這是一個非常直觀的訓練過程。
訓練完成後直接放在我們的實時的系統裡面,在實時系統裡進行同樣的操作。然後我們將相位拿出來,先放在這裡不做任何操作。接著我們可以通過做一個Noisy Floor 或者是簡單的VAD判斷一下,然後同樣進行特徵提取,放到預先訓練並Frozen好的降噪的模塊裡進行處理,最後和我們的Phase結合,得到我們的輸出。
其實很多的AI算法如果從宏觀的角度來考慮,只需要有一個輸入,有一個輸出,其它的就都可以全部交給機器,讓它自己去訓練。但這就會遇到我們剛才提的三個問題:計算複雜度,泛化能力和魯棒性,也許我們可以簡單的做一些權衡,比如犧牲一些計算時間去換取更高魯棒性,但其實整體上還是很難突破這個瓶頸。
那麼,怎麼有效的解決這個問題呢?這裡我們看一個傳統信號處理中的降噪算法,跟剛才介紹到的方法比較像,唯一不同的地方是它分別添加了一個Speech Estimation的模型和Noise Estimation模型,這裡面會有比如說類似於先驗概率(Prior-SNR)這樣的計算,再通過後面的結合就會有類似於對於每個頻點有一個gain計算出來,結合起來後處理然後再輸出。
那我們看一下,這裡的Noise Estimation模塊,其實是比較適合拿出來單獨做深度學習訓練的小模塊,特別是假設噪聲是一個Stationary Noise的穩態噪聲,是更適合的。在這裡,我們可以不用端到端的去訓練整個AI的模型,而是把這個noise estimation訓練成一個噪聲估計模型。後面我們在實時系統裡面,每次遇到Noise Estimation,我們就不再是一個傳統的Noise Estimation,我們就會用這個訓練好的Model 去把我們想要的一些參數和feature都計算出來。
還有一個就是VAD模塊,這裡的VAD不是時域上的VAD,而是對於每個頻點有一個判斷。這種Classification的問題是很適合通過AI 的Model 來做的,這也是可以單獨拿出來做訓練的模塊。
我們再回顧一下這三個問題:計算複雜度、魯棒性和泛化能力,通過模塊化,計算複雜度的問題我們可以用一個輕量級的網絡來解決。剛才我們看了端到端的NS圖,我們要解決這個問題,一般會用到層數稍微偏多的網絡,因為我們要解決的問題是比較複雜的,需要從噪聲和語音疊加的信號裡面,將噪聲給抑制掉。但是如果我們換作只對Noise 去進行一個Estimation,那本身的問題就會比較簡單,也就是我們提到的一個簡單的訓練目標。對於這種訓練目標,這些問題本身也會更適合DNN的Model 去學習。
示例二:聲音場景檢測
再來看一個例子,這個是一個聲音的場景檢測分類。剛才現場也有朋友提到過,如果回聲消除裡是音樂聲怎麼辦?如果是場景檢測的話,我們會有一個Music Detection,如果檢測出是音樂類的場景,我們會有另外的一套機制來處理。例如我們NS中有一套對於音樂聲的標準,最直觀的就是弱處理,還可以通過NLP裡面的一些相應的處理方式;第二個就是我們簡單對Noise 進行分類,然後對應剛才提到的Noise Model的Training。比如說我們可以分類檢測出現在平穩噪聲是什麼類型的平穩噪聲,或者是檢測出現一些非平穩的噪聲的類型,我們會有針對不同噪聲的預訓練的Model,可以結合不同場景優化NS;第三個場景是針對底噪的估計,底噪是一個比較嚴重的問題,特別是在會議場景,開放的辦公環境下。那麼應該如何來估計底噪?因為底噪較常見的是平穩的噪聲,如果我們有一個Noise Detection來輔助,底噪估計的準確性會大幅提高,對系統來說是一個整體的優化。在這裡我列出了場景檢測的三種不同形式,雖然場景檢測是一個很小的模塊,是原本不屬於例如RTC的3A算法、長鏈路中的模板,是額外附加的子模塊。但當我們有了這個模塊後,可能會有更多的東西和更多的應用場景可以來優化我們的3A算法中的各個模塊。
示例三:波到達方向估計
Direction of Arrival-DOA,
在現在的RTC中,DOA一般會搭載著Beamforming和Microphone Array
如圖中Demo所示,使用的是圓陣,有八個麥克風,一般對應的是會議室的場景,大家可能會比較容易聯想到類似形狀的麥克風,或者是八爪魚的形狀的麥克風。除了這種形式之外,還有一些平板的電視一般是線陣的,也同樣是陣列的麥克風。它是通過陣列麥克風形成不同的Beam,然後通過DOA來選擇Active Speaker 是在哪個Beam上,並且增強它的SNR,而其它噪聲的因為在旁瓣上,就會被自然地抑制掉。而且Beamforming是一個線性的,不存在非線性的失幀。
關於DOA, 其實傳統算法有GCC-PHAT和SRP等,是高精度的,能夠從數學上精確判斷具體的多少度。
但在實際的場景中beamforming自己有寬度,一般我們會做二十多度,或者是十五度,相鄰的beam會有一些重疊,其實我們不需要那麼高的精度。現在有一個方法就是通過Beam Selection直接去判斷應該選擇哪個Beam。DOA會多出來這樣的一個分支,在這個分支上有很多傳統的算法。我自己在這方面也進行了很多的研究,比如在Beam的能量上,哪個能量大我就用哪個。我自己也提出過兩個方法,都是關於頻域信息提取的,但是後面通過對於傳統算法和DNN算法的比較和研究,嘗試了通過CNN、RNN或者CNN結合一些之前幀的信息的方式,也用不同的feature,lost function,基本上大部分的效果都會比傳統的方法要好很多,包括一些輕量級的一些網絡。
03
未來展望
TITTLES
剛才我們講了幾個例子,其實在整個的模塊化當中還會有很多的一些其它小的子模塊,可以拿出來,不僅限於之前提到的那些。比如說我們最近研究的AEC中的NLP(非線性處理)模塊中,嘗試的結合BSS的方法,比如ICA。ICA中有一些子模塊可以提取出來,做一些AI 的Training,這個也是我們目前認為比較可行的路,從結果上來看效果都會比之前的好很多。
對於未來,分享開始的時候我們就提到了Tsahi的預測,未來可能會有更多的AI算法融合進來,未來的爆發點可能是更先進的神經網絡模型,更高效的GPU,但是有一項關鍵點不會變,會一直被需要,那就是數據。
數據目前我們可以大致分為幾個部分,比如Open Source,在學術界大家會分享,會推動整體的進程,可能會有第三方公司提供一些數據,同時我們自己可能也會收集一些數據。現在網易雲信在做的就是針對很不同的NS場景進行AI的降噪,這一部分噪聲對於我們而言其實是比較難尋找到的,尤其是前兩個途徑中。一是因為這些噪聲本來就會很特別,Open Source很有限。如果和第三方合作,我們是考慮到驗證和收集的過程中會有很多溝通成本。所以我們大部分都是自己收集的。自己收集就需要有自己的一些基礎設備,可能會要求有自己的消聲室,自己的錄音棚環境,還有一些工具:人工頭、人工嘴來播放,還需要一些收集的設備,比如標準麥克風等。還需要很多其他配套的自動化工具,比如Labeling的工具。目前我們網易雲信已經配備了全套工具和環境,我們現在已經自己採集了很多數據集,並且應用到了我們AI算法中。
下面我們來給大家演示一個demo,大家可以體驗一下從沒有降噪到降噪的處理過程。
除了音頻之外,在視頻方面我們也有很多算法是由AI驅動的,以下是我們在視頻超分方面的一個Demo演示視頻,黃線右邊是原始圖像,左邊是經過超分處理的,大家可以看到,左右兩邊的效果對比還是非常明顯的。
灣區最原汁原味的技術,全球最前沿的應用實踐
無需漂洋過海,我們在線上等您!
LiveVideoStackCon 2020 美國站
2020年12月10日-12月11日