呂 浩,張盛兵,王 佳,劉 碩,景德勝
1.西北工業(yè)大學(xué) 計算機(jī)學(xué)院,西安710072
2.中國航空工業(yè)集團(tuán)公司 西安航空計算技術(shù)研究所,西安710065
近年來,隨著深度學(xué)習(xí)(Deep Learning)技術(shù)的發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)在目標(biāo)檢測、人臉識別等機(jī)器視覺領(lǐng)域廣泛應(yīng)用。由于CNN的算法復(fù)雜度對運(yùn)行平臺的計算要求較高,目前通常采用的是GPU(Graphics Processing Unit)來實現(xiàn)。深度學(xué)習(xí)一般分為兩個階段:訓(xùn)練和推斷,學(xué)習(xí)階段可以采用GPU或CPU來實現(xiàn),但在推斷階段較多為嵌入式使用場景,對系統(tǒng)往往有體積、功耗、實時和性能等多目標(biāo)約束,F(xiàn)PGA(Field Programmable Gate Array)的實現(xiàn)方式更具有優(yōu)勢[1]。FPGA低功耗、低延時和可重構(gòu),適合CNN的并行加速。目前已有一些基于FPGA的神經(jīng)網(wǎng)絡(luò)研究,例如CNN的FPGA數(shù)字識別仿真結(jié)果可達(dá)到95.4%的識別率[2]等。
在嵌入式電子系統(tǒng)的微型化方面,微系統(tǒng)技術(shù)得到了越來越多的重視,而SIP和SOC是微系統(tǒng)實現(xiàn)的兩種重要技術(shù)途徑。伴隨著微組裝技術(shù)的發(fā)展,SIP和SOC相比,可以將不同類型的器件和電路芯片疊在一起,構(gòu)建成更為復(fù)雜的、完整的系統(tǒng),其集成方式更靈活,在研發(fā)周期、成本方面具有優(yōu)勢,彌補(bǔ)了SOC的不足。SIP與SOC的結(jié)合是未來微型化的趨勢。
目標(biāo)識別與分類微系統(tǒng)技術(shù)在軍民用領(lǐng)域都有著廣泛的應(yīng)用需求。民用和軍用小型無人機(jī)目標(biāo)識別系統(tǒng)迫切需要微型化,美國在其航空設(shè)備上也已經(jīng)大量使用SIP芯片技術(shù)。研制基于CNN的SIP微系統(tǒng),實現(xiàn)CNN的輕量化,以手寫數(shù)字識別作為測試,一方面滿足了金融等領(lǐng)域自動化識別手寫數(shù)字的迫切需求,另一方面為進(jìn)一步研究目標(biāo)識別與分類微系統(tǒng)技術(shù)奠定基礎(chǔ)。Xilinx公司的Zynq-7000 SOC芯片適合于構(gòu)建該SIP最小系統(tǒng),Zynq SOC組合了一個雙核ARM Cortex-A9處理器和一個FPGA邏輯部件。
本文將SIP微系統(tǒng)集成封裝技術(shù)與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合,構(gòu)建深度學(xué)習(xí)CNN微系統(tǒng)。將XC7Z010芯片和DDR3、Flash存儲器等集成封裝,減小了體積和功耗,并改善了信號完整性[3]?;赩GG神經(jīng)網(wǎng)絡(luò)模型,在SIP芯片的FPGA資源中使用HLS來設(shè)計實現(xiàn)CNN的卷積層、池化層IP,在ARM處理器端采用時分復(fù)用的方式進(jìn)行分層調(diào)用。最后使用MNIST手寫數(shù)字?jǐn)?shù)據(jù)集來驗證。
SIP芯片的封裝制造主要包括裸芯片的備貨、基板的制造和裸芯片封裝?;逡话悴捎肂T樹脂覆銅剛性基板。SIP的封裝工藝主要包括FC(Flip Chip)和WB(Wire Bonding)等。FC是將IC倒置在基板凸點上,與芯片相應(yīng)焊接區(qū)域?qū)?zhǔn),可以使空間充分利用,立體堆疊,但對基板的平整度工藝要求較高。如果FC工藝無法保證基板平整度,就會造成芯片可靠性的降低,導(dǎo)致脫焊故障或者良品率的降低。WB是傳統(tǒng)比較成熟的引線鍵合工藝方式,工藝制造難度相對低一些,成品的可靠性更高。
在硬件原理設(shè)計完畢后,采用工具(例如Cadence)進(jìn)行SIP芯片的布局和布線,以及各項仿真工作,包括熱仿真、結(jié)構(gòu)強(qiáng)度仿真、信號完整性仿真和電源完整性仿真等。
本次采用SIP技術(shù)來實現(xiàn)CNN微系統(tǒng)的硬件芯片平臺。該款航空電子SIP微系統(tǒng)芯片以Zynq SOC(XC7Z010)為核心,其中包含有Processing System(PS)和Programmable Logic(PL)兩部分,PS端為Dual-core ARM?Cortex?-A9,Maximum Frequency為667 MHz,PL端包含Artix?-7 FPGA,有28 000 Logic Cells、17 600 LUTs,可以在PL中通過可編程邏輯構(gòu)建接口或者CNN邏輯IP核,PS端和PL端通過工業(yè)標(biāo)準(zhǔn)的AXI總線互聯(lián)通信[4]。
以Zynq SOC為核心,外周配置有128 MB的DDR3 Memory和128 Mbit的SPI_FLASH,以及接口驅(qū)動器,所有這些和相應(yīng)配置的電阻、電容等器件封裝成為該SIP芯片,構(gòu)成最小計算系統(tǒng)。芯片塑封BGA480封裝形式,芯片尺寸為30 mm×30 mm,芯片厚度1.2 mm。圖1是SIP芯片的系統(tǒng)結(jié)構(gòu)示意圖,圖2是裸芯布局圖。
圖1 SIP芯片結(jié)構(gòu)示意圖
圖2 SIP芯片內(nèi)部裸芯布局圖
SIP芯片設(shè)計過程中必須經(jīng)過必要的仿真[5]。例如為了使芯片適應(yīng)不同應(yīng)用環(huán)境要求,必須進(jìn)行強(qiáng)度仿真。在管腳施加約束,模擬芯片受到200g的加速度,對強(qiáng)度進(jìn)行仿真。通過仿真,整體結(jié)構(gòu)在200g加速度下最大應(yīng)力為16.7 MPa,發(fā)生在上蓋板處,應(yīng)力遠(yuǎn)遠(yuǎn)小于其屈服極限(136 MPa)。圖3顯示了以200g的加速度在芯片各個部分上的壓力分布。
圖3 芯片整體200g加速度下應(yīng)力分布圖
最終實現(xiàn)的SIP芯片照片如圖4所示,該微系統(tǒng)芯片使最小計算系統(tǒng)體積進(jìn)一步減小,功耗降低,信號完整性也得以改善[6],為CNN微系統(tǒng)的實現(xiàn)提供了可靠的硬件平臺。
圖4 SIP芯片照片
自2012年Krizhevsky等人提出的深度卷積神經(jīng)網(wǎng)絡(luò)AlexNet在ImageNet大規(guī)模視覺識別挑戰(zhàn)賽中奪冠以來,開始了深度學(xué)習(xí)技術(shù)在圖像領(lǐng)域的研究熱潮。很多目標(biāo)檢測算法被研究者所提出,如LeNet、VGG、SDD和YOLO等深度學(xué)習(xí)算法[7]。相比較而言VGGNet算法由AlexNet演化而來,更適合小規(guī)??删幊踢壿嬈骷褂瞄_發(fā)。標(biāo)準(zhǔn)的CNN包含卷積層、池化層和全連接層。
VGGNet由牛津大學(xué)計算機(jī)視覺組和谷歌旗下DeepMind團(tuán)隊的研究員共同研究提出,獲得2014年ImageNet圖像分類競賽第二名。VGGNet是加深版的AlexNet。VGGNet的特點包括:結(jié)構(gòu)簡潔,激活函數(shù)使用ReLU;使用3×3小卷積核和多卷積子層;使用2×2的池化層過濾器;通道較多;將全連接層轉(zhuǎn)換為卷積層。圖5是典型VGG16的結(jié)構(gòu)圖[8]。
圖5 典型VGG16的網(wǎng)絡(luò)結(jié)構(gòu)圖
本次設(shè)計使用了基于VGGNet優(yōu)化的小型神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)結(jié)構(gòu)非常簡潔,全網(wǎng)絡(luò)使用了3×3卷積核和2×2最大池化尺寸。通過不斷加深網(wǎng)絡(luò)結(jié)構(gòu)和分時復(fù)用來提升性能。每一層卷積或全連接層后面都使用易于在硬件上實現(xiàn)的Relu激活函數(shù)。圖6是設(shè)計所使用的自定義Micro_VGGNet網(wǎng)絡(luò)模型圖。
圖6 使用的Micro_VGGNet網(wǎng)絡(luò)模型圖
Relu激活函數(shù)[9]如下:
該模型結(jié)構(gòu)有8層,第一層為輸入層,為手寫數(shù)字圖像數(shù)據(jù)的輸入,采用MNIST數(shù)據(jù)集,最后一層為輸出層,輸出結(jié)果為10種,使用Softmax函數(shù),實現(xiàn)10個分類。為了降低過擬合,在輸出層的前一層還加入了Dropout層。
Softmax函數(shù)公式如下[10]:
第2、4層為卷積層,采用3×3的卷積核,步長為1,擴(kuò)充值為1,采用same卷積;第3、5層為池化層,步長為2,采用最大池化;第6、7層為全連接層,同樣使用卷積運(yùn)算,卷積核7×7,步長為1,擴(kuò)充值為0,采用valid卷積。
可用采用FLOPS(FLOating-Point operationS,浮點運(yùn)算次數(shù))衡量模型的時間復(fù)雜度公式[11]如下:其中,M是卷積核輸出特征圖的尺寸,K是卷積核的尺寸,C_in是卷積核的輸入通道數(shù),C_out是卷積層具有的輸出通道數(shù),從而可以看出90%以上的運(yùn)算集中在卷積層。
綜上該Micro_VGGNet網(wǎng)絡(luò)架構(gòu)的特點是:
(1)結(jié)構(gòu)簡潔,只有8層,利于FPGA實現(xiàn);
(2)使用小的卷積核和小的池化濾波器;
(3)將全連接層轉(zhuǎn)換為卷積層,方便實現(xiàn)和復(fù)用。
系統(tǒng)基于XC7Z010,在PL端的FPGA內(nèi)實現(xiàn)兩個IP核:Con_IP、Pool_IP。
Con_IP負(fù)責(zé)卷積與Relu;
Pool_IP負(fù)責(zé)池化。
采用Vivado HLS工具的HLS方式[12]實現(xiàn),由C語言代碼轉(zhuǎn)換為HDL語言IP核。卷積、池化、全連接、softmax(其實就是全連接運(yùn)算),所以只需要做三個通用加速電路,循環(huán)迭代使用這三個電路就可以實現(xiàn)功能。各做一個通用卷積、池化、全連接。而全連接是一種特殊的卷積運(yùn)算,故可以卷積代替全連接。圖7是HLS高層次綜合的流程圖。
各部分通過AXI總線連接[13],axi_slave接口用于配置電路連接,axi_master用于主動取數(shù)據(jù)及數(shù)據(jù)結(jié)果寫回,不用cpu干預(yù)。使用vivido工具完成的系統(tǒng)硬件圖如圖8所示。
圖7 高層次綜合流程圖
設(shè)計將運(yùn)算量巨大的CNN放在FPGA端,充分發(fā)揮FPGA并行運(yùn)算能力。整個硬件架構(gòu)由PS端ARM處理器、時鐘復(fù)位模塊、總線互聯(lián)模塊和CNN_IP模塊四部分組成。ARM處理器通過SD卡存儲器將手寫數(shù)字圖像導(dǎo)入DDR3存儲器,CNN_IP自行從DDR3中獲取圖像數(shù)據(jù)。前期的數(shù)據(jù)獲取和預(yù)處理工作由ARM端的主控程序來完成,由SDK工具開發(fā)實現(xiàn)。
模型中卷積層和池化層均采用HLS來實現(xiàn),采用C語言來編寫代碼,使用Vivado HLS工具來生成IP核。兩個函數(shù)IP,一個負(fù)責(zé)卷積與Relu,一個負(fù)責(zé)池化。由處理器ARM來分時調(diào)用不同的函數(shù)IP[14],其工作流圖如圖9所示。
卷積函數(shù)的定義代碼如圖10所示,其中,Chin是輸入路數(shù);Hin是輸入特征高;Win是輸入特征寬;卷積核KxKy;步幅SxSy;卷積模式mode;relu使能relu_en;運(yùn)算規(guī)模大小feature_in[]、feature_out[]、W[]、bias[]。
圖8 系統(tǒng)硬件結(jié)構(gòu)圖
圖9 CNN IP核工作流圖
圖10 卷積函數(shù)代碼定義圖
池化函數(shù)的定義代碼如圖11所示,其中,CHin是輸入路數(shù);Hin是輸入特征高;Win是輸入特征寬;卷積核KxKy;池化模式mode;運(yùn)算規(guī)模大小feature_in[]、feature_out[]。
圖11 池化函數(shù)代碼定義圖
采用本次設(shè)計的SIP微系統(tǒng)芯片搭建測試平臺,測試平臺和PC機(jī)之間通過RS232口進(jìn)行通信,PC機(jī)端使用Visual Studio 2012 OpenCV2.4.9搭建上位機(jī)環(huán)境,通過RS232串口給平臺發(fā)送手繪圖板工具繪制的手寫數(shù)字圖像(.bmp圖片),由測試平臺進(jìn)行識別后將結(jié)果通過RS232回傳至PC機(jī)顯示。
前期訓(xùn)練將Minist數(shù)據(jù)集存放到SD卡中去(讀入DDR),該數(shù)據(jù)集一共有6 000張訓(xùn)練圖片和1 000張測試圖片,大小為28×28×1。
圖12 為測試環(huán)境與結(jié)果PC機(jī)界面顯示圖,正在測試手寫數(shù)字5,并由SIP微系統(tǒng)平臺正確識別:“receive data success 5”。
圖12 測試結(jié)果顯示界面
在PC機(jī)端進(jìn)行了手寫數(shù)字的軟件算法實現(xiàn),并進(jìn)行了測試,PC機(jī)采用CPU型號為Core i7-8700k處理器。將SIP微系統(tǒng)和PC機(jī)進(jìn)行了手寫數(shù)字識別正確率和用時的比較,從表1中可以看出SIP微系統(tǒng)的識別正確率基本與PC機(jī)持平,且其一次迭代用時僅為PC機(jī)的1/3。
表1 SIP微系統(tǒng)平臺和CPU平臺結(jié)果對比
使用vavido分析工具對SIP微系統(tǒng)(XC7Z010)的資源利用情況和功耗情況進(jìn)行分析統(tǒng)計,如表2和圖13所示,CNN微系統(tǒng)做占用邏輯資源并不多,功耗很低,動態(tài)功耗占住,靜態(tài)功耗僅為0.114 W。
表2 SIP微系統(tǒng)硬件資源消耗(XC7Z010)
圖13 XC7Z010功耗分配圖
最后,將同樣的模型算法代碼在SIP微系統(tǒng)的ARM端(PS)用純軟件的方法實現(xiàn)[15],并再次進(jìn)行比較分析。將PC機(jī)平臺、純ARM平臺和SIP系統(tǒng)平臺進(jìn)行綜合測試對比,情況如表3所示。SIP微系統(tǒng)在性能、功耗和體積等方面具有綜合優(yōu)勢。SIP微系統(tǒng)的性能功耗比是純ARM平臺的76倍,是PC機(jī)平臺的146倍。SIP微系統(tǒng)的圖像處理速度是純ARM的115倍,是PC機(jī)平臺的5倍。在電路板所占面積方面,SIP微系統(tǒng)僅約為PC機(jī)CPU平臺同樣資源所占面積的1/3。
LeNet-5模型是卷積神經(jīng)網(wǎng)絡(luò)中的一個經(jīng)典模型,在手寫數(shù)字識別領(lǐng)域具有重要意義。在相同的SIP微系統(tǒng)平臺下,對Micro_VGGNet和LeNet-5模型的測試結(jié)果進(jìn)行對比。
LeNet-5模型共有8層,包括輸入層、C1卷積層、S2池化層、C3卷積層、S4池化層、C5卷積層、F6全連接層和輸出層。模型中的輸入?yún)?shù)大小32×32,測試時需要將MNIST圖像28×28的進(jìn)行填充,使維度變?yōu)?2×32。其具體結(jié)構(gòu)如圖14所示。
表3 不同平臺測試對比表
圖14 LeNet-5網(wǎng)絡(luò)模型圖
LeNet-5卷積層采用的是5×5大小的卷積核,且卷積核每次滑動一個像素,下采樣層將卷積層28×28或10×10的特征圖譜以2×2為位單位的下采樣(池化)得到14×14或5×5的圖。最后全連接層將所有的節(jié)點連接起來傳給輸出層。輸出層共有10個節(jié)點,分別代表數(shù)字0到9。除了最后一層,每一層的結(jié)果都會通過sigmoid非線性激活函數(shù)。同樣采用時分復(fù)用FPGA IP核的方法進(jìn)行實現(xiàn),在SIP微系統(tǒng)平臺中測試其資源消耗如表4所示。
表4 SIP微系統(tǒng)硬件資源消耗(LeNet-5模型)
LeNet-5相對于Micro_VGGNet來說,使用的卷積核更大,計算復(fù)雜度更高,激活函數(shù)sigmoid也比ReLU運(yùn)算復(fù)雜度高得多,這就導(dǎo)致其在訓(xùn)練時收斂得更慢,需要更多的訓(xùn)練樣本[16]。在用同樣圖8的架構(gòu)進(jìn)行邏輯測試時,表4和表2比較,整體邏輯資源使用相當(dāng),部分資源占用率更高。
在同樣的SIP微系統(tǒng)平臺666 MHz+100 MHz的條件下測試,LeNet-5模型結(jié)果如表5所示,兩種模型的性能接近,但LeNet-5模型的識別正確率和識別速度都不及Micro_VGGNet。
表5 SIP微系統(tǒng)LeNet-5模型測試結(jié)果
CNN深度學(xué)習(xí)技術(shù)和SIP微系統(tǒng)技術(shù)都已取得了深入發(fā)展,將兩者相結(jié)合設(shè)計和實現(xiàn)了基于SIP的CNN微系統(tǒng),構(gòu)建了適用于嵌入式應(yīng)用加速的Micro_VGG模型,實現(xiàn)了CNN的輕量化,并結(jié)合Minist數(shù)據(jù)集進(jìn)行了測試。通過不同平臺間的對比,可以發(fā)現(xiàn)該CNN微系統(tǒng)在性能、功耗和體積等方面具有綜合優(yōu)勢;通過和LeNet-5模型對比,發(fā)現(xiàn)Micro_VGG模型的優(yōu)勢。本設(shè)計符合嵌入式應(yīng)用微型化的需求,同時為目標(biāo)識別與檢測SIP微系統(tǒng)的進(jìn)一步研究積累了技術(shù)基礎(chǔ),提供了參考。