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

?

高性能人臉識別加速器優(yōu)化設(shè)計及FPGA實現(xiàn)

2020-11-18 09:14張偉華
計算機工程與應用 2020年22期
關(guān)鍵詞:數(shù)組加速器人臉識別

吳 進,張偉華,席 萌,代 巍

西安郵電大學 電子工程學院,西安710121

1 引言

卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是人工神經(jīng)網(wǎng)絡(luò)的一種[1],被廣泛應用于圖像識別,其缺點是運行期間會消耗越來越多的邏輯資源和存儲器帶寬,因此基于神經(jīng)網(wǎng)絡(luò)的計算要求,需要對不同的神經(jīng)網(wǎng)絡(luò)提出不同的加速方法[2]?,F(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)被廣泛用于CNN 硬件加速的實現(xiàn),特別是在移動和嵌入式設(shè)備上,為了解決FPGA平臺未能充分利用邏輯資源和內(nèi)存帶寬,以及優(yōu)化不全面、不能很好地實現(xiàn)加速效果的問題,本文設(shè)計了一個基于FPGA的人臉識別神經(jīng)網(wǎng)絡(luò)加速器,并且和已有的GPU 實現(xiàn)加速的結(jié)果進行比較,在功耗以及神經(jīng)網(wǎng)絡(luò)計算時間方面都呈現(xiàn)更加理想的結(jié)果。

2 卷積神經(jīng)網(wǎng)絡(luò)模型

人臉識別中經(jīng)典LeNet-5神經(jīng)網(wǎng)絡(luò)模型示意圖如圖1所示,該網(wǎng)絡(luò)模型由2個卷積層、2個池化層、3個全連接層構(gòu)成,其中卷積層與池化層交替出現(xiàn)。假設(shè)使用3×3大小的卷積核進行圖像的卷積運算,對于神經(jīng)網(wǎng)絡(luò)的各個層采用不同的卷積核進行圖像特征提取。降采樣時的縮放程度決定了池化層提取出特征的粗糙程度,均使用大小為2的縮放因子對特征圖進行縮放,從而完成池化層操作。本文采用平均值池化方式完成池化操作,從而實現(xiàn)對CNN 網(wǎng)絡(luò)模型的加速,即對2×2 大小的鄰域求平均值,進而生成一個新的像素點,即所求的目標像素點。

圖1 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示意圖

3 CNN加速器設(shè)計

3.1 系統(tǒng)架構(gòu)

圖2 所示為嵌入式平臺上的人臉識別加速器系統(tǒng)架構(gòu),Xilinx Zynq 系列平臺為ARM+FPGA 的異構(gòu)平臺,ZC706平臺上的PS部分實現(xiàn)整個系統(tǒng)的調(diào)度功能,PS 端的DDR 用于存儲外部數(shù)據(jù),卷積神經(jīng)網(wǎng)絡(luò)加速器由FPGA(PL部分)實現(xiàn)。

圖2 加速器系統(tǒng)架構(gòu)示意圖

3.2 HLS優(yōu)化

在FPGA 平臺上進行CNN 加速器設(shè)計時通常會遇到片上資源不足、片外帶寬不夠大、對處理的數(shù)據(jù)進行重復利用以及所設(shè)計加速器的并行度不高等設(shè)計挑戰(zhàn)[3]。Vivado HLS(Vivado 高層次設(shè)計工具)具有仿真方便、移植性好、描述層次高、有利于提升開發(fā)效率等優(yōu)點[4]。因此本文使用HLS 工具對CNN 加速器進行性能優(yōu)化。

3.2.1 存儲優(yōu)化

圖像數(shù)據(jù)使用外部DDR 進行存儲,F(xiàn)PGA 訪問PS端的DDR會花費大量時間,本文采用在PL部分設(shè)計行緩沖區(qū)的方法來存放圖像數(shù)據(jù)。由于所設(shè)計的緩沖區(qū)的行數(shù)有限,當新的圖像數(shù)據(jù)需要進入緩沖區(qū)時,要通過對當前一行實現(xiàn)向上移位操作釋放一部分存儲空間來存儲新的數(shù)據(jù),存儲優(yōu)化的結(jié)果示意圖如圖3 所示。在FPGA端設(shè)計行緩沖區(qū)存放數(shù)據(jù)能夠避免FPGA訪問遠端的DDR 存儲器,其作用類似于Cache,能夠提高處理器與存儲之間的訪問速度,進而提高系統(tǒng)性能。

圖3 存儲優(yōu)化結(jié)果示意圖

在HLS開發(fā)工具中,多維數(shù)組通常用來存放卷積核參數(shù)和特征圖數(shù)據(jù)。在HLS 綜合時,數(shù)組被實現(xiàn)為BRAM端口,由于所實現(xiàn)的BRAM端口大小的約束,讀寫操作在1 個時鐘周期內(nèi)至多完成2 次[5]。當優(yōu)化操作需要展開循環(huán)時,在一個時鐘周期內(nèi)要對內(nèi)存進行多次讀/寫。本文通過對數(shù)組降維的方法解決內(nèi)存瓶頸,即將多維數(shù)組采用Block、Cyclic 以及Complete 等方式分割為低維數(shù)組。Block是將原來數(shù)組中的數(shù)據(jù)按照其順序放置在若干個BRAM 中,即對于原來的數(shù)據(jù)依照其順序進行了切割,形成多個BRAM模塊,能夠增加內(nèi)存訪問帶寬,提高訪問速度。Cyclic是將原數(shù)組中的數(shù)據(jù)以交叉存儲的方式放置在若干個BRAM 中,即將原來數(shù)組中的數(shù)據(jù)按照奇偶的順序分開。Complete 是將原有數(shù)組中的數(shù)據(jù)放置在寄存器中而不是BRAM 中,Complete 分割方式適用于較小的數(shù)組。以上三種數(shù)組分割示意圖如圖4所示。

3.2.2 定點量化

在人臉識別加速器設(shè)計過程中,冗余位的存在將會造成一定程度的硬件資源浪費[6]。因此,為了合理且有效地利用硬件資源,所設(shè)計的硬件電路不能局限于特定位數(shù)的精度,即需要滿足任意精度要求。以下對定點的數(shù)據(jù)類型以及任意精度整數(shù)類型進行描述。

圖4 多維數(shù)組分割示意圖

(1)任意精度整數(shù)類型

在一定整數(shù)值的寬度范圍內(nèi),HLS工具能夠支持任意精度的整數(shù)數(shù)據(jù)類型。如表1 所示,C 和C++相關(guān)的庫能夠?qū)崿F(xiàn)對任意精度整數(shù)類型的支持,其優(yōu)點是具備更高的時鐘頻率、更好的數(shù)據(jù)吞吐率,并且消耗的資源較少,因此使用任意精度數(shù)據(jù)類型能用更少的資源獲得相同的精度,并且可以實現(xiàn)更高的工作頻率,C 和C++的字長均為1位到1 024位。

表1 任意精度整數(shù)數(shù)據(jù)類型

(2)任意精度定點類型

定點數(shù)的一般格式如圖5所示,確定位數(shù)的整數(shù)部分位于二進制小數(shù)點的左邊,小數(shù)部分位于右邊,符號位為最高有效位(MSB)。W 表示字長總位數(shù),I 表示整數(shù)部分的位數(shù),B 表示小數(shù)部分的位數(shù),則W=I+B。

圖5 定點格式示例

在文獻[2]的加速器設(shè)計中,芯片的工作頻率低于100 MHz,且FPGA 資源的使用率在80%以上,對此,在無損精度的情況下,本文使用Vivado HLS 工具進行定點量化精度的探索。本文對網(wǎng)絡(luò)中權(quán)值和特征圖參數(shù)大小進行統(tǒng)計,為了防止數(shù)據(jù)溢出,將整數(shù)部分的位數(shù)設(shè)定為11 位。在權(quán)衡位寬及精度大小之后,將數(shù)據(jù)類型確定為ap_fixed<16,11>。圖6 所示為未經(jīng)過任何并行優(yōu)化的定點加速器的資源利用率以及時間性能的結(jié)果報告,經(jīng)過優(yōu)化,該加速器的總周期數(shù)降低至385 122,工作頻率提高到200 MHz。定點量化的優(yōu)化結(jié)果如圖7所示,采用定點量化的方式能夠在一定程度上對CNN加速器進行優(yōu)化,降低系統(tǒng)運行時間并且減少資源利用率,使得CNN加速器的性能更優(yōu)。

圖6 未優(yōu)化時CNN浮點加速器綜合報告

圖7 定點量化后CNN浮點加速器綜合報告

3.2.3 運算優(yōu)化

(1)卷積層優(yōu)化

卷積層的算法結(jié)構(gòu)由多層嵌套循環(huán)組成,未經(jīng)過優(yōu)化之前的CNN 加速器計算時延為1 591 122 個時鐘周期,其中卷積層C1 計算時延周期為509 388,卷積層C2計算時延周期為748 022,大約占用神經(jīng)網(wǎng)絡(luò)計算總時延的79%。因此,主要通過優(yōu)化卷積層來減少加速器的時間延遲。

卷積層C1層的權(quán)值參數(shù)存放在卷積層計算的多維數(shù)組中,在HLS 工具中被綜合為FPGA 中的ROM。輸入圖像的像素值緩存在input 數(shù)組中,該數(shù)組被實現(xiàn)為雙端口RAM,深度為160。本文首先對于卷積層內(nèi)部的并行性進行探索并分析,使用“#pragma HLS UNROLL”指令進行優(yōu)化,優(yōu)化之后的電路能夠同時完成25 個乘加運算。使用流水線技術(shù)對特征圖內(nèi)部的像素計算進行優(yōu)化,進行運算優(yōu)化以及定點量化之后,卷積層C1的工作時間由138 796 個時鐘周期降低至816 個時鐘周期。同理,基于輸入特征圖的并行性,對于卷積層C2實現(xiàn)進行流水線以及循環(huán)展開操作,進行優(yōu)化之后,卷積層C2的工作時間降低為1 644個時鐘周期。

圖8 S1層生成電路

(2)池化層優(yōu)化

池化層S1在未被優(yōu)化之前需要8 652個時鐘周期,相比于卷積以及全連接層,池化層大約占整個神經(jīng)網(wǎng)絡(luò)計算時間的3%。本文對于輸出特征圖之間的并行性進行探索,圖8 所示為生成的S1 層電路,使用流水線技術(shù)對特征圖內(nèi)部的像素計算進行優(yōu)化,S1 層的執(zhí)行時間降低為199個時鐘周期。同理,S2層的執(zhí)行時間降低為29個時鐘周期。

(3)全連接層優(yōu)化

本設(shè)計采用300 個神經(jīng)元與8 個神經(jīng)元進行全連接,對于最外層循環(huán),使用“#pragma HLS PIPELINE”指令進行流水線優(yōu)化,內(nèi)部循環(huán)由系統(tǒng)自動展開,循環(huán)展開后能夠并行執(zhí)行8次乘加操作,重疊執(zhí)行不同循環(huán)的循環(huán)體能夠使用更少的硬件資源來提高整個系統(tǒng)的吞吐量,進一步降低系統(tǒng)計算時延。經(jīng)過運算優(yōu)化后的結(jié)果如表2所示。

3.2.4 加速器算法接口設(shè)計

本設(shè)計所實現(xiàn)的CNN加速IP核如圖9所示。

在ZC706 平臺中,CNN 加速器與主存儲器之間通過AXI4-Stream接口連接,使得圖像數(shù)據(jù)通過流數(shù)據(jù)的方式完成傳輸。AXI4-Stream接口與FIFO基本一致,在進行數(shù)據(jù)傳輸時不會牽扯到地址問題,因而主從設(shè)備之間能夠進行數(shù)據(jù)的不間斷傳輸。主設(shè)備之間通過握手的方式保持通信,當主設(shè)備端將發(fā)送的數(shù)據(jù)準備就緒后,主設(shè)備向從設(shè)備發(fā)出VALID 信號且一直保持該信號有效,當從設(shè)備做好接收準備時,向主設(shè)備發(fā)出READY信號,當VALID 以及READY 兩個信號同時存在時,數(shù)據(jù)開始進行傳輸,當這兩個信號一直有效時,主從設(shè)備之間將會進行數(shù)據(jù)的不間斷傳輸,當主從設(shè)備任何一端撤銷信號時,數(shù)據(jù)傳輸中斷。在Vivado HLS中,通過定義C/C++結(jié)構(gòu)體來實現(xiàn)AXI-Stream流接口,通過結(jié)構(gòu)體中的不同變量對流結(jié)構(gòu)中的信號完成模擬[7]。外部IP與CNN IP 之間的數(shù)據(jù)傳輸過程通過操作不同的信號進行控制。本設(shè)計系統(tǒng)驗證的結(jié)果如圖10 所示,由驗證結(jié)果可知,數(shù)據(jù)的傳輸結(jié)果正確。

表2 CNN各層進行運算優(yōu)化結(jié)果

圖9 CNN加速IP核

圖10 系統(tǒng)驗證結(jié)果

圖11 硬件連接示意圖

3.2.5 高層次綜合

在HLS中,將輸入的C/C++代碼驗證功能完整性之后,HLS 工具會將其轉(zhuǎn)化為RTL 代碼。使用HLS 優(yōu)化指令對設(shè)計進行并行優(yōu)化,進而得到設(shè)計回路的RTL描述以及等價的RTL模型[8]。待整個綜合結(jié)束之后,會輸出相關(guān)設(shè)計文件,同時也會產(chǎn)生腳本、各種日志以及測試集等,在綜合過程完成之后,通過HLS工具將RTL進行打包實現(xiàn)為IP 核的形式,以便后續(xù)在Vivado 設(shè)計工具中進行調(diào)用。

3.3 系統(tǒng)硬件設(shè)計

圖像數(shù)據(jù)采用AXI4-Stream 方式讀入,通過AXI4接口協(xié)議互聯(lián)的方式將數(shù)據(jù)傳輸?shù)絀P核并用CPU接收網(wǎng)絡(luò)的輸出值,對于Vivado內(nèi)部封裝的IP核實現(xiàn)互聯(lián),能夠使得與直接存儲器訪問(Direct Memory Access,DMA)的通信更加簡單快速。在HLS 中完成CNN IP核封裝之后將生成的IP核導入Vivado工具中完成數(shù)據(jù)通路設(shè)計[4]。本設(shè)計主要由ZYNQ 處理系統(tǒng)、2 個AXI互聯(lián)、AXI DMA、CNN IP 核以及處理器系統(tǒng)復位構(gòu)成,其硬件連接示意圖如圖11所示。

圖像數(shù)據(jù)存儲于PS 端的外設(shè)DDR 中,PS 端與PL端通過芯片內(nèi)部的AXI_HP高性能接口進行通信,經(jīng)過AXI 互聯(lián)模塊將數(shù)據(jù)從DDR 存儲器傳輸?shù)紻MA 核的M_AXIS_MM2S接口,再通過M_AXI_S2MM接口連接到CNN加速IP核的streamIn接口,CNN IP核計算完成之后通過streamOut 接口將數(shù)據(jù)傳輸?shù)紻MA 核的S_AXI_S2MM 接口,之后再通過互聯(lián)傳回到Zynq 處理系統(tǒng),完成數(shù)據(jù)的傳輸。AXI4-Stream 包含兩部分:S2MM(寫通道)和MM2S(讀通道)。CNN IP核是掛載在AXI 總線上的邏輯設(shè)備,因此需要為其分配地址空間,這樣ARM 端便可通過地址尋找到PL 端的邏輯設(shè)備,在編寫ARM程序時可以對該地址進行讀寫,實現(xiàn)對IP核的控制。本設(shè)計CNN IP核以及DMA核地址分配結(jié)果如圖12所示。

圖12 IP核地址分配結(jié)果

根據(jù)Address Editor的地址分配結(jié)果,CNN IP核以及DMA 核均分配了64 KB 長度的地址,未造成地址沖突,因此在PS端可以對其地址進行讀寫操作,實現(xiàn)對該IP核的正確控制。

4 實驗結(jié)果和分析

在本文設(shè)計中,將自制的40 張人臉圖像加入到ORL人臉識別數(shù)據(jù)庫中,形成了具有440張人臉圖像的數(shù)據(jù)集,其部分人臉圖像如圖13所示。

圖13 人臉識別數(shù)據(jù)集部分人臉圖像

表3 FPGA加速器性能對比

將每個樣本的人臉圖像按照4∶1 的比例對數(shù)據(jù)集進行劃分,即在Matlab R2019a 上將352 張人臉圖像用于訓練,88張人臉圖像用于測試。Matlab訓練結(jié)果和收斂曲線如圖14所示。

圖14 Matlab訓練結(jié)果及收斂曲線

由Matlab 訓練結(jié)果可得,當?shù)螖?shù)達到7 000 次時,識別率約為98.33%并且趨于穩(wěn)定。根據(jù)收斂曲線可得,當訓練迭代次數(shù)大約為2 000次時,均方誤差開始無限向0 逼近,說明該訓練過程效果較好,網(wǎng)絡(luò)權(quán)值趨于穩(wěn)定。

加速器IP 核使用Vivado HLS 工具實現(xiàn),在Xilinx ZC706 開發(fā)板上進行板級驗證,其驗證結(jié)果如圖15 所示。表3為本文FPGA加速器與其他文獻的性能對比。

圖15 板級驗證結(jié)果示意圖

根據(jù)實驗結(jié)果,本文設(shè)計的CNN 加速器識別一幅圖像僅需要0.021 ms,系統(tǒng)的工作頻率是200 MHz,且功耗僅為2.62 W。由于加速的CNN 網(wǎng)絡(luò)使用的FPGA平臺以及并行策略不同,因而不能夠直接進行性能對比。文獻[4-7]與本文的設(shè)計比較類似,均探索了在FPGA開發(fā)平臺上實現(xiàn)小型LeNet網(wǎng)絡(luò)的加速方案。通過比較,文獻[4]的能效比相對較高,但是本文在系統(tǒng)工作頻率以及加速器峰值性能方面優(yōu)于文獻[4];文獻[5]的并行度雖然較高,但是只加速了網(wǎng)絡(luò)的前5 層,網(wǎng)絡(luò)參數(shù)較少且神經(jīng)網(wǎng)絡(luò)規(guī)模較小,需要使用Matlab對FPGA端輸出的數(shù)據(jù)進行全連接和分類,本文設(shè)計的峰值性能為22.04 GMACS,文獻[5]的峰值性能為16.58 GMACS。文獻[8-9]只對AlexNet網(wǎng)絡(luò)的卷積層完成了加速,其設(shè)計的加速器峰值性能分別為61.62 GOPS和19.20 GMACS,耗時較長且FPGA資源占用率太高。

表4為本文實現(xiàn)的采用Xilinx嵌入式設(shè)備實現(xiàn)的人臉識別結(jié)果與同等網(wǎng)絡(luò)規(guī)模下CPU和GPU實現(xiàn)的結(jié)果對比。本設(shè)計通過在Matlab 平臺上對識別一幅圖像所需時間進行統(tǒng)計的方法來衡量CPU性能。由表4可知,在CUDA 上實現(xiàn)CNN 所需時間為0.646 ms,在Caffe 以及CPU上實現(xiàn)CNN所需時間分別為0.240 ms、2.650 ms。FPGA 加速器相比CPU 實現(xiàn)CNN 速度提升了126 倍,相比GPU 加速比在10 倍以上,且GPU 平臺的功耗為33 W,而本設(shè)計實現(xiàn)的基于FPGA 的加速器功耗僅為2.629 W。

表4 人臉識別加速器結(jié)果對比

由表4 的對比結(jié)果可知,本設(shè)計在Xilinx 嵌入式設(shè)備上所實現(xiàn)的人臉識別加速器識別速度更高且功耗較低,并且識別率誤差不超過1%,相對于其他平臺的設(shè)計結(jié)果呈現(xiàn)出較為明顯的優(yōu)勢,能夠滿足實際應用需求。

5 系統(tǒng)應用

隨著計算機視覺以及嵌入式技術(shù)的不斷發(fā)展,對于機器學習算法的可實現(xiàn)性要求越來越高[11-13],嵌入式產(chǎn)品本身就十分關(guān)注系統(tǒng)的功耗問題,功耗的高低直接決定了系統(tǒng)性能的好壞。本文在Xilinx 公司的嵌入式設(shè)備上完成了人臉識別加速器設(shè)計,相對于其他文獻設(shè)計成果,在功耗以及系統(tǒng)識別時間方面占據(jù)優(yōu)勢,且識別誤差率不足1%,對于該技術(shù)的產(chǎn)品化提供了理論以及技術(shù)支撐[14-15]。本文所實現(xiàn)的基于FPGA的人臉識別加速器系統(tǒng)能夠應用于如機場、車站等許多人臉識別的場合,具備一定的硬件可實現(xiàn)性[16-17]。

6 結(jié)束語

本文提出了一種基于FPGA 的卷積神經(jīng)網(wǎng)絡(luò)加速器的設(shè)計方法。首先針對與加速器設(shè)計有關(guān)的HLS 工具及其提供的優(yōu)化指令進行介紹,結(jié)合ZC706異構(gòu)開發(fā)平臺的特性,主處理器由PS部分實現(xiàn),網(wǎng)絡(luò)加速模塊由PL部分實現(xiàn)。在HLS工具中運用存儲優(yōu)化、定點量化、運算優(yōu)化、接口設(shè)計等優(yōu)化技術(shù)對LeNet-5 網(wǎng)絡(luò)進行優(yōu)化,通過C 仿真、高層次綜合實現(xiàn)了7 層CNN 加速器設(shè)計,與該領(lǐng)域其他卷積神經(jīng)網(wǎng)絡(luò)的CPU、GPU 和FPGA實現(xiàn)的結(jié)果進行對比,本設(shè)計實現(xiàn)的人臉識別神經(jīng)網(wǎng)絡(luò)加速器的加速比在10倍以上,且所需功耗僅為2.629 W,識別一幅人臉圖像僅需0.021 ms,實現(xiàn)了較高的系統(tǒng)性能。

猜你喜歡
數(shù)組加速器人臉識別
莫比斯加速器眾創(chuàng)辦公空間
知識快餐店 科學加速器
人臉識別 等
JAVA稀疏矩陣算法
全民小康路上的“加速器”
JAVA玩轉(zhuǎn)數(shù)學之二維數(shù)組排序
揭開人臉識別的神秘面紗
更高效用好 Excel的數(shù)組公式
人臉識別在高校安全防范中的應用
人臉識別在Android平臺下的研究與實現(xiàn)
会泽县| 五家渠市| 林口县| 广州市| 南昌市| 巴林左旗| 湖北省| 平乡县| 安岳县| 庐江县| 静宁县| 巴南区| 霍林郭勒市| 长治县| 益阳市| 江达县| 塘沽区| 靖宇县| 汕头市| 潮安县| 从化市| 宁安市| 江城| 梅州市| 松滋市| 长泰县| 涞水县| 手机| 宕昌县| 巩义市| 泸水县| 安溪县| 盐边县| 阿巴嘎旗| 砚山县| 巴马| 靖宇县| 内江市| 惠州市| 浏阳市| 新干县|