導讀: 2021年10月21日,「QCon 全球軟體開發大會」在上海舉辦,網易智企技術 VP 陳功作為出品人發起了「AI 時代下的融合通訊技術」專場,邀請到網易雲信、網易音視訊實驗室、網易雲音樂的技術專家與大家一起分享融合通訊技術趨勢和演進方向、視訊通訊關鍵技術探索及實踐、音訊 AI 演算法在 RTC 中的實踐、網易雲音樂網路庫跨平臺化實踐等話題。
我們會針對四個演講專題逐一進行介紹與分享,本期是我們的第三期,音訊 AI 演算法在 RTC 中的實踐。
嘉賓介紹:郝一亞,網易雲信音訊演算法專家,IEEE 審稿人。發表學術期刊/論文 15 篇,申請專利 7 項。曾參與美國衛生局 NIH 助聽器音訊演算法專案、Apple AirPods 音訊演算法研發 、Facebook Reality Labs AR/VR 音訊專案、以及 Zoom Video Communications 實時音訊演算法研發工作。目前在網易雲信主要負責音訊實驗室搭建、3A 演算法研發、AI 音訊演算法研發以及 RTC 音訊標準制定。
前言
隨著人工智慧技術、計算機技術、神經網路等領域的不斷髮展,AI 音訊演算法也在學術界和其他行業不斷湧現,包括了線上實時通訊 Real-Time Communication(RTC)領域。
從2013年開始,無論什麼行業都可以聽到,這個東西拿 AI 做效果非常好,這個技術我要用智慧化去做,感覺萬物皆可 AI,萬物皆可智慧,所有東西都可以用 AI 去做,並且做出來的效果都非常好。
但實際上很多技術還是在用傳統的方法,比如在音訊領域,更多的還是用基於訊號處理這些積累了數百年的方法。AI 的方法還停留在實驗室階段,停留在模擬階段。
本次分享將從“RTC 應用 AI 音訊演算法的難點”、“AI 音訊演算法落地的解決方案”、“網易雲信 AI 音訊演算法落地案例”三個維度,和大家分享 AI 音訊演算法和 RTC 的實戰經驗。希望大家通過這一場分享,能對這些問題有新的認識和看法,也能從中得到一些靈感,無論是在音訊 AI 或 RTC,甚至於其他行業中.
AI 音訊演算法落地的難點
AI 音訊演算法的趨勢
下圖是 Tsahi 提出的,在 RTC 領域,AI 音訊演算法的趨勢。圖中的橫座標代表時間的發展,縱座標是演算法的質量。
如果是降噪演算法可以理解為這個降噪演算法的降噪力度/降噪量,以及降噪同時對語音的保護。
橙色這條線代表基於數字訊號處理的傳統方法。這類演算法發展了數百年,但是隨著趨勢的發展,目前這些演算法在優化過程中遇到了很多瓶頸。比如傳統演算法需要一些預設條件,要在這種條件下才能達到目標效果。但是現在的應用中,實際的業務場景非常複雜,比如線上的娛樂場景、會議場景。在這些場景中,有用訊號和噪聲訊號非常複雜的混疊在一起,很多情況下都無法滿足演算法的預設條件。因此,在優化過程中單單利用傳統演算法是非常難突破的。
基於 AI,或者說 data-driven 的演算法,發展相對較為緩慢,我認為原因之一是受困於我們的計算機硬體的算力。但隨著算力不斷提升,其發展速度會越來越快,在未來會在某種程度上取代傳統演算法。而 Tsahi 認為,我們當前剛好處在這兩者旗鼓相當的位置,我個人覺得我們的時間節點偏左一點,因為目前很多 AI 演算法還不能替代傳統演算法,傳統演算法依然是目前 RTC 領域的基石。而 AI 演算法,我們更多的是去利用它的特性去解決特殊問題。
為什麼說最後的趨勢是 AI 演算法的發展會越來越快?最重要的原因之一還是算力的提升,右邊這張圖從一個維度展示了算力的提升。從圖中可以看出,自2000年開始,supercomputer 的算力以每五年十倍的增長趨勢發展。
AI 音訊演算法應用到 RTC 中的困難
我們現在的 AI 音訊演算法在 RTC 中遇到的困難是哪些呢?主要是這三個方面。
計算複雜度:當 AI 模型比較大時,算力需求也會比較大。在 RTC 服務中,很多演算法是需要落地在終端裝置上的,而這些裝置包括了一些中低端裝置。在這些裝置上,AI 演算法能不能有效的執行起來,是我們衡量這個 AI 演算法能不能被應用的重要標準之一。除此之外, RTC 的整個處理 pipeline 中有很多演算法,而一個終端裝置的計算資源又是有限的,怎樣合理地分配算力資源也是對 AI 演算法的一個挑戰。
泛化能力、魯棒性:泛化能力是指一個 AI 模型在學習了 Training Data 所涉及的場景之後,在其他未見過的場景中的擴充能力。魯棒性是指 AI 模型在各個場景下,它的效果能不能維持在一個比較好的水平。這兩個點都是 AI 音訊演算法落地 RTC 的困難點,因為 RTC 中裝置和場景都很多樣。早期的 RTC 更多理解為會議,這個場景相對比較單一,因為整個聲學場景相對比較封閉,是室內的,而且採集訊號相對來說失真都比較小。這在 RTC 算是一個比較好的場景。但是我們現在面對的 RTC 場景非常豐富,比如現在網易雲信主攻的三個行業之首-娛樂行業。娛樂行業的場景相比會議場景複雜很多。其一是我們的 Desired Signal 可能不僅僅是語音了,還有可能音樂訊號。而現在的 WebRTC 的很多音訊演算法都對音樂訊號不友好。除此之外,複雜場景會帶來複雜的背景噪聲。比如馬路上汽車的噪聲,不僅僅是對於降噪演算法很有挑戰的瞬態噪聲,而且 SNR 也相當低。而要應用一個 AI 演算法,需要在有限的資料集裡面去考慮到多種可能出現的場景。
AI 音訊演算法落地的解決方案
我們剛剛講的是 AI 音訊演算法的整體趨勢和挑戰。下一個章節我們分兩個部分來講,第一塊以 AI 降噪為例,我們討論一下落地 AI 演算法過程中,具體落地的時候會存在哪些挑戰。第二部分,我們以 VAD 演算法為例,通過對傳統演算法、Machine-Learning 演算法、深度學習演算法這三者之間進行比較,來分析一下 AI 演算法,特別是基於深度學習演算法的優勢。
AI 音訊演算法落地 RTC 過程中的困難例項
以 AI 降噪為例,看一下具體落地當中的一些困難。
第一個還是計算複雜度。首先,在 RTC 中,音訊是需要進行實時處理的,所以輸入訊號都是音訊流,是連續的幀。我們假設每一幀都是一組十毫秒的音訊取樣資料,實時處理就是要保證在 i+1 幀來之前,處理完第 i 幀的資料。而這十毫秒就是最大的 process time。如果出現了在 process time 無法處理完的情況,就會出現丟失取樣點,這對音質有非常嚴重影響。AI 演算法要達到實時處理,對於稍微大一點模型是比較有難度的,所以在很多 AI 音訊比賽裡面會專門有一個能 real-time 的 track。但是實時執行對於 RTC 來說只是非常基礎的第一步,只是保證我們能實時處理了,但是沒有觸及實時率的問題。縱觀整個音訊 APM 處理,AI 降噪只是其中的一個模組,其他還包括了 AEC、AGC、VAD 等模組。
除此之外,在音訊處理之外,還有其他的模組處理,比如視訊處理、網路擁塞控制等等。我們的工作是,需要讓這麼多演算法同時滿足 real-time 的要求,並且要同時儘量去降低處理 CPU 的佔用率,去降低我們的 SDK 在使用者裝置上的 CPU 開銷和耗電量。
第二個難點就是 Data。可以說 AI 演算法最重要的就是 Data。實現一個 AI 演算法,只要有 Data,就已經成功了一大半了。但音訊演算法的 Data 相比其他的一些領域相對較少。我們在開發 AI 演算法時候,主要通過一些開源資料集和實驗室真實裝置錄製來建立資料集。同時,我們也運用了一些資料增強的方法去擴充資料集。在音訊演算法中,AI 降噪的資料集是相對比較好做的,因為開源資料相對較多,資料 label 也比較好操作。但是對於另一些音訊演算法來說,收集、label 資料集是一個相當艱難的任務,比如我們的 AI 嘯叫檢測演算法,目前在網際網路上是基本沒有關於嘯叫的資料集的,而且嘯叫訊號的採集和 label 也是比較有挑戰的。
雖然有這麼多挑戰,我們雲信音訊實驗室也一直在不斷積累資料,不斷的去擴充語料庫。我們也遍歷不同的終端裝置,用它們的麥克風去採集,這樣可以把更真實的麥克風和房間響應加入資料集中。這對於要應用在不同終端裝置上的 AI 演算法來說非常重要,因為我們需要 AI 模型在訓練中去學習不同的麥克風和房間的響應。
有了資料後,我們在調參過程中也遇到了困難。
對比一下傳統演算法,這是一個基於 MMSE 的傳統降噪演算法:左上角訊號進來了,通過 FFT 我們可以拿到訊號的幅度和相位,然後我們可以算出先驗/後驗訊雜比,算出 Gain,然後把 Gain 作用在訊號幅度上,之後和相位疊加做 iFFT 得到輸出的時域訊號。我們在除錯這個演算法時,如果發現誤把語音當做噪聲給壓掉的情況,我們可以把那幾幀訊號拿出來,分段的對演算法中每個模組的輸出值來分析,找出問題。為什麼我們可以這樣做?原因是這裡的每個引數都有具體的物理意義。但是針對深度學習的方法,整個演算法其實是一個黑盒,例如一個卷積神經網路,入參被一層一層捲起來,每一層的中間引數無法對應一個具有物理意義的值,那我們在優化過程中也無法去定位問題。雖然我們在演算法優化中遇到了這些問題,但是我們也通過不斷的經驗總結,積累了非常多的調參方法。雖然調參依然是一個挑戰,但是通過積累我們已經有方法可以快速找的合適的模型和對應引數,去解決不同的音訊問題。
以上就是實際落地 AI 降噪的時候遇到的這三個最困難的點。講那麼多 AI 演算法的不好和困難,AI 演算法能帶給我們什麼收益呢?
傳統音訊演算法、Machine-Learning、AI 之間的選擇
我們結合 VAD(Voice Activity Detection)來講一講各個演算法之間的選擇。
下圖中右圖展示了一個 VAD 對比結果,上面部分是乾淨的語音訊號,VAD 要做的事情是把語音訊號檢測出來,在時間維度上標為1,其他就是0,代表噪聲。
我們來看一下傳統的 VAD 一般是怎麼做的,這篇文章裡面比較有代表性,大家看左邊的流程圖,左邊分為兩塊,右邊是一個基於能量的 VAD,這是最通俗易懂的。比如現在在這個會場我在說話,大家聽到我的聲音,聲音肯定是比環境的底噪要高的,SNR 是大於0的,那我們就設一個能量門限值,高於這個能量的就是語音,低於這個能量的就是噪聲。當然這裡基於能量的 VAD 還做了很多其他的工作,包括能量怎麼更準確的估計,門限值不斷的適應新的環境和噪聲。左邊的這個方法是基於語音的其他 feature 的,比如頻譜 Peak 等諧波資訊。最後的這種方法是既結合了能量 VAD,又結合了頻譜 Feature VAD 的一個方法,這也是這篇文章 propose 的方法,檢測效果在這段音訊中也是最好的。
再拿能量 VAD 舉例,高於門限的是我們的語音,低於門限的是噪聲,那麼這個就可以看作一個單 Feature的 Classifier。如果用兩個 feature,就可以像下面左上角的那張圖那樣表示。我們可以認為紅色的點就是噪聲,藍色的點就是語音。傳統演算法大多都是線性的區分,就可能這樣去切一刀,這樣分了過後有很多藍色的點會落在噪聲的那邊,也有很多紅色的點會落在語音這邊,這些就是錯判和漏判。
有沒有方法能把這個東西更高維度地把這兩者區分開呢?我們可以引入 machine learning,可以更高維度的把這些點給摳出來,就像後面幾張圖展示的方法。我們這裡只提到用兩個 feature,在解決實際問題中,我們也常常用到更多的 feature,並結合不同的模型,從不同維度去做處理。
在雲信的音訊處理中,我們有很多不同的 VAD,這些 VAD 的職責不一樣,效果也不一樣。下面我來介紹一下其中的一個 VAD。我們先來看到中間的這兩張圖,這是兩個時域的連續語音圖,上面的語音和下面對比,可以看到被框出的這一段語音更密集,中間的噪聲縫隙更小。我們把這框出的五秒左右的音訊切成一千份很小的時段,然後去統計每一小段的能量,統計完的能量放在右邊這個直方圖裡。
可以看到上面這個直方圖中,靠右邊 -10dB 這個地方有一個峰,-35dB 也有一個峰。那麼這裡的 -10dB 的代表語音的平均能量是 -10dB,-35dB 代表中間的這些噪聲間隙能量是 -35dB。如果是統計下面這段語音,可以清楚的看到下面直方圖中 -10dB 也有一個峰,但是比上面直方圖裡 -10dB 位置的峰要小,說明 -10dB 出現的次數少,而 -35dB 的峰相對變得明顯了,因為它的噪聲間隙次數增多了。在這個基礎上,我們增加了一步,基於資料用機器學習的模型去學習這兩個峰,把這兩個峰估計出來。所以即便是 SNR 比較低,兩個峰重疊的很厲害的情況,機器學習的方法也能把兩者區分開。
既然我們用到了機器學習的思想,那我們能否用更復雜的模型去學習更多資料呢?那麼下面我們講講怎麼用神經網路的方法去實現 VAD。這裡介紹一個基於 CNN 的 VAD 演算法,這個模型用到了三個卷積層和一個全連結層,使用了 Log-Mel Energy 作為輸入特徵,沒有其他複雜的設計,算是一個很直接的解決方法了。我們可以看一下右邊的結果,選擇這個結果是因為它是一個比較難的 case,第一是因為 SNR 是 0dB,第二是因為它的噪聲都是生活中的非平穩噪聲。對比的方法中,G729 和我們剛才介紹的基於訊號處理的 VAD 類似,Sohn 和 Random Forest 是基於統計學的方法,CNN 就是這個基於神經網路的方法。分析結果我們可以看到,基於統計學的方法在大部分噪聲中不夠好,反而還比 G729 低,而 CNN 的 VAD 在各個噪聲中都是表現最好的。
我想總結一下,基於深度學習的 AI VAD 的優勢在於可以更深度的去區分語音和噪聲,演算法能力上限會更高。比如瞬態噪聲,傳統演算法基本上不去 cover 這種情況,但是 AI VAD 是可以解決的。但是它的弱點依然是我們之前分析的複雜度、泛化能力等問題。
網易雲信 AI 音訊演算法落地案例
剛才講了具體落地的時候遇到的具體困難和為什麼在這些困難下,我們還是要選擇 AI 演算法。我們現在來講一講雲信是怎麼解決這些問題的。
具體實現過程
剛才有講到 AI 降噪的問題,我們的解決辦法主要是左邊這三點。
第一採用更適合的輸入特徵,一方面儘量減小輸入特徵量,以此來減小整個 model 的複雜度;另一方面是採用更適合當下問題的 feature 來作為模型的輸入特徵,選擇更能代表訊號特性的 feature。這是我們的第一個手段。
第二我們採用輕量級、更合適的網路,比如我們在降噪問題中,選擇了 GRU 模型,因為它具有前後時序的記憶,並且相比 LSTM 更輕量級。在調參過程中,我們也儘量去壓縮網路層數,保證運算速度。
第三個手段是定向優化,定向優化東西包含比較多,比如資料集優化,它包括了資料增強、資料清洗等工作。還有對模型壓縮,來減小模型大小。在將演算法整合進 SDK 的過程中,我們雲信所有的基於 AI 的演算法,都用的是我們自研的 NENN 推理框架,進一步加速了我們的 AI 模型的運算速度,降低了開銷。最終,在不同終端裝置上,包括了很多中低端的移動裝置,我們的 AI 降噪在每10毫秒的幀上的運算時間差不多是 100-200 微秒之間,實時率接近 0.01。
還有一點值得一提,我們的 AI 演算法很多時候需要配合傳統演算法進行處理。比如在回聲消除中,我們可以把近遠端訊號和遠端訊號全部扔給 model 讓它去訓練,然後讓這個 model 直接去處理整個 AEC 鏈路;我們也可以把時延估計和線性處理用傳統方法去做,把非線性處理單獨拿出來用一個 AI 模型去訓練。後者做到了幾個任務之間的解耦,所以最後能夠達到演算法效果得到了提升,且運算開銷相對前者也小很多。
雲信落地AI演算法例項
我們現在落地的 AI 演算法包括了 AI 降噪、AI 音訊場景檢測,還有一個 AI 嘯叫檢測,和 3D 音效沒有放到 PPT 裡面。AI 回聲消除這一個模組正在落地。下面是 AI 降噪的 demo 視訊。
從這個 demo 可以看到,裡面有很多難處理的突發噪聲,但是我們的演算法都抑制的非常好。不過在降噪的同時,我們的人聲也有發悶的感覺,針對這個問題,我們現在 AI 降噪2.0 也正在落地中,計劃年底上線。新的這一版 AI 降噪在保護語音質量上做得更好,對於乾淨語音能做到基本無損。
最後還有一點想跟大家分享一下,藉著現在很火的元宇宙,聊聊雲信的 3D 音效。網易雲信現在是唯一一家實現了 6DoF 空間音效的 RTC 廠商。
Facebook 最近釋出一個完整的空間音效技術(MSA),這張圖展示了 MSA 能達到的所有能力,而云信的 3D 音效也達到了圖中的所有能力,比如房間反射、遠場衰減等。這裡介紹兩個雲信 3D 音效的落地案例,左下這個是 FPS 遊戲“荒野行動”,在這類遊戲中,特效聲比如槍聲的方向感大家都很熟悉,而云信的 3D 音效是在特效聲之上,讓開黑的隊友語音也具有實時的方向感。
第二應用案例是網易雷火開發的沉浸式活動系統-瑤臺,這個系統可以承接比如像 Qcon 這樣的大型會議,把它變成一個全線上、全虛擬的場景。參會者可以以一個虛擬角色,以第一人稱視角,沉浸式地去參加會議。雲信 3D 音效在這個系統中提供了實時的空間音效,讓參會者可以聽到虛擬角色周圍的實時語音,提供了更深入、真實的沉浸式的體驗。