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

3 幀流式實(shí)時(shí)語(yǔ)音增強(qiáng)模型




4 實(shí)驗(yàn)結(jié)果


5 結(jié)論