国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于FPGA卷積神經(jīng)網(wǎng)絡(luò)的人臉識(shí)別系統(tǒng)

2023-03-06 13:07吳雯麗陳治銘莫梓健趙元睿
物聯(lián)網(wǎng)技術(shù) 2023年2期
關(guān)鍵詞:池化人臉識(shí)別運(yùn)算

吳雯麗,陳治銘,莫梓健,趙元睿,齊 軒

(天津工業(yè)大學(xué) 電子與信息工程學(xué)院,天津 300387)

0 引 言

隨著人工智能的發(fā)展,基于邊緣計(jì)算的快速實(shí)時(shí)人臉識(shí)別成為重點(diǎn)研究方向,應(yīng)用包括國(guó)家安全、反恐、社區(qū)管理、考生身份驗(yàn)證等。邊緣計(jì)算是一種讓外圍終端進(jìn)行數(shù)據(jù)處理運(yùn)算的技術(shù),可以不在云端指揮下實(shí)現(xiàn)獨(dú)立工作,具有低延遲、高可用、高實(shí)時(shí)等優(yōu)勢(shì),因此卷積神經(jīng)網(wǎng)絡(luò)越來(lái)越多被應(yīng)用于邊緣計(jì)算環(huán)境,而FPGA也由于其高效率、低功耗等特性逐漸成為邊緣計(jì)算的理想平臺(tái)。在人臉識(shí)別的實(shí)現(xiàn)基礎(chǔ)上,研究人員也在尋求不同的算法以求硬件計(jì)算的更高速度,因此本文對(duì)人臉識(shí)別算法和與其對(duì)應(yīng)的卷積運(yùn)算加速電路進(jìn)行設(shè)計(jì),具有極高的日常使用和研究?jī)r(jià)值。

1 介 紹

1.1 卷積神經(jīng)網(wǎng)絡(luò)原理與結(jié)構(gòu)

卷積神經(jīng)網(wǎng)絡(luò)是一個(gè)多層前饋神經(jīng)網(wǎng)絡(luò),其設(shè)計(jì)參考了視覺(jué)神經(jīng)機(jī)制感受野的原理,一個(gè)神經(jīng)元可以響應(yīng)一部分覆蓋范圍內(nèi)的周圍單元[1]。一個(gè)卷積神經(jīng)網(wǎng)絡(luò)可以有數(shù)十層乃至數(shù)百層,每層的輸出神經(jīng)元都是下一層的輸入,各層學(xué)習(xí)檢測(cè)圖像的不同特征,可以從非常簡(jiǎn)單的特征開(kāi)始,然后越來(lái)越復(fù)雜,直到可以唯一定義目標(biāo)的特征為止。

在卷積神經(jīng)網(wǎng)絡(luò)中,卷積和池化這兩種不同類型的層通常在前端交替出現(xiàn),最后由一個(gè)或多個(gè)全連接層組成。卷積核初始時(shí)被賦予隨機(jī)數(shù),在網(wǎng)絡(luò)訓(xùn)練過(guò)程的不斷修正中,卷積核將學(xué)習(xí)得到合理的權(quán)重,用來(lái)提取圖片特征。卷積層后通常進(jìn)行一次激活操作引入非線性因素,本次網(wǎng)絡(luò)中使用ReLU激活函數(shù),這種激活函數(shù)計(jì)算簡(jiǎn)單并且高效,在隨機(jī)梯度下降的過(guò)程中可以明顯加快收斂速度,比maxout函數(shù)收斂快6倍。激活函數(shù)后連接池化層,池化又分為均值池化和最大值池化兩種形式,也被稱為子采樣,主要作用是對(duì)特征降維。卷積與池化大大簡(jiǎn)化了模型的復(fù)雜程度,減少了模型的參數(shù)數(shù)量。最后,各特征參數(shù)被送入全連接層,在這里所有特征聚集到一起,其實(shí)現(xiàn)是一種特殊的卷積操作,在整個(gè)網(wǎng)絡(luò)中起到分類器的作用,以辨別特征歸屬與類型。

1.2 研究背景及意義

2017年,梁云等人在Xilinx ZC706平臺(tái)上采用Winograd實(shí)現(xiàn)了ResNet的130.4 GOP/s,使用FFT實(shí)現(xiàn)了YOLO的201.1 GOP/s,通過(guò)減少卷積所需的乘法次數(shù)來(lái)提高有效的DSP效率,提出了在FPGA上進(jìn)一步加快運(yùn)算速度的卷積神經(jīng)網(wǎng)絡(luò)快速算法[2]。2018年,施杰喬等人詳細(xì)介紹了硬件實(shí)現(xiàn)CNN體系的基本結(jié)構(gòu),在DE2-115開(kāi)發(fā)板上實(shí)現(xiàn)了面部識(shí)別的CNN體系,識(shí)別率達(dá)93%[3];李碩在Zynq-7000芯片上實(shí)現(xiàn)了張量神經(jīng)網(wǎng)絡(luò)的人臉識(shí)別,雖然損失了識(shí)別率,但減少了參數(shù)數(shù)量,最終達(dá)到每張圖片32 ms的識(shí)別時(shí)間,識(shí)別率為95%[4]。2021年,王詠星等人介紹了“FPGA+ARM”架構(gòu)的數(shù)字圖像處理系統(tǒng)設(shè)計(jì),提出了實(shí)時(shí)性高的圖像采集和處理實(shí)現(xiàn)方法[5]。由上述研究成果可以了解到,深度學(xué)習(xí)理論和卷積運(yùn)算加速器在硬件加速方面較為火熱,并且近年有關(guān)FPGA圖像識(shí)別的關(guān)鍵詞出現(xiàn)頻率較高[6],有進(jìn)一步提高卷積運(yùn)算加速和硬件加速的必要。

2 CNN體系結(jié)構(gòu)

CNN離線訓(xùn)練,F(xiàn)PGA主要用于加速推理階段[2]。故該體系結(jié)構(gòu)在Python上采用TensorFlow搭建。CNN應(yīng)有優(yōu)越的識(shí)別能力和適合硬件的結(jié)構(gòu)[7],如圖1所示,此結(jié)構(gòu)共包含3個(gè)卷積層、3個(gè)池化層、1個(gè)全連接層和1個(gè)輸出層。

圖1 CNN體系圖

在CNN所有層中,卷積層占運(yùn)算資源的90%以上,屬于主要計(jì)算部分。卷積層的主要作用是對(duì)圖片的每一個(gè)特征進(jìn)行局部感知并提取抽象特征。采用滑窗操作可以保證局部旋轉(zhuǎn)不變性和唯一不變性,有效提取人臉輪廓信息,經(jīng)過(guò)機(jī)器學(xué)習(xí)的多次訓(xùn)練具有很強(qiáng)的分析能力[8]。具體操作如下:

池化層模仿人的視覺(jué)系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行降維,是對(duì)二維數(shù)據(jù)樣本降采樣的操作[9],具有特征不變性,不關(guān)心特征的具體位置而關(guān)心特征是否存在,相當(dāng)于去掉了小部分不重要特征,同時(shí)2×2的池化可以減少1/4參數(shù)數(shù)量,對(duì)防止過(guò)擬合起到一定作用。常見(jiàn)的池化操作有最大池化和平均池化兩種類型,實(shí)踐證明,最大池化對(duì)提取特征紋理的效果更加突出,因此文中采用了步長(zhǎng)為2的最大池化,用公式表示為:

式中:p(i,j)in表示輸入特征圖的第i行第j列數(shù)據(jù);pout表示池化結(jié)果。

再由全連接層對(duì)特征整合,全連接過(guò)程可通過(guò)卷積實(shí)現(xiàn),具體過(guò)程是以同特征圖大小相同的卷積核對(duì)特征圖進(jìn)行卷積運(yùn)算。最后,兩通道數(shù)據(jù)依次與權(quán)重相乘相加可在輸出層得到結(jié)果。

根據(jù)以上結(jié)構(gòu),設(shè)計(jì)得到CNN的硬件結(jié)構(gòu)如圖2所示。該結(jié)構(gòu)經(jīng)流水線設(shè)計(jì)串聯(lián),由3個(gè)卷積模塊、3個(gè)池化模塊,1個(gè)全連接模塊,1個(gè)輸出模塊和許多存儲(chǔ)器組成。

圖2 CNN硬件結(jié)構(gòu)

2.1 padding操作

通常進(jìn)行卷積操作時(shí),會(huì)導(dǎo)致特征圖縮小(n-1)行(n-1)列數(shù)據(jù),n為卷積核大小。如卷積核為3×3時(shí),特征圖會(huì)縮小2行2列。為保證卷積操作前后特征圖尺寸一致,需在卷積之前采用padding操作為特征圖在外圍補(bǔ)0,效果如圖3所示。硬件上該模塊的輸入包含時(shí)鐘、復(fù)位和輸入數(shù)據(jù),輸出包含RAM讀寫標(biāo)志位和輸出數(shù)據(jù),通過(guò)狀態(tài)機(jī)實(shí)現(xiàn),將輸入數(shù)據(jù)分為第一行,中間行和最后行3個(gè)狀態(tài),第一行和最后一行全部補(bǔ)位0,中間行在數(shù)據(jù)前后各添一位0。

圖3 padding效果圖

2.2 卷積模塊硬件結(jié)構(gòu)和池化模塊硬件結(jié)構(gòu)

本文借鑒LineBuffer結(jié)構(gòu)[10]完成實(shí)現(xiàn)模塊?;安糠植捎靡莆患拇嫫鲗?shí)現(xiàn),卷積中采用3個(gè)抽頭,池化則用2個(gè)抽頭。

對(duì)于卷積的硬件實(shí)現(xiàn),選擇合理的計(jì)算順序非常重要。本文采用多張?zhí)卣鲌D同時(shí)與第n組卷積核卷積,所有特征圖卷積完成后更換下一組卷積核的計(jì)算順序,依次類推,最終相加即可得到卷積結(jié)果,比一張?zhí)卣鲌D先與多個(gè)卷積核卷積,再更換特征圖的方式更簡(jiǎn)便、更快捷。其中,一張?zhí)卣鲌D的卷積模塊如圖4所示。特征圖數(shù)據(jù)經(jīng)過(guò)流動(dòng)進(jìn)入移位寄存器,每次時(shí)鐘上升沿到來(lái),滑窗內(nèi)的9個(gè)特征圖數(shù)據(jù)就更新一次,更新數(shù)據(jù)傳入乘法器與內(nèi)存中所存權(quán)值相乘,最后在加法器中依次相加再加上偏置數(shù)據(jù)得到卷積結(jié)果,三行數(shù)據(jù)計(jì)算完成后,輸入處傳入下三行數(shù)據(jù)繼續(xù)計(jì)算,直到整張圖片輸入完畢。

圖4 卷積結(jié)構(gòu)

池化模塊與卷積模塊在滑窗部分相似。如圖5所示。每?jī)尚刑卣鲌D數(shù)據(jù)進(jìn)入滑窗,圖中比較器模塊中包含3個(gè)小比較器,滑窗內(nèi)數(shù)據(jù)通過(guò)比較得到最大值輸出,兩行計(jì)算完成后輸入處傳入下兩行數(shù)據(jù),依次類推得到整張圖片結(jié)果,以達(dá)到最大池化效果。

圖5 池化結(jié)構(gòu)

2.3 全連接模塊硬件結(jié)構(gòu)

全連接層的實(shí)現(xiàn)其實(shí)是一種特殊的卷積,卷積的操作我們已經(jīng)非常熟悉,實(shí)現(xiàn)難度并不高,但是想要獲得較高的運(yùn)行速度和合理的數(shù)據(jù)分配,則需要仔細(xì)考慮優(yōu)化問(wèn)題。深鑒科技文章中提及的SVD方法可以較好減小權(quán)重矩陣,且SVD方法作為一種軟件算法也可以在前端使用Python或MATLAB等快速實(shí)現(xiàn),可行性高,但是該方法處理后的權(quán)重矩陣仍然需要非常大的存儲(chǔ)空間。因此在硬件實(shí)現(xiàn)中如何安排計(jì)算順序和訪存方法很重要。

本文中將全連接層安排如下:全連接層中每個(gè)神經(jīng)元都與前一層相連,仍通過(guò)卷積操作得到結(jié)果,具體操作如圖6所示。用512個(gè)8×8×64的卷積核對(duì)64張8×8特征圖進(jìn)行卷積,每張?zhí)卣鲌D與對(duì)應(yīng)卷積核相乘,64張乘積結(jié)果對(duì)應(yīng)位置求和,最后加上偏置值就可以得到一個(gè)全連接層的輸出,這樣更換卷積核循環(huán)512次,即可得到全連接模塊的512個(gè)輸出。

圖6 全連接結(jié)構(gòu)

2.4 輸出層硬件結(jié)構(gòu)

輸出層中的每個(gè)特征節(jié)點(diǎn)都有一定的權(quán)重,所有特征的權(quán)重共同決定輸入所屬分類的權(quán)重或概率。輸出層用于計(jì)算分類概率,將全連接模塊得到的512個(gè)數(shù)據(jù)通過(guò)計(jì)算得到2個(gè)數(shù)值,根據(jù)數(shù)值大小判斷是否是本人人臉。操作過(guò)程如圖7所示,2個(gè)含512個(gè)數(shù)據(jù)的權(quán)值緩存器與全連接層數(shù)據(jù)并行依次相乘相加,再加上偏置值,最后得到2個(gè)結(jié)果,傳入比較器中得到最終結(jié)果。

圖7 輸出層結(jié)構(gòu)

3 并行度設(shè)計(jì)

在神經(jīng)網(wǎng)絡(luò)的前向傳播過(guò)程中,參數(shù)數(shù)量龐大,操作過(guò)程復(fù)雜,非常適合用FPGA加速發(fā)展。FPGA最大的優(yōu)點(diǎn)是可以并行處理數(shù)據(jù),實(shí)現(xiàn)這一點(diǎn)的關(guān)鍵是使用FPGA的BRAM來(lái)緩存和處理數(shù)據(jù)。因此,為了充分發(fā)揮FPGA并行流水線處理的優(yōu)勢(shì),算法運(yùn)用并行流水線式很有必要。設(shè)計(jì)中采用Altera公司出品的Stratix IV系列EP4SGX230KF40C2芯片,芯片中DSP資源有限,共含有1 288個(gè)乘法器,支持2個(gè)18 bit的定點(diǎn)乘法,14 283 Kb的片內(nèi)存儲(chǔ)空間。本次設(shè)計(jì)采用流水線設(shè)計(jì),涉及大量卷積計(jì)算,每張并行圖片需要9個(gè)乘法器支持,中間運(yùn)算結(jié)果也較多,故需對(duì)各層并行度進(jìn)行分配,在設(shè)計(jì)好時(shí)序的情況下,本層可以同時(shí)對(duì)多張?zhí)卣鲌D采用統(tǒng)一的卷積核運(yùn)算,結(jié)果直接送入加法器中,節(jié)省緩存時(shí)間。

為保障資源的高利用率,在卷積層1中對(duì)3張圖片進(jìn)行并行計(jì)算;卷積層2中對(duì)32張圖片進(jìn)行并行計(jì)算;卷積層3中對(duì)64張圖片進(jìn)行并行計(jì)算;全連接層對(duì)2個(gè)通道的8×8圖片進(jìn)行并行計(jì)算;輸出層同時(shí)對(duì)兩行矩陣依次對(duì)應(yīng)相乘。其中,卷積層和池化層的并行設(shè)計(jì)如圖8所示。

圖8 卷積、池化并行結(jié)構(gòu)

其中,“/”表示同時(shí)輸入權(quán)重1和偏置1,可以得到特征圖1;同時(shí)輸入權(quán)重2和偏置2,可以得到特征圖2,依次類推。需要說(shuō)明的是,權(quán)重1表示的是時(shí)刻1輸入的一組權(quán)重,不同的特征圖接收的是組中不同權(quán)重。

4 實(shí)驗(yàn)結(jié)果

本文使用LFW人臉數(shù)據(jù)庫(kù)中13 991張人臉圖片以及自行采集的真人10 000張照片作為數(shù)據(jù)集,設(shè)計(jì)的CNN架構(gòu)在TensorFlow上訓(xùn)練,將訓(xùn)練后模型的權(quán)重和偏置導(dǎo)出并存入RAM中。文獻(xiàn)[11]中指出,16 bit定點(diǎn)數(shù)據(jù)可以滿足加速器計(jì)算精度的要求,因此本文中模型參數(shù)、輸入輸出數(shù)據(jù)和中間結(jié)果均處理為16 bit定點(diǎn)數(shù)參與運(yùn)算。在Quartus Prime Standard 18.0工具中設(shè)計(jì)Verilog腳本,在FPGA上實(shí)現(xiàn)網(wǎng)絡(luò)結(jié)構(gòu),目標(biāo)器件為Stra1tix IV系列EP4SGX230KF40C2芯片。將需要識(shí)別的人臉圖片分為3張64×64大小的RGB圖像并做歸一化處理,存入ROM以作輸入。人臉識(shí)別平臺(tái)搭建如圖9所示。

圖9 人臉識(shí)別平臺(tái)搭建

為說(shuō)明FPGA對(duì)人臉識(shí)別功能的實(shí)現(xiàn)情況,對(duì)其做功能驗(yàn)證。對(duì)輸入圖片采用本文的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)識(shí)別,各操作工作狀態(tài)如下。

(1)padding

圖10、圖11中變量hang表示輸入數(shù)據(jù)屬于的行數(shù);state_c表示狀態(tài)機(jī)當(dāng)前狀態(tài),1為第一行,2為中間行,4為最后一行;可以看出,隨著行數(shù)變化,當(dāng)前狀態(tài)也在變化,并且輸出data_out在第一行和結(jié)尾行輸出為0。圖12中變量hang對(duì)應(yīng)的輸出data_out在該行數(shù)據(jù)前后都添加了0。

圖10 padding仿真圖(1)

圖11 padding仿真圖(2)

圖12 卷積仿真

(2)卷積層

圖12中左側(cè)兩框表示移位寄存器采到的卷積核,右側(cè)兩框表示該行末尾舍掉的卷積核,舍掉的卷積核不參與運(yùn)算,從參數(shù)data1_row(第一行卷積核的合并數(shù)據(jù))、data2_row(第二行卷積核的合并數(shù)據(jù))和data3_row(第三行卷積核的合并數(shù)據(jù))看出,錯(cuò)誤的卷積核沒(méi)有被送到卷積核參數(shù)中,并且輸出norm_result正常運(yùn)行,完成了卷積功能。

(3)池化層

圖13中變量out_da1和out_da2表示最后要進(jìn)行比較的兩個(gè)數(shù),輸出out_data會(huì)在下一個(gè)時(shí)鐘將兩數(shù)中較大的一方輸出,完成最大池化操作。

圖13 池化層仿真

(4)輸出層

圖14中,in_data1是輸入圖片特征的第一條通道數(shù)據(jù),in_data2是輸入圖片特征的第二條通道數(shù)據(jù);weight是輸出層權(quán)重,bia1是通道一的偏置,bia2是通道二的偏置;outflag是輸出標(biāo)志位,由00變?yōu)?1時(shí)表示所有計(jì)算已經(jīng)完成,可以輸出最終結(jié)果;out_data是最終結(jié)果??梢钥闯觯谶\(yùn)算完成后,標(biāo)志位發(fā)生變化的下一個(gè)時(shí)鐘,out_data正確輸出了最終結(jié)果。

圖14 輸出層仿真

表1展示了人臉識(shí)別系統(tǒng)每層的資源利用情況,可以看出,BRAM和DSP資源主要集中在卷積模塊,因?yàn)檫@些地方的數(shù)據(jù)量和運(yùn)算量較大,必然會(huì)消耗更多存儲(chǔ)資源和運(yùn)算資源[9]。

表1 資源利用表

測(cè)試時(shí),先將模型數(shù)據(jù)和圖片數(shù)據(jù)存入FPGA,將420張測(cè)試圖片依次輸入,完成運(yùn)算后最終得到正確圖像的數(shù)量。最后,正確識(shí)別圖片413張,誤識(shí)別7張,識(shí)別率為98.3%,總計(jì)算時(shí)間為8.8 s,每張圖片的識(shí)別時(shí)間為21 ms,而PC上每張照片的識(shí)別時(shí)間為32 ms,可以看出,加速效果較好。

5 結(jié) 語(yǔ)

本文提出了一個(gè)用于人臉識(shí)別的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),并將其在FPGA上實(shí)現(xiàn)。實(shí)現(xiàn)過(guò)程中對(duì)卷積神經(jīng)網(wǎng)絡(luò)的卷積層、池化層、全連接層、輸出層使用Verilog HDL語(yǔ)言搭建硬件結(jié)構(gòu),并且探究設(shè)計(jì)了各層內(nèi)的并行性,以提高硬件資源利用率。測(cè)試表明,模型準(zhǔn)確率達(dá)98.3%,證明本文所設(shè)計(jì)的結(jié)構(gòu)有實(shí)用價(jià)值。

猜你喜歡
池化人臉識(shí)別運(yùn)算
面向神經(jīng)網(wǎng)絡(luò)池化層的靈活高效硬件設(shè)計(jì)
基于Sobel算子的池化算法設(shè)計(jì)
重視運(yùn)算與推理,解決數(shù)列求和題
人臉識(shí)別 等
有趣的運(yùn)算
揭開(kāi)人臉識(shí)別的神秘面紗
基于卷積神經(jīng)網(wǎng)絡(luò)和池化算法的表情識(shí)別研究
基于類獨(dú)立核稀疏表示的魯棒人臉識(shí)別
基于K-L變換和平均近鄰法的人臉識(shí)別
达孜县| 呼伦贝尔市| 阿克苏市| 精河县| 合江县| 龙江县| 芦山县| 原平市| 龙海市| 湖口县| 城口县| 色达县| 若羌县| 收藏| 琼中| 共和县| 山丹县| 徐闻县| 余干县| 新建县| 积石山| 天柱县| 万年县| 丰原市| 墨竹工卡县| 南木林县| 信阳市| 漾濞| 郴州市| 阿合奇县| 宜阳县| 彭山县| 河津市| 汉川市| 双桥区| 五家渠市| 文水县| 闻喜县| 岳普湖县| 理塘县| 奉化市|