荔枝音質高保真的降噪技術實踐與研究

語言: CN / TW / HK

作者:邱威

簡介

當前直播行業愈發火熱,使用者通常處於不同的環境中,身邊的鍵盤聲,敲擊聲,空調聲,喧譁聲等噪聲有時會對實時互動產生嚴重的干擾。然而傳統的降噪演算法針對平穩噪聲有比較好的降噪效果,針對上述這一類非平穩噪聲,比較難處理,收效甚微,降噪效果很差。

隨著近年深度學習的廣泛應用,使用神經網路的降噪演算法噴湧而出,而且這類演算法不管是在降噪力度上,還是魯棒性上,都要優於傳統降噪,是當前處理各種不同場景噪音的首選方案。

但是,在實時互動環境下,對於音訊實時處理和效能要求比較高,這對於AI模型的設計和效果的平衡帶來了的巨大的挑戰。

基於上述挑戰,荔枝集團音訊團隊提出了一種輕量的降噪方案--LizhiAiDenoiser,該方案不僅能處理日常生活中常見的平穩和非平穩噪聲,而且能很好的保留語音的音質,同時該AI降噪模型在執行時佔用的記憶體和cpu消耗都極低,滿足了全量iPhone機型以及大部分Android中低端機型。

一、基本原理

LizhiAiDenoiser採用傳統演算法和深度學習結合的混合結構。為了可實際在移動端部署,LizhiAiDenoiser採用了比較精細的模型結構,主要使用低效能消耗的CNN-RNN結構。

1. 資料和增強

訓練深度學習降噪模型的資料集是通過混合純淨語音和噪音音訊的方式。純淨語音主要使用的是開源資料集,包括英文資料集和中文資料集,英文資料集300小時,中文資料集200小時。噪音音訊由兩部分構成,一部分是開源噪音集audioset,大約120小時,一部分是自己錄製的噪音集,大約60小時。資料增強的方法被應用於語音和噪聲樣本,目的是進一步擴充套件模型在訓練的過程中看到的資料分佈。當前,LizhiAiDenoiser支援以下隨機增強的方法:

  • 重取樣速度和改變pitch
  • 新增混響,在純淨語音中新增少量混響
  • 使用[-5,25]的信噪比來混合純淨語音和噪音

2. 模型目標

語音降噪通常採用有噪聲語音的短時傅立葉變換(STFT),只增強幅度譜,而保持相位譜不變。這樣做是因為人們相信,相位譜對語音增強並不重要。然而,最近的研究表明,相位對感知質量很重要。我們的方法使用深度神經網路來估計在複數域中的理想比值Mask的實部分量和虛部分量,這種方法更好的保留了語音的質量

同時以更小的模型引數達到了大模型同樣的降噪效果。原始的AI降噪模型,模型大小大概3M,固定測試集mos分為3.1。對模型做一些剪枝同時調整模型結構,再針對模型輸出目標進行調整,在保持3.1的mos的情況下,最終模型大小降為900k。

複數理想比值Mask的推導過程如下:

公式(1)中代表純淨語音,代表帶噪語音,代表模型估計出來的複數域中的理想比值

為了方便起見,上式沒有體現出時間和頻率的下標,但給出了每個T-F單元的定義。公式(1)可以擴充套件為:

純淨語音的實部分量和虛部分量為:

根據公式(3)和公式(4)可以得到M的實部和虛部分量:

從而得到複數域理想比值的Mask:

3. 網路模型

從上圖可以看出,我們使用的模型結構極其簡單,並且CNN能夠很好的提取local feature,GRU能夠學習時序上的特徵,這對於模型的泛化和推理實時性都起到了很好的正向作用。

二、效果和效能

效果

在效果驗證上,我們採用日常常見的八種噪音不同的信噪比與傳統降噪進行對比測試,使用POLQA測試降噪後的音訊mos分,對比結果如下:

 

0db

10db

25db

40db

50db

傳統降噪

1.366

2.117

4.276

4.61

4.72

LizhiAiDenoiser

1.959

2.744

4.446

4.74

4.75

如上效果所示,LizhiAiDenoiser在不同信噪比和場景下,取得了不錯的效果。

這裡測試40db和50db的音訊,主要是為了測試LizhiAiDenoiser對近乎純淨語音有沒有損傷,從最終結果能夠看出,LizhiAiDenoiser對於純淨語音幾乎不產生損傷情況。

音質保護示例

帶噪音頻

 

有損傷

 

LizhiAiDenoiser

 

結論:在語音的中頻部分能看到LizhiAiDenoiser降噪後對語音保留的更好。

降噪示例

 

穩態噪音

非穩態噪聲

帶噪音頻

 

 

傳統降噪

 

 

LizhiAiDenoiser

 

 

效能

在LizhiDenoiser的模型前向推理過程中,我們沒有使用開源的推理框架,而是使用自研的推理框架,不使用開源推理框架原因有:

  • 不依賴第三方推理框架,使得前向推理更加靈活多變;
  • 減少LizhiDenoiser模組佔包大小;
  • 更加自由靈活的針對模型結構做極致的推理速度優化

分別測試了iPhone和Android較低機型的效能,這裡主要採用cpu消耗和實時率來度量LizhiAiDenoiser的效能。

cpu消耗

因為模型設計比較精細,引數佔用比較小,cpu佔用不超過3%。

實時率

實時率是指處理每幀音訊所要花費的時間,通常是處理整個音訊來統計總的耗時,再除以音訊的總幀數,得到平均每幀耗時,這種方式在實時率要求比較高的任務中是很難有說服力的,因為此時任務比較單一,CPU利用率比較高,所以總的耗時統計大大減少。

我們在統計實時率時採用最真實的統計方法,即在RTC應用中統計每幀音訊的真實耗時情況。統計情況如下:

Vivo X9

iPhone7

 

說明:上圖中橫座標是音訊幀數,每一幀10毫秒,縱座標是每一幀經過LizhiAiDenoiser降噪耗時,單位是微秒

從圖中可以看出,android較低機型實時率不超過0.3,iPhone較低機型實時率不超過0.2。

三、規劃

AI降噪在RTC任務中還有很多優化的空間:

  1. 實時率的優化

進一步對模型進行剪枝和使用更低計算消耗的網路,同時進一步優化我們的AI推理框架,以及對模型進行量化,通過這幾個維度的優化來進一步提升我們AI降噪的實時率。

  1. 全頻帶AI降噪

因為全頻帶AI降噪不管是在特徵輸入上還是網路結構設計上都比較大,很難在RTC這種對實時率要求比較高的任務達到好的效果,所以我們接下來準備將音訊轉換到比較小的特徵維度上,通過設計比較小的網路來擬合該任務。

  1. 模型的壓縮

在演算法落地上,對於模型大小有時也有一定的要求,同時也是模型輕量的一個體現,更少的佔用裝置資源。所以在模型落地時,一般會對模型大小進行壓縮,接下來我們會使用佔用記憶體更小的資料型別來儲存資料,優化模型儲存的格式以進一步減少模型儲存的大小。

作者:

邱威:荔枝音影片研發中心高階音訊演算法工程師,主要從事音訊相關AI演算法研究和AI模型在移動端部署的工作。