RNNoise原理部分(1)

​論文:https://arxiv.org/pdf/1709.08243.pdf

官方博客鏈接:https://people.xiph.org/~jm/demo/rnnoise/?__s=sgkgganpatrhthvch4js

github:https://github.com/xiph/rnnoise

改進github:https://github.com/GregorR/rnnoise-nu

 

Introduce for RNNoise

Rnnoise是一種實時(低複雜度)全頻帶的語音增強(噪聲抑制)方法,A hybrid DSP(signal process + Deep learning)

主要包含兩部分:

  • 信號處理

    噪聲抑制在信號處理技術中已經很成熟,但同時存在一些問題,信號處理中某些estimator算法的調參非常麻煩。

  • RNN

    RNN的關鍵在R(recurrent,循環),R決定了它非常適合處理序列數據,而語音數據是一種時間序列數據。

RNNoise彌補了信號處理中調參的問題,採用學習參數的方式,總結如下:

  1. keep all the basic signal processing that's needed anyway (not have a neural network attempt to emulate it)(保留基本信號處理的部分,而不是使用網絡去模擬它)

  1. let the neural network learn all the tricky parts that require endless tweaking next to the signal processing. (讓神經網絡去學習應該怎麼微調其他難以調整的部分,如estimator)

  2. RNNoise相比於直接使用RNN的端到端(直接輸入語音,全部由網絡計算得到降噪結果)方法計算複雜度小,所以多用於視頻會議(video-conference)。

     

Architecture for RNNoise

系統框圖

系統框架圖如下所示:

 

其中最主要的兩個部分爲A和B,主要的噪聲抑制在A部分完成

噪聲抑制原理(RNN模擬部分) 原聲 - 噪聲 = 降噪

常規的噪聲抑制可概括爲以下三步:

  1. 檢測出信號包含的語音和噪聲部分。

  1. 噪聲部分通過噪聲譜評估器計算出一個噪聲譜特徵(每個頻域上的功率)。

  1. 噪聲抑制 = 語音譜 - 噪聲譜

爲了避免產生過多神經元的問題,RNNoise使用RNN估算理想臨界帶增益,而非直接估算譜的大小,論文中說法爲ideal critical band gains。採用22個頻帶的模式:

frequency bands如上圖,使用Opus 圖中的第二個頻帶(因爲低頻時頻帶更寬,容易獲得足夠的數據)

對於每個頻帶來說,估算可用於信號的一個增益。(相當於一個22段的均衡器,改變每個的值來達到降低噪聲,保留信號的一個功能)

RNN

 

  • 其中的三部分便是噪聲抑制的三步,將計算增益的三個部分全部由神經網絡模擬,最關鍵的部分是圖中的三個GRU(門控循環單元)。

  • GRU的作用是保證RNN的長期記憶性(序列中靠後的數據單元結果依賴靠前的數據單元,由於網絡的傳播性質,沒有GRU時前層傳到後層會有信息丟失)。

  • RNNoise使用GRU而非LSTM(也是一種記憶單元) 因爲此實驗中GRU性能好,且需要更少的資源。

關於增益

對於22個頻帶每一個估算的增益值都在[0, 1]中。對於增益的詳細使用,論文中做如下解釋:

對於每一個頻帶b在頻率k下對於一個轉換後的信號X可以估算一個能量E,

而增益便是

其中gt是標記數據的能量,noisy是噪聲的能量。

概括的來說就是:RNN則是學習到最好的gb從而使得噪聲的能量小。換一種理解方法,可以認爲增益就是一個值,如果是噪聲,就乘一個小的增益。如果不是,就乘一個大的增益。

關於架構中B部分pitch filter

由於我們採用22頻帶,頻帶分辨率過於粗糙,對於音調諧波( pitch harmonics)的噪聲很難消除, 所以便有了這麼一個濾波器。(非RNN部分,使用固定數學公式進行濾波,沒有學習功能)

 

Dataset for RNNoise

  • 數據至關重要,可以決定效果的好壞。

  • 數據要求:

    1. 不能只收集 乾淨的語音/嘈雜的語音 兩部分,因爲很難獲得具有相同內容的兩部分。(需要從乾淨的語音和噪音的單獨記錄中人爲的創建數據,難點在於獲得各種各樣的噪音來增加語音。)

    2. 還需要覆蓋各種錄製條件。(如,只是基於全帶(0-20kHz)音頻訓練的版本在處理低頻濾波產生的0-8kHz的音頻是會出現錯誤。)

  • 輸入網絡的是22個頻段的頻譜信息,因爲音頻有很大的動態範圍,所以最好可以計算能量的對數值。

 

原理部分大概羅列如上,數據集具體格式接下來繼續調研

一個開源語音數據集:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章