李政清,穆繼亮
(1. 三亞學院理工學院,海南 三亞 570200;2. 中北大學儀器與電子學院,山西 太原 030000
在機器視覺與人工智能的嵌入式應用場景中,需要完成大量的數據計算分析。對于復雜算法,采用CPU的實現方式普遍存在效率低下,實時性較差的缺點;采用CPU的實現的方式則會導致功耗和成本的增加。于是,越來越多的研究采取FPGA作為數據處理硬件加速器[1]。
由于卷積神經網絡(CNN)在圖像、語音識別方面表現出的良好學習特征,很多研究人員欲將其引入人工智能的嵌入式領域。CNN除了具有多層學習能力,還自帶并發計算特征[2],恰好與FPGA的并發處理相互照應。同時,FPGA具有的可編程能力能夠有效適應CNN的網絡變化。但是,經典CNN的結構和參數過于復雜,對于資源受限的嵌入式系統而言,難以直接進行使用[3]。于是,一些學者致力于CNN與嵌入式系統的融合,從而提高嵌入式系統上的數據處理性能。文獻[4]在CNN中采用了快速濾波來降低計算復雜度,同時設計了適用于FPGA的算法架構,從而獲得較好的有效算力。文獻[5]通過滑窗的并行來對卷積操作進行加速,并采取8bit的定點量化處理,從而減少FPGA資源消耗,并獲取較高的處理精度。文獻[6]基于CNN稀疏特征,將其轉換成矩陣乘積處理,并在FPGA上進行實現,該方法實現簡單,容易在嵌入式系統上移植。此外,文獻[7]設計了VGG網絡加速器,并且具備完整的卷積與連接過程;文獻[8]設計了U-Net網絡加速器,具備卷積與逆向卷積過程。
基于當前研究,本文設計了一種卷積網絡加速器,通過對各層的優化來改善網絡的收斂性和適應性,以及神經元增長對權值處理效率的影響。針對FPGA應用設計了相應的加速器實現架構,包括數據處理和緩存機制,并通過資源分析來調整網絡架構。最后,利用與不同平臺與不同加速器的比較,對基于卷積網絡加速器的FPGA數據處理性能進行驗證。
CNN一般由卷積、池化,以及連接多個層構成,其模型描述如圖1所示。對于任意輸入,利用卷積層對其進行特征的分析提取。該過程中首先需要將特征圖與卷積核相乘,再通過ReLU函數與卷積處理確定最終的特征圖,采用ReLU函數有利于加速收斂,其表達式描述如下
ReLU:y=max(0,x)
(1)

圖1 CNN模型
利用上層卷積處理輸出下層特征圖,同時卷積核對應變量就是計算權值,卷積過程描述如下

L[d,d,k,g])+P
(2)
其中,i代表上級特征圖的層數;d′,w′,h′分別代表下級特征圖對應的深度、寬度和高度;D代表上級特征圖深度;K,G代表卷積核大??;P代表偏置。
池化層主要用于完成抽樣處理,通常采取與卷積層交叉的方式。利用抽樣處理,有利于提高網絡的適應性。這里采取平均池化策略,公式描述如下

(3)

連接層位于網絡輸出側,包含眾多權值計算。在網絡拓撲結構增加的情況下,由于層數與神經元數量的增加,將會使得權值數量急劇增長,進而嚴重影響數據處理效率。為降低權值數量,將特征圖先與1×1卷積核進行運算,再依次與1×1、3×3卷積核進行運算。利用3×3卷積把特征圖采取壓縮,這樣就能夠在一個層中達到并行計算的目的。同時,池化層與連接層可以看作是特殊情況下的卷積層,可以采用同樣的策略。
處理模塊的核心任務是卷積操作,并得到最終的特征圖。由于特征圖包含多個方向,且要在各個方向上采取并行計算,這就需要有多個處理模塊共同參與。對于一個l×l大小的特征圖,處理模塊會將特征和權值派發給l×l個處理單元,最終處理模塊將要進行m×l×l次乘加操作,其中m代表通道數量。
處理單元在接收到派發數據后,根據比較器的結果確定輸入數據的有效性。同時局部計數器將對有效數據進行計數。然后判定器對有效數據的權值索引和計數等參數采取驗證,充分保證權值與特征圖的有效,其中索引被標記為log2m位寬定點數dl,l。對于比較器i的輸出,判定器的驗證過程可以表示如下
check=i&(dl,l>>count)
(4)
其中,count代表有效數據計數。
驗證結果將會被傳遞至控制單元,進而控制驗證通過的數據參與乘加操作。乘加操作涉及的計算量較大,交給FPGA的片上DSP處理,通過若干DSP并行的方式提高計算效率。DSP的使用情況可以采用以下公式進行估算:
RDSP=NDSP×NPU×l×l
(5)
其中,NDSP代表占用的DSP模塊數量;NPU代表處理模塊數量;l×l為計算單元數量。
在計算過程中,產生的與特征圖與權值相關變量均采取BRAM緩存。對于并行變量,應該確保它們存放在不同的BRAM分區上。對于存儲區域,應該從橫向、縱向,以及深度方面分別采取分配。假定處理模塊陣列描述為Pw×Ph×Pd,Pw,Ph,Pd分別表示在橫向、縱向和深度方面的處理模塊數量。在輸入數據的橫向上,處理模塊將會得到Pw+l-1個變量及其相應的計算,根據變量與計算的數量,將數據分配至Pw+l-1個BRAM。同理,在縱向上分配Ph+l-1個BRAM,深度上分配NDSP個BRAM。輸出數據在橫向上分配Pw個BRAM;縱向上分配Ph個BRAM;深度上分配NPU個BRAM。權值在橫向和縱向上均分配l個BRAM;輸入深度上分配NDSP個BRAM;輸出深度上分配NPU個BRAM。
除了緩存的分配,還應關注復用情況,良好的復用設計能夠緩解數據交換過程中的資源損耗。處理單元每一輪分配的BRAM數量為RDSP,在本輪執行過后,如果將其間的變量保留下來,便可以在后續操作時快速獲取參數值,并避免重復計算。尤其是當滑動窗口發生移動,可以直接從緩存得到所需變量。假定輸入、輸出和權值對應的復用系數分別為λ1,λ2,λ3,則BRAM的使用情況可以表示為
RBRAM=λ1((Pw+l-1)×(Ph+l-1)×NDSP)+
λ2(Pw×Ph×NPU)+λ3(l×l×NDSP×NPU)
(6)
卷積網絡加速器在對輸入數據進行處理的過程中,可以采用并行方式進行操作。而FPGA在利用片上DSP實現卷積操作時,也可以采用并行方式實現網絡計算。該過程中,計算并行程度受輸出特征圖影響,卷積核并行程度則受FPGA影響。由于卷積操作的所有乘法計算都是基于DSP的,因此在卷積核并行計算時,乘法器與DSP應該滿足如下關系
CP×DP×Mi≤DSPtotal
(7)
其中,CP代表計算并行程度;DP代表卷積核并行程度;Mi代表處理i×i卷積時的乘法器數量;DSPtotal代表FPGA內部的DSP模塊數量。
在基于卷積網絡加速器的FPGA數據處理過程中,不僅是對DSP資源的占用,還有對存儲資源的占用。BRAM需要完成特征圖與中間結果的緩存,于是存儲資源應該滿足如下關系

(8)

在考慮資源占用的同時,還應該分析數據處理過程中FPGA的執行時間。在固定時鐘周期Tclk情況下,數據輸入的時間受特征圖的大小、通道,以及硬件架構影響,公式表示為
Tin=Tclk×η1×win×hin×din
(9)
其中,η1代表傳遞效率。
權值變量受卷積操作影響,其時間表示為:
Tw=Tclk×j×j×DP×din
(10)
數據在卷積網絡的中間計算時間除了與特征圖大小有關外,主要受并行性能和計算效率影響,公式表示為

(11)
其中,η2代表計算效率;Nc代表卷積量。
結果輸出時間與并行行性能有關,表示為

(12)
通過求解Tin,Tw,Tc,Tout的總和,便可以得到一層網絡的執行時間,再根據網絡層數,就可以計算得到FPGA的累計需要時間。
實驗平臺選擇Xinlinx VC709,其上搭載的是VC709 FPGA,實現環境是Xinlinx Vivado 2017。該FPGA的片上資源包括3600 DSP Slice,1470 BRAM,以及433200LUT。仿真數據集選擇ImageNet,在初始化階段,通過歸一化操作將像素映射到[-1,1]范圍內。卷積網絡加速器陣列規模設置為128×16,特征圖與權值在BRAM的緩沖深度均設置成2048?;诰矸e網絡加速器實現的FPGA數據處理架構如圖2所示。

圖2 FPGA數據處理架構
為了形成性能對比,分別選擇一款CPU與GPU體系架構。CPU型號為Intel core i5 2500K,主頻3.3GHz;GPU型號NVIDIA GeForce GTX 960。除了對體系結構進行比較外,還采用VGG[6]、U-Net[7]和HCNN[8]的方法,在相同的FPGA體系結構中進行性能的對比分析,同時,實驗過程中將本文所提加速器標記為NCNN。
通過測試得到基于卷積網絡加速器的FPGA數據處理時的資源使用狀況,如表1所示。該表描述了所提加速器在并行計算最優情況下時對FPGA各類資源的利用。DSP的利用率達到89.20%,DSP的主要功能是進行復雜的卷積計算,其利用率高說明了加速器能夠有效利用DSP的計算性能,改善計算效率與并行性。此外,BRAM和LUT資源的利用率也比較理想,表明所提方案在FPGA資源利用方面的合理性。

表1 FPGA資源利用狀況
表2描述了最優卷積網絡加速器的分層框架與性能??梢钥闯?,前三層操作數量與卷積核都在不斷攀升,在第四層卷積操作達到峰值,對應的GOPS也較高。整體來看,整個網絡的計算時間為15.406ms,GOPS為148.88。

表2 最優卷積網絡加速器的分層數據
基于不同的平臺,得到各自對應的性能對比,結果如表3所示。經比較可知,在圖像計算時間上,FPGA平臺所需時間僅為GPU的15.7%,為CPU的5.0%。有效算力則是GPU的2.3倍,是的CPU的8.1倍。此外,功耗也有所降低,比GPU少37.9W,比CPU少57.69W。通過各項數據比較,所提加速器表現出明顯的性能收益。

表3 不同平臺性能比較
基于FPGA實驗環境,測試不同加速器的幀速,結果如圖3所示。經比較可以發現,在相同的時鐘頻率情況下,本文所提加速器的幀速明顯高于對比方法,約為VGG的5.31倍,為U-Net的2.50倍,為HCNN的1.23倍。在推斷加速的同時,其功耗也沒有明顯的增加,維持在較為良好的功耗狀態。

圖3 不同加速器的性能比較
基于FPGA實驗環境,測試不同加速器的資源利用狀況,結果如圖4所示。通過結果比較可知,所提加速器對DSP與LUT資源的使用最多,這是因為加速器需要最大程度利用DSP資源來提高并行計算效率。對BRAM資源的使用則不是最高的,這是因為所提加速器為了提高數據利用率與查找效率,會對一些中間變量采取緩存,但是并沒有對過多數據進行緩存,緩存數據過多將會導致存儲效率和查找速度降低。

圖4 不同加速器的資源比較
本文設計了一種能夠在FPGA上運行的卷積網絡加速器,用以提高FPGA在數據處理時的并行效率。方案對卷積網絡采取優化加速,并基于加速器設計了FPGA的處理和緩存架構。通過與不同平臺的對比實驗,證明了所提方案可以有效利用FPGA資源,在處理時間、GOPS和功耗方面都優于GPU和CPU。另外,通過與不同方案的對比實驗,證明了所提方案具有良好的加速性能與合理的資源利用率。