當前直播行業愈發火熱,用戶通常處于不同的環境中,身邊的鍵盤聲,敲擊聲,空調聲,喧嘩聲等噪聲有時會對實時互動產生嚴重的干擾。然而傳統的降噪算法針對平穩噪聲有比較好的降噪效果,針對上述這一類非平穩噪聲,比較難處理,收效甚微,降噪效果很差。
隨著近年深度學習的廣泛應用,使用神經網絡的降噪算法噴涌而出,而且這類算法不管是在降噪力度上,還是魯棒性上,都要優于傳統降噪,是當前處理各種不同場景噪音的首選方案。
但是,在實時互動環境下,對于音頻實時處理和性能要求比較高,這對于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的推導過程如下:
S(t,f) = M(t,f) * Y(t,f) .........(1)
公式 (1) 中 S (t,f) 代表純凈語音,Y (t,f) 代表帶噪語音,M (t,f) 代表模型估計出來的復數域中的理想比值 Mask。
為了方便起見,上式沒有體現出時間和頻率的下標,但給出了每個 T-F 單元的定義。公式 (1) 可以擴展為:
S(r)+iS(i)= (M(r) +iM(i)*(Y(r)+iY(i))=(M(r)Y(r)-M(i)Y(i)+i(M(r)Y(i)+M(i)Y(r)) .........(2)
純凈語音的實部分量和虛部分量為:
S(r) = M(r)Y(r) - M(i)Y(i) .........(3)
S(i) = M(r)Y(i) + M(i)Y(t) .........(4)
根據公式 (3) 和公式 (4) 可以得到 M 的實部和虛部分量:
M(r)=(Y(r)S(r)+Y(i)S(i))/(Y(r)2+Y(i)2).........(5)
M(i)=(Y(r)S(i)-Y(i)S(r))/(Y(r)2+Y(i)2).........(6)
從而得到復數域理想比值的 Mask:
M=(Y(r)S(r)+Y(i)S(i))/(Y(r)2+Y(i)2)+i((Y(r)S(i)-Y(i)S(r))/(Y(r)2+Y(i)2)).........(7)
3. 網絡模型
從上圖可以看出,我們使用的模型結構極其簡單,并且CNN能夠很好的提取local feature,GRU能夠學習時序上的特征,這對于模型的泛化和推理實時性都起到了很好的正向作用。
二、效果和性能
效果
在效果驗證上,我們采用日常常見的八種噪音不同的信噪比與傳統降噪進行對比測試,使用POLQA測試降噪后的音頻mos分,對比結果如下:
如上效果所示,LizhiAiDenoiser在不同信噪比和場景下,取得了不錯的效果。
這里測試40db和50db的音頻,主要是為了測試LizhiAiDenoiser對近乎純凈語音有沒有損傷,從最終結果能夠看出,LizhiAiDenoiser對于純凈語音幾乎不產生損傷情況。
音質保護示例
結論:在語音的中頻部分能看到LizhiAiDenoiser降噪后對語音保留的更好。
降噪示例
性能
在LizhiDenoiser的模型前向推理過程中,我們沒有使用開源的推理框架,而是使用自研的推理框架,不使用開源推理框架原因有:
• 不依賴第三方推理框架,使得前向推理更加靈活多變;
• 減少LizhiDenoiser模塊占包大小;
• 更加自由靈活的針對模型結構做極致的推理速度優化
分別測試了iPhone和Android較低機型的性能,這里主要采用cpu消耗和實時率來度量LizhiAiDenoiser的性能。
cpu消耗
因為模型設計比較精細,參數占用比較小,cpu占用不超過3%。
實時率
實時率是指處理每幀音頻所要花費的時間,通常是處理整個音頻來統計總的耗時,再除以音頻的總幀數,得到平均每幀耗時,這種方式在實時率要求比較高的任務中是很難有說服力的,因為此時任務比較單一,CPU利用率比較高,所以總的耗時統計大大減少。
我們在統計實時率時采用最真實的統計方法,即在RTC應用中統計每幀音頻的真實耗時情況。統計情況如下:
說明:上圖中橫坐標是音頻幀數,每一幀10毫秒,縱坐標是每一幀經過LizhiAiDenoiser降噪耗時,單位是微秒。
從圖中可以看出,android較低機型實時率不超過0.3,iPhone較低機型實時率不超過0.2。
三、規劃
AI降噪在RTC任務中還有很多優化的空間:
實時率的優化
進一步對模型進行剪枝和使用更低計算消耗的網絡,同時進一步優化我們的AI推理框架,以及對模型進行量化,通過這幾個維度的優化來進一步提升我們AI降噪的實時率。
全頻帶AI降噪
因為全頻帶AI降噪不管是在特征輸入上還是網絡結構設計上都比較大,很難在RTC這種對實時率要求比較高的任務達到好的效果,所以我們接下來準備將音頻轉換到比較小的特征維度上,通過設計比較小的網絡來擬合該任務。
模型的壓縮
在算法落地上,對于模型大小有時也有一定的要求,同時也是模型輕量的一個體現,更少的占用設備資源。所以在模型落地時,一般會對模型大小進行壓縮,接下來我們會使用占用內存更小的數據類型來存儲數據,優化模型存儲的格式以進一步減少模型存儲的大小。
作者:
邱威:荔枝音視頻研發中心高級音頻算法工程師,主要從事音頻相關AI算法研究和AI模型在移動端部署的工作。