劉建梁,袁賢珍
(1.天津天瞳威勢電子科技有限公司,天津300384;2.中車株洲電力機車研究所,株洲412005)
卷積神經網絡(Convolutional Neutral Network,CNN)作為人工神經網絡的延伸,是第一個真正成功訓練多層網絡結構的學習算法,被廣泛用于機器視覺、人工智能等領域[1]。
在卷積神經網絡推理運算中,卷積運算為計算密集型運算[2]。由于卷積計算量龐大,需要設計與計算量相匹配的加速器。圖形處理器(Graphic Processing Units,GPU)、現場可編程門陣列(Field Programmable Gate Array,FPGA)、專用集成電路(Application Specific Integrated Circuit,ASIC)是常用的神經網絡加速器。在這些加速器中,FPGA 憑借它的高度并行計算、低功耗、可重復編程的特點而被廣泛采用[3]。
本文受全并行轉置型FIR 濾波器結構的啟發,將這種結構應用在加速卷積神經網絡卷積運算的FPGA設計中。在此結構基礎上,使用Xilinx DSP Slice 的INT8 優化技術,最終使設計在運算速度和電路面積上都得到了優化。
卷積神經網絡卷積層由若干卷積單元組成,完成對圖像特征的提取,卷積運算也是該網絡中計算量最大的部分。典型的卷積運算示意圖如圖1 所示。

圖1 卷積運算示意圖
卷積層中的每個神經元與上一層的局部感受感受野相連進行像素的加權求和,其計算公式如式(1)。

式中,Xjl表示第l 層中的第j 個特征圖;Xil-1為上一層的特征圖的輸入;Wlij為卷積核的權值。卷積核窗口按照一定的步長在特征圖上滑動,每滑動一次產生一個卷積運算結果。當卷積核窗口滑動至行尾時,會向下移動一行并從左側行始開始新的一行卷積,直到完成整幅圖像像素的卷積運算。可以發現,參與卷積運算的像素之間是獨立進行計算的,并沒有前后依賴關系,這就為FPGA 流水線并行結構設計帶來了可能[4]。
DSP48E1 Slice 是Xilinx 7 系列FPGA 中的運算單元,乘法、乘加和乘累加是其最顯著的功能,DSP48E1結構示意圖如圖2 所示。

圖2 DSP48E1結構示意圖
從圖2 可知,DSP48E1 內部集成1 個25 位的預加器和1 個25×18 的乘法器,A 和D 是預加器的輸入,B是乘法器的輸入,INT8 優化技術就是利用預加器和乘法器,同時處理兩個并行的INT8 乘法。
為了能并行計算A*B 和D*B,A 和D 之間要進行特殊的編碼,既要保證高位不影響低位的計算,也要做到低位計算對高位的任何影響必須可檢測、可恢復[5]。具體編碼方法是把D 左移16 位后與A 相加,如圖3所示。參考文獻[6]提出了將(D<<16+A)*B 的結果分離出A*B 和D*B 方法,這里不再贅述。

圖3 預加器輸入A和D的編碼方式
有限長單位沖激響應濾波器(Finite Impulse Response 濾波器,FIR 濾波器)是數字信號處理系統中的基本元件,在通信、圖像處理、模式識別等領域有著廣泛的應用。全并行轉置型FIR 濾波器本質上也是FIR濾波器,只是從FPGA 硬件實現的角度,具有全并行和轉置的特點。全并行是指依據輸入信號的并行數據流而設計,每個時鐘會得的一個輸出響應;轉置是相對于全并行直接型FIR 濾波器而說的,采用流水線技術和重定時技術,在直接型結構的基礎上進行了轉置[7]。以抽頭數為3 的全并行轉置型FIR 濾波器為例,系統轉移函數如式(2):

濾波器結構框圖如圖4 所示,從圖4 可以看出該結構的兩個特點:①所有濾波運算的乘法同時執行;②所有抽頭系數共享輸入信號。如果輸入信號和抽頭系數都是8bit,這個結構恰好可以使用INT8 優化技術減少DSP的使用,用1 個DSP48E1 打包兩個相鄰的乘法器。

圖4 抽頭為3的全并行轉置型FIR濾波器結構框圖
對于一個卷積核尺寸為3×3 的卷積運算,可以看作是3 個抽頭數為3 的FIR 濾波器分別濾波后再并行求和。這樣做的好處是可以充分發揮FPGA 的并行計算特點,每個時鐘周期完成一次卷積運算,同時能夠減少DSP 的使用,本設計硬件實現框圖如圖5 所示。

圖5 3×3卷積運算模塊設計
輸入特征圖是以逐行的方式進入預緩存LineBuffer。由于LineBuffer 是由真雙端口RAM 構成,在SAME 填充方式下,只需要預緩存特征圖的第一行,隨后生成列對齊的3 行特征圖像素,以數據流的方式流入乘法器,完成卷積運算。需要注意的是,由于對特征圖進行了填充,當卷積核移動到行首或者行尾時,需要額外的邏輯對乘法器的輸出進行控制,保證卷積運算結果的正確。
在Zynq7000 平臺上對本設計進行了驗證,實際使用6 個DSP48E1 Slice,結果符合預期。
本文基于全并行轉置型FIR 結構和Xilinx DSP Slice INT8 優化技術,對量化精度為8 比特的卷積神經網絡卷積運算模塊進行了優化設計,兼顧了卷積運算的速度和面積。對于k*k 的卷積核,需要占用DSP Slice 數量為ceil(k/2)*ceil(k/2),對卷積神經網絡加速器設計,具有很高的參考價值。