張 志,劉振宇,馮婷婷,朱 濤
(南華大學計算機學院,湖南衡陽 421001)
在人們的日常生活中,時時刻刻都被環境聲音所包圍。了解這些聲音的含義能夠幫助人們更好地生活。為了理解這些聲音的內容,表征環境聲音是使用它的有效方法。由此便可以看到隱藏在這些數據類型中的有用信息[1],利用這些有效信息就能夠對聲音進行分類。城市中的汽車鳴笛聲、人群的嘈雜聲等許多噪音混入了城市聲景中,這些聲源的分離或分類[2]對于理解城市聲音和控制城市噪聲至關重要。
目前,在音頻特征提取中,最常用的就是MFCC[2]和LPCC(線性預測倒譜系數)[3]。MFCC 進行音頻特征提取的過程基本分7 個步驟,一段音頻經過預加重、分幀、加窗、FFT、Mel 濾波器組、取對數、DCT 之后得到一組特征向量,這組特征向量就代表這段音頻的特征。由于這種特征不依賴于信號本身的性質,所以該方法可以保持較好的識別性能[4-11]。
在目前的音頻特征分類方法中,使用深度學習能夠得到不錯的識別準確率。深度學習中對于圖像處理方向最具有代表性的模型就是卷積神經網絡(CNN)[7],在文本和語音方向使用最多的模型是遞歸神經網絡(RNN)[4]。CNN 的經典模型有很多,例如AlexNet[11]、VGGNet[12]、ResNet[13]等影響深遠的模型。RNN 的經典模型也有很多,比如門控循環單元(GRU)[5],長短期記憶網絡(LSTM)[6]等。
與文中相關的工作是將數據集中的音頻數據進行特征抽取并將其輸入到深度學習的模型當中進行聲音的識別。文中所用到的數據集文件都是音頻數據。音頻數據屬于序列數據(序列數據是生活中很常見的一種數據,如一句話、一段連續的視頻圖片等),RNN 比DNN 和CNN 更適合處理序列數據的神經網絡[15-16]。
文中使用的音頻特征提取方式為MFCC。但在實際應用過程中,音頻特征表示方式有很多,Jonghee Sang 團隊在音樂信息檢索(MIR)中,將聲音信號的原始波形轉換為二維時頻來表示。通過使用內核(例如STFT)分解信號并使用對數比例的頻率表示形式,二維表示形式被認為是音頻數據的有效形式(例如:梅爾頻譜圖,CQT)。Chen Y在該數據集中采用的特征提取方式為對數梅爾頻譜圖(Log-mel spectrogram)。首先將所有城市聲音劃分為幀,并通過使用窗函數(默認采樣率為22 050 Hz并標準化)將聲音的不同長度分為相同大小的音頻片段,并以對數比例提取梅爾頻譜圖,得到最終的對數梅爾頻譜圖。
目前,大多數的分類任務都使用DNN 處理。DNN 的結構分成3 個部分,第一個部分是輸入層,也就是模型的輸入,一般都是數據的特征。第二部分是隱藏層,隱藏層描述的是輸入和輸出中間的部分。該部分由若干個神經網絡層構成,每層由一個或多個神經節點組成,所有網絡層之間的數據傳輸是通過各個層內的神經節點相互連接完成的,各層節點間連接的方式有很多種,如果是全連接的方式就是最簡單的DNN,這種連接方式比較容易理解,但同時它的缺點比較明顯,計算量非常大并且需要的參數也很多。DNN 模型結構如圖1 所示。

圖1 DNN模型結構
使用DNN 進行分類任務時,在模型的輸出層一般使用softmax 函數進行類別概率的計算。模型需要訓練多次的原因在于,通常一輪神經網絡的計算得到的預測值與實際想要的值并不一致,損失函數就是用來描述不一致的程度。根據模型的損失函數就會得到一個誤差值,誤差值是神經網絡模型多個節點共同計算的結果,需要利用反向傳播的方法進行神經元權值的更新,從而縮小下一輪計算的誤差值,使得分類結果更加精確。
為了驗證模型的效果,文中實驗使用的數據集為UrbanSound8K。該數據集是可用于研究的最大的城市環境聲源公共數據集,它被廣泛用于驗證環境聲音識別問題的解決方案中。該數據集包含10種不同的城市聲源,共8 732 個音頻文件,每個數據的命名格式為錄音編號-類別編號-事件編號-切片編號。每個音頻文件都不超過4 s。該數據集共有10 個文件夾,每個文件夾都包含10 種類別的聲音,每個文件夾包含的音頻數據大約為873 個左右,該數據集中所有文件夾包含的每個類別的音頻數據量如表1 所示。

表1 數據集每個類別的數據信息
將音頻可視化能夠幫助進行特征信息的提取。將各個類別的音頻波形圖和頻譜圖進行可視化,結果如圖2 所示。

圖2 10種音頻的波形和頻譜圖
目前,大部分的音頻分類都是使用CNN 來完成的,Pablo Zinemanas 團隊使用CNN 模型進行音頻特征的分類[9],模型的F1 值為57。該模型較為簡單,但模型的識別效果并不太好。文中構造了多層的GRU模型來進行音頻數據的識別。GRU 模塊中包括兩個機制,一個更新門和一個重置門。單個GRU 模型內部的公式為:

式(1)、式(2)中σ代表sigmoid 函數,式(5)的σ代表輸出函數,可以為sigmoid 函數或者softmax 函數。zt為該單元的更新門,sigmoid 函數讓更新門的值趨于0 或者1,即記憶上一步的值還是丟棄。rt為重置門,rt越小說明了需要忽略更多的前一時刻的狀態信息。式(3)、式(4)是模塊中的臨時隱藏狀態和輸出。
文中GRU 模型的結構更加簡單,而且效果也很好,因此該模型被廣泛使用于深度學習的各個領域。單個GRU 模塊的結構如圖3 所示。

圖3 GRU模型結構
文中將所有數據集中的數據進行一次特征提取。由于數據集中的音頻文件時長并不統一,所以需要將提取出來的所有MFCC 特征進行比較,記錄下幀數最大的一段,并且在提取的過程中每幀提取40 個MFCC 特征,然后將其余的音頻特征進行padding。每一段音頻的特征維度都是(174,40)。特征提取結束之后將創建神經網絡進行訓練。在實驗中,采取多層的GRU 模型,如圖4 所示,該模型也是該實驗結果中準確率最高的模型。

圖4 7層GRU模型結構圖
為了避免產生過擬合,每一層的后面都有附加dropout 層。最后,定義Softmax 層以輸出類標簽的概率,在計算正確率之前將標簽進行onte-hot 向量化。為了加速模型收斂,訓練采取批量梯度下降的方法進行權值更新,每個批次包含50 個音頻的特征輸入。實驗為了得到識別準確率最優的層數,在每次實驗完成后將比較不同層數的實驗精度,直到該準確率到達某一峰值后下降,將該峰值的層數記錄下來作為最優模型??梢酝ㄟ^圖5 中所示的過程詳細描述系統流程。

圖5 實驗整體模型結構流程圖
每次實驗將訓練數據與測試數據進行9∶1 的切分,訓練數據占總數據量的90%,也就是7 858 條音頻數據,同時將這些數據放入模型中進行400 個迭代周期,每個周期分為158 個批次,每個批次50個數據,從而保證每個周期可以運行整個訓練數據集數量的音頻數據,然后為每次訓練和測試階段記錄識別的正確率。實驗從3 層結構開始訓練,直到8 層結構的模型準確率出現下降。然后反復實驗,計算相同的結構模型得出準確率的平均值。
該實驗的主要目的是將不同層數的GRU 模型輸出的準確率結果進行比較。實驗中共設計了6 組不同層數的GRU 模型進行聲音識別,從3 層到8 層,所有的輸入均為未經過特征篩選的原音頻數據。每組包括一個訓練和一個測試,訓練中主要的輸出參數有Epoch、Train loss、Train accuracy,測試中主要的輸出參數為Test loss、Test accuracy。表2 列出了模型的結構和參數輸出的結果。實驗周期是經過多次實驗后確定的,周期為400 可以保證表1 中的模型都可以達到模型收斂。為了更好地進行梯度下降,在實驗中持續輸出loss 值的變化,由loss 的數值變化選擇可變的學習率。

表2 所有模型結構及其參數輸出結果
由表2 可知,從3 層到7 層的模型結構中,測試的正確率會隨著GRU 模型層數的增加而慢慢上升,但是從7 層到8 層又出現了下降,說明8 層的模型已經開始出現過擬合,從而導致訓練集正確率高于7層模型,測試正確率低于7 層模型。最優模型的loss值變化和識別的正確率變化如圖6 所示。

圖6 7層模型的準確率和損失值走勢圖
由圖6 可見,多層的GRU 模型在短周期內就可以大幅收斂,模型在求解最小化損失函數時采用的是隨機梯度下降和變動的學習率,所以模型在收斂過程中會有一些抖動,但是模型準確率大致的趨勢是提升的,并且模型的損失函數也是呈下降趨勢。模型的最終準確率達到了93.1%。雖然模型層數的增加可能會讓識別的準確率會相應提升一些,但同時模型的參數也會增加,內存的損耗也會隨之增加。模型的訓練時間也會隨之增加,需要選擇在模型過擬合之前最優的層數。
在相同的數據集下,文中將7 層GRU 模型的識別結果與其他一些環境噪聲分類的最新方法得到的結果進行了比較,結果如表3 所示。

表3 UrbanSound8k數據集上模型的分類結果比較
如Karol J.Piczak 使用了一個深度網絡,該模型包含兩個卷積層以及兩個全連接層,使用音頻數據增強進行了訓練,準確率約為74%。2019 年ChenY使用Dilated CNN 模型的識別準確率為78%。在該數據集的聲音分類中,Nithya Davis 團隊將數據進行了數據擴充并使用CNN 模型進行聲音分類,該模型的識別準確率為83.5%。Haiyan Shu 等人使用8 層CNN 模型對該數據進行識別[10],識別準確率達到了89%。雖然CNN 模型也能對音頻的特征進行識別,但是依然存在參數多和識別準確率不高的問題。表3 中GoogleNet[16]雖然正確率也不錯,但該模型參數過多,非常耗時。7 層的GRU 模型的分類精度比其他分類方法有很大提升,并且相對于正確率較高的CNN 模型來說模型也不是很大。相比較其他準確率相近的分類器而言,參數使用的比較少。近幾年在該數據集的識別的方法中,7 層GRU 模型識別準確率非常好。
為了探究哪些特征在識別過程中屬于重要特征,哪些特征是噪音,繼續將數據進行降維,選擇包裝法進行特征的選擇,包裝法在初始特征集上使用隨機森林進行訓練,該過程可以得到每個特征的重要性。然后去掉重要程度最低的特征。重復上述過程,直到剩下的特征數為所需特征的數量,保留所得的特征,并使用7 層GRU 模型進行訓練。同時又使用主成分分析(PCA)降維算法對原數據進行特征轉換,雖然得到的數據總特征數減少,但轉換后的特征已經不再是原來數據特征所代表的含義了。包裝法和PCA 進行特征選擇時,使用模型的測試準確率作為評估標準,先將特征數量從6 960 開始減少至6 000、5 000、4 000、3 000、2 000、1 000,然后從中選取最優的特征數目繼續篩選,最終篩選出結果,其中3組數據識別準確率對比結果如圖7所示。

圖7 原數據特征與降維后特征在所有類別上的識別率
由圖7 可知,所有類別中幾乎是沒有經過降維處理的原數據的效果最佳,雖然包裝法將每個音頻特征從6 960 個特征縮短到160 個,但是每個類別的識別準確率幾乎都在下降,并且在預測過程中所節省的時間并不明顯。而PCA 算法雖然也降低了數據的特征數,但是在進行預測時,需要先進行PCA 特征轉換,在模型預測結果時花費的時間也并沒有優勢,且在大部分類別下識別效果都不如原數據好,所以使用7 層GRU 模型在原數據上進行識別準確率會更高。
文中實驗之前,已經對比了近年來使用CNN 模型和機器學習算法解決ESC 問題的模型,發現必須使用深層的神經網絡模型才會有較好的識別準確率,文中構造了7 層GRU 模型解決ESC 問題,可以實現更高的識別準確率,而且模型收斂更快,打敗了近幾年在該數據集上的多種聲音識別算法。在數據特征選擇時,使用包裝法進行數據特征選擇,雖然加快了識別速度,但是準確率下降太多,未來可以采取更多的特征選擇方式進行特征篩選。實驗數據提取和處理方面,可以選擇其他的做法,將數據全部調整成相同維度時可以選擇填充平均值或者直接刪除有缺失值的數據。未來的研究可以識別分離多種混合的聲音,進而增強需要的聲音類別,消除其余噪聲,對于語音通話具有重要意義。