李政清,穆繼亮
(1. 三亞學院理工學院,海南 三亞 570200;2. 中北大學儀器與電子學院,山西 太原 030000
在機器視覺與人工智能的嵌入式應用場景中,需要完成大量的數(shù)據(jù)計算分析。對于復雜算法,采用CPU的實現(xiàn)方式普遍存在效率低下,實時性較差的缺點;采用CPU的實現(xiàn)的方式則會導致功耗和成本的增加。于是,越來越多的研究采取FPGA作為數(shù)據(jù)處理硬件加速器[1]。
由于卷積神經(jīng)網(wǎng)絡(CNN)在圖像、語音識別方面表現(xiàn)出的良好學習特征,很多研究人員欲將其引入人工智能的嵌入式領域。CNN除了具有多層學習能力,還自帶并發(fā)計算特征[2],恰好與FPGA的并發(fā)處理相互照應。同時,F(xiàn)PGA具有的可編程能力能夠有效適應CNN的網(wǎng)絡變化。但是,經(jīng)典CNN的結構和參數(shù)過于復雜,對于資源受限的嵌入式系統(tǒng)而言,難以直接進行使用[3]。于是,一些學者致力于CNN與嵌入式系統(tǒng)的融合,從而提高嵌入式系統(tǒng)上的數(shù)據(jù)處理性能。文獻[4]在CNN中采用了快速濾波來降低計算復雜度,同時設計了適用于FPGA的算法架構,從而獲得較好的有效算力。文獻[5]通過滑窗的并行來對卷積操作進行加速,并采取8bit的定點量化處理,從而減少FPGA資源消耗,并獲取較高的處理精度。文獻[6]基于CNN稀疏特征,將其轉換成矩陣乘積處理,并在FPGA上進行實現(xiàn),該方法實現(xiàn)簡單,容易在嵌入式系統(tǒng)上移植。此外,文獻[7]設計了VGG網(wǎng)絡加速器,并且具備完整的卷積與連接過程;文獻[8]設計了U-Net網(wǎng)絡加速器,具備卷積與逆向卷積過程。
基于當前研究,本文設計了一種卷積網(wǎng)絡加速器,通過對各層的優(yōu)化來改善網(wǎng)絡的收斂性和適應性,以及神經(jīng)元增長對權值處理效率的影響。針對FPGA應用設計了相應的加速器實現(xiàn)架構,包括數(shù)據(jù)處理和緩存機制,并通過資源分析來調(diào)整網(wǎng)絡架構。最后,利用與不同平臺與不同加速器的比較,對基于卷積網(wǎng)絡加速器的FPGA數(shù)據(jù)處理性能進行驗證。
CNN一般由卷積、池化,以及連接多個層構成,其模型描述如圖1所示。對于任意輸入,利用卷積層對其進行特征的分析提取。該過程中首先需要將特征圖與卷積核相乘,再通過ReLU函數(shù)與卷積處理確定最終的特征圖,采用ReLU函數(shù)有利于加速收斂,其表達式描述如下
ReLU:y=max(0,x)
(1)
圖1 CNN模型
利用上層卷積處理輸出下層特征圖,同時卷積核對應變量就是計算權值,卷積過程描述如下
L[d,d,k,g])+P
(2)
其中,i代表上級特征圖的層數(shù);d′,w′,h′分別代表下級特征圖對應的深度、寬度和高度;D代表上級特征圖深度;K,G代表卷積核大??;P代表偏置。
池化層主要用于完成抽樣處理,通常采取與卷積層交叉的方式。利用抽樣處理,有利于提高網(wǎng)絡的適應性。這里采取平均池化策略,公式描述如下
(3)
連接層位于網(wǎng)絡輸出側,包含眾多權值計算。在網(wǎng)絡拓撲結構增加的情況下,由于層數(shù)與神經(jīng)元數(shù)量的增加,將會使得權值數(shù)量急劇增長,進而嚴重影響數(shù)據(jù)處理效率。為降低權值數(shù)量,將特征圖先與1×1卷積核進行運算,再依次與1×1、3×3卷積核進行運算。利用3×3卷積把特征圖采取壓縮,這樣就能夠在一個層中達到并行計算的目的。同時,池化層與連接層可以看作是特殊情況下的卷積層,可以采用同樣的策略。
處理模塊的核心任務是卷積操作,并得到最終的特征圖。由于特征圖包含多個方向,且要在各個方向上采取并行計算,這就需要有多個處理模塊共同參與。對于一個l×l大小的特征圖,處理模塊會將特征和權值派發(fā)給l×l個處理單元,最終處理模塊將要進行m×l×l次乘加操作,其中m代表通道數(shù)量。
處理單元在接收到派發(fā)數(shù)據(jù)后,根據(jù)比較器的結果確定輸入數(shù)據(jù)的有效性。同時局部計數(shù)器將對有效數(shù)據(jù)進行計數(shù)。然后判定器對有效數(shù)據(jù)的權值索引和計數(shù)等參數(shù)采取驗證,充分保證權值與特征圖的有效,其中索引被標記為log2m位寬定點數(shù)dl,l。對于比較器i的輸出,判定器的驗證過程可以表示如下
check=i&(dl,l>>count)
(4)
其中,count代表有效數(shù)據(jù)計數(shù)。
驗證結果將會被傳遞至控制單元,進而控制驗證通過的數(shù)據(jù)參與乘加操作。乘加操作涉及的計算量較大,交給FPGA的片上DSP處理,通過若干DSP并行的方式提高計算效率。DSP的使用情況可以采用以下公式進行估算:
RDSP=NDSP×NPU×l×l
(5)
其中,NDSP代表占用的DSP模塊數(shù)量;NPU代表處理模塊數(shù)量;l×l為計算單元數(shù)量。
在計算過程中,產(chǎn)生的與特征圖與權值相關變量均采取BRAM緩存。對于并行變量,應該確保它們存放在不同的BRAM分區(qū)上。對于存儲區(qū)域,應該從橫向、縱向,以及深度方面分別采取分配。假定處理模塊陣列描述為Pw×Ph×Pd,Pw,Ph,Pd分別表示在橫向、縱向和深度方面的處理模塊數(shù)量。在輸入數(shù)據(jù)的橫向上,處理模塊將會得到Pw+l-1個變量及其相應的計算,根據(jù)變量與計算的數(shù)量,將數(shù)據(jù)分配至Pw+l-1個BRAM。同理,在縱向上分配Ph+l-1個BRAM,深度上分配NDSP個BRAM。輸出數(shù)據(jù)在橫向上分配Pw個BRAM;縱向上分配Ph個BRAM;深度上分配NPU個BRAM。權值在橫向和縱向上均分配l個BRAM;輸入深度上分配NDSP個BRAM;輸出深度上分配NPU個BRAM。
除了緩存的分配,還應關注復用情況,良好的復用設計能夠緩解數(shù)據(jù)交換過程中的資源損耗。處理單元每一輪分配的BRAM數(shù)量為RDSP,在本輪執(zhí)行過后,如果將其間的變量保留下來,便可以在后續(xù)操作時快速獲取參數(shù)值,并避免重復計算。尤其是當滑動窗口發(fā)生移動,可以直接從緩存得到所需變量。假定輸入、輸出和權值對應的復用系數(shù)分別為λ1,λ2,λ3,則BRAM的使用情況可以表示為
RBRAM=λ1((Pw+l-1)×(Ph+l-1)×NDSP)+
λ2(Pw×Ph×NPU)+λ3(l×l×NDSP×NPU)
(6)
卷積網(wǎng)絡加速器在對輸入數(shù)據(jù)進行處理的過程中,可以采用并行方式進行操作。而FPGA在利用片上DSP實現(xiàn)卷積操作時,也可以采用并行方式實現(xiàn)網(wǎng)絡計算。該過程中,計算并行程度受輸出特征圖影響,卷積核并行程度則受FPGA影響。由于卷積操作的所有乘法計算都是基于DSP的,因此在卷積核并行計算時,乘法器與DSP應該滿足如下關系
CP×DP×Mi≤DSPtotal
(7)
其中,CP代表計算并行程度;DP代表卷積核并行程度;Mi代表處理i×i卷積時的乘法器數(shù)量;DSPtotal代表FPGA內(nèi)部的DSP模塊數(shù)量。
在基于卷積網(wǎng)絡加速器的FPGA數(shù)據(jù)處理過程中,不僅是對DSP資源的占用,還有對存儲資源的占用。BRAM需要完成特征圖與中間結果的緩存,于是存儲資源應該滿足如下關系
(8)
在考慮資源占用的同時,還應該分析數(shù)據(jù)處理過程中FPGA的執(zhí)行時間。在固定時鐘周期Tclk情況下,數(shù)據(jù)輸入的時間受特征圖的大小、通道,以及硬件架構影響,公式表示為
Tin=Tclk×η1×win×hin×din
(9)
其中,η1代表傳遞效率。
權值變量受卷積操作影響,其時間表示為:
Tw=Tclk×j×j×DP×din
(10)
數(shù)據(jù)在卷積網(wǎng)絡的中間計算時間除了與特征圖大小有關外,主要受并行性能和計算效率影響,公式表示為
(11)
其中,η2代表計算效率;Nc代表卷積量。
結果輸出時間與并行行性能有關,表示為
(12)
通過求解Tin,Tw,Tc,Tout的總和,便可以得到一層網(wǎng)絡的執(zhí)行時間,再根據(jù)網(wǎng)絡層數(shù),就可以計算得到FPGA的累計需要時間。
實驗平臺選擇Xinlinx VC709,其上搭載的是VC709 FPGA,實現(xiàn)環(huán)境是Xinlinx Vivado 2017。該FPGA的片上資源包括3600 DSP Slice,1470 BRAM,以及433200LUT。仿真數(shù)據(jù)集選擇ImageNet,在初始化階段,通過歸一化操作將像素映射到[-1,1]范圍內(nèi)。卷積網(wǎng)絡加速器陣列規(guī)模設置為128×16,特征圖與權值在BRAM的緩沖深度均設置成2048?;诰矸e網(wǎng)絡加速器實現(xiàn)的FPGA數(shù)據(jù)處理架構如圖2所示。
圖2 FPGA數(shù)據(jù)處理架構
為了形成性能對比,分別選擇一款CPU與GPU體系架構。CPU型號為Intel core i5 2500K,主頻3.3GHz;GPU型號NVIDIA GeForce GTX 960。除了對體系結構進行比較外,還采用VGG[6]、U-Net[7]和HCNN[8]的方法,在相同的FPGA體系結構中進行性能的對比分析,同時,實驗過程中將本文所提加速器標記為NCNN。
通過測試得到基于卷積網(wǎng)絡加速器的FPGA數(shù)據(jù)處理時的資源使用狀況,如表1所示。該表描述了所提加速器在并行計算最優(yōu)情況下時對FPGA各類資源的利用。DSP的利用率達到89.20%,DSP的主要功能是進行復雜的卷積計算,其利用率高說明了加速器能夠有效利用DSP的計算性能,改善計算效率與并行性。此外,BRAM和LUT資源的利用率也比較理想,表明所提方案在FPGA資源利用方面的合理性。
表1 FPGA資源利用狀況
表2描述了最優(yōu)卷積網(wǎng)絡加速器的分層框架與性能??梢钥闯?,前三層操作數(shù)量與卷積核都在不斷攀升,在第四層卷積操作達到峰值,對應的GOPS也較高。整體來看,整個網(wǎng)絡的計算時間為15.406ms,GOPS為148.88。
表2 最優(yōu)卷積網(wǎng)絡加速器的分層數(shù)據(jù)
基于不同的平臺,得到各自對應的性能對比,結果如表3所示。經(jīng)比較可知,在圖像計算時間上,F(xiàn)PGA平臺所需時間僅為GPU的15.7%,為CPU的5.0%。有效算力則是GPU的2.3倍,是的CPU的8.1倍。此外,功耗也有所降低,比GPU少37.9W,比CPU少57.69W。通過各項數(shù)據(jù)比較,所提加速器表現(xiàn)出明顯的性能收益。
表3 不同平臺性能比較
基于FPGA實驗環(huán)境,測試不同加速器的幀速,結果如圖3所示。經(jīng)比較可以發(fā)現(xiàn),在相同的時鐘頻率情況下,本文所提加速器的幀速明顯高于對比方法,約為VGG的5.31倍,為U-Net的2.50倍,為HCNN的1.23倍。在推斷加速的同時,其功耗也沒有明顯的增加,維持在較為良好的功耗狀態(tài)。
圖3 不同加速器的性能比較
基于FPGA實驗環(huán)境,測試不同加速器的資源利用狀況,結果如圖4所示。通過結果比較可知,所提加速器對DSP與LUT資源的使用最多,這是因為加速器需要最大程度利用DSP資源來提高并行計算效率。對BRAM資源的使用則不是最高的,這是因為所提加速器為了提高數(shù)據(jù)利用率與查找效率,會對一些中間變量采取緩存,但是并沒有對過多數(shù)據(jù)進行緩存,緩存數(shù)據(jù)過多將會導致存儲效率和查找速度降低。
圖4 不同加速器的資源比較
本文設計了一種能夠在FPGA上運行的卷積網(wǎng)絡加速器,用以提高FPGA在數(shù)據(jù)處理時的并行效率。方案對卷積網(wǎng)絡采取優(yōu)化加速,并基于加速器設計了FPGA的處理和緩存架構。通過與不同平臺的對比實驗,證明了所提方案可以有效利用FPGA資源,在處理時間、GOPS和功耗方面都優(yōu)于GPU和CPU。另外,通過與不同方案的對比實驗,證明了所提方案具有良好的加速性能與合理的資源利用率。