黃沛昱 趙 強(qiáng) 李煜龍
(重慶郵電大學(xué)光電工程學(xué)院 重慶 400065)
近年來,隨著人工智能的快速發(fā)展,其理論研究日益成熟。機(jī)器視覺是人工智能的一個(gè)重要研究方向,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)已經(jīng)被廣泛應(yīng)用于機(jī)器視覺完成特征提取[1-4]。
深度學(xué)習(xí)主要分為兩個(gè)步驟:訓(xùn)練和推理。采用通用處理器實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的推理,其運(yùn)算效率非常低。因?yàn)橥ㄓ锰幚砥鞑捎民T諾依曼結(jié)構(gòu)是串行執(zhí)行,難以滿足卷積神經(jīng)網(wǎng)絡(luò)需要大量的并行計(jì)算。因此,針對(duì)卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)出現(xiàn)了三種主流的硬件加速方式:專用集成電路(Application Specific Integrated Circuit,ASIC)、圖形處理器(Graphics Processing Unit,GPU)、現(xiàn)場可編程門陣列(Field Programmable Gate Array,FPGA)。其中,基于ASIC的硬件實(shí)現(xiàn)研發(fā)周期長,無法適應(yīng)復(fù)雜多變的CNN結(jié)構(gòu),并且專用集成電路研發(fā)成本高昂?;贕PU的硬件實(shí)現(xiàn)雖然可以獲得很好的性能,但是較高的功耗也會(huì)降低其性能,同時(shí),如果將其部署到移動(dòng)設(shè)備會(huì)嚴(yán)重縮短續(xù)航時(shí)間?;贔PGA的硬件加速器能克服ASIC和GPU的缺點(diǎn),同時(shí),FPGA支持并行計(jì)算,具有動(dòng)態(tài)可重構(gòu)、低功耗、低延時(shí)、高性能的優(yōu)勢[5-7]。
因此,目前基于FPGA對(duì)卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行硬件加速設(shè)計(jì)已經(jīng)被廣泛研究。文獻(xiàn)[8]采用8 bit位寬量化卷積神經(jīng)網(wǎng)絡(luò),在損失一定準(zhǔn)確度的情況下,減少網(wǎng)絡(luò)的體積,并且節(jié)約了FPGA的存儲(chǔ)資源,同時(shí)也提高了計(jì)算性能。文獻(xiàn)[9]提出一種卷積循環(huán)二維展開的加速器設(shè)計(jì),其核心思想是把每一層卷積計(jì)算的輸入和輸出特征圖循環(huán)展開進(jìn)行并行計(jì)算,從而提高計(jì)算的吞吐量。但是,由于該設(shè)計(jì)把權(quán)重和輸入輸出特征圖緩存在FPGA片上,導(dǎo)致FPGA消耗過多的資源,不利于部署在中小規(guī)模FPGA上。
在進(jìn)行FPGA硬件電路設(shè)計(jì)時(shí),傳統(tǒng)的方法采用Verilog或者VHDL語言進(jìn)行設(shè)計(jì),這種方式開發(fā)效率低。目前,隨著高層次綜合工具的日益成熟,Xilinx公司推出的HLS工具已經(jīng)支持C/C++語言對(duì)FPGA完成算法開發(fā),從而提高開發(fā)效率[10]。
為了提高卷積神經(jīng)網(wǎng)絡(luò)的推理速度,本文設(shè)計(jì)一種基于FPGA的硬件加速電路。首先,網(wǎng)絡(luò)結(jié)構(gòu)采用工業(yè)界廣泛用于目標(biāo)檢測的YOLOv2網(wǎng)絡(luò)。為了減少網(wǎng)絡(luò)模型的體積,同時(shí)為了保證網(wǎng)絡(luò)預(yù)測結(jié)果的準(zhǔn)確率,本設(shè)計(jì)采用16位定點(diǎn)化權(quán)重參數(shù),偏置項(xiàng)參數(shù)以及輸入輸出特征圖的像素。然后設(shè)計(jì)卷積運(yùn)算模塊的硬件電路,為了提高計(jì)算的吞吐量,采用輸入輸出二維循環(huán)展開的方法,為了降低從內(nèi)存中讀取數(shù)據(jù)的延時(shí),采用雙緩存設(shè)計(jì)。最后,將本設(shè)計(jì)的YOLOv2網(wǎng)絡(luò)加速器部署在Xilinx公司的Pynq-z1嵌入式開發(fā)板上性能超過i5- 4440處理器。同時(shí),與已有的CNN模型的硬件加速器性能進(jìn)行對(duì)比。
2012年,Hinton教授帶領(lǐng)學(xué)生在Imagenet數(shù)據(jù)集上,將AlexNet網(wǎng)絡(luò)用于圖像分類獲得的準(zhǔn)確率遠(yuǎn)高于傳統(tǒng)算法。從此,卷積神經(jīng)網(wǎng)絡(luò)廣泛用于圖像分類、目標(biāo)檢測和跟蹤等一系列的計(jì)算機(jī)視覺領(lǐng)域[11-12]。
卷積神經(jīng)網(wǎng)絡(luò)主要包括輸入層、卷積層、池化層、全連接層、輸出層等。VGG- 16網(wǎng)絡(luò)如圖1所示,其網(wǎng)絡(luò)包含13個(gè)卷積層、5個(gè)池化層、3個(gè)全連接層。卷積神經(jīng)網(wǎng)絡(luò)中不同卷積層有不同數(shù)目的卷積核,卷積核的大小主要以3×3和1×1為主,卷積層通過卷積核提取圖像特征。卷積的結(jié)果需要通過相應(yīng)的激活函數(shù)計(jì)算后再進(jìn)行池化,激活函數(shù)是為使網(wǎng)絡(luò)的輸入輸出之間滿足非線性的關(guān)系,增強(qiáng)神經(jīng)網(wǎng)絡(luò)的表達(dá)能力。常見的激活函數(shù)有ReLU、Leaky ReLU、Tanh和Sigmoid函數(shù)。池化層也被稱為降采樣,作用是減少特征圖的尺寸。常用的池化方法有最大池化和平均池化,而池化的大小以2×2為主。網(wǎng)絡(luò)中的全連接層一般位于網(wǎng)絡(luò)最后幾層,其作用是將提取的特征完成分類,由于全連接層的參數(shù)占整個(gè)網(wǎng)絡(luò)的90%以上,參數(shù)的冗余降低模型的表達(dá)能力。因此,現(xiàn)在大量性能優(yōu)異的網(wǎng)絡(luò)采用全局平均池化代替全連接層,使用Softmax函數(shù)來完成分類任務(wù),例如ResNet網(wǎng)絡(luò)和GoogLeNet網(wǎng)絡(luò)[13-15]。
YOLOv2網(wǎng)絡(luò)模型是目標(biāo)檢測領(lǐng)域的One-Stage典型算法,其速度要快過Two-Stage算法中的Fast-RCNN和Faster-RCNN網(wǎng)絡(luò)模型。同時(shí),YOLOv2網(wǎng)絡(luò)模型可以速度和準(zhǔn)確率之間進(jìn)行權(quán)衡,適應(yīng)不同場景的需求[16-17]。比如,在不需要速度的時(shí)候,適當(dāng)?shù)靥岣吣P偷臏?zhǔn)確率;而在一些場景對(duì)速度有嚴(yán)格的要求,可以適當(dāng)?shù)靥岣咚俣?。因?YOLOv2適合部署于中小規(guī)模設(shè)備。
YOLOv2網(wǎng)絡(luò)結(jié)構(gòu)中使用Darknet- 19網(wǎng)絡(luò)作為基礎(chǔ)分類網(wǎng)絡(luò),Darknet- 19網(wǎng)絡(luò)如表1所示,Darknet- 19網(wǎng)絡(luò)結(jié)合GoogLeNet網(wǎng)絡(luò)和VGG- 19網(wǎng)絡(luò)的優(yōu)勢,在Darknet- 19網(wǎng)絡(luò)中使用1×1和3×3的卷積核進(jìn)行卷積計(jì)算,同時(shí),使用全局平均池化代替全連接層。Darknet- 19網(wǎng)絡(luò)不僅能降低模型的參數(shù)量和計(jì)算的復(fù)雜度,而且能提高網(wǎng)絡(luò)的泛化能力,避免模型的過擬合。
表1 Darknet- 19網(wǎng)絡(luò)結(jié)構(gòu)
因?yàn)榫矸e層的計(jì)算量占據(jù)整個(gè)網(wǎng)絡(luò)模型的90%以上[18],所以為了加速卷積神經(jīng)網(wǎng)絡(luò)的推理過程,本文采取循環(huán)展開和分塊的策略,針對(duì)網(wǎng)絡(luò)模型中的卷積層運(yùn)算進(jìn)行優(yōu)化。
1.3.1循環(huán)展開
循環(huán)展開是針對(duì)卷積計(jì)算常用的硬件加速策略,主要是提高硬件乘法單元的并行度。循環(huán)展開可以分為兩類:一類是輸入特征圖的循環(huán)展開,另外一類是輸出特征圖的循環(huán)展開。
輸入特征圖的循環(huán)展開通過每個(gè)時(shí)鐘周期并行的讀取Tn幅輸入特征圖的像素點(diǎn),然后與對(duì)應(yīng)的權(quán)重參數(shù)進(jìn)行乘累加操作。如圖2所示(Tn=4),每個(gè)時(shí)鐘周期讀取的特征圖的個(gè)數(shù)Tn需要合理設(shè)置,特征圖的個(gè)數(shù)Tn決定輸入并行乘法器的個(gè)數(shù)。如果Tn值太大,雖然可以獲得較高的性能,但是會(huì)消耗FPGA芯片內(nèi)部大量的DSP資源,如果Tn值太小,則無法發(fā)揮FPGA并行計(jì)算的優(yōu)勢。
圖2 輸入特征圖循環(huán)展開示意圖
輸出特征圖的循環(huán)展開是通過每個(gè)時(shí)鐘周期并行讀取Tm個(gè)卷積核權(quán)重參數(shù)值與讀取的一幅輸入特征圖的像素值進(jìn)行乘累加操作,如圖3所示(Tm=2)。
圖3 輸出特征圖循環(huán)展開示意圖
1.3.2循環(huán)分塊
因?yàn)镕PGA芯片內(nèi)部存儲(chǔ)資源有限,所以將CNN網(wǎng)絡(luò)部署到FPGA上,需要將輸入輸出特征圖和權(quán)重參數(shù)存儲(chǔ)到片外存儲(chǔ)器中。
本設(shè)計(jì)采用循環(huán)分塊的思想,每個(gè)時(shí)鐘周期從片外讀取Tn個(gè)Tix×Tiy大小的像素塊,并且讀取Tm個(gè)卷積核,卷積核大小為Tn×Tkx×Tky,卷積核的大小是由網(wǎng)絡(luò)結(jié)構(gòu)所決定。同時(shí),把中間計(jì)算結(jié)果緩存在片上存儲(chǔ)中,當(dāng)計(jì)算完成得到最終結(jié)果,再向片外存儲(chǔ)器寫入Tm個(gè)Tox×Toy大小的像素塊,如圖4所示。采用循環(huán)分塊的思想可以有效地減少片外存儲(chǔ)訪問次數(shù),降低訪存時(shí)延,從而提高加速性能。
圖4 循環(huán)分塊示意圖
在卷積神經(jīng)網(wǎng)絡(luò)的推理階段,網(wǎng)絡(luò)的層與層之間是串行結(jié)構(gòu),每一個(gè)網(wǎng)絡(luò)層的輸出作為下一個(gè)網(wǎng)絡(luò)層的輸入,而每一個(gè)網(wǎng)絡(luò)層內(nèi)存在大量的并行計(jì)算。本設(shè)計(jì)的硬件加速器充分利用卷積神經(jīng)網(wǎng)絡(luò)的層間流水,層內(nèi)并行計(jì)算特點(diǎn)。為了減少讀取或?qū)懭霐?shù)據(jù)傳輸時(shí)延,本設(shè)計(jì)使用雙緩存結(jié)構(gòu),如圖5所示。
圖5 硬件加速器架構(gòu)
本設(shè)計(jì)在zynq- 7020芯片完成加速器的設(shè)計(jì),首先把待測試的數(shù)據(jù)集、16位定點(diǎn)量化權(quán)重參數(shù)和偏置參數(shù)存放在SD卡中,然后從SD卡讀入片外DDR3存儲(chǔ)器中。在進(jìn)行計(jì)算之前,需要對(duì)圖片進(jìn)行預(yù)處理,大小為416×416,同時(shí),把RGB圖片的像素值量化為0到1之間的小數(shù)。接著在DDR3存儲(chǔ)器和片上緩存之間,通過4個(gè)AXI總線的HP端口,使用DMA(Direct Memory Access)把片外存儲(chǔ)器的數(shù)據(jù)讀取到片上緩存中。其中,AXI總線的HP端口通過雙緩存的設(shè)計(jì),使得讀取數(shù)據(jù)、計(jì)算和寫入數(shù)據(jù)三者同時(shí)進(jìn)行,能夠有效提高因?yàn)閿?shù)據(jù)傳輸時(shí)延而影響加速器的性能。
在片上計(jì)算單元中,時(shí)鐘頻率為150 MHz,通過設(shè)計(jì)并行計(jì)算陣列加速YOLOv2網(wǎng)絡(luò)中卷積和池化運(yùn)算。其中,本設(shè)計(jì)的卷積并行計(jì)算陣列大小32行4列,每次從輸入讀取4幅特征圖部分像素塊,像素塊大小為Tix×Tiy。
Tix=(Tox-1)×s+k
(1)
Tiy=(Toy-1)×s+k
(2)
式中:Tox和Toy為輸出特征圖的像素塊的大小,Tox=Toy=13;s為卷積計(jì)算的步長;k為卷積核的大小。
整個(gè)硬件加速器依次從DDR3內(nèi)存中讀取數(shù)據(jù),然后在片上完成計(jì)算,實(shí)現(xiàn)層間流水,層內(nèi)并行的硬件加速器。最后將加速器的計(jì)算結(jié)果寫回DDR3內(nèi)存中,通過Softmax函數(shù)完成目標(biāo)檢測的分類,使用非極大值抑制算法得到目標(biāo)的邊框,以及在圖片上完成標(biāo)記。
在YOLOv2網(wǎng)絡(luò)模型中,卷積層包括卷積計(jì)算,批歸一化(Batch Normalization,BN)和激活函數(shù)(Leaky ReLU)三部分。批歸一化是針對(duì)卷積運(yùn)算的輸出特征圖的每個(gè)像素點(diǎn)進(jìn)行線性運(yùn)算,因此,在進(jìn)行卷積計(jì)算之前,本設(shè)計(jì)將批歸一化運(yùn)算與權(quán)重參數(shù)和偏置參數(shù)進(jìn)行融合,然后在FPGA片上進(jìn)行卷積計(jì)算,有利于減少FPGA片上的計(jì)算量,從而提高加速器的性能。
因?yàn)榫矸e運(yùn)算占據(jù)大多數(shù)CNN網(wǎng)絡(luò)中90%以上運(yùn)算量,所以目前針對(duì)CNN硬件加速器設(shè)計(jì)主要集中在卷積層的硬件設(shè)計(jì)。本設(shè)計(jì)針對(duì)卷積計(jì)算硬件加速單元的設(shè)計(jì)采用循環(huán)展開和循環(huán)分塊的策略,對(duì)輸入輸出特征圖進(jìn)行二維展開,在合理考慮硬件資源和YOLOv2網(wǎng)絡(luò)結(jié)構(gòu)的情況下,本設(shè)計(jì)采用128個(gè)并行乘法器實(shí)現(xiàn)卷積層的硬件加速,如圖6所示。每輸入一張?zhí)卣鲌D與一組權(quán)重參數(shù)相乘為1個(gè)PE單元,因?yàn)楸驹O(shè)計(jì)輸出特征圖采用32維展開,所以一幅Tix×Tiy大小的特征圖需要與32組權(quán)重參數(shù)進(jìn)行并行乘法計(jì)算,總共為32個(gè)PE單元。同時(shí),輸入特征圖采用4維展開,在每個(gè)時(shí)鐘周期同時(shí)讀取4幅Tix×Tiy大小的特征圖,再結(jié)合輸出特征圖展開維度為32,總共為128個(gè)PE單元,構(gòu)成32行4列卷積并行計(jì)算單元。
圖6 卷積層硬件加速結(jié)構(gòu)圖
卷積計(jì)算單元輸入輸出端口包括特征圖輸入端口、權(quán)重參數(shù)輸入端口和特征圖輸出端口三部分。因?yàn)榫矸e計(jì)算的偏置參數(shù)量較少,所以預(yù)先存儲(chǔ)在FPGA芯片內(nèi)部。在進(jìn)行卷積計(jì)算時(shí),輸入輸出端口均采用乒乓操作,在同一時(shí)鐘下,使得讀取和寫入數(shù)據(jù)同時(shí)進(jìn)行,能夠有效降低讀取和寫入數(shù)據(jù)的傳輸時(shí)延,提高每個(gè)PE單元計(jì)算速度,從而提高整個(gè)硬件加速器的計(jì)算性能。
在YOLOv2網(wǎng)絡(luò)模型中,每一層的計(jì)算需要頻繁地對(duì)片外DRAM讀取和寫入數(shù)據(jù),將會(huì)導(dǎo)致因?yàn)閿?shù)據(jù)傳輸延遲而帶來的硬件加速器計(jì)算性能的下降。因此,雙緩存設(shè)計(jì)是為了降低從片外DRAM內(nèi)存中的數(shù)據(jù)讀取到片上的傳輸時(shí)間和降低從片上的計(jì)算結(jié)果寫回片外DRAM內(nèi)存中的傳輸時(shí)間。
雙緩存設(shè)計(jì)具體的結(jié)構(gòu)如圖7所示。首先,第一個(gè)時(shí)鐘周期,將輸入數(shù)據(jù)通過輸入數(shù)據(jù)選擇器存入緩存1中。然后,第二時(shí)鐘周期,將輸入數(shù)據(jù)通過輸入數(shù)據(jù)選擇器存入緩存2中,同時(shí),將緩存1中的數(shù)據(jù)通過輸出數(shù)據(jù)選擇器輸出到卷積運(yùn)算單元中。第三個(gè)時(shí)鐘周期,將輸入數(shù)據(jù)存放在緩存1中,依次重復(fù)之前的操作,實(shí)現(xiàn)數(shù)據(jù)流水處理,降低從片外到片內(nèi)數(shù)據(jù)傳輸?shù)臅r(shí)間。雙緩存設(shè)計(jì)通過FPGA的片上BRAM邏輯資源實(shí)現(xiàn),輸入緩存區(qū)N1和輸出緩存區(qū)N2的大小通過式(3)和式(4)計(jì)算得到。
式中:Datawidth表示輸入輸出特征圖中數(shù)據(jù)位寬大小;MBRAM表示一塊BRAM能夠存儲(chǔ)數(shù)據(jù)的大小。
圖7 雙緩存設(shè)計(jì)結(jié)構(gòu)圖
當(dāng)不采用雙緩存設(shè)計(jì)時(shí),完成一次卷積運(yùn)算總延遲時(shí)間為:
T1=Tread+Tcompute+Twrite
(5)
式中:Tread表示從片外DRAM內(nèi)存中讀取數(shù)據(jù)到片上的時(shí)間;Tcompute表示片上卷積層計(jì)算的時(shí)間;Twrite表示片上的計(jì)算結(jié)果寫回到片外DRAM內(nèi)存中。
當(dāng)采用雙緩存設(shè)計(jì)后,完成一次卷積運(yùn)算總延遲時(shí)間為:
T2=max(Tread,Tcompute,Twrite)
(6)
因此,一次卷積運(yùn)算總延遲時(shí)間T2 在YOLOv2模型中每層網(wǎng)絡(luò)的特征圖像素值,權(quán)值參數(shù)和偏置參數(shù)均采用32位浮點(diǎn)數(shù),為了降低YOLOv2網(wǎng)絡(luò)模型的復(fù)雜度,提高模型的推理速度,同時(shí)節(jié)約FPGA內(nèi)部的硬件資源,本設(shè)計(jì)采用16位定點(diǎn)數(shù)量化模型。由實(shí)際測試可知不同精度消耗FPGA內(nèi)部乘法器和加法器的硬件資源如表2所示。 表2 不同精度資源消耗 由表可知,采用16位定點(diǎn)數(shù)相比32位浮點(diǎn)數(shù)將節(jié)省一半以上的硬件資源。同時(shí),實(shí)際測試發(fā)現(xiàn)16位定點(diǎn)數(shù)量化YOLOv2網(wǎng)絡(luò)模型準(zhǔn)確率幾乎不變。 本設(shè)計(jì)采用Xilinx公司的pynq-z1異構(gòu)平臺(tái),主控芯片為zynq- 7020。該芯片采用雙核ARM A9處理器和FPGA架構(gòu),其中,ARM處理器端時(shí)鐘頻率為667 MHz,DDR3內(nèi)存大小為512 MB,FPGA端內(nèi)部硬件資源DSP48E、BRAM_36K、LUT和FF分別為220、140、53 200、106 400。本設(shè)計(jì)采用HLS軟件完成YOLOv2網(wǎng)絡(luò)模型硬件加速器的設(shè)計(jì),然后將加速器IP導(dǎo)入Vivado軟件中完成綜合和實(shí)現(xiàn)后,得到硬件資源消耗如表3所示。 表3 zynq- 7020硬件資源消耗 同時(shí),本設(shè)計(jì)對(duì)比CPU平臺(tái)的YOLOv2網(wǎng)絡(luò)模型實(shí)現(xiàn),CPU平臺(tái)硬件參數(shù)為Intel 4核酷睿i5- 4440處理器,主頻為3.1 GHz,DDR3內(nèi)存大小為8 GB。 本設(shè)計(jì)在驗(yàn)證YOLOv2網(wǎng)絡(luò)加速器的結(jié)果正確性時(shí),從COCO數(shù)據(jù)集的測試集中選取100幅交通工具圖片作為驗(yàn)證,交通工具圖片主要包括人、自行車、汽車、摩托車、飛機(jī)、公共汽車、火車、貨車以及紅綠燈交通標(biāo)志等類別。實(shí)驗(yàn)在Pynq-z1開發(fā)板上的測試結(jié)果如圖8所示。 圖8 SecureCRT串口終端測試結(jié)果 首先,通過Xilinx公司的Petalinux工具定制嵌入式Linux系統(tǒng),包括鏡像文件、uboot文件和根文件系統(tǒng)。將以上3個(gè)文件燒錄SD卡中,通過UART串口將PC與Pynq-z1開發(fā)板連接,在PC上通過串口終端SecureCRT軟件顯示檢測結(jié)果,并與PC端下測試結(jié)果進(jìn)行對(duì)比。 通過測試結(jié)果表4發(fā)現(xiàn),本文設(shè)計(jì)的硬件加速器在保證準(zhǔn)確率幾乎不變的情況下,分辨率為416×416的單幅圖片計(jì)算時(shí)間縮短為1.02 s,極大提高網(wǎng)絡(luò)推理速度。 表4 不同硬件測試結(jié)果對(duì)比 同時(shí),本設(shè)計(jì)與之前已有工作的硬件加速器進(jìn)行對(duì)比,如表5所示。本設(shè)計(jì)的硬件加速器使用Xilinx公司的HLS軟件,采用C/C++語言進(jìn)行編程,并使用優(yōu)化指令對(duì)算法中的數(shù)組和For循環(huán)進(jìn)行資源和性能的優(yōu)化。本設(shè)計(jì)在輸入輸出接口部分充分使用雙緩存設(shè)計(jì),通過乒乓操作,使讀取和寫入數(shù)據(jù)與計(jì)算同時(shí)進(jìn)行,有效節(jié)省傳輸時(shí)延。本文為了降低模型在硬件部署上的難度,提前將YOLOv2網(wǎng)絡(luò)中的Bn層與權(quán)重和偏置參數(shù)進(jìn)行融合。在FPGA硬件部署上針對(duì)卷積模塊采用輸入輸出二維循環(huán)展開和分塊的思想,合理設(shè)計(jì)并行乘法器的個(gè)數(shù),提高硬件加速器的吞吐量。 表5 與已有的硬件加速器性能對(duì)比 本文設(shè)計(jì)的硬件加速器的計(jì)算性能通過GOPS(Giga Operation Per Second)指標(biāo)來衡量。其中,使用GOP(十億次操作)來衡量CNN模型的復(fù)雜度。本文采用CNN模型與文獻(xiàn)[19]和文獻(xiàn)[20]對(duì)比,模型復(fù)雜度最大,同時(shí),本文設(shè)計(jì)的硬件加速器的計(jì)算性能高于文獻(xiàn)[19]和文獻(xiàn)[20]。 本文針對(duì)目標(biāo)檢測模型YOLOv2,設(shè)計(jì)一種基于FPGA的硬件加速器。該硬件加速器針對(duì)YOLOv2網(wǎng)絡(luò)模型中的卷積層,采用輸入輸出二維循環(huán)展開和循環(huán)分塊的方法。通過對(duì)卷積層硬件單元的設(shè)計(jì),使用128個(gè)乘法單元并行計(jì)算,提高整個(gè)網(wǎng)絡(luò)的計(jì)算性能。本文在硬件加速器的輸入輸出接口部分采用雙緩存設(shè)計(jì),通過乒乓操作使讀取,寫入和片上計(jì)算單元能夠并行操作,降低傳輸時(shí)延帶來的計(jì)算性能損失。同時(shí),為了降低網(wǎng)絡(luò)模型的準(zhǔn)確率損失和減少硬件資源的消耗,本文采用16位定點(diǎn)數(shù)對(duì)權(quán)重參數(shù),偏置項(xiàng)參數(shù)以及輸入輸出特征圖的像素值進(jìn)行量化。實(shí)驗(yàn)結(jié)果顯示,本文設(shè)計(jì)的硬件加速器與通用CPU酷睿i5- 4440處理器相比,計(jì)算性能提高5.77倍,同時(shí),在COCO數(shù)據(jù)集上保持準(zhǔn)確率幾乎不變。除此之外,本文設(shè)計(jì)的硬件加速器在時(shí)鐘頻率為150 MHz,計(jì)算性能達(dá)到28.88 GOPS。2.4 計(jì)算精度量化
3 結(jié)果分析與討論
3.1 實(shí)驗(yàn)軟硬件環(huán)境
3.2 結(jié)果驗(yàn)證和性能測試對(duì)比
4 結(jié) 語