郭新 羅程方 鄧愛文
聲紋作為生物特征識別中的一種行為特征,因其蘊(yùn)含豐富的個(gè)人信息,比如性別、年齡、情緒、語種等,被作為身份識別的一種方式,且因其偽造難度高、隱私性弱、辨識性強(qiáng)等優(yōu)勢,近些年來引起了業(yè)界廣泛的關(guān)注.2018年被稱為“聲紋元年”,是聲紋技術(shù)邁向產(chǎn)業(yè)化的重要轉(zhuǎn)折點(diǎn),這一年,中國人民銀行發(fā)布了《移動(dòng)金融基于聲紋識別的安全應(yīng)用技術(shù)規(guī)范》(JRT0164—2018)[1].聲紋識別技術(shù)在國內(nèi)正逐漸被應(yīng)用于金融、社保、公安、智能家居等重要領(lǐng)域.
在學(xué)術(shù)界,聲紋識別又稱說話人識別,它是提取語音信號中能夠表征說話人個(gè)性特征的信息,利用傳統(tǒng)機(jī)器學(xué)習(xí)或深度學(xué)習(xí),自動(dòng)地實(shí)現(xiàn)說話人身份識別的一種生物特征識別技術(shù).聲紋識別(Speaker Recognition,SR)分為聲紋辨認(rèn)(Speaker Identification,SI)和聲紋確認(rèn)(Speaker Verification,SV)[2],其中聲紋辨認(rèn)是1∶n任務(wù),聲紋確認(rèn)是1∶1任務(wù),本文算法主要是基于SV的,整個(gè)系統(tǒng)的實(shí)現(xiàn)是兩者兼有.目前,說話人識別應(yīng)用的痛點(diǎn)是短時(shí)語音和基于開放環(huán)境的噪聲影響,這就是本文的主要研究內(nèi)容之一.
20世紀(jì)90年代,聲紋識別最經(jīng)典的模型是GMM-UBM模型及i-vector,在深度學(xué)習(xí)之前,它們一直是占據(jù)業(yè)界的主流技術(shù).近些年來深度學(xué)習(xí)下的聲紋研究已呈現(xiàn)愈來愈繁榮的局面,從深度卷積網(wǎng)絡(luò)下的d-vector技術(shù)到x-vector技術(shù)[3],尤其x-vector是當(dāng)前聲紋領(lǐng)域中主流的模型框架.x-vector框架下的主要研究內(nèi)容包括聲音預(yù)處理、特征提取層、特征編碼層和損失函數(shù)的優(yōu)化.對于聲音預(yù)處理,常用的是MFCC(Mel-scale Frequency Cepstral Coefficients)和Fbank(FilterBank),當(dāng)然也可以使用原始語音,但原始語音的訓(xùn)練需要強(qiáng)大的內(nèi)存和算力,比較耗費(fèi)成本;特征提取層網(wǎng)絡(luò)主要是TDNN[4]、DCNN[5]和RNN[6];特征編碼層的作用是將不等長幀級別的語音特征轉(zhuǎn)換成等長的語句級特征,以方便特征的比對,目前主流的編碼層融合技術(shù)有統(tǒng)計(jì)池化SP[7]、 ASP[8]、NetVLAD[9]及GhostVLAD[9]等;損失函數(shù)方面除了應(yīng)用分類損失函數(shù)外,還根據(jù)聲紋模型的本質(zhì)結(jié)合了度量損失函數(shù)[10],也取得了優(yōu)異的性能.
本文的工作主要是設(shè)計(jì)并實(shí)現(xiàn)一套基于深度學(xué)習(xí)模型下聲紋識別系統(tǒng).該系統(tǒng)的算法是基于端到端的深度聲紋模型,能實(shí)現(xiàn)特征類間距離增大、類內(nèi)距離減小的目標(biāo),由此改善短時(shí)語音和混疊噪聲影響下聲紋識別模型的可辨別性,且參數(shù)量較少,更適合部署在嵌入式硬件上,同時(shí),性能依然能夠與目前最優(yōu)秀的性能比肩.硬件方面是利用Raspberry Pi實(shí)現(xiàn)實(shí)時(shí)、準(zhǔn)確地操作,以得到良好的用戶體驗(yàn),達(dá)到實(shí)際場景的應(yīng)用需求.
本文的聲紋識別是基于深度學(xué)習(xí)的,深度學(xué)習(xí)聲紋的框架可以分為聲紋錄入和識別兩個(gè)階段.深度學(xué)習(xí)聲紋識別系統(tǒng)的框架如圖1所示.
圖1 深度學(xué)習(xí)聲紋識別系統(tǒng)框架Fig.1 Framework of deep learning based SR system
如圖1所顯示,聲紋模型的建立需要大量的訓(xùn)練實(shí)驗(yàn),才能構(gòu)建合適的模型,聲紋建模視為訓(xùn)練階段,聲紋錄入和識別階段就是測試階段.
本文目標(biāo)是設(shè)計(jì)并制作一個(gè)能實(shí)際應(yīng)用的聲紋識別系統(tǒng),可以實(shí)現(xiàn)以下功能:
1) 實(shí)現(xiàn)用戶注冊和身份識別功能;
2) 實(shí)現(xiàn)開放場景下聲紋識別的實(shí)時(shí)性,即短時(shí)內(nèi)完成聲音采集、注冊和識別;
3) 實(shí)現(xiàn)可視化識別結(jié)果;
4) 實(shí)現(xiàn)脫機(jī)離線運(yùn)行功能.
要實(shí)現(xiàn)以上功能需求,需設(shè)計(jì)聲紋識別系統(tǒng)的軟件部分和硬件部分.
該軟件系統(tǒng)主要包含聲音采集模塊、聲音預(yù)處理模塊、特征提取模塊、注冊與識別模塊和結(jié)果輸出模塊這五部分.為了充分發(fā)揮系統(tǒng)性能和方便代碼維護(hù)和更新,本軟件使用了多線程的編寫方式.聲紋識別主要分為三個(gè)線程:聲音采集子線程、主線程、注冊和識別子線程.聲音采集子線程負(fù)責(zé)調(diào)用麥克風(fēng)陣列采集聲音,然后觸發(fā)子函數(shù)將聲音回傳到主線程中.主線程負(fù)責(zé)整個(gè)軟件程序的工作邏輯和各種工具函數(shù)調(diào)用,同時(shí)負(fù)責(zé)GUI的繪圖和刷新、聲音采樣和預(yù)處理.注冊和識別子線程負(fù)責(zé)提取聲音特征、特征匹配和識別判斷.軟件系統(tǒng)總體流程如圖2所示.
圖2中聲紋識別模型的好壞直接由聲紋識別的算法決定,如何設(shè)計(jì)一個(gè)優(yōu)秀的算法是本工作的關(guān)鍵.
圖2 聲紋識別軟件總體流程Fig.2 Overall flow chart of the SR software
該聲紋識別任務(wù)的算法框架主要包括四個(gè)部分:輸入特征幀、主干網(wǎng)絡(luò)(特征提取器)、編碼層和損失函數(shù),如圖3所示.其中輸入音頻為變長的幀級特征,經(jīng)過預(yù)處理后,成為特征為40維的對數(shù)梅爾頻譜特征,即Fbank.
圖3 聲紋系統(tǒng)算法框架Fig.3 Algorithm framework of the SR system
2.2.1 主干網(wǎng)絡(luò)
主干網(wǎng)絡(luò),也稱幀級別特征提取器.該網(wǎng)絡(luò)由Squeeze-and-Excitation(SE)模塊[11]和快速resnet34網(wǎng)絡(luò)[12]組成.主干網(wǎng)絡(luò)可接受任意長度的語音作為輸入,并產(chǎn)生任意長度的幀級別特征.Fast-ResNet34結(jié)構(gòu)與原始34層ResNet網(wǎng)絡(luò)結(jié)構(gòu)相同.但是,為了降低計(jì)算成本,Fast-ResNet34中的每個(gè)殘差模塊僅使用原始通道數(shù)量的1/4,以此作為特征提取器,可以有效提取局部多幀聲學(xué)特征.
2.2.2 編碼層
SV中編碼層的作用就是編碼聲紋特征為特定的語句長度,即將變長的幀級特征轉(zhuǎn)化成定長的語句級特征,以最大程度保留整體特征,這里使用差分化編碼方式,以捕捉特征幀之間的靜態(tài)特征和動(dòng)態(tài)特征,差分化編碼層結(jié)構(gòu)如圖4所示.
圖4 差分化輸入的編碼結(jié)構(gòu)Fig.4 Encoding structure of differential input
圖4中的delta是差分化編碼,差分化公式可表示為
(1)
NeXtVLAD原本是用在視頻壓縮上的一種編碼方法,本文將其引入到SV任務(wù)中,實(shí)驗(yàn)結(jié)果表明NeXtVLAD在聲紋識別中也具有優(yōu)秀的表現(xiàn)[5].NeXtVLAD[13]與NetVLAD[9]性能相似,但模型參數(shù)大大減少,提升了訓(xùn)練的收斂速度.
如圖4所示,假設(shè)特征提取器輸出的隱藏層特征為fl,那么輸入編碼層的特征經(jīng)過一階差分和二階差分的拼接,輸入編碼層的隱藏特征可以表示為
(2)
式中Δ1代表一階差分,Δ2代表二階差分.
那么經(jīng)過編碼層的特征向量可表示為
yf=fNeXtVLAD(hf).
(3)
經(jīng)過一個(gè)全連接后,得到聲紋特征embedding的表示為
x=FC(yf).
(4)
2.2.3 損失函數(shù)
聲紋識別在實(shí)際應(yīng)用場景中是開集任務(wù),兼具分類和小樣本學(xué)習(xí)兩種屬性,本文使用組合函數(shù)[5],即融合了基于間隔的分類損失函數(shù)LAMS[14]和基于小樣本的原型余弦損失函數(shù)LCP[15],如式(5)所示:
L=LCP+βLAMS,
(5)
式中
(6)
(7)
N代表一個(gè)minibatch中說話人的個(gè)數(shù),eSn,n和eSn,j代表相似矩陣,θyi代表目標(biāo)角度,權(quán)重β=1時(shí)可以達(dá)到最好的效果,s是一個(gè)縮放因子,設(shè)為30.
損失函數(shù)LAMS是明確鼓勵(lì)聲紋類間距離拉大,LCP可以在聲紋特征中找到與目標(biāo)樣本接近的原型來實(shí)現(xiàn)度量空間的優(yōu)化,使得同類之間距離拉小,同時(shí)原型網(wǎng)絡(luò)也可以很好地處理訓(xùn)練集中未曾出現(xiàn)的樣本歸屬問題,大大提升了模型的魯棒性.
聲紋識別系統(tǒng)的硬件主要包括樹莓派(Raspberry Pi,RPi)核心板、電源模塊、麥克風(fēng)和顯示屏.該系統(tǒng)算法是基于Ubuntu系統(tǒng)環(huán)境進(jìn)行開發(fā)、調(diào)試和部署進(jìn)行的.其結(jié)構(gòu)示意和實(shí)物圖分別如圖5和圖6所示.
圖5 聲紋識別硬件結(jié)構(gòu)示意圖Fig.5 Schematic of the SR hardware
圖6 聲紋識別系統(tǒng)實(shí)物圖Fig.6 Physical picture of the SR system
其中Raspberry Pi核心板是4 GB、4B的配置套件,具有高計(jì)算能力和價(jià)格低廉等特點(diǎn).其CPU使用的是ARM的Cortex-A系列種的A72,是ARM首次采用64位ARM v8-A的四核處理器,時(shí)鐘頻率為1.5 GHz,樹莓派4B的GPIO引腳的速度50.8 kHz,比樹莓派3B提升了2倍,性能提升的同時(shí)價(jià)格并沒有明顯上漲;電源使用可以支持樹莓派的UPS板+100 00 mA電池的擴(kuò)展板;麥克風(fēng)利用支持樹莓派的ReSpeaker Pi的麥克風(fēng)陣列,可實(shí)現(xiàn)3 m拾音,支持雙麥克風(fēng),聲音更加清晰;顯示屏使用5寸的IPS電容觸摸屏,分辨率800×480,可以實(shí)現(xiàn)PWM亮度調(diào)節(jié).
聲紋識別系統(tǒng)的人機(jī)交互界面GUI是基于PyQt5 開發(fā)的,PyQt5 是基于圖形程式框架Qt5 的python 接口.該識別系統(tǒng)的人機(jī)交互界面是基于實(shí)際需求而設(shè)計(jì)的,力求簡潔大方、易于操作.如圖7a和7b所示.
圖7 聲紋識別系統(tǒng)人機(jī)交互界面Fig.7 GUI of the SR system
該交互界面結(jié)構(gòu)框架分為系統(tǒng)登錄模塊、用戶信息管理模塊、聲紋信息管理模塊、聲紋參數(shù)配置模塊和識別結(jié)果輸出模塊.通過對聲紋交互系統(tǒng)的設(shè)計(jì)與部署,極大程度地提高了聲紋管理的效率,更好地促進(jìn)了聲紋技術(shù)的發(fā)展.
下面通過實(shí)驗(yàn)驗(yàn)證所提算法的先進(jìn)性以及系統(tǒng)的有效性和實(shí)用性.
在說話人識別中,常以FAR為橫坐標(biāo)、FRR為縱坐標(biāo)繪制成一條曲線(ROC曲線),當(dāng)此曲線同45°角,即y=x直線相交時(shí)候交點(diǎn)對應(yīng)的值,稱為EER,此時(shí)FRR=FAR,此評價(jià)指標(biāo)最常用于說話人識別中,其中EER是錯(cuò)誤拒絕率FRR(False Rejection Rate)和錯(cuò)誤接收率FAR(False Acceptance Rate)相等時(shí)的錯(cuò)誤率,通常EER值越低代表性能越好.
表1顯示了本文算法在VoxCeleb-1和VoxCeleb-2上性能和模型參數(shù)的優(yōu)越性.從表1可知,本文的基于差分編碼的聲紋識別算法在公開數(shù)據(jù)集VoxCeleb-1和VoxCeleb-2都取得優(yōu)異的性能,在數(shù)據(jù)集VoxCeleb-1上,精準(zhǔn)度比基準(zhǔn)線(系統(tǒng)為NeXtVLAD+AAMS)下降22%,參數(shù)量下降25%;在數(shù)據(jù)集VoxCeleb-2上,精準(zhǔn)度比基準(zhǔn)線[16]下降25.9%,參數(shù)量下降83.1%,該系統(tǒng)在算法上基本達(dá)到了如今聲紋系統(tǒng)單尺度結(jié)構(gòu)下的最優(yōu)水平,且模型參數(shù)小,更合適部署在嵌入式設(shè)備上.
表1 各系統(tǒng)的性能和模型參數(shù)對比Table 1 Comparison of performance and size of model parameters between different systems
在本系統(tǒng)上對12個(gè)年齡段在18~60歲的人,在5種環(huán)境下,進(jìn)行驗(yàn)證性實(shí)驗(yàn),每種環(huán)境每個(gè)時(shí)長測試3次,進(jìn)行了共計(jì)540次的實(shí)驗(yàn),那么每種情況就是進(jìn)行了36次實(shí)驗(yàn),表2中百分?jǐn)?shù)表示準(zhǔn)確率,即準(zhǔn)確的次數(shù)除以36.實(shí)驗(yàn)結(jié)果如表2所示.
表2 多種環(huán)境下聲紋識別效果Table 2 Performances of speaker recognition under various noisy scenarios %
由表2可看出,在輕微噪聲情況下,室內(nèi)室外的識別效果均達(dá)到90.1%以上,尤其是在時(shí)長大于6 s的情況下,本聲紋識別的準(zhǔn)確率都在94.4%以上,可以達(dá)到實(shí)際應(yīng)用的需求.室內(nèi)較大噪聲的效果比室外噪聲差,這是因?yàn)樵谑覂?nèi)測試語音受混響影響比較大,短時(shí)語音(3 s)的準(zhǔn)確率82.5%,這是比較極端的情況,實(shí)際場景應(yīng)用中,還是比較少見的.
本文針對現(xiàn)實(shí)應(yīng)用場景下短時(shí)語音和混疊有噪聲情況下聲紋識別準(zhǔn)確性低問題,提出了一種改進(jìn)的深度學(xué)習(xí)下聲紋識別算法并將該模型部署到了嵌入式設(shè)備中,為實(shí)現(xiàn)聲紋技術(shù)的落地提供了助力.該系統(tǒng)算法方面,主要改進(jìn)了編碼層和損失函數(shù),結(jié)合差分化方式處理特征提取器輸出的幀級特征,它對幀級特征中的靜態(tài)聲紋特征和動(dòng)態(tài)聲紋特征進(jìn)行建模,將差分處理后的特征輸入到編碼層,并在編碼層使用NeXtVLAD技術(shù);此外,本文還融合了基于小樣本的余弦-原型度量損失函數(shù)和AM-Softmax分類損失函數(shù),使得模型在特征空間中同類特征距離盡可能小,異類特征之間的距離盡可能遠(yuǎn),即增強(qiáng)了聲紋特征的可辨識性,這使得算法性能達(dá)到當(dāng)前最優(yōu)水平.硬件方面,本文使用性價(jià)比超高的Raspberry Pi作為控制核心,進(jìn)行系統(tǒng)部署,且能夠快速實(shí)現(xiàn)推理.實(shí)驗(yàn)結(jié)果表明,在多種開放場景下,這種改進(jìn)的聲紋識別系統(tǒng)能夠?qū)崟r(shí)、準(zhǔn)確地完成聲紋識別任務(wù),可以達(dá)到實(shí)際應(yīng)用的要求.
南京信息工程大學(xué)學(xué)報(bào)2021年5期