張旭欣,張 嘉,李新增,金 婕
(上海工程技術大學 電子電氣工程學院,上海201600)
深度卷積神經網絡(Convolutional Neural Network,CNN)已經成為了當前計算機視覺系統中最有前景的圖像分析方法之一。
近 年 來,隨 著Binary-Net、Dorefa-Net、ABC-Net 等[1-3]低精度量化神經網絡的深入研究,越來越多的研究集中于在FPGA 硬件中構建定制的加速器結構,實現CNN 的加速[4]。 基于FPGA 的低精度量化神經網絡實現主要可分為兩類:流架構[5-6]和層架構[7-8]。 其中,由于流架構實現了流水線化,每個階段都可以獨立處理輸入且可以針對CNN 逐層設計并優化相應層的加速運算單元, 因此擁有更高的吞吐率和更低的延遲以及內存帶寬,但其邏輯資源等消耗也相當可觀。 因此,現有的基于流架構實現的二值神經網絡加速器研究大多是針對32×32 尺度MNIST 數據集等小尺度的圖像輸入。 而實際應用中更多使用如448×448 尺度的YOLO、224×224 尺度的VGG 等作為骨干網絡,一方面,大尺度輸入的網絡結構參數量往往較大(以VGG 為例,其參數量大約500 MB),高端FPGA 的片上內存容量也僅32.1 Mb 左右,這對FPGA 實現CNN 加速將是資源瓶頸。 即使采用低精度量化策略,FPGA 有限的片上內存資源仍捉襟見肘。另一方面,雖然各層運算單元可以得到特定優化,然而由于網絡拓撲結構限制,往往各層網絡很難實現計算周期的匹配,從而造成推斷性能難以進一步提高。針對基于流架構的二值卷積神經網絡加速器設計存在的資源與性能的瓶頸,本文以224×224 尺度的VGG-11 網絡加速器設計為例,重點研究了大尺度的二值卷積神經網絡硬件加速器設計、優化及驗證,主要工作如下:
(1)針對大尺度流架構的二值VGG 卷積神經網絡加速器設計存在的資源與性能瓶頸,提出了網絡模型優化和流水線優化的方法。
(2)設計并優化了224×224 尺度的基于流架構的二值VGG 卷積神經網絡加速器。實驗表明基于FPGA 平臺實現了81%的準確率,219.9 FPS 的識別速度,相較于同類型的加速器識別速度最高提升了33 倍。
二值卷積神經網絡激活與權值均采用符號函數進行二值化,如式(1)所示:

其中w 為單精度浮點權重,wb為二值權重。 在硬件設計中若以邏輯0 表示-1,邏輯1 表示1,則有:
(1)乘法運算可簡化為Xnor 運算和PopCount 累加運算[6]。 因此,對于特征圖r 行c 列卷積核大小為(kc,kr)的卷積運算,如式(2)所示:

(2)二值卷積神經網絡的批歸一化與符號激活函數運算過程如圖1 所示。

圖1 批歸一化與激活
若結合歸一化與符號激活函數即y=sign (BN(x)),可得:

其中x 為前一層卷積層輸出,μ、σ 是批量輸入的均值和方差,ε、γ、β 為參數,chin表示輸入通道數。
綜上所述,二值卷積運算單元(Processing Element,PE)計算流程如下:輸入特征圖與權值經過同或門與累加器進行卷積運算, 再經閾值比較器實現批歸一化與激活函數運算,硬件結構如圖2 所示。
卷積層包含了多通道輸入與多通道輸出。 因此,單層計算引擎通常由PE 陣列構成,如圖3 所示,計算引擎從緩沖區讀入SIMD 通道特征圖,經PE 陣列并行計算得到多個輸出到緩沖區。
基于數據流結構的加速器,通過層間流控模塊,逐層將二值卷積計算引擎連接起來,整體結構如圖4 所示,通過調節各層SIMD 與PE 參數,可以實現性能與邏輯資源的最優化。

圖2 二值卷積運算單元

圖3 二值卷積計算引擎

圖4 數據流架構
針對二值卷積神經網絡加速器存在的資源瓶頸以及性能瓶頸,需要從網絡拓撲、流水線運算周期均衡等多方面進行優化設計:
(1)由于硬件資源限制、網絡結構以及大量的網絡參數,往往造成片上存儲資源瓶頸,因此需要首先針對網絡結構進行優化。
(2)由于不同網絡層運算量各不相同,運算所需周期也不同,因此需要針對流水線進行逐層的運算優化,平衡每層的運算周期。
原始VGG-11 的網絡拓撲中的首個全連接Fc1 層參數量顯著高于其余各層,約占網絡整體參數量79%。由于其參數量過大,既造成了片上內存資源瓶頸又導致計算量過大,與其余各層計算周期嚴重不均衡,使流水線阻塞造成性能瓶頸。針對上述問題,對VGG-11 網絡結構的瓶頸層進行優化:
(1)對原始浮點卷積VGG-11 進行二值化,以有效降低內存占用以及邏輯資源數量。
(2)在卷積層與Fc1 層之間添加全局最大池化層,將卷積層輸出特征圖從7×7 池化到1×1。
優化后的二值VGG-11 網絡拓撲如表1 所示,添加全局最大池化層(Global Max Pool)后,Fc1 層參數量降低了約49 倍,同時由于對網絡進行了二值化,整體網絡參數所占內存空間從511.3 MB 降低到3.66 MB,因而有效地從網絡結構層面降低了內存資源瓶頸。

表1 二值VGG-11 網絡拓撲
基于數據流架構示意圖如圖5 所示,Initiation Interval為兩個任務間的時間間隔,Latency 為整體任務完成的延遲。 由于采用數據流架構,網絡加速器的吞吐率可以采用Fclk/IImax來進行估算。 計算延遲最慢的網絡層會導致任務間的時間間隔最大為IImax,從而決定了網絡的吞吐率。

圖5 流水線時序圖
根據上述分析可知,消耗時鐘周期數最多的計算引擎會成為整體性能的瓶頸,從而會造成其他層資源的浪費和性能的下降。因此,針對流水線優化,需要針對不同的計算引擎之間進行整體的計算周期均衡,盡可能地保證各層的計算周期相近。
為了有效提高加速器的性能與資源利用率,本文設計了不同的PE 陣列參數配置,以驗證不同的PE 和SIMD 配置對分類效率的影響,表2 中給出的計算陣列結 構 參 數,A 是 最 低 速 的 配 置,B、C、D、E 依 次 增 加 了PE 以及SIMD,E 是根據調整得到的最好的結果。

表2 PE 陣列配置
如表3 所示,根據表2 中SIMD 及PE 參數所對應的各網絡層計算周期,通過盡可能將各網絡層運算周期均衡調整,從而可以在相應的資源占用率下實現最大化加速器推斷速率。

表3 運算周期
在Ubuntu16.04 操作系統下,基于Pytorch 深度學習框架訓練二值VGG-11 卷積神經網絡,實驗基于CIFAR-10數據集驗證,將數據集圖像尺寸放大到224×224 作為網絡輸入,數據訓練利用NVIDIA Quadro P2000 GPU 實現加速。 基于流架構二值VGG-11 加速器硬件系統開發基于ZCU102 開發板,最終硬件系統實現了81%的識別率,推斷速率、資源占用率等如表4 所示,最高實現了219.9 FPS。

表4 資源利用率對比
通過實驗對比可得出如下結論:
(1)逐漸增加PE 或SIMD 的數量能提高深度神經網絡加速器的推斷速率,但會占用更多邏輯資源,反之也可以通過降低推斷速率來換取邏輯資源占用面積的縮減。
(2)比較方案E 和方案D,除Conv1 卷積層外,其余各層均提高了SIMD 和PE 數量以及縮減了計算周期,然而對比實現結果,可以發現邏輯資源占用率有了大幅增長,而推斷速度卻并沒有得到大幅提升。 這驗證了針對于流水線結構的深度卷積神經網絡加速器來說,計算周期延遲最大的計算引擎對網絡整體性能有較大的影響,在設計中對各層運算單元計算周期進行均衡尤為重要。
(3)對比FPGA 片上資源LUT、FF 以及BRAM 等資源,片上內存數量是限制進一步提高神經網絡層數以及提高推斷速度的資源瓶頸。
與國內外相關基于FPGA 的VGG 網絡加速器實現進行比較,如表5 所示。通過優化設計,實現了相較于其他VGG 加速器最高33 倍推斷加速,相比基于層架構的同類型二值VGG 網絡加速器[8]提高了7 倍。

表5 基于FPGA 的VGG 加速器對比
本文通過從網絡結構、流水線均衡等多方面優化設計,實現了輸入尺度更大的二值VGG-11 卷積神經網絡加速器,并驗證了優化方法的有效性,為更大尺度、更深層次的卷積神經網絡加速器提供了設計優化思路。