賈子龍潘士杰郭子昊唐 進(jìn)姚 燕
(北京郵電大學(xué)自動(dòng)化學(xué)院,北京 100876)
隨著科技的發(fā)展,人工智能技術(shù)的廣泛應(yīng)用,智能語(yǔ)音系統(tǒng)已廣泛融入到人們生活中,智能對(duì)話,通過(guò)語(yǔ)音控制設(shè)備完成指定的工作等應(yīng)用隨處可見。聲音作為人與人之間最自然的交流媒介,其中包含著大量不同種類的信息。因此,語(yǔ)音學(xué)目前有三大主要的研究領(lǐng)域,包括聲紋識(shí)別、語(yǔ)音識(shí)別和情感識(shí)別[1]。聲紋識(shí)別是通過(guò)對(duì)一種或多種語(yǔ)音信號(hào)的特征進(jìn)行分析進(jìn)而實(shí)現(xiàn)對(duì)輸入信號(hào)的識(shí)別,這種特性對(duì)于每個(gè)人來(lái)說(shuō)都是獨(dú)有的,就如同指紋一樣,每個(gè)個(gè)體之間普遍具有差異性,主要取決于人體咽喉、鼻腔和口腔等器官的形狀、尺寸和位置等因素以及人們對(duì)發(fā)聲器官的操縱方式。目前針對(duì)聲紋識(shí)別最常用的一些方法為模板匹配法、最近鄰方法、神經(jīng)元網(wǎng)絡(luò)方法,VQ 聚類法等[2]。其基本原理大致均為通過(guò)提取說(shuō)話人聲音頻譜,經(jīng)處理后提取一些特征參數(shù)再與目標(biāo)聲紋的參數(shù)進(jìn)行比對(duì)檢測(cè)。聲紋識(shí)別同樣屬于一類模式識(shí)別問(wèn)題,伴隨著人工智能的發(fā)展,也逐漸朝著深度學(xué)習(xí)的方向不斷發(fā)展,基于深度學(xué)習(xí)的聲紋識(shí)別,經(jīng)過(guò)大量數(shù)據(jù)訓(xùn)練后得到的模型,其識(shí)別效果有著顯著的提升。文獻(xiàn)[3]提出了一種深度置信網(wǎng)絡(luò)(Deep Belief Network,DBN)和深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Network,DNN)的自適應(yīng)通用模型,利用i-Vector 構(gòu)建全局通用DBN 模型。徐志京等人[4]設(shè)計(jì)了一種加權(quán)全序列的卷積神經(jīng)網(wǎng)絡(luò)(Weighted Deep Fully Convolutional Neural Network,W-DFCNN),可以更好地適應(yīng)高頻梅爾倒譜小波系數(shù)(High Mel Frequency Cepstrum Wavelet Coefficient,HMFCWC)特征。李晉等人[5]提出了一種利用全變量空間,將語(yǔ)音數(shù)據(jù)進(jìn)行線性降維后,對(duì)聲紋模型向量i-vector 進(jìn)行信道補(bǔ)償?shù)姆椒ā?/p>
CNN 作為機(jī)器學(xué)習(xí)領(lǐng)域常用技術(shù),廣泛地應(yīng)用在目標(biāo)識(shí)別等方面,對(duì)于經(jīng)常用于檢測(cè)的模型,為了提高檢測(cè)效果,往往都有巨大的參數(shù)量,也就需要龐大的算力支持[6-7]。CPU 為計(jì)算單元少,緩存單元多的結(jié)構(gòu),處理CNN 時(shí)速度較慢。GPU 雖然擁有大量的計(jì)算單元,可以有效加速CNN 計(jì)算,但其同時(shí)也有功耗高,成本高,不便攜的缺點(diǎn)。利用軟件實(shí)現(xiàn)聲紋識(shí)別,雖然具有較高的靈活性和可操作性,具有更多的資源,可構(gòu)建更為復(fù)雜的網(wǎng)絡(luò),但缺乏合適的硬件通路,使其在高效性及低功耗性上無(wú)法做到統(tǒng)一。
利用FPGA 根據(jù)對(duì)應(yīng)算法設(shè)計(jì)加速網(wǎng)絡(luò)結(jié)構(gòu),可以非常有效地加速CNN 的運(yùn)算,能效高,延遲低。針對(duì)不同的網(wǎng)絡(luò)結(jié)構(gòu)可以設(shè)計(jì)對(duì)應(yīng)的加速電路,可以很好地適應(yīng)深度學(xué)習(xí)[8-11]?;谶@些優(yōu)點(diǎn),越來(lái)越多的研究者開始關(guān)注于FPGA 的硬件加速。但是FPGA 硬件加速也存在一些限制,如常常一個(gè)完整的系統(tǒng)需要多個(gè)模塊協(xié)同,均占用板卡資源,故板卡資源無(wú)法全部分配給CNN 運(yùn)算,設(shè)計(jì)時(shí)要考慮對(duì)資源占用的優(yōu)化;對(duì)于不同的網(wǎng)絡(luò),要實(shí)現(xiàn)最優(yōu)需要設(shè)計(jì)不同的硬件電路。盡管如此,F(xiàn)PGA 在CNN 加速方面依然有著極大的實(shí)用價(jià)值。
聲紋識(shí)別現(xiàn)在在很多領(lǐng)域都得到了廣泛應(yīng)用,常用于刑偵破案、罪犯跟蹤、國(guó)防監(jiān)聽、個(gè)性化應(yīng)用、證券交易、銀行交易、公安取證、個(gè)人電腦聲控解鎖、汽車聲控解鎖、身份驗(yàn)證和識(shí)別等[12-14]。在本項(xiàng)目中,選擇使用的是Xilinx 旗下的PYNQ-Z2 開發(fā)板,進(jìn)行基于FPGA 加速的聲紋識(shí)別技術(shù)的研究及實(shí)現(xiàn)。
本研究基于Xilinx 的PYNQ-Z2 開發(fā)板,實(shí)現(xiàn)了具有聲紋識(shí)別功能的控制系統(tǒng),系統(tǒng)的硬件框圖如圖1 所示。
圖1 硬件結(jié)構(gòu)框圖
系統(tǒng)首先對(duì)PYNQ-Z2 開發(fā)板進(jìn)行初始化,讀取經(jīng)過(guò)語(yǔ)音數(shù)據(jù)集訓(xùn)練出的權(quán)重和偏置,初始化完成后開始工作。按下按鍵開始錄音,通過(guò)麥克風(fēng)采集48 kHz 采樣率、24 bit、雙通道語(yǔ)音信號(hào)。取其中一個(gè)通道的音頻信息,提取梅爾頻率倒譜系數(shù)(Mel Frequency Cepstral Coefficients,MFCC)參數(shù),輸入到Xilinx ZYNQ7020 作卷積和池化的并行運(yùn)算,而后從ZYNQ7020 中輸出得到標(biāo)簽和準(zhǔn)確率。若輸入音頻的標(biāo)簽相符,即身份正確,將語(yǔ)音信號(hào)進(jìn)行格式轉(zhuǎn)換,轉(zhuǎn)成API 輸入要求的16 kHz 采樣率、16 bit、單通道語(yǔ)音信號(hào),并輸入到百度API 中進(jìn)行語(yǔ)音轉(zhuǎn)文字操作,得到字符串形式命令。對(duì)命令字符串進(jìn)行關(guān)鍵字檢索,進(jìn)而調(diào)用Arduino I/O 和MIC 執(zhí)行命令。如果身份驗(yàn)證失敗,輸出音頻“沒(méi)有權(quán)限”。命令執(zhí)行完成后或者身份錯(cuò)誤時(shí),重新跳轉(zhuǎn)到按鍵開始處,等待下一次命令輸入。
梅爾頻率倒譜系數(shù)與梅爾標(biāo)度(Mel scale)有著密不可分的關(guān)系。梅爾標(biāo)度是基于人耳對(duì)于不同頻段聲音的敏感度不同的特性提出來(lái)的,在這個(gè)標(biāo)度下,人耳對(duì)頻率的感知度能成為線性關(guān)系。為此,出現(xiàn)了梅爾濾波器(Mel-filter banks),它的通帶在低頻處較窄且密,高頻處較寬且疏,從而達(dá)到由低頻到高頻分辨率逐漸降低的效果,聲音轉(zhuǎn)換為梅爾頻譜(Mel Bank Features),來(lái)模擬人耳對(duì)聲音的感知。梅爾倒譜系數(shù)便是在梅爾頻譜的基礎(chǔ)上,做倒譜分析后的特征系數(shù),通過(guò)它及其一階、二階動(dòng)態(tài)系數(shù),能夠很好地表示聲音的特征[15-16]。
MFCC 特征提取流程如圖2 所示。
圖2 MFCC 特征提取流程圖
MFCC 的提取,一般可分為以下幾個(gè)環(huán)節(jié):(1)音頻預(yù)處理;(2)離散傅里葉變換;(3)梅爾濾波;(4)動(dòng)態(tài)特征系數(shù)的提取。
1.1.1 音頻預(yù)處理
由于采集設(shè)備或人發(fā)聲器官自身的原因可能會(huì)出現(xiàn)信號(hào)的混疊、高頻失真的問(wèn)題,對(duì)語(yǔ)音信號(hào)的質(zhì)量會(huì)產(chǎn)生一定影響,因此在對(duì)音頻信號(hào)進(jìn)行分析前,必須對(duì)其進(jìn)行預(yù)加重、分幀、加窗等預(yù)處理操作,從而盡可能保證后續(xù)的語(yǔ)音處理得到的信號(hào)更均勻、平滑,為MFCC 的提取提供優(yōu)質(zhì)的參數(shù),提高語(yǔ)音處理質(zhì)量。
預(yù)加重:語(yǔ)音信號(hào)的平均功率譜受聲門激勵(lì)和口鼻輻射的影響,高頻端大約在800 Hz 以上,按6 dB/oct(倍頻程)衰減,頻率越高相應(yīng)的成分越小,為此要在對(duì)語(yǔ)音信號(hào)x(n)進(jìn)行分析與處理之前對(duì)其高頻部分加以提升。預(yù)加重網(wǎng)絡(luò)的輸出y(n)和輸入的語(yǔ)音信號(hào)x(n)的關(guān)系為:
式中:a為預(yù)加重系數(shù)。
分幀:語(yǔ)音信號(hào)具有時(shí)變特性,而同時(shí)也具有短時(shí)平穩(wěn)性,一般認(rèn)為在10 ms~30 ms 的較短時(shí)間內(nèi),其特性基本保持不變,便可以看作一個(gè)準(zhǔn)穩(wěn)態(tài)過(guò)程。因此對(duì)任何語(yǔ)音信號(hào)來(lái)說(shuō),分析與處理必須建立在“短時(shí)”的基礎(chǔ)上,即進(jìn)行“短時(shí)分析”,將語(yǔ)音信號(hào)分成數(shù)個(gè)小段來(lái)分析其特征參數(shù),其中每一段稱為一“幀”,幀長(zhǎng)取10 ms~30 ms。實(shí)際操作時(shí),是將N個(gè)采樣點(diǎn)集合成一幀,N的取值與信號(hào)的采樣頻率有關(guān),對(duì)于MkHz 的采樣率,一般讓N/M落在10~30 內(nèi)。為避免相鄰兩幀的變化過(guò)大,會(huì)讓兩相鄰幀之間有一段重疊區(qū)域,此重疊區(qū)域包含了L個(gè)取樣點(diǎn),一般L的值約為N的1/2 或1/3。
加窗:分幀之后,需要緊接著進(jìn)行加窗處理,加強(qiáng)兩端的連續(xù)性,防止頻譜的泄露。常用的有漢寧窗、漢明窗、矩形窗。本項(xiàng)目采用漢寧窗。
1.1.2 離散傅里葉變換
預(yù)處理好的信號(hào),需要利用傅里葉變換將其轉(zhuǎn)換為頻域下的表征,以更好地觀察信號(hào)的特性。
式中:xn為長(zhǎng)為N的信號(hào)序列。
1.1.3 梅爾濾波
梅爾濾波需要先將信號(hào)從Hz 頻率轉(zhuǎn)變?yōu)槊窢栴l率,具體變換關(guān)系為
逆變換:
選取Hz 頻率下的最低頻率與最高頻率,根據(jù)需求濾波器個(gè)數(shù)等間隔插入頻率點(diǎn),這些會(huì)是梅爾三角濾波器的對(duì)稱中點(diǎn),再將這些坐標(biāo)轉(zhuǎn)化為Hz頻率下的表示,并尋求對(duì)應(yīng)位置數(shù)組f,濾波器傳遞函數(shù)為:
以此便能構(gòu)建梅爾濾波器組。將預(yù)處理好的音頻信號(hào)通過(guò)前一步設(shè)計(jì)的梅爾濾波器,就能夠得到音頻的MFCC。再注意將能量為0 的地方調(diào)整為eps,以便對(duì)數(shù)運(yùn)算,而后作離散余弦變換
式中,L為升倒譜系數(shù),得到的結(jié)果就是MFCC 的特征系數(shù)。
1.1.4 動(dòng)態(tài)特征系數(shù)的提取
有了MFCC 的特征系數(shù),還需要對(duì)其求一階和二階導(dǎo)數(shù)。原因是MFCC 系數(shù)只反映語(yǔ)音在靜態(tài)情況下的特性,而動(dòng)態(tài)特性亦是語(yǔ)音的另一大特征,只有動(dòng)靜結(jié)合,才能獲得更好的識(shí)別性能。
至此,MFCC 及其一、二階系數(shù)提取完畢,每一幀得到13×3 的數(shù)組,可用于后續(xù)神經(jīng)網(wǎng)絡(luò)輸入,將每幀的特征系數(shù)平鋪開來(lái),視作一個(gè)矩陣,便能將其運(yùn)用于卷積神經(jīng)網(wǎng)絡(luò)CNN,并利用FPGA 對(duì)其卷積和池化運(yùn)算進(jìn)行加速。
神經(jīng)網(wǎng)絡(luò)主要由卷積層和池化層組合形成,卷積層可以獲取輸入的特征,池化層會(huì)對(duì)卷積結(jié)果進(jìn)行子采樣以降低運(yùn)算復(fù)雜度[17]。本文所建立的卷積神經(jīng)網(wǎng)絡(luò)分類模型結(jié)構(gòu)如圖3 所示,其中主要有4 個(gè)卷積層、3 個(gè)池化層、1 個(gè)全連接層。
圖3 CNN 網(wǎng)絡(luò)結(jié)構(gòu)圖
表1 為神經(jīng)網(wǎng)絡(luò)各層的卷積核大小及輸出特征的大小,每一層的卷積核大小均為3×3,卷積完成后利用核為2×2 的池化層進(jìn)行降維,最終輸出為一1×1 的結(jié)果。
表1 CNN 各層的卷積核大小及輸出特征大小
PYNQ 得到的是48 kHz 采樣率、24 bit、雙通道的輸入音頻信號(hào),而語(yǔ)音轉(zhuǎn)文字所用API 的輸入要求是16 kHz 采樣率、16 bit、單通道音頻信號(hào)。利用soundfile 庫(kù)優(yōu)先將輸入信號(hào)轉(zhuǎn)化為16 bit,而后由wave 讀取輸入音頻的時(shí)間序列,該序列采用二進(jìn)制記錄。雙通道下,可視序列的奇數(shù)項(xiàng)為左聲道,偶數(shù)項(xiàng)為右聲道,簡(jiǎn)單篩去右聲道即可,這樣就能讓雙聲道變單聲道。而后48 kHz 采樣率和16 kHz 采樣率的聯(lián)系在于,48 kHz 采樣率下每隔3 個(gè)點(diǎn)是16 kHz采樣率下的一個(gè)點(diǎn),故要48 kHz 采樣率轉(zhuǎn)16 kHz采樣率,只需對(duì)序列隔3 取1。又因?yàn)槭请p聲道轉(zhuǎn)單聲道,就變成了對(duì)序列隔6 取1。之后再將序列保存為wav 文件,即可滿足格式要求。
系統(tǒng)數(shù)據(jù)流如圖4 所示,對(duì)于Zynq 芯片主要包含兩大功能模塊:PS(Processing System) 與PL(Programmable Logic)。其中PS 模塊是一個(gè)基于ARM 處理器的處理系統(tǒng),PL 模塊是基于Xilinx 7 系列架構(gòu)的可編程邏輯單元。
圖4 系統(tǒng)數(shù)據(jù)流圖
系統(tǒng)的工作流程為:系統(tǒng)先從外設(shè)中獲取音頻并將其存儲(chǔ)在PS 存儲(chǔ)單元中,經(jīng)過(guò)處理器提取處理后驅(qū)動(dòng)AXI-DMA 單元將數(shù)據(jù)輸送到片上處理器,之后ARM 會(huì)控制CNN 硬件加速單元讀取特征和權(quán)重來(lái)進(jìn)行計(jì)算,并將結(jié)構(gòu)送回片上存儲(chǔ)器再經(jīng)由AXI_DMA 送回到PS 的存儲(chǔ)器中,再進(jìn)一步處理輸出。
實(shí)際所使用的PYNQ-Z2 開發(fā)板的環(huán)境是一個(gè)簡(jiǎn)易的32 位Linux 系統(tǒng),而不幸的是,TensorFlow 對(duì)于32 位系統(tǒng)的支持僅僅停留在1.0 版本之前,而這階段版本跨度變化巨大,從靜態(tài)圖網(wǎng)絡(luò)變?yōu)榱藙?dòng)態(tài)圖網(wǎng)絡(luò),代碼書寫規(guī)范和要求也有很大改變。另一方面,開發(fā)板難以安裝librosa 包,不能簡(jiǎn)單地依靠librosa 進(jìn)行聲音特征的提取,也要求構(gòu)建一套音頻特征采集的方案。
除此之外,還有一些其他常用的語(yǔ)音信號(hào)處理函數(shù)如pyaudio、pydub,開發(fā)板也不支持,因而無(wú)法使用,需要按照上述原理手寫代碼以實(shí)現(xiàn)對(duì)讀取到的音頻進(jìn)行分切和梅爾頻譜的提取,即對(duì)語(yǔ)音信號(hào)分別作預(yù)加重、分幀、加窗、快速傅里葉變換FFT、取絕對(duì)值、經(jīng)過(guò)Mel 濾波器、取對(duì)數(shù)、離散余弦變換,最終取得MFCC 特征參數(shù)。而后再對(duì)其作一階差分和二階差分,獲取其一階參數(shù)和二階參數(shù)。
經(jīng)過(guò)上述幾步獲得的MFCC 參數(shù)組,是基于語(yǔ)音信號(hào)分幀后的每一幀語(yǔ)音信號(hào),因此,理論上,對(duì)于每個(gè)人,每一幀的語(yǔ)音信號(hào)的MFCC 參數(shù)組是大致相同的。為了優(yōu)化運(yùn)算速率,同時(shí)保證一定的準(zhǔn)確度,對(duì)MFCC 參數(shù)組作裁剪,只取連續(xù)80 幀的語(yǔ)音信號(hào)對(duì)應(yīng)的MFCC 參數(shù)組。取20 幀~100 幀,可以在一定程度上避免最初的靜音干擾。同時(shí),為了方便后續(xù)的卷積和池化運(yùn)算,篩掉最后3 個(gè)二階特征參數(shù),只取前36 個(gè)MFCC 特征參數(shù)。這樣處理之后,得到一個(gè)80×36 的特征矩陣,以供后續(xù)處理。
本項(xiàng)目利用TensorFlow1.0 對(duì)代碼進(jìn)行重寫后采用Adma 算法做訓(xùn)練,同樣在得到聲紋識(shí)別的模型后,錄入音頻并提取梅爾頻譜,放入模型中比對(duì)。
以上便是在32 位FPGA 開發(fā)板上的實(shí)現(xiàn)方式,由于很多庫(kù)函數(shù)不支持而無(wú)法使用,因此有不少方面需要單獨(dú)寫代碼實(shí)現(xiàn),但實(shí)現(xiàn)后經(jīng)驗(yàn)證與在win10 環(huán)境下的效果基本一致。
由于卷積神經(jīng)網(wǎng)絡(luò)具有特有的計(jì)算模式,利用通常的方式實(shí)現(xiàn)很難滿足其性能要求,為此,采用FPGA 加速的方式可以非常有效地提高CNN 的性能,主要目的為充分利用FPGA 平臺(tái)所提供的計(jì)算資源以實(shí)現(xiàn)高效的循環(huán)展開及流水線化[18]。
2.2.1 卷積和池化ip 核的建立
如果直接基于python 作卷積運(yùn)算,每次卷積將作j×k次循環(huán)乘法,時(shí)間復(fù)雜度較高。而FPGA 能進(jìn)行多路并行運(yùn)算,為了充分利用其并行運(yùn)算優(yōu)勢(shì)。本研究通過(guò)HLS 生成conv 卷積IP 和pool 池化IP,重構(gòu)base.bit 并將上述兩個(gè)IP 核添加到base 中,之后依據(jù)輸入輸出地址重寫python 函數(shù)。如此操作后,雖然能夠正常生成bit,但是卻無(wú)法進(jìn)行正常的卷積和池化運(yùn)算,判斷原因?yàn)榧尤脒@兩個(gè)IP 核后,片上資源利用率過(guò)高,或是引腳間沖突,故對(duì)電路進(jìn)行一定裁剪,去掉沒(méi)有使用而資源占比很大的video模塊后,能正常生成bit,并且功能正常。對(duì)于一個(gè)神經(jīng)網(wǎng)絡(luò),通常其運(yùn)算量是非常大的,通??梢岳肍PGA 硬件的并行化來(lái)設(shè)計(jì)一個(gè)運(yùn)算通路,即使用硬件來(lái)對(duì)這個(gè)網(wǎng)絡(luò)進(jìn)行加速。
對(duì)于一個(gè)卷積神經(jīng)網(wǎng)絡(luò),其進(jìn)行的操作主要有三個(gè),即卷積、池化和全連接運(yùn)算。其中全連接運(yùn)算還可以看成卷積運(yùn)算的一種特殊形式。故而只需要設(shè)計(jì)兩種通用數(shù)據(jù)通路即可實(shí)現(xiàn)該網(wǎng)絡(luò)。這樣做可以節(jié)省很多的資源并且具有更高的靈活性。
從圖5 中可以看出,只需要實(shí)現(xiàn)兩大通用模塊,一塊實(shí)現(xiàn)卷積及Relu 運(yùn)算,另一塊實(shí)現(xiàn)池化運(yùn)算,通過(guò)CPU 可以對(duì)兩大模塊的工作參數(shù)及運(yùn)算結(jié)果分別進(jìn)行配置。
圖5 數(shù)據(jù)通路設(shè)計(jì)圖
其中卷積的核心為一三維的累加乘法,定義式如下
式中:Fo(co,y,x)表示輸出特征中在(x,y)處的神經(jīng)元,F(xiàn)i(ci,y,x)表示輸入特征中在(x,y)處的神經(jīng)元。卷積核的大小為Ky×Kx,輸入特征映射總數(shù)為c層。
對(duì)于池化操作,主要有三類:最小池化,最大池化和平均池化,分別作為三種模式,根據(jù)CPU 的指令來(lái)選擇。該模塊主體為三個(gè)大循環(huán),分別為層數(shù)、寬度、高度,遍歷每一個(gè)元素,之后按照模式要求取最大、最小或平均值。
在IP 核建立方面主要使用了高層次綜合工具(HLS)來(lái)實(shí)現(xiàn),其工作流程如圖6 所示。本研究利用C++編寫并實(shí)現(xiàn)了池化和卷積的IP 核,并利用Vivado 將其合并入板卡中,圖7、圖8 即為調(diào)整單元模塊前后板卡資源使用情況。如圖7 所示,加入兩個(gè)IP 核后,線路復(fù)雜,資源將近占滿,運(yùn)行效率低且容易出錯(cuò)。其中無(wú)用的video 模塊是造成這種情況的主要原因,可以看到,刪去video 模塊后,情況得到了很大改善,其資源使用情況如圖8 所示。
圖6 HLS 總覽
圖7 重建修改前的資源使用情況
圖8 重建修改后的資源使用情況
本研究整合了聲紋識(shí)別和語(yǔ)音識(shí)別,完成了一個(gè)比較完善的語(yǔ)音控制系統(tǒng),能夠完成語(yǔ)音輸入、身份驗(yàn)證、命令識(shí)別、命令執(zhí)行等一系列操作。為了展示成果,共尋找了20 人錄制樣本,分別經(jīng)過(guò)CPU、GPU、FPGA 三個(gè)平臺(tái)測(cè)試,如表2 及表3 所示,可以看出,CPU 耗時(shí)最長(zhǎng),GPU 最短,F(xiàn)PGA 遠(yuǎn)快于CPU,略慢于GPU。
初始化時(shí)長(zhǎng):
表2 初始化時(shí)長(zhǎng)
正常工作時(shí)長(zhǎng):
表3 不同平臺(tái)處理時(shí)間對(duì)比
本次實(shí)驗(yàn)成功實(shí)現(xiàn)了聲紋識(shí)別在PYNQ-Z2 的片上運(yùn)行并且利用FPGA 對(duì)卷積運(yùn)算進(jìn)行加速。識(shí)別樣本數(shù)量20 人,輸出范圍為包括“未成功識(shí)別“在內(nèi)的20+1 種結(jié)果,能夠在較高正確率(3 人測(cè)試共100 次,成功識(shí)別次數(shù)為88 次)情況下識(shí)別出20人中的特定說(shuō)話人,在遇見20 人以外的其他說(shuō)話人時(shí),也能夠返回“未能識(shí)別”。未采用FPGA 硬件加速時(shí),PYNQ-Z2 實(shí)現(xiàn)單詞聲紋識(shí)別需要耗時(shí)3 s 左右,然而加速之后,該時(shí)間明顯降低不少,可以明顯看到FPGA 對(duì)聲紋識(shí)別速率的提升。
本文主要介紹了基于FPGA 實(shí)現(xiàn)聲紋識(shí)別的一些關(guān)鍵技術(shù),聲紋識(shí)別作為一種生物特征識(shí)別技術(shù),可以有效地解決語(yǔ)音方面的安全性問(wèn)題,是將來(lái)身份驗(yàn)證、身份識(shí)別等方面的一種有效解決方案。梅爾倒譜系數(shù)可以有效地提取和描述出語(yǔ)音信號(hào)中的聲紋特征,利用卷積神經(jīng)網(wǎng)絡(luò)結(jié)合FPGA 的并行運(yùn)算優(yōu)勢(shì)可以有效地提高運(yùn)算速度及識(shí)別準(zhǔn)確率。同時(shí),該設(shè)計(jì)仍然有很多可拓展之處
對(duì)于Windows+GPU 版,能夠依賴成熟的音頻特征提取庫(kù)來(lái)獲取梅爾倒譜,因此該過(guò)程在單次采樣時(shí)幾乎感受不到耗時(shí)。但是對(duì)FPGA 開發(fā)板而言,即使使用的是PYNQ-Z2,能夠支持Linux 系統(tǒng),但由于其32 位的限制,一些PC 端能使用的庫(kù)功能無(wú)法正常調(diào)用。故針對(duì)音頻特征,雖然依照了梅爾倒譜提取的數(shù)學(xué)原理對(duì)其進(jìn)行功能復(fù)現(xiàn),但是效果并不是很好,占用時(shí)間較長(zhǎng)。關(guān)于這一點(diǎn),可以如聲紋識(shí)別一樣,利用FPGA 做加速運(yùn)算,同時(shí)可以對(duì)數(shù)學(xué)方法的代碼實(shí)現(xiàn)進(jìn)行優(yōu)化,進(jìn)而能減少時(shí)長(zhǎng)占用。