语音增强相关技术综述
1 非監(jiān)督語音增強技術(shù)
2 監(jiān)督語音增強技術(shù)
3 github上提供的源代碼及分析
3.1 Dual-signal Transformation LSTM Network
簡介
https://github.com/breizhn/DTLN
- 用于實時噪聲抑制的堆疊雙信號變換 LSTM 網(wǎng)絡(luò) (DTLN) 的 Tensorflow 2.x 實現(xiàn)。
- 這個存儲庫提供了在 python 中訓(xùn)練、推斷和服務(wù) DTLN 模型的代碼。 它還提供了 SavedModel、TF-lite 和 ONNX 格式的預(yù)訓(xùn)練模型,可用作您自己項目的基線。 該模型能夠在 RaspberryPi 上以實時音頻運行。
- 如果你正在用這個 repo 做很酷的事情,請告訴我。 我總是很好奇你用這段代碼或這個模型做什么。
DTLN 模型被提交給深度噪聲抑制挑戰(zhàn)(DNS-Challenge),論文在 Interspeech 2020 上發(fā)表。
該方法在參數(shù)少于一百萬的堆疊網(wǎng)絡(luò)方法中結(jié)合了短時傅立葉變換 (STFT) 及學(xué)習(xí)分析和合成基礎(chǔ)。該模型接受了挑戰(zhàn)組織者提供的 500 小時嘈雜語音的訓(xùn)練。 該網(wǎng)絡(luò)能夠?qū)崟r處理(一幀輸入,一幀輸出)并達到有競爭力的結(jié)果。結(jié)合這兩種類型的信號變換,DTLN 能夠從幅度譜中穩(wěn)健地提取信息,并從學(xué)習(xí)到的特征基礎(chǔ)中結(jié)合相位信息。 該方法顯示了最先進的性能,并且在平均意見得分 (MOS) 方面絕對優(yōu)于 DNS-Challenge 基線 0.24 分。
有關(guān)更多信息,請參閱論文。 DNS-Challenge 的結(jié)果在此處發(fā)布。 在實時賽道上,我們在 17 支球隊中獲得了競爭激烈的第 8 名。
我們的實驗
目前主要實驗了DTLN模型對音頻進行降噪處理之后,對于識別準(zhǔn)確率的影響。我分別使用該模型對之前劃分的高質(zhì)量和低質(zhì)量音頻以及不做劃分的音頻進行降噪處理,處理后的音頻測試結(jié)果如下:
| 無劃分 | 0.5699 | 0.5054 |
| 高質(zhì)量 | 0.7241 | 0.6207 |
| 低質(zhì)量 | 0.3143 | 0.1429 |
從表格中可以得出,使用DTLN模型對音頻進行降噪之后,無論是針對高質(zhì)量好還是低質(zhì)量音頻又或者是原始音頻都會使準(zhǔn)確率下降。
接下來還會繼續(xù)調(diào)研其它降噪模型以及語音增強的方法。
3.2 Speech Enhancement based on DNN (TF-Masking, Spectral-Mapping), DNN-NMF, NMF
NMF based SE
非負(fù)矩陣分解 (NMF) 可用于從混合數(shù)據(jù)中分離目標(biāo)源。 所有源的基矩陣是通過連接各個源的基矩陣來構(gòu)建的,以便基矩陣和編碼矩陣的相應(yīng)部分的乘積成為分離的目標(biāo)源。
DNN-NMF based SE
在 DNN-NMF 模型 [1] 中,使用深度神經(jīng)網(wǎng)絡(luò) (DNN) 來估計編碼向量,以提高具有源子空間重疊的目標(biāo)數(shù)據(jù)提取算法的性能。
DNN based SE
使用DNN的語音增強主要有兩組,即基于掩碼的模型(TF-Masking)[2]和基于映射的模型(Spectral-Mapping)[3]。 TF-Masking 模型描述了干凈語音與背景干擾的時頻關(guān)系,而頻譜映射模型對應(yīng)于干凈語音的頻譜表示 [2]。
Statistical model based SE
https://github.com/eesungkim/Speech_Enhancement_MMSE-STSA
Implementations
- Settings
Sampling Rate : 16kHz
512-point Hamming window with 75% overlap. - Dataset
干凈的語音數(shù)據(jù)取自 TIMIT 數(shù)據(jù)庫。 我們?yōu)橛?xùn)練集選擇了 62 個話語,為測試集選擇了 10 個話語。 完整的 TIMIT 數(shù)據(jù)集將進一步增強 PESQ 性能。 NOISEX-92 數(shù)據(jù)庫中的工廠、雜音、機槍噪聲用于訓(xùn)練和測試。
來自 5 位男性和 5 位女性演講者的 10 句話用于績效評估。 所有模型都經(jīng)過 3 種類型(工廠、嗡嗡聲、機槍)噪聲的訓(xùn)練,這些噪聲匯集在一起,以檢查所提出的算法是否可以同時學(xué)習(xí)各種類型的源特征。
References
[1] T. G. Kang, K. Kwon, J. W. Shin, and N. S. Kim, “NMF-based target source separation using deep neural network,” IEEE Signal Processing Letters, vol. 22, no. 2, pp. 229-233, Feb. 2015.
[2] Wang, DeLiang, and Jitong Chen. “Supervised speech separation based on deep learning: An overview.” IEEE/ACM Transactions on Audio, Speech, and Language Processing (2018).
[3] Xu, Yong, et al. “A regression approach to speech enhancement based on deep neural networks.” IEEE/ACM Transactions on Audio, Speech and Language Processing, Jan. 2015.
3.3 Speech-enhancement with Deep learning
簡介
該項目旨在構(gòu)建語音增強系統(tǒng)以減弱環(huán)境噪聲。
音頻有許多不同的表示方式,從原始時間序列到時頻分解。 表示的選擇對于系統(tǒng)的性能至關(guān)重要。 在時頻分解中,頻譜圖已被證明是音頻處理的有用表示。 它們包括表示以時間和頻率為軸的短時傅立葉變換 (STFT) 序列的 2D 圖像,以及表示每個時間幀頻率分量強度的亮度。 在這種情況下,它們似乎是將 CNNS 架構(gòu)直接應(yīng)用于聲音的自然領(lǐng)域。 在幅度譜圖和相位譜圖之間,幅度譜圖包含信號的大部分結(jié)構(gòu)。 相位譜圖似乎只顯示出很少的時間和光譜規(guī)律。
在這個項目中,我將使用幅度譜圖作為聲音的表示(參見下圖),以預(yù)測要減去噪聲語音譜圖的噪聲模型。
該項目分解為三種模式:數(shù)據(jù)創(chuàng)建、訓(xùn)練和預(yù)測。
準(zhǔn)備數(shù)據(jù)
為了創(chuàng)建訓(xùn)練數(shù)據(jù)集,我收集了來自不同來源的英語語音干凈的聲音和環(huán)境噪聲。
干凈的聲音主要來自 LibriSpeech:一個基于公共領(lǐng)域有聲讀物的 ASR 語料庫。 我也使用了一些來自 SiSec 的數(shù)據(jù)。 環(huán)境噪聲來自 ESC-50 數(shù)據(jù)集或 https://www.ee.columbia.edu/~dpwe/sounds/。
在這個項目中,我專注于 10 類環(huán)境噪音:滴答聲、腳步聲、鈴鐺、手鋸、鬧鐘、煙花、昆蟲、刷牙、吸塵器和打鼾。 這些類如下圖所示(我使用來自 https://unsplash.com 的圖片創(chuàng)建了此圖像)。
為了創(chuàng)建用于訓(xùn)練/驗證/測試的數(shù)據(jù)集,音頻以 8kHz 采樣,我提取的窗口略高于 1 秒。 我對環(huán)境噪聲進行了一些數(shù)據(jù)增強(在不同時間取窗口會產(chǎn)生不同的噪聲窗口)。 噪音已經(jīng)混合到干凈的聲音中,噪音水平隨機化(20% 到 80%)。 最后,訓(xùn)練數(shù)據(jù)包括 10 小時嘈雜的聲音和干凈的聲音,以及 1 小時的聲音驗證數(shù)據(jù)。
為了準(zhǔn)備數(shù)據(jù),我建議在與代碼文件夾分開的位置創(chuàng)建 data/Train 和 data/Test 文件夾。 然后創(chuàng)建以下結(jié)構(gòu),如下圖所示:
您將相應(yīng)地修改 noise_dir、voice_dir、path_save_spectrogram、path_save_time_serie 和 path_save_sound 路徑名稱到采用程序默認(rèn)參數(shù)的 args.py 文件中。
將您的噪音音頻文件放入noise_dir 目錄,將您干凈的語音文件放入voice_dir。
在 args.py 中指定要創(chuàng)建為 nb_samples 的幀數(shù)(或?qū)⑵渥鳛閰?shù)從終端傳遞)我默認(rèn)情況下讓 nb_samples=50 用于演示,但對于生產(chǎn),我建議使用 40 000 或更多。
然后運行 ??python main.py --mode=‘data_creation’。這將隨機混合來自 voice_dir 的一些干凈的聲音和來自 noise_dir 的一些噪音,并將嘈雜的聲音、噪音和干凈的聲音的頻譜圖以及復(fù)雜的相位、時間序列和聲音保存到磁盤(用于 QC 或測試其他網(wǎng)絡(luò))。它采用 args.py 中定義的輸入?yún)?shù)。 STFT、幀長度、hop_length 的參數(shù)可以在 args.py 中修改(或?qū)⑵渥鳛閰?shù)從終端傳遞),但使用默認(rèn)參數(shù),每個窗口將轉(zhuǎn)換為大小為 128 x 128 的頻譜圖矩陣。
用于訓(xùn)練的數(shù)據(jù)集將是嘈雜聲音的幅度譜圖和干凈聲音的幅度譜圖。
訓(xùn)練
用于訓(xùn)練的模型是 U-Net,一種具有對稱跳過連接的深度卷積自動編碼器。 U-Net 最初是為生物醫(yī)學(xué)圖像分割而開發(fā)的。 在這里,U-Net 已經(jīng)適應(yīng)去噪頻譜圖。
作為網(wǎng)絡(luò)的輸入,嘈雜聲音的幅度譜圖。 作為輸出模型的噪聲(嘈雜的語音幅度譜圖 - 干凈的語音幅度譜圖)。 輸入和輸出矩陣都使用全局縮放進行縮放,以映射到 -1 和 1 之間的分布。
在訓(xùn)練期間測試了許多配置。對于首選配置,編碼器由 10 個卷積層組成(使用 LeakyReLU、maxpooling 和 dropout)。解碼器是具有跳躍連接的對稱擴展路徑。最后一個激活層是一個雙曲正切 (tanh),輸出分布在 -1 和 1 之間。為了從頭開始訓(xùn)練,初始隨機權(quán)重設(shè)置為 He 法線初始化器。
模型使用 Adam 優(yōu)化器編譯,使用的損失函數(shù)是 Huber 損失,作為 L1 和 L2 損失之間的折衷。
在現(xiàn)代 GPU 上訓(xùn)練需要幾個小時。
如果您的本地計算機中有用于深度學(xué)習(xí)計算的 GPU,則可以使用以下命令進行訓(xùn)練:python main.py --mode=“training”。它采用 args.py 中定義的輸入?yún)?shù)。默認(rèn)情況下,它將從頭開始訓(xùn)練(您可以通過將 training_from_scratch 設(shè)置為 false 來更改此設(shè)置)。您可以從 weights_folder 和 name_model 中指定的預(yù)訓(xùn)練權(quán)重開始訓(xùn)練。我讓可用的 model_unet.h5 帶有我在 ./weights 中訓(xùn)練的權(quán)重。 epochs 和 batch_size 指定訓(xùn)練的 epoch 數(shù)和批大小。最佳權(quán)重在訓(xùn)練期間自動保存為 model_best.h5。您可以調(diào)用 fit_generator 在訓(xùn)練時僅將部分?jǐn)?shù)據(jù)加載到磁盤。
就個人而言,我使用 Google colab 提供的免費 G??PU 進行訓(xùn)練。我在 ./colab/Train_denoise.ipynb 放了一個筆記本示例。如果您的驅(qū)動器上有很大的可用空間,您可以將所有訓(xùn)練數(shù)據(jù)加載到驅(qū)動器,并在訓(xùn)練時使用 tensorflow.keras 的 fit_generator 選項加載其中的一部分。就我個人而言,我的 Google 驅(qū)動器上的可用空間有限,因此我預(yù)先準(zhǔn)備了 5Gb 的高級批次以加載到驅(qū)動器進行培訓(xùn)。定期保存重量并為下一次訓(xùn)練重新加載。
最后,我獲得了 0.002129 的訓(xùn)練損失和 0.002406 的驗證損失。在其中一次訓(xùn)練中制作的損失圖下方。
預(yù)測
對于預(yù)測,嘈雜的語音音頻被轉(zhuǎn)換為略高于 1 秒的 numpy 時間序列窗口。 每個時間序列通過 STFT 變換轉(zhuǎn)換為幅度譜圖和相位譜圖。 嘈雜的語音頻譜圖被傳遞到 U-Net 網(wǎng)絡(luò),該網(wǎng)絡(luò)將預(yù)測每個窗口的噪聲模型(參見下圖)。 使用經(jīng)典 CPU,一旦轉(zhuǎn)換為幅度譜圖,一個窗口的預(yù)測時間約為 80 毫秒。
然后從嘈雜的語音頻譜圖中減去模型(這里我應(yīng)用了直接減法,因為它足以完成我的任務(wù),我們可以想象訓(xùn)練第二個網(wǎng)絡(luò)來適應(yīng)噪聲模型,或應(yīng)用匹配濾波器,例如在信號處理中執(zhí)行的 )。 “去噪”幅度譜圖與初始相位相結(jié)合,作為逆短時傅立葉變換 (ITFT) 的輸入。 然后可以將我們的降噪時間序列轉(zhuǎn)換為音頻(參見下圖)。
讓我們來看看在驗證數(shù)據(jù)上的表現(xiàn)!
下面我展示了一些來自警報/昆蟲/吸塵器/鈴鐺噪聲的驗證示例的結(jié)果。 對于它們中的每一個,我都顯示了初始的嘈雜語音頻譜圖、網(wǎng)絡(luò)預(yù)測的去噪頻譜圖以及真正干凈的語音頻譜圖。 我們可以看到,該網(wǎng)絡(luò)能夠很好地概括噪聲建模,并生成略微平滑的語音頻譜圖,非常接近真正的干凈語音頻譜圖。
更多關(guān)于驗證數(shù)據(jù)的頻譜圖降噪示例顯示在存儲庫頂部的初始 gif 中。
References
Jansson, Andreas, Eric J. Humphrey, Nicola Montecchio, Rachel M. Bittner, Aparna Kumar and Tillman Weyde.Singing Voice Separation with Deep U-Net Convolutional Networks. ISMIR (2017).
https://ejhumphrey.com/assets/pdf/jansson2017singing.pdf
Grais, Emad M. and Plumbley, Mark D., Single Channel Audio Source Separation using Convolutional Denoising Autoencoders (2017).
https://arxiv.org/abs/1703.08019
Ronneberger O., Fischer P., Brox T. (2015) U-Net: Convolutional Networks for Biomedical Image Segmentation. In: Navab N., Hornegger J., Wells W., Frangi A. (eds) Medical Image Computing and Computer-Assisted Intervention – MICCAI 2015. MICCAI 2015. Lecture Notes in Computer Science, vol 9351. Springer, Cham
https://arxiv.org/abs/1505.04597
K. J. Piczak. ESC: Dataset for Environmental Sound Classification. Proceedings of the 23rd Annual ACM Conference on Multimedia, Brisbane, Australia, 2015.
DOI: http://dx.doi.org/10.1145/2733373.2806390
總結(jié)
以上是生活随笔為你收集整理的语音增强相关技术综述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这些有笑点的故事,只有程序员才能get
- 下一篇: (pytorch-深度学习)使用pyto