高曉利,李 捷,王 維,趙火軍,駱明偉
(四川九洲電器集團有限責任公司 四川 綿陽 621000)
聲紋識別是重要的身份鑒別技術,有著廣泛的應用領域,如軍事安全、信息安全等[1]。同類聲源的不同個體間的聲音非常相似,無法通過人耳進行判別,但是這些相似的聲音具有不同的特征參數[2]。從聲音中提取一組反映個體特征的聲學參數構成個體聲紋是一個復雜的過程,也是聲紋識別的關鍵。
根據聲音信號的聲學特殊性,已經提出一些有效的聲學特征提取方法,如MFCC(Mel-Frequency Cepstral Coefficients)參數,它是將聲音信號的頻譜通過非線性變換轉換為Mel頻率,然后再轉換到倒譜域上,從而獲得MFCC 參數,但MFCC 參數方法在加入背景噪聲后分析性能變差。如果信號的一個頻率被噪音污染,那么該方法無法有效阻止噪音在整個特征向量上擴散[3]。文獻[4]提出了基于小波分析的聲源識別方法,但小波變換具有左遞歸的性質,高頻區間存在著時域分辨率的差異,并且一定存在著最差分辨率的區間[5]。小波包變換能夠解決小波變換由于沒有對同一尺度上的細節作進一步分解,造成高頻信息不能得到很好地處理這一問題[6]。文獻[7]使用小波包分析+BP 神經網絡,逐層分析信號在各子頻段的能量譜,獲取信號更精細的頻域信息。該方法在頻域上能獲取更豐富的特征,但忽略了聲音信號的時域連續性。
而聲譜圖是聲音信號在頻率和時間維度上的二維圖像,其縱軸為時間,橫軸為頻率,灰度為幅值。使用聲譜圖作為聲音信號的特征提取方式,獲取圖像形式的二維聲紋特征作為分類識別階段的輸入。CNN 擅長處理圖像信息,適用于處理聲譜圖中的“紋理”信息。文獻[8]提出了通過CNN 完成聲紋識別的方法。然而,聲譜圖中不僅包含表現聲音片段的“紋理”特征,還有時域上的前后關聯特征,使用CNN 仍不能充分挖掘聲譜圖中的信息。RNN模型的網絡結構可以表達前后信息相關的時序效果,所以在時序信息處理方面有很大的優勢[9]。通過將擅長時序建模的RNN 對CNN 的輸出進行更進一步分析,建立改進的CRNN,充分挖掘聲譜圖中所包含的聲紋特征,完成更全面的識別模型建立。
本文通過聲譜圖完成聲音信號特征提取,采用網絡參數優化的改進CRNN 完成模型訓練和測試。首先介紹系統的總體結構,分析各部分的實現原理,最后通過仿真驗證方法的有效性。
系統分為訓練和測試兩部分,如圖1 所示。在訓練階段,發動機聲音通過聲譜圖分析后得到聲紋特征,按照分類標簽信息存儲在聲紋數據庫。利用訓練數據訓練由CNN 和RNN 共同構成的深度學習網絡模型。在測試階段,先進行測試聲音數據的聲譜圖提取,再結合在訓練階段獲取的深度學習模型,得到判別結果。根據最終統計結果,評估系統的識別率。

圖1 聲紋個體識別系統
在特征提取階段獲取的特征向量應能對不同聲源有所區分。傳統傅里葉變換適用于分析平穩信號,而不適用于分析非平穩信號或暫態信號。聲譜圖分析適用于各類聲音信號的分析,是一種時頻分析方法。聲譜圖是表示聲音信號頻譜隨時間變化的圖形。
聲譜圖分析方法通過對聲音信號進行交疊分段的短時傅里葉變換,是一種在時域上連續分析頻域特征的方法。任一時刻的某頻率成分的強弱用相應的灰度深淺來表示,綜合了頻譜圖和時域波形的特點,聲譜圖分析過程如圖2 所示。首先對聲音信號進行預處理,該過程包含歸一化、分幀和加窗。進行特征提取前進行歸一化處理,可以消除信號采集時引入的發動機聲音音量大小差異造成的后期分析誤差。歸一化處理采用式(1)所示方法:

其中,Si是聲音信號離散序列S 的第i 個元素,μ 和σ 分別是其絕對值和標準差。Spi是歸一化的序列Sp的第i 個元素。

圖2 聲譜圖分析流程
根據聲音信號的短時平穩原則,每幀取20 ms~50 ms長度。為了使幀與幀之間平滑過渡,分幀一般采用交疊分段,由此保持聲音信號的連續性。每一幀加窗后,按照0.5 幀長進行滑窗,進行頻譜分析,求取該幀長信號的能量譜。將每幀的能量譜再按照時間序列進行連接,獲得該聲音片段的聲譜圖。
目標聲紋圖是目標聲音信號的視覺表征,根據不同的聲音特征反映出不同的“紋路”特征,因此,采用更適用于圖像特征提取的CNN 進行下一步特征提取。CNN 是深度學習領域重要的網絡模型之一,是一種層與層之間局部連接的神經網絡[10]。
本文方法用CNN 從聲譜圖中提取聲紋的特征參數,再通過RNN 對特征信息進行時序建模。RNN 和CNN 在建模能力上各有所長,RNN 可以用于描述時間上連續狀態的輸出,有記憶功能,而CNN 用于靜態輸出,共同構成CRNN 同時具有時間和空間的特性。
1.2.1 基于CNN 的聲譜圖特征提取方法
卷積神經網絡一般由若干個卷積層- 激活層-池化層-批處理層的結構組成,如圖3 所示。

圖3 CNN 結構
其中,卷積層中奇數尺寸的濾波器能獲取到更好的中心特征,故卷積核設為奇數[11]。激活層采用ReLU 激活函數,池化層采用Max Pooling 方式。同時通過批處理加快網絡收斂速度。
傳統的池化方法會同時在時域和頻域方向上進行池化,而這樣會丟失聲譜圖中的時序信息。有別于傳統池化層,本文方法將只在頻率上作池化以保留聲譜圖的時序信息,故池化窗大小為(2*1)。
1.2.2 基于改進CRNN 的聲紋個體識別
僅通過CNN 提取聲譜圖特征的方法沒有充分挖掘和利用聲音信號的時序特征,而RNN 作為一種反饋神經網絡,網絡中的輸出結果不但與當前輸入信息以及網絡權重有關,還與之前時刻信息輸入相關,能夠充分利用時間序列優勢,其網絡結構如圖4 所示。中間隱藏層中的神經元相互連接,其中每個神經元的輸入既包括當前時刻輸入層的數據,也包括前一時刻隱藏層的輸出。通過隱藏層和輸入層的連接,將t-1 時刻的隱藏層狀態作為t 時刻輸入的一部分[12]。T 既為時序長度,C 為經由CNN 提取的特征數,F 為頻率方向的長度。

圖4 RNN 結構
本文方法利用RNN 在時間序列建模的優勢,完成進一步的分類和識別。從CNN 輸出的特征向量維度是C×(F×T)。用一個時間序列來重新表示CNN 的輸出,時間序列長度為T,S={S1,S2,…,Si,…,ST},Si是大小為C×F 的向量,將CNN 的輸出轉置為T 個大小為C×F 的向量,即從“特征數頻率時間”向量轉置為“時間頻率特征數”向量來作為RNN的輸入,兩個網絡間的對應關系如圖5 所示。從RNN 輸出的向量個數與時序長度T 對應,這里只采用最終時刻的輸出,即對應圖4 中T 時刻輸出的數據,經過Softmax 分類器進行分類。
本文實驗平臺為聯想ThinkStation,搭載NVIDIA K420 GPU。采用主流的深度學習框架TensorFlow 進行訓練和驗證。
實驗數據來自實采的13 輛不同汽車(其中兩輛為同型號)的發動機聲音,涵蓋了發動機的啟動、平穩運行、若干次加速、停止運行全過程,由此涵蓋發動機所有可能的工作狀態。聲音信號參數及特征提取階段對聲音信號的處理參數如表1 所示。

圖5 CNN+RNN 深度學習網絡結構

表1 特征提取參數
80%的聲音片段作為訓練數據,用于網絡模型訓練,余下的20%聲音片段用于對模型的測試驗證。聲音片段有24 000/s 個數據點,幀移設置為240,則可獲得100 幀/s數據。幀長取768 個數據點,對應聲音信號短時平穩的30 ms長度。最初生成的聲譜圖大小為768*100,其中,100 對應1 s的100幀,768 對應聲譜圖頻域的0~24 kH z。
考慮到過高的頻率分量已經不屬于有用信息,大多屬于噪聲信號,在多次仿真實驗和訓練基礎上,最終選擇在頻域方向上作1/8 裁剪,以減少噪聲等冗余信息,同時減少CRNN 深度學習網絡的數據處理量。最終作為CRNN 輸入的聲譜圖大小為96 100。如下頁圖6 所示是某片段的原始時域圖和聲譜圖,既包含每幀的能量譜信息,又保證了時間上每幀的平滑過渡連續性。
下頁表2 是識別仿真中不同參數的網絡以及各自的識別率。仿真中CNN 網絡共4 層,每層提取的特征數目為32/64/128/128,批處理batch 大小為8。卷積層采用的卷積窗大小為(5×5),實驗輸出標簽為1 到13,分別對應13 臺車輛的發動機。

圖6 某聲音片段原始時域圖和對應聲譜圖

表2 識別網絡參數及結果
為了證明時序信息的重要性,改進CRNN 作為實驗組在池化層不對時序方向作池化,即池化區域設置為(1×2),經過4 層卷積和池化處理后的CNN網絡輸出是128 張大小為6×100 的小聲譜圖,特征映射的數量即為128,6 和100 分別是輸出圖的高度和寬度,最終輸出向量為128×(6×100),轉置后輸入到RNN 的向量為100×(1 286)。普通CRNN作為對照組的池化區域大小設置為(2×2),最終輸出向量為128×(6×6),轉置后輸入到RNN 的向量為6×(128×6)。RNN 網絡分別設置為3/5/7 層以作對比,每層大小為768。
從表2 中可以看出,相對普通CRNN,在使用相同層數的CNN 和RNN 情況下,改進CRNN 的識別率有所提高。這是因為改進CRNN 在池化層的參數調整,沒有對時間維度的信息作池化處理而得到的結果。加入RNN 后的網絡識別率隨著RNN 的層數增加而升高,而同時網絡模型也變大。
同時,僅使用普通CNN 處理聲譜圖“紋理”信息時的識別率低于加入RNN 處理時序信息后的識別率。其模型尺寸超過了加入3 層RNN 后的網絡模型,原因是全連接層處理的數據量(6×6×128)多于后者CRNN 中處理的(6×128)。在只使用CNN的情況下,對池化區域作特殊處理對提高識別率幫助不大,且由于輸出的數據量(128×6×100)太大,使得后期全連接層的模型尺寸也更大,導致整個模型尺寸達到了909 Mb。
本文在特征提取階段使用聲譜圖分析提取發動機的聲紋特征,使用這些特征參數在分類識別階段完成基于改進CRNN 的深度學習網絡模型的訓練,充分利用卷積網絡的圖像處理優勢和遞歸神經網絡的時序建模優勢,獲得了高識別率的聲紋個體識別模型。通過對比實驗結果表明,基于改進CRNN的識別方法優于傳統方法,識別率有顯著提高。相比普通CRNN,在模型大小不變的情況下,識別率提升了將近2%。相比單獨CNN,識別率提升了8%。
同時,本文的改進CRNN 模型的參數除了表中CNN 和RNN 參數,還有全連接層的層數、每層節點數、學習率、正則化等大量參數,這些參數的調整確定目前需要大量實驗支持。模型參數的調整方法還有待進一步的理論研究。在面對設備小型化時,網絡模型的大小也需要得到控制。網絡模型的輕量化設計也是今后的研究方向之一。