黃程程,董霄霄,李 釗
(山東理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,山東淄博255049)
卷積神經(jīng)網(wǎng)絡(luò)在圖像分類、語音識(shí)別、目標(biāo)檢測(cè)等應(yīng)用中取得了重大進(jìn)展[1-3]。其中5×5卷積相較3×3卷積有更大的感受野,可以提取更多的邊緣特征,在醫(yī)學(xué)影像處理等領(lǐng)域效果顯著,且廣泛應(yīng)用于AlexNet、ZFNet和GoogLeNet等經(jīng)典模型[1]。近期的許多研究就使用包含5×5卷積的架構(gòu)取得了較3×3卷積更高的預(yù)測(cè)準(zhǔn)確率[4-6]。
卷積神經(jīng)網(wǎng)絡(luò)模型規(guī)模龐大,計(jì)算復(fù)雜度高,需要占用大量硬件資源,因此硬件加速器逐漸被用于加速神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)階段。常用的神經(jīng)網(wǎng)絡(luò)加速器包括圖形處理器(Graphic Processing Units,GPU)、專用集成電路(Application Specific Integrated Circuit,ASIC)和現(xiàn)場(chǎng)可編程邏輯門陣列(Field Programmable Gate Array,F(xiàn)PGA)。得益于高并行度、低能耗和可重構(gòu)等優(yōu)點(diǎn),F(xiàn)PGA成為了目前主流的卷積神經(jīng)網(wǎng)絡(luò)硬件加速平臺(tái)[7-16]。
目前在FPGA上加速卷積神經(jīng)網(wǎng)絡(luò)面臨的問題有:1)卷積神經(jīng)網(wǎng)絡(luò)的大規(guī)模密集型計(jì)算受到FPGA計(jì)算能力(片上數(shù)字信號(hào)處理器(Digital Signal Processor,DSP)數(shù)目)的限制,如何優(yōu)化算法以降低乘法運(yùn)算量是提升加速器系統(tǒng)性能的主要問題。2)各類快速算法在降低卷積神經(jīng)網(wǎng)絡(luò)乘法運(yùn)算量的同時(shí)通常以提升內(nèi)存資源占用和存儲(chǔ)器帶寬占用為代價(jià),F(xiàn)PGA片上硬件資源量的限制將影響加速器系統(tǒng)性能。3)卷積神經(jīng)網(wǎng)絡(luò)計(jì)算量龐大,高效的數(shù)據(jù)重用能夠降低能耗開銷并減小設(shè)計(jì)面積。
在5×5卷積的乘法運(yùn)算量方面,文獻(xiàn)[7]使用8 bit定點(diǎn)數(shù)據(jù)量化模型,在2個(gè)8 bit權(quán)重中插入1個(gè)8位的全0數(shù)據(jù),組成一個(gè)低8位和高8位分別為權(quán)重?cái)?shù)據(jù)、中8位為全0字段的24位新數(shù)據(jù),使用1個(gè)DSP得出2次乘法運(yùn)算結(jié)果,將傳統(tǒng)卷積算法的乘法運(yùn)算量降低至50.0%。文獻(xiàn)[8]利用卷積的元素代數(shù)性質(zhì),應(yīng)用Winograd快速卷積算法,將使用小尺寸卷積的VGGNet(Visual Geometry Group Network)等模型的乘法運(yùn)算量降低至45.0%,有效提高了硬件加速器的效率。文獻(xiàn)[9]基于二維快速傅里葉變換(Fast Fourier Transform,F(xiàn)FT)算法提出了一種靈活的自動(dòng)化設(shè)計(jì)高通量模型加速器,將乘法運(yùn)算量降低至約31.0%。文獻(xiàn)[10]采用n=6的二維Winograd算法,級(jí)聯(lián)3×3卷積構(gòu)建5×5卷積,將乘法運(yùn)算量降低至約19.4%。然而二維Winograd算法不同于傳統(tǒng)卷積算法,使用級(jí)聯(lián)3×3卷積的方法構(gòu)建5×5卷積將增加乘法運(yùn)算量、系統(tǒng)的存儲(chǔ)器帶寬需求,級(jí)聯(lián)的卷積層間也存在計(jì)算延遲,同時(shí)也會(huì)增加設(shè)計(jì)空間探索周期。在硬件資源占用方面,文獻(xiàn)[11]和文獻(xiàn)[10]分別提出了基于列或行的二維Winograd卷積算法雙緩沖區(qū)數(shù)據(jù)布局方案,降低了存儲(chǔ)器帶寬需求。然而文獻(xiàn)[10]的研究結(jié)果表明,他們所設(shè)計(jì)的加速器存儲(chǔ)器帶寬占用比例略高于片上DSP占用比例,這意味著受制于有限的FPGA硬件資源,部分情況下其設(shè)計(jì)無法達(dá)到理論的最高性能。在數(shù)據(jù)重用方面,文獻(xiàn)[12]提出了一種基于深流水線體系架構(gòu)的二維/三維Winograd卷積算法加速器設(shè)計(jì),通過層融合和層聚類等方法,顯著提高了數(shù)據(jù)重用性。文獻(xiàn)[11]和文獻(xiàn)[10]通過雙緩沖區(qū)數(shù)據(jù)布局方案重用了二維W inograd算法鄰域間的重疊數(shù)據(jù)。但二維Winograd算法轉(zhuǎn)換過程大量的加法運(yùn)算中存在可復(fù)用的中間結(jié)果,這些可復(fù)用結(jié)果的加法運(yùn)算屬于無效運(yùn)算,僅會(huì)增加加速器系統(tǒng)的能耗開銷和設(shè)計(jì)面積,上述文獻(xiàn)并未就此問題進(jìn)行研究和優(yōu)化。
針對(duì)上述方法中計(jì)算復(fù)雜度高、存儲(chǔ)器帶寬需求高、級(jí)聯(lián)的卷積層間存在計(jì)算延遲、設(shè)計(jì)空間探索周期漫長(zhǎng)和加法計(jì)算量大等問題,提出了一種基于二維Winograd算法的雙緩沖區(qū)5×5卷積6級(jí)流水線方法。首先選用適宜尺寸的二維Winograd卷積算法降低計(jì)算復(fù)雜度和存儲(chǔ)器帶寬需求,然后通過雙緩沖區(qū)最小塊單元的設(shè)定指導(dǎo)并加快設(shè)計(jì)空間探索,增強(qiáng)可移植性,平衡FPGA硬件資源的使用,使設(shè)計(jì)不受任何硬件資源限制。最后通過深化二維Winograd卷積算法流水線,復(fù)用加法運(yùn)算過程中的中間計(jì)算結(jié)果,來降低加法運(yùn)算量,減小加速器系統(tǒng)的能耗開銷和設(shè)計(jì)面積。
表1對(duì)文章中使用的重要符號(hào)進(jìn)行說明。
表1 符號(hào)說明Tab.1 Explanation of symbols
Winograd算法于1980年由數(shù)學(xué)家Winograd提出[17]。以一維Winograd算法為例,記尺寸為r的卷積核輸出m個(gè)計(jì)算結(jié)果為F(m,r)。
傳統(tǒng)卷積算法計(jì)算F(2,3)需要2×3=6次乘法。Winograd算法計(jì)算F(2,3)僅需要4次乘法,輸入輸出如下:
具體過程如下:
其中m1、m2、m3、m4為:
Winograd算法中的常數(shù)乘法可以通過移位操作(如2-1、2-2和2)或由2n或2-n(n∈Z+)的組合后再移位(如5=20+22,1/6≈2-3+2-5+2-6)近似得到,因而計(jì)算m1、m2、m3、m4只需要4次乘法運(yùn)算。
上述乘法過程可表示為矩陣相乘形式:
其中Winograd算法F(22,32)的轉(zhuǎn)換矩陣AT、BT和G表示如下:
F(m2,r2)的二維Winograd算法可以通過嵌套迭代一維Winograd算法得到:
具體運(yùn)算步驟如下:
記U⊙V結(jié)果為out:
隨著壓縮模型理論的提出和應(yīng)用,現(xiàn)階段的研究大多使用16位定點(diǎn)數(shù)據(jù)代替浮點(diǎn)數(shù)據(jù),以減小計(jì)算資源和存儲(chǔ)資源的開銷。文獻(xiàn)[10]研究結(jié)果表明,由于轉(zhuǎn)換矩陣中的常數(shù)值范圍會(huì)隨參數(shù)n的增大而增大,使用16位定點(diǎn)數(shù)據(jù)時(shí),卷積核的精度不能低于2-10,Winograd算法中參數(shù)n(n=m+r-1)不得大于8,否則將影響卷積神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)準(zhǔn)確率。本文中分別使用多項(xiàng)式插值點(diǎn)(0,1,-1)、(0,1,-1,2,-2)及(0,1,-1,2,-2,1/2,-1/2)計(jì)算F(n=3,n=4)、F(n=5,n=6)及F(n=7,n=8)的轉(zhuǎn)換矩陣AT、BT和G。常數(shù)乘法如上所述,通過移位操作或由2n或2-n的組合后再移位實(shí)現(xiàn),使這部分運(yùn)算不占用DSP資源。
相較于傳統(tǒng)卷積算法,二維Winograd卷積算法的輸出結(jié)果不再是輸出特征圖上的單個(gè)點(diǎn),而是多個(gè)點(diǎn)組成的輸出特征圖子塊。對(duì)一個(gè)大小為m2的輸出特征圖子塊,二維Winograd卷積算法需要n2次乘法,而傳統(tǒng)算法需要m2r2次乘法。
由于二維Winograd卷積算法與傳統(tǒng)卷積算法計(jì)算原理有差異,這一部分對(duì)二維Winograd卷積算法下應(yīng)用5×5卷積和級(jí)聯(lián)3×3卷積的計(jì)算復(fù)雜度進(jìn)行了定量分析。
在此項(xiàng)工作的定量分析中默認(rèn)步長(zhǎng)為1,當(dāng)通過卷積后輸出特征圖大小為C×C時(shí),二維Winograd卷積算法乘法運(yùn)算量為:(■C/■m×n)2。
由于m,n,r均為已知常數(shù),設(shè)定C滿足C/m為正整數(shù),不考慮填充問題,可定量分析n≤8時(shí)二維Winograd算法下級(jí)聯(lián)與非級(jí)聯(lián)方法的計(jì)算復(fù)雜度。本文采用參數(shù)相同的常用F(m2,r2)實(shí)現(xiàn)級(jí)聯(lián)。
使用兩個(gè)F(22,32)級(jí)聯(lián)時(shí)乘法運(yùn)算次數(shù)為:
使用兩個(gè)F(42,32)級(jí)聯(lián)時(shí)乘法運(yùn)算次數(shù)為:
使用兩個(gè)F(62,32)級(jí)聯(lián)時(shí)乘法運(yùn)算次數(shù)為:
F(22,52)的乘法運(yùn)算次數(shù)為:
F(42,52)的乘法運(yùn)算次數(shù)為:
其中應(yīng)用級(jí)聯(lián)F(22,32)替代F(22,52)的過程如圖1所示。
圖1 級(jí)聯(lián)F(22,32)替代F(22,52)示意圖Fig.1 Schematic diagram of cascading F(22,32)to replace F(22,52)
通過對(duì)式(18)~(22)進(jìn)行對(duì)比可以得出:F(42,52)的乘法運(yùn)算次數(shù)是兩個(gè)級(jí)聯(lián)F(22,32)的約49.0%,兩個(gè)級(jí)聯(lián)F(42,32)的約87.1%,兩個(gè)級(jí)聯(lián)F(62,32)的約111.3%。此外,是傳統(tǒng)卷積算法的約17%。
為高效地利用硬件資源,數(shù)據(jù)傳輸速度必須大于或等于計(jì)算速度。存儲(chǔ)器帶寬需求越低,數(shù)據(jù)傳輸速度越快,為系統(tǒng)的準(zhǔn)確性和穩(wěn)定性提供保障。文獻(xiàn)[11]采用基于列的雙緩沖區(qū)數(shù)據(jù)布局完成設(shè)計(jì),并未進(jìn)行設(shè)計(jì)空間探索。文獻(xiàn)[10]采用基于行的雙緩沖區(qū)數(shù)據(jù)布局完成設(shè)計(jì),使用參數(shù)組{n,Pm,Pn}指導(dǎo)設(shè)計(jì)空間探索。其中,n表示F(m2,r2)的尺寸,Pm表示并行運(yùn)算的輸入圖像的通道數(shù),Pn表示并行運(yùn)算的卷積核的數(shù)目。本文設(shè)定參數(shù)對(duì){Pc,Px}指導(dǎo)設(shè)計(jì)空間探索,其中與文獻(xiàn)[10]相較,n=8,Pc=2Pm,Px=Pn。
對(duì)存儲(chǔ)器帶寬需求進(jìn)行建模和定量分析。計(jì)算輸入的n列數(shù)據(jù)所需時(shí)間為:
其中:C為輸入圖像通道數(shù),N為卷積核中濾波器數(shù)目,F(xiàn)req為工作頻率。
m列數(shù)據(jù)并行傳輸所需的時(shí)間為:
其中Bandwidth為存儲(chǔ)器帶寬。
由于要滿足Ttransfer≤Tcompute,即傳輸時(shí)間小于等于計(jì)算時(shí)間。因此可得存儲(chǔ)器帶寬需求為:
當(dāng)不采用雙緩沖區(qū)設(shè)計(jì)機(jī)制時(shí),n列數(shù)據(jù)并行傳輸所需的時(shí)間為:
此時(shí)的存儲(chǔ)器帶寬需求為:
通過對(duì)比式(25)和式(27)可得,在理想狀況下,雙緩沖區(qū)設(shè)計(jì)方法可以縮減(1-m/n)倍的存儲(chǔ)器帶寬需求。這意味參數(shù)m相同時(shí),卷積核尺寸越大存儲(chǔ)器帶寬需求越低。以F(42,52)、F(42,32)和F(62,32)為 例,三 者 分 別 能 夠 縮 減50.0%(1-4/8)、33.3%(1-4/6)和25.0%(1-6/8)的存儲(chǔ)器帶寬需求。因此F(42,32)和F(62,32)的存儲(chǔ)器帶寬需求約為F(42,52)的1.32倍和1.50倍。本文的設(shè)計(jì)方法較基于F(42,32)的方法降低了約24.2%的存儲(chǔ)器帶寬需求。而F(62,32)的存儲(chǔ)器帶寬需求最高,無法完成高性能的卷積神經(jīng)網(wǎng)絡(luò)加速器設(shè)計(jì)。此外存儲(chǔ)器帶寬需求越高,數(shù)據(jù)重用能力就越差,存儲(chǔ)器訪問也越高,會(huì)大幅增加整個(gè)硬件加速器系統(tǒng)的能耗。
結(jié)合計(jì)算復(fù)雜度分析進(jìn)行綜合評(píng)定,基于F(42,52)的二維Winograd算法5×5卷積存儲(chǔ)器帶寬需求最低,計(jì)算復(fù)雜度也低于傳統(tǒng)卷積算法和基于F(22,32)和F(42,32)的設(shè)計(jì),且不存在級(jí)聯(lián)卷積層間的計(jì)算延遲。
由于卷積神經(jīng)網(wǎng)絡(luò)規(guī)模龐大,計(jì)算過程復(fù)雜,且需要保證塊隨機(jī)存儲(chǔ)器(Block Random Access Memory,BRAM)使用率和存儲(chǔ)器帶寬使用率均低于或趨近于DSP使用率,使得基于參數(shù)組{n,Pm,Pn}的設(shè)計(jì)空間探索求性能最優(yōu)解的過程較為漫長(zhǎng)。本文的設(shè)計(jì)將n確定為8,Pc=2Pm,極大地減少了可能的參數(shù)組合方式,大幅提高了設(shè)計(jì)空間探索速度。由于采用了存儲(chǔ)器帶寬需求最低的設(shè)計(jì)方法,因而僅需在探索過程中求解以BRAM資源為約束條件的性能最優(yōu)解。
為快速高效完成設(shè)計(jì)空間探索工作,本文提出了一種雙緩沖區(qū)最小塊單元數(shù)據(jù)布局設(shè)計(jì)方案,計(jì)算和傳輸采用雙緩沖設(shè)計(jì)并行完成。最初將輸入特征圖和卷積核等輸入數(shù)據(jù)存儲(chǔ)在外部存儲(chǔ)器中,運(yùn)算過程中的輸入特征圖和輸出特征圖通過FIFO傳至FPGA平臺(tái)。由于片上存儲(chǔ)資源的限制,外部存儲(chǔ)器中存儲(chǔ)的數(shù)據(jù)將根據(jù)運(yùn)算階段分批次加載到片上存儲(chǔ)器中。之后建立性能評(píng)估模型指導(dǎo)設(shè)計(jì)空間探索求解,對(duì)多種參數(shù)組合方式進(jìn)行實(shí)驗(yàn)和數(shù)據(jù)對(duì)比,最終提出本文的設(shè)計(jì)方案。雙緩沖區(qū)最小塊單元設(shè)計(jì)如圖2所示。首先存儲(chǔ)三個(gè)緊鄰的8×4×2(8行、4列、通道數(shù)為2)的圖像塊,如圖2中A、B、C所示。其中選擇通道維度的深度為2,既降低了設(shè)計(jì)空間探索復(fù)雜度,也不會(huì)對(duì)最終性能水平產(chǎn)生影響。每次取相鄰的兩個(gè)圖像塊參與二維Winograd算法5×5卷積運(yùn)算,如AB和BC,每個(gè)最小塊單元單個(gè)運(yùn)算周期內(nèi)執(zhí)行128次乘法運(yùn)算。當(dāng)對(duì)AB進(jìn)行運(yùn)算后,A中的數(shù)據(jù)被覆蓋,而后重用B中存儲(chǔ)的數(shù)據(jù),對(duì)BC進(jìn)行運(yùn)算。當(dāng)完成最初前8行的運(yùn)算后將自動(dòng)翻轉(zhuǎn)至下部分計(jì)算的最左端,以此類推向后循環(huán),直至全部運(yùn)算結(jié)束。
圖2 雙緩沖區(qū)最小塊單元設(shè)計(jì)示意圖Fig.2 Schematic diagram ofdouble-buffer minimum block unit design
通過性能評(píng)估模型數(shù)據(jù)評(píng)估得出的雙緩沖區(qū)最小塊單元設(shè)計(jì),極大地降低了設(shè)計(jì)空間探索周期,也增強(qiáng)了可移植性。
如式(7)中所示,二維Winograd卷積算法F(42,52)計(jì)算需要逐步完成,首先完成U和V的加法計(jì)算,而后進(jìn)行U⊙V的矩陣點(diǎn)乘運(yùn)算,最后通過加法計(jì)算Out輸出結(jié)果。根據(jù)二維Winograd卷積算法計(jì)算過程的這一特性,使用多級(jí)流水線設(shè)計(jì)可以有效降低各計(jì)算階段間的延遲。
之前的二維Winograd卷積算法卷積采用4級(jí)流水線結(jié)構(gòu)實(shí)現(xiàn)[10]。第1階段并行執(zhí)行U、V的運(yùn)算,第2階段執(zhí)行U⊙V的運(yùn)算,第3階段執(zhí)行Out的運(yùn)算,第4階段將各通道計(jì)算結(jié)果進(jìn)行累加。這種設(shè)計(jì)方法在1級(jí)流水中完成U、V或Out的計(jì)算。在第1階段V的運(yùn)算過程中,V=BTInB的運(yùn)算需要等待BTIn全部運(yùn)算完畢后才能繼續(xù)執(zhí)行下一步與B的運(yùn)算,使得加法計(jì)算過程的延遲可能會(huì)大于乘法計(jì)算的延遲,導(dǎo)致加速器性能下降。
另一種方法是將In中的元素設(shè)為未知參數(shù),離線執(zhí)行V=BTInB的運(yùn)算,運(yùn)算結(jié)果中V的元素全部轉(zhuǎn)換為與In中元素相關(guān)的鏈?zhǔn)郊臃ǎㄈ鏔(22,32)中V的首個(gè)元素為(x0-x2-x8+x10)),通過這種方式在1級(jí)流水中實(shí)現(xiàn)V的計(jì)算。但由于矩陣乘法的代數(shù)性質(zhì),該方法需要完成更多次的加法運(yùn)算。以F(42,52)為例,此方法的加法運(yùn)算量是逐步運(yùn)算的近3倍,且部分常數(shù)乘法無法再由2n或2-n的組合進(jìn)行近似。這些加法運(yùn)算在FPGA中體現(xiàn)為大量觸發(fā)器(Flip Flop,F(xiàn)F)和查找表(Look-Up-Table,LUT)的使用。
因此本文啟用深流水線設(shè)計(jì),采用逐步運(yùn)算的6級(jí)流水線結(jié)構(gòu),合理分配硬件資源并減小處理轉(zhuǎn)換矩陣中常數(shù)乘法所帶來的誤差。6級(jí)流水線設(shè)計(jì)結(jié)構(gòu)如圖3所示。對(duì)于V,在流水線的第1階段,執(zhí)行V1=BTIn的運(yùn)算和存儲(chǔ),計(jì)算過程參考式(13),流水線的第2階段,執(zhí)行V=V1B的運(yùn)算和存儲(chǔ),計(jì)算過程參考式(14)。對(duì)于U,有兩種實(shí)現(xiàn)方式:第一種與V相同,流水線的第1階段,執(zhí)行U1=GF的運(yùn)算和存儲(chǔ),計(jì)算過程參考式(11),流水線的第2階段,執(zhí)行U=U1GT的運(yùn)算和存儲(chǔ),計(jì)算過程參考式(12)。由于U的運(yùn)算量始終小于V,這種設(shè)計(jì)方法不會(huì)對(duì)流水線的延遲產(chǎn)生影響。第二種是直接離線完成U的運(yùn)算并加載到FPGA的存儲(chǔ)器中。由于卷積神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)過程中卷積核權(quán)重不發(fā)生變化,U可以直接在FPGA外部完成計(jì)算。當(dāng)參數(shù)n≤8時(shí),V計(jì)算過程中的常數(shù)始終可以通過2n或2-n的組合進(jìn)行精確表示,而U計(jì)算過程中會(huì)出現(xiàn)諸如1/6等需要進(jìn)行近似處理的常數(shù),因此這種方法可以在更高的卷積核精度下進(jìn)行工作。相應(yīng)地,離線完成U的運(yùn)算代價(jià)是耗費(fèi)更多的BRAM資源。為保障系統(tǒng)性能,本文選用第一種方法以節(jié)省片上BRAM資源。在流水線的第3階段,執(zhí)行U⊙V的運(yùn)算并進(jìn)行存儲(chǔ)。流水線的第4階段,執(zhí)行Out1=ATout的運(yùn)算并進(jìn)行存儲(chǔ)。流水線的第5階段,執(zhí)行Out=Out1A的運(yùn)算并進(jìn)行存儲(chǔ)。流水線的第6階段,將各通道的運(yùn)算結(jié)果進(jìn)行累加和存儲(chǔ)。
圖3 六級(jí)流水線設(shè)計(jì)結(jié)構(gòu)示意圖Fig.3 Schematic diagram of 6-stage pipeline design structure
為驗(yàn)證針對(duì)5×5卷積所提出的雙緩沖區(qū)二維Winograd算法6級(jí)流水線方法的綜合性能,與現(xiàn)有文獻(xiàn)[7,9-10]的針對(duì)5×5卷積的加速器設(shè)計(jì)方法就硬件資源使用率(設(shè)計(jì)方法所用的各類硬件資源占片上總資源量的比率)、計(jì)算性能和DSP效率等方面進(jìn)行對(duì)比。實(shí)驗(yàn)選用AlexNet的第二個(gè)卷積層完成算法設(shè)計(jì)。為便于比較,采用高速集成電路硬件描述語言(Verilog integrated circuit Hardware Description Language,Verilog HDL)在Xilinx XC7A200T平臺(tái)上完成雙緩沖結(jié)構(gòu)設(shè)計(jì)、加法器和乘法器的流水線設(shè)計(jì)等。利用Vivado simulator仿真工具建立寄存器轉(zhuǎn)換級(jí)(Register Transfer Level,RTL)仿真模型,時(shí)鐘頻率與之前的多項(xiàng)研究工作保持一致,設(shè)為200 MHz。卷積神經(jīng)網(wǎng)絡(luò)模型預(yù)測(cè)過程的剩余部分在FPGA外部完成,確保所設(shè)計(jì)的算法不影響模型的預(yù)測(cè)準(zhǔn)確率。
采用ILSVRC2012數(shù)據(jù)集對(duì)本文所架構(gòu)的AlexNet進(jìn)行精度損失分析。訓(xùn)練數(shù)據(jù)集中有1 000個(gè)不同的類,每個(gè)類包含大約1 300個(gè)不同的圖像,驗(yàn)證數(shù)據(jù)集中有5 000個(gè)與訓(xùn)練數(shù)據(jù)集不同的樣本。本文采用16 bit定點(diǎn)數(shù)據(jù)完成量化,采用二維Winograd算法構(gòu)建AlexNet,并與使用32 bit浮點(diǎn)數(shù)的全精度初始模型進(jìn)行算法精度對(duì)比。
如表2所示,本文AlexNet模型的Top-1精度損失不超過0.5%,Top-5精度損失不超過1%,與文獻(xiàn)[7]方法、文獻(xiàn)[9]方法和文獻(xiàn)[10]方法大致相同。其中文獻(xiàn)[9]方法和文獻(xiàn)[10]方法精度損失均<1%,文獻(xiàn)[7]方法由于使用8 bit數(shù)據(jù)量化因而精度損失略高,約為<3%。
表2 精度損失分析 單位:%Tab.2 Accuracy lossanalysis unit:%
乘法運(yùn)算量是影響卷積神經(jīng)網(wǎng)絡(luò)FPGA加速器實(shí)際計(jì)算時(shí)間的主要因素。本文統(tǒng)計(jì)傳統(tǒng)卷積方法、文獻(xiàn)[7]方法、文獻(xiàn)[9]方法、文獻(xiàn)[10]方法和本文方法的AlexNet第二卷積層乘法運(yùn)算量,并與傳統(tǒng)卷積方法進(jìn)行加速倍率比較。
由表3可以看出,本文算法5×5卷積的乘法運(yùn)算量最低,加速倍率最高,為5.82,是其他方法的1.13~2.91倍。
表3 乘法運(yùn)算量對(duì)比Tab.3 Comparison of multiplication computational cost
在各類卷積神經(jīng)網(wǎng)絡(luò)FPGA加速器中,實(shí)際運(yùn)算時(shí)間直觀地反映了架構(gòu)方案的加速水平,是評(píng)估加速器性能的重要指標(biāo)。本文對(duì)比并分析了文獻(xiàn)[7]方法、文獻(xiàn)[9]方法、文獻(xiàn)[10]方法和本文方法的AlexNet第二卷積層運(yùn)算時(shí)間,并以文獻(xiàn)[7]方法的計(jì)算速度為基線比較了各類方法的加速效果。
由表4可知,得益于最低的乘法運(yùn)算量、深流水線架構(gòu)和不存在級(jí)聯(lián)卷積的層間計(jì)算延遲等優(yōu)勢(shì),本文的方法運(yùn)算時(shí)間最短,對(duì)5×5卷積的加速效果最佳。
表4 運(yùn)算時(shí)間對(duì)比Tab.4 Comparison of computing time
根據(jù)文獻(xiàn)[7,9-10]的設(shè)計(jì)思想,使用本文的FPGA平臺(tái)實(shí)現(xiàn)其相應(yīng)算法對(duì)AlexNet第二個(gè)卷積層的設(shè)計(jì),就DSP、LUT和BRAM的資源使用率進(jìn)行比較。硬件資源使用率對(duì)比如圖4所示。
圖4 硬件資源使用率對(duì)比Fig.4 Hardware resource utilization comparison
如圖4(a)所示,本文的DSP資源使用率與文獻(xiàn)[7]方法、文獻(xiàn)[9]方法和文獻(xiàn)[10]方法相近,均在80%以上,均能保證卷積神經(jīng)網(wǎng)絡(luò)硬件加速器擁有較高的工作效率。
如圖4(b)所示,本文的LUT資源使用率比文獻(xiàn)[7]方法高24%,比文獻(xiàn)[9]方法高28%,比文獻(xiàn)[10]方法高8%,但遠(yuǎn)低于DSP資源使用率。由于二維Winograd卷積算法通過完成大量加法運(yùn)算來降低乘法運(yùn)算量,因此采用Winograd算法的本文和文獻(xiàn)[10]需要更多的LUT資源完成加法運(yùn)算。
此外在Winograd算法U、V及Out的加法計(jì)算過程中,存在一些可復(fù)用的中間計(jì)算結(jié)果,例如F(22,32)算法運(yùn)算過程中式(12)運(yùn)算結(jié)果U的第2、3個(gè)元素中均有(u0/2+u2/2)的運(yùn)算,其中u0、u2為式(11)運(yùn)算結(jié)果U1的第1、3個(gè)元素。為降低部分LUT開銷,本文通過字符串精確匹配搜索U、V及Out加法運(yùn)算中可復(fù)用的中間計(jì)算結(jié)果來指導(dǎo)設(shè)計(jì),在二維Winograd卷積算法的加法設(shè)計(jì)中探索并實(shí)現(xiàn)最優(yōu)的數(shù)據(jù)重用方式,降低了約8%的加法計(jì)算量,以降低LUT資源使用率。這種加法運(yùn)算中間結(jié)果重用方法避免了部分無效計(jì)算,減小了設(shè)計(jì)面積且降低了系統(tǒng)能耗。
如圖4(c)所示,本文的BRAM資源使用率比文獻(xiàn)[7]方法低15%,比文獻(xiàn)[9]方法高30%,比文獻(xiàn)[10]方法低1%。與文獻(xiàn)[7]和文獻(xiàn)[9]的方法相較,本文和文獻(xiàn)[10]的方法相對(duì)乘法運(yùn)算量更低,這意味著在使用相同數(shù)目的DSP時(shí),二維W inograd卷積算法可對(duì)更多的輸入數(shù)據(jù)完成卷積運(yùn)算,因此采用此類方法的本文和文獻(xiàn)[10]在實(shí)現(xiàn)過程中需要占用更多的BRAM資源。本文通過設(shè)計(jì)快速設(shè)計(jì)空間探索性能分析模型來保證BRAM資源使用率低于DSP使用率,以確保加速器性能不受硬件資源數(shù)量限制。
綜合整體硬件資源進(jìn)行分析,本文的設(shè)計(jì)與之前研究工作相較各項(xiàng)硬件資源使用率相近,通過數(shù)據(jù)重用、優(yōu)化架構(gòu)和優(yōu)化加速算法等方式取得了更高的計(jì)算性能,提高了硬件加速器的加速效率。
由于卷積神經(jīng)網(wǎng)絡(luò)FPGA加速器的吞吐量、功率和能量效率等性能指標(biāo)均會(huì)受FPGA平臺(tái)影響,同一設(shè)計(jì)方法在不同平臺(tái)上會(huì)有不同的性能表現(xiàn)。因此本文將DSP效率,即吞吐量/片上DSP數(shù)量作為主要指標(biāo)以客觀分析加速器性能水平。由于本文在同一FPGA平臺(tái)上實(shí)現(xiàn)相關(guān)設(shè)計(jì)因此各加速方法具有相同的工作頻率和可用DSP總量。
由表5可知,本文的設(shè)計(jì)在5×5卷積的相關(guān)層達(dá)到了較高的DSP效率,DSP效率為0.529,高于文獻(xiàn)[7]方法和文獻(xiàn)[9]方法,由于復(fù)用了部分加法運(yùn)算結(jié)果降低了吞吐量而略低于文獻(xiàn)[10]方法的0.557。但因本文架構(gòu)方法有著更低的乘法運(yùn)算量和存儲(chǔ)器帶寬需求,因此相較文獻(xiàn)[10]方法,本文的加速器系統(tǒng)架構(gòu)方法速度更快、能耗更低、性能更優(yōu)。
表5 DSP效率對(duì)比Tab.5 Comparison of DSPefficiency
本文對(duì)基于二維Winograd算法5×5卷積的架構(gòu)問題進(jìn)行了研究,深化二維Winograd卷積算法流水線并利用雙緩沖區(qū)和復(fù)用中間運(yùn)算結(jié)果實(shí)現(xiàn)數(shù)據(jù)重用,提出了一種針對(duì)二維Winograd算法5×5卷積的雙緩沖區(qū)最小塊單元6級(jí)流水線方法,并與現(xiàn)有構(gòu)建5×5卷積的方法進(jìn)行實(shí)驗(yàn)對(duì)比。實(shí)驗(yàn)結(jié)果表明,本文提出的深流水線方法在基本不影響神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)準(zhǔn)確率的前提下,具有更低的計(jì)算復(fù)雜度和存儲(chǔ)器帶寬需求,縮短了計(jì)算時(shí)間,降低了能耗,為FPGA上5×5快速卷積的架構(gòu)提供了解決方案,有效地提高了二維W inograd算法5×5卷積在FPGA平臺(tái)上的計(jì)算效率。