歐 昀, 周曉彥, 李大鵬
(南京信息工程大學電子與信息工程學院,南京 210044)
在深度學習領域,利用卷積神經網絡(Convolutional Neural Networks,CNN)對圖像進行智能識別分類技術已經愈發(fā)成熟,教學案例多為圖像相關,鮮有聲音識別的案例。鳥聲識別研究有助于鳥類監(jiān)測,有利于生態(tài)環(huán)境監(jiān)測,受到越來越多人的關注[1]。在深度學習課程中加入鳥聲識別實驗,可幫助學生更好地理解語音信號處理和圖像信號處理的相關概念,從實踐中理解深度學習智能識別的具體應用和實現過程。在教育部所提出的新工科背景下,高校教學計劃中都十分重視對學生實踐能力和創(chuàng)新能力的培養(yǎng),只有在教學過程中引入相對應的實驗實踐課程,才能夠培養(yǎng)學生多學科交叉學習的能力和創(chuàng)新實踐能力[2-3]。
本實驗設計采用了CNN 對鳥聲進行識別分類。CNN是一種包含卷積運算的深度前饋神經網絡,整個網絡核心是通過卷積層和池化層進行特征提取和全連接層進行識別分類,在訓練過程中利用梯度下降法更新訓練參數,在各個領域均有廣泛的應用[4-7]。實驗將原始鳥聲分為訓練鳥聲和測試鳥聲,對原始鳥聲信號進行預處理,并利用短時傅里葉變換(Short-Time Fourier transform,STFT)的結果繪制STFT 語譜圖,同時提取梅爾倒譜系數(Mel-Frequency Cepstral Coefficient,MFCC)特征參數,將MFCC特征和STFT語譜圖特征放入CNN 進行訓練,獲取最優(yōu)的訓練參數,利用訓練好的CNN完成對鳥聲的識別分類,整個實驗過程如圖1 所示。
圖1 鳥聲識別實驗流程圖
實驗時既可使用已訓練好的CNN 對MFCC 特征和STFT語譜圖特征進行鳥聲識別實驗,分析比較兩者的結果,也可由學生自行編程設計CNN模型進行鳥聲識別實驗,通過識別結果驗證模型的優(yōu)劣。
常見的鳥聲數據庫均為在自然環(huán)境下采集的鳥聲信號,環(huán)境噪聲復雜多變,鳥聲音頻多樣,在分析處理前需先進行預加重、分幀加窗等處理,通過短時分析技術繪制STFT語譜圖和提取MFCC系數特征。
(1)切割讀取。為使鳥聲數據規(guī)格統(tǒng)一,將原始鳥聲信號切割為2 s整音頻信號,并以22.05 kHz進行讀取。
(2)預加重。為彌補傳輸過程中鳥聲高頻部分的損耗,需對鳥聲數據進行預加重處理[8]。
(3)分幀加窗。任意一個音頻信號從整體來看都是一個非平穩(wěn)的時變信號,其頻域特性和表征信號的各時頻域特征參數均是動態(tài)的,無法直接進行分析,而在一個短時范圍10 ~30 ms內音頻信號的各特征參數變化較小,可以將其作為穩(wěn)態(tài)來處理[9]。因此需對鳥聲數據進行分幀加窗處理,本實驗中選用漢明窗[10]。
(1)STFT語譜圖繪制。STFT是與快速傅里葉變換(Fast Fourier Transform,FFT)密切相關的一種變換,用于對非平穩(wěn)的時變信號進行分析。本質上STFT 就是加窗的FFT,通過窗函數在時間軸上移動來對信號進行分幀加窗,對各幀信號進行FFT[11],則有
式中:x(k)為輸入信號;w(k-l)為移動了l的窗函數;X(l,ω )為時移l和頻率ω的二維函數,對其取絕對值可得到幅度,通過幅可以繪制出STFT 語譜圖。語譜圖表征了幅值關于時間和頻率的變化,繪制時以頻率為Y軸,時間為X軸,在X與Y組成的二維平面中,一個點(x,)y的幅值大小用色系深淺來表示,如圖2 所示。
圖2 STFT語譜圖
(2)MFCC特征提取。MFCC 特征是一種在語音識別中應用較為廣泛的特征,其基礎是基于人聽覺特性所提出的梅爾變換,通過梅爾變換模擬出非線性的人耳對聲音的感知能力[12]。MFCC 提取原理如圖3所示,其核心是對梅爾變換后的頻譜進行倒譜分析,將頻譜的包絡和細節(jié)分開[13-14]。
圖3 MFCC特征提取原理框圖
其提取步驟如下:
步驟1以22.05 kHz讀取鳥聲數據;
步驟2對鳥聲數據進行預處理,包括采用一階FIR高通數字濾波器進行預加重,采用漢明窗進行分幀加窗;
步驟3對每一幀進行傅里葉變換求頻譜;
步驟4用頻譜求能量并通過梅爾濾波器組過濾;
步驟5對濾波器組輸出做對數離散余弦變換得到MFCC特征系數。
CNN通常是由卷積層、池化層和全連接層交叉組合而成的深度前饋神經網絡,利用卷積層提取特征,池化層降低特征數量,利用全連接層完成識別分類[15]。為便于計算機運行,本實驗以VGG(Visual Geometry Group)網絡為原型,減少了層數和卷積核數量,所搭建CNN模型如圖4 所示。
圖4 實驗CNN網絡模型圖
卷積可看作一種提取圖像特征的方法[16]。當給定圖像X∈RM×N、卷積核W∈Rm×n時,圖像卷積即二維卷積的定義式為式中:通常情況下m<<M,n<<N;M×N是輸入圖像的尺寸;m×n是卷積核尺寸。與卷積類似的還有互相關,互相關和卷積的不同在于卷積核不進行翻轉的操作,卷積神經網絡中卷積核的參數是待訓練參數,是否翻轉不影響提取特征的能力,實際操作時常直接使用互相關操作,簡化運算量。
通常情況下卷積層中的卷積運算也指互相關,即不進行核翻轉的運算,卷積層中一個二維卷積的運算過程如圖5 所示。
圖5 卷積過程示意圖
池化層一般分為2 種,最大池化可提取圖片紋理,均值池化可保留背景特征,池化的目的是降維,通過特征選擇減少特征的數量。最大池化的過程如圖6所示。
圖6 最大池化示意圖
全連接層可將相鄰兩層之間的神經元全部相連,即先將卷積池化所提取的特征拉直作為全連接層的輸入,與全連接層所有神經元相連,最后一層全連接層選擇softmax作為激活函數進行概率輸出[17]。softmax函數定義如下
式中:n為該層共有n個神經元;ak為第k個輸入信號;yk為第k個神經元的輸出。
步驟1將鳥聲數據集進行2 s整的切割讀取,并按7∶3分為訓練集和測試集。
步驟2對原始數據進行預加重和分幀加窗,預加重系數選為0.966 5,幀長為23 μs,幀移為幀長的一半,共可分為173 幀,窗函數選為漢明窗。
步驟3利用Python中l(wèi)ibrosa庫中函數對所有鳥聲數據提取MFCC 系數特征,梅爾濾波器數量選為128,得到的結果取前40 個數據值,為使網絡收斂更快,對數據進行歸一化處理,使其分布在[-1,1]之間。每個鳥聲數據得到[40,173]的MFCC特征系數。
步驟4利用Python中l(wèi)ibrosa庫中函數對鳥聲數據進行STFT,將結果取絕對值得到幅度,將幅度單位轉為dB,繪制語譜圖,保存為[256,256,3]的數據并進行歸一化處理,使數據分布在[0,1]之間。
步驟5將2 種特征的訓練集分別放入2 個CNN模型中進行訓練,保存各自的最優(yōu)訓練參數。
步驟6利用PyQt5 庫編寫GUI 界面,分別加載CNN模型和各自保存的最優(yōu)訓練參數,通過2 個不同特征所得的模型對測試集中任一鳥聲進行識別分類,對比分析2 種模型的識別結果。
(1)訓練部分。在Python的Tensorflow 框架下搭建CNN網絡[18]。訓練配置如下:
即優(yōu)化器選擇adam,損失函數選擇多分類交叉熵損失函數,小批量數量選擇32,迭代次數100。MFCC特征和語譜圖特征的訓練結果分別如圖7、8 所示。
圖7 MFCC訓練結果
圖8 STFT語譜圖訓練結果
圖7、8 中,圖(a)為正確率隨迭代次數的變化,圖(b)為損失熵函數隨迭代次數的變化。由圖7、8 可知,經100次迭代后,MFCC特征訓練集準確率為97.53%,損失熵為0.097 9,測試集準確率為87.46%,損失熵為0.578 1。STFT語譜圖訓練集準確率為98.14%,損失熵為0.032 9,測試集準確率為90.36%,損失熵為0.462 8。
(2)識別部分。在PyCharm 軟件中編寫Python代碼,加載CNN 模型并導入最優(yōu)參數,并利用PyQt5庫編寫GUI界面,保存為mygui.py 文件并運行,選擇測試集中任一音頻,輸出對鳥聲的識別預測結果,如圖9 所示。
圖9 鳥聲識別系統(tǒng)運行界面
本實驗設計基于卷積神經網絡的鳥聲識別系統(tǒng),利用MFCC特征和STFT語譜圖2 種特征通過CNN網絡進行鳥聲識別,實驗結果可知,STFT語譜圖的準確率更高,但自身的數據量也更大;MFCC系數特征的準確率雖然略低,但是自身數據量較小。通過實驗設計和運行,可整體性地幫助學生梳理語音處理、圖像處理和卷積神經網絡的相關知識,從實踐中逐步掌握多學科交叉研究的能力,還可讓學生通過改變網絡層數、卷積核大小和數量等方式自主搭建CNN 網絡完成鳥聲識別,以此提高學生的創(chuàng)新能力和實踐動手能力。