許蘇魁*,萬家山,潘敬敏,胡婷婷
(安徽信息工程學(xué)院計算機與軟件工程學(xué)院,安徽蕪湖)
語音降噪是語音領(lǐng)域一個古老又基本的話題,旨在從受噪聲干擾的信號中有效地分離出純凈的目標信號。傳統(tǒng)的語音降噪主要是基于數(shù)字信號處理的方法,常用的有譜減法[1]、濾波法[2]等。但是這些方法都是基于噪聲穩(wěn)定性的假設(shè),一旦噪聲是非平穩(wěn)的,比如說是沖激噪聲,則降噪效果非常有限。
最近幾年,基于深度學(xué)習(xí)的語音降噪技術(shù)得到了巨大的發(fā)展,并且也證實了對于非平穩(wěn)噪聲也能有很好的去除能力?;谏疃葘W(xué)習(xí)的語音降噪技術(shù)主要采用的是時頻掩蔽(time-frequency mask, TF-Mask)的有監(jiān)督訓(xùn)練方式,通過學(xué)習(xí)一個定義在時頻域上的二維矩陣的值來進行網(wǎng)絡(luò)優(yōu)化。基于神經(jīng)網(wǎng)絡(luò)的語音降噪常用的模型有全連接神經(jīng)網(wǎng)絡(luò),卷積神經(jīng)網(wǎng)絡(luò)(CNN),循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)[3],Transformer[4]等。
然而在實時會議的場景下,為了減少通信的延時,對語音信號的各種處理往往都要求必須采用“一幀進一幀出”的方式,也就是“幀流式”(frame streaming mode)來進行。并且為了防止延時的累積,對于時長為Tframe的一幀數(shù)據(jù),模型處理其耗費的時間Tprocess必須滿足Tprocess Hao 等人[5]提出了一種完全依賴于長短時記憶單元(Long Short Term Memory, LSTM)[6]的實時降噪模型FullSubNet,在沒有卷積操作的情況下,也取得了很優(yōu)秀的客觀指標提升和主觀聽感認可。 我們綜合考慮語音增強的各項客觀指標和性能,以及“幀流式”的易實現(xiàn)性,決定在FullSubNet 的原始模型基礎(chǔ)上進行修改。通過手動保存LSTM不同時刻的state信息,以及實現(xiàn)幀級層面的累積拉普拉斯規(guī)整,以讓整個模型真正可以做到“幀流式”,更方便的應(yīng)用在實時通信的工程項目里。 本文的主要貢獻包括3 個方面:(1) 提出一種基于FullSubNet 的“幀流式”實時語音降噪模型,并且詳細介紹了如何實現(xiàn)按幀處理數(shù)據(jù)和恢復(fù)語音。(2) 在“幀流式”模式的基礎(chǔ)上,重新測試了DNS 挑戰(zhàn)賽的數(shù)據(jù)集,客觀語音質(zhì)量評估(perceptual evaluation of speech quality, PESQ)[7]指標只有0.1 的下降,并且證明了性能下降的主要原因是按幀做iFFT和overlap and add 操作。(3) 驗證了新模型在GPU 和CPU 上的速度均滿足實時處理的要求。 語音信號降噪任務(wù)在時域上可以定義為 式中:x(t),s(t),n(t)分別表示帶噪語音,純凈語音和噪聲;t 是時域的索引。我們的任務(wù)目標是在觀測到帶噪信號x(t)的情況下盡可能的恢復(fù)出原始的純凈語音s(t)。如果我們對公式兩邊做短時傅里葉變換(short time fourier transform, STFT),得到其在STFT域的表示為 式中:f 是頻率域的下標。假設(shè)一段語音總共有T 幀,做完FFT 之后的頻域通道共有F 個通道,那么t=1,2,…,T,f=1,2,…,F(xiàn)。 2.1 全頻帶特征 對于第t 幀,我們將F 個頻域通道的復(fù)數(shù)模拼接成一個長度為F 的向量,即為該幀的全頻帶特征,可以記為 因為我們的全頻帶模型是一個LSTM結(jié)構(gòu),需要序列輸入,因此可以取t=1,2,…,T 的所有Xfull(t)拼成一個序列作為全頻帶模型的輸入,即 3.2 模型訓(xùn)練目標 本文模型輸入只有幅度譜,沒有相位信息。我們參考復(fù)數(shù)掩模cIRM 的方式,在沒有輸入相位,僅輸入模長信息的條件下,預(yù)測復(fù)數(shù)譜的實部和虛部對應(yīng)的mask。 假設(shè)帶噪信號的STFT譜、預(yù)測的復(fù)數(shù)掩模、恢復(fù)后信號的STFT譜的復(fù)數(shù)值分別為X,M,S,從而有 根據(jù)公式可以分別求解出Mr和Mi為 在訓(xùn)練的時候,會把式(9)里的值進行壓縮獲得cIRM 作為訓(xùn)練目標以加速收斂,即 一般取K=10,C=0.1。在測試的時候,根據(jù)式由cIRMr和cIRMi求出Mr和Mi,再代入式得到恢復(fù)后語音的復(fù)數(shù)譜S。 3.3 幀流式實時模型 在訓(xùn)練的時候,我們可以把整句話的特征輸入給模型,也就是輸入的張量有時間維T,對于單通道的語音,Gfull的輸入X~full張量形狀可以是[B,F(xiàn),T],LSTM模型的狀態(tài)由框架內(nèi)部處理,比如直接調(diào)用torch.nn.LSTM 接口。但是在“幀流式”實時推理時,由于數(shù)據(jù)是按幀送入模型的,時間維T 消失,對于單句測試有B=1,從而Gfull的輸入Xfull(t)形狀為[1,F(xiàn)]。因此我們需要重新構(gòu)建模型,把所有LSTM換成LSTMCell,也就是自己維護LSTM的states 信息。 3.5 按幀復(fù)原語音 完整的按幀復(fù)原語音的流程如算法1 所示,注意這里用到了信號處理領(lǐng)域的overlap-and-add[9]的操作。 算法1.“幀流式”實時語音增強算法。 4.1 數(shù)據(jù)集簡介 本文采用 DNS-Challenge InterSpeech2020 的數(shù)據(jù)集進行實驗,該數(shù)據(jù)集包含來自2 150 個說話人的500 小時干凈語音,和包含150 類總計180 小時的噪聲。測試集是DNS 挑戰(zhàn)賽提供的一個公開測試集,為了計算相關(guān)指標,我們選擇了該測試集里合成的集合,這個集合有帶噪語音對應(yīng)的純凈語音,可以作為目標計算各項指標。 4.2 訓(xùn)練策略 對于STFT我們采用512 點FFT,幀移256,除了按幀復(fù)原時采用的合成窗之外,其他窗函數(shù)都是512 點的hanning窗。訓(xùn)練采用整句訓(xùn)練的方式,句子長度統(tǒng)一為3.072 s。為了利用未來信息同時考慮延時的要求,設(shè)置τ=2 也就是延時2 幀。子頻帶特征左右各展開頻點N=15。Gfull和Gsub的LSTM隱含層節(jié)點數(shù)分別為512 和384。采用Adam優(yōu)化方式,學(xué)習(xí)率設(shè)置為默認的0.001。所有代碼在PyTorch 框架[10]下實現(xiàn)。 4.3 評價指標 我們主要關(guān)注語音質(zhì)量感知評估(PESQ)[7]指標,該指標越大越好,并且和主觀聽感關(guān)聯(lián)最大。 4.4 性能對比 我們關(guān)注以下幾種策略在DNS 測試集上的PESQ結(jié)果,如表1 所示。 表1 不同策略下的性能比較 策略1 是標準的方式,采用整句LSTM訓(xùn)練和測試,語音恢復(fù)直接調(diào)用框架的iSTFT 接口即可,分析與合成窗采用相同的hanning 窗。策略2 將模型里的LSTM換成了LSTMCell,通過直接映射模型state_dict的方式給LSTMCell 權(quán)重賦值,根據(jù)算法1 進行“幀流式”的按幀復(fù)原測試,采用overlap and add,窗函數(shù)采用雙正交循環(huán)的方式處理。 可以看到,采用策略2 的完全“幀流式”方式,PESQ相比于策略1 下降了約0.13,但是2.85 的PESQ 相比于原始帶噪語音的1.82,或者是官方給出的基線模型性能2.37,提升也是相當明顯的。 為了分析策略2 最后計算出的PESQ 指標相比于策略1 下降的原因,也為了驗證LSTMCell 模型的“幀流式”測試流程正確性,我們進一步嘗試了策略3。即將策略2 按幀處理增強后的頻域信號S 完整保留下來;待所有時刻的S 全部計算完,拼接成一個完整的時頻信號,直接調(diào)用框架的iSTFT接口。可以看到,策略3 的PESQ和策略1 完全一致,從而說明策略2 性能下降主要來源于overlap and add 的復(fù)原方式。 為了評估真實產(chǎn)品下的實時率,我們測試模型在GPU 和CPU 下處理16 ms 一幀數(shù)據(jù)的平均耗時。對于CPU如果將模型由torch 轉(zhuǎn)為onnx,則性能會有較大的提升,這可能是PyTorch 對于CPU 并沒有做太多優(yōu)化的原因。相關(guān)測試結(jié)果如表2 所示。 表2 不同硬件和模型格式下的一幀數(shù)據(jù)平均耗時比較 可以看到,如果采用GPU的話,16 ms 一幀的數(shù)據(jù)僅耗時1.5 ms,肯定達到實時性的要求。如果是CPU 的話,通過將模型轉(zhuǎn)為onnx格式,平均耗時3.8 ms,也能達到實時性的要求。 本文提出了一種基于LSTM的“幀流式”實時語音增強模型,在系統(tǒng)固定延時32 ms 的前提下,實現(xiàn)“幀流式”的語音增強,在公開的DNS 挑戰(zhàn)賽測試集上取得了2.85 的PESQ,相比于原始的帶噪語音和官方基線性能提升明顯。 同時,本文詳細的給出了按幀復(fù)原信號的算法流程細節(jié)。并且在不同硬件平臺上測試了模型的實時率,在GPU 和CPU 上處理16 ms 一幀的語音分別耗時約為1.5 ms 和3.8 ms,基本滿足真實的實時通信系統(tǒng)集成要求。1 任務(wù)定義
2 全頻帶- 子頻帶特征
3 幀流式實時語音增強模型
4 實驗結(jié)果
5 結(jié)論