任仕偉,劉朝鉀,李劍錚,蔣榮堃,,3,王曉華,薛丞博
(1. 北京理工大學(xué) 集成電路與電子學(xué)院,北京 100081;2. 北京理工大學(xué) 重慶創(chuàng)新中心,重慶 401120;3. 北京理工大學(xué) 重慶微電子中心,重慶 401332)
卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks, CNN)正廣泛應(yīng)用在計(jì)算機(jī)視覺(jué)領(lǐng)域[1]. 其中,圖像目標(biāo)檢測(cè)作為計(jì)算機(jī)視覺(jué)中最重要的應(yīng)用之一,正被使用在自動(dòng)駕駛、安全防衛(wèi)、姿態(tài)識(shí)別、醫(yī)療衛(wèi)生、多目標(biāo)檢測(cè)等領(lǐng)域[2?4]. 但隨著CNN 規(guī)模的不斷擴(kuò)大,海量浮點(diǎn)運(yùn)算對(duì)計(jì)算平臺(tái)的處理能力產(chǎn)生了更高的要求. 具備較高運(yùn)算性能的圖形處理器(graphic processing unit, GPU)由于高功耗和低硬件資源利用效率,令其無(wú)法搭載在功耗敏感且資源受限的邊緣計(jì)算設(shè)備中. 而現(xiàn)場(chǎng)可編程門(mén)陣列(field programmable gate array, FPGA)平臺(tái)由于其并行架構(gòu)、低功耗等特性,正被廣泛應(yīng)用在硬件資源受限型與功耗敏感型設(shè)備中[5]. 因此,設(shè)計(jì)適用于FPGA 平臺(tái)的高效目標(biāo)檢測(cè)CNN 硬件加速器是當(dāng)前重點(diǎn)的研究方向.
目前,YOLO[6]及其演進(jìn)版本YOLOv2[7]、YOLOv3[8]作為一階CNN 目標(biāo)檢測(cè)器的代表,正得到廣泛的應(yīng)用. 而YOLOv3 相較于YOLOv2 引入的多尺度檢測(cè)方案及更精細(xì)的網(wǎng)絡(luò)結(jié)構(gòu)雖增加了硬件加速器的設(shè)計(jì)復(fù)雜度[9],但也使其獲得了更好的檢測(cè)能力. 同時(shí),YOLOv3-Tiny 在運(yùn)算量及參數(shù)量上相較于YOLOv3標(biāo)準(zhǔn)模型均有更大程度的縮減,更適用于輕量化的邊緣計(jì)算設(shè)備使用.
近期,基于FPGA 實(shí)現(xiàn)的YOLOv3-Tiny 硬件加速架構(gòu)被相繼提出[10?14]. YU 等[10]提出了一個(gè)基于FPGA 定 制 的 輕 量 化YOLOv3-Tiny 架 構(gòu),ZHEN 等[11]則通過(guò)優(yōu)化算法提升卷積效率,YU 和ZHEN 利用FPGA 較少的片上硬件資源即實(shí)現(xiàn)了YOLOv3-Tiny硬件加速,但由于其數(shù)據(jù)吞吐量較低,僅分別能實(shí)現(xiàn)1.9 FPS 與4.6 FPS 的檢測(cè)幀率,基本不具備實(shí)時(shí)檢測(cè)能力. AHMAD 等[12]利用高性能FPGA 的硬件資源優(yōu)勢(shì)實(shí)現(xiàn)了一個(gè)高吞吐量的YOLOv3-Tiny 網(wǎng)絡(luò),但其硬件資源利用效率較低,且大量DSP 硬件資源的使用令其不利于在小型FPGA 上實(shí)現(xiàn). 綜上所述,為獲得檢測(cè)速度、檢測(cè)精度及硬件資源的平衡,本文通過(guò)網(wǎng)絡(luò)結(jié)構(gòu)重組、層間融合與動(dòng)態(tài)數(shù)值量化方式縮減YOLOv3-Tiny 網(wǎng)絡(luò)規(guī)模;提出基于通道并行與權(quán)值駐留的硬件加速算法與基于乒乓存儲(chǔ)陣列的緊密流水線處理流程,并復(fù)用硬件運(yùn)算單元;最后構(gòu)建目標(biāo)檢測(cè)硬件加速系統(tǒng)實(shí)現(xiàn)高效準(zhǔn)確的端到端目標(biāo)檢測(cè),并有效提升硬件資源利用效率.
待測(cè)圖像輸入至YOLOv3-Tiny 網(wǎng)絡(luò)進(jìn)行處理,并使用非極大值抑制算法(non-maximum suppression,NMS)[15]篩除重疊目標(biāo)后可直接得到目標(biāo)檢測(cè)結(jié)果.YOLOv3-Tiny 網(wǎng)絡(luò)由卷積(Conv)層、最大池化(Maxpool)層、批歸一化(batch normalization, BN)層[16]、激活函數(shù)(ACT)層、填充(Pad)層、上采樣(Upsample)層、拼接(Concat)層共同構(gòu)成,其中激活函數(shù)層包括LeakyReLU 與Sigmoid 兩類(lèi). 本文以卷積運(yùn)算為中心重組網(wǎng)絡(luò),其他處理則設(shè)置在卷積運(yùn)算前后,如圖1所示. 網(wǎng)絡(luò)由14 層以卷積運(yùn)算為中心的網(wǎng)絡(luò)層構(gòu)成,圖例為各網(wǎng)絡(luò)層的組成,序號(hào)表明網(wǎng)絡(luò)模型中每層網(wǎng)絡(luò)與網(wǎng)絡(luò)層類(lèi)型的對(duì)應(yīng)關(guān)系及執(zhí)行順序. 通過(guò)上述網(wǎng)絡(luò)層的組合運(yùn)算實(shí)現(xiàn)與YOLOv3-Tiny 原型網(wǎng)絡(luò)完全一致的多尺度推理流程,并適應(yīng)硬件加速器的流水線處理設(shè)計(jì).
圖1 YOLOv3-Tiny 神經(jīng)網(wǎng)絡(luò)重組結(jié)構(gòu)Fig.1 YOLOv3-Tiny neural network reconstruction structure
卷積層負(fù)責(zé)提取圖片特征信息,其表達(dá)式為
式中:IF表示輸入特征圖;W表示權(quán)重;B表示偏置;OF表示輸出特征圖;IC為輸入通道;S為卷積步長(zhǎng);K為卷積核大小;oc為輸出特征圖通道;w與h為輸出特征圖內(nèi)行列位置. 式(1)可被簡(jiǎn)化為
BN 層置于卷積層后,緩解網(wǎng)絡(luò)訓(xùn)練過(guò)程中過(guò)擬合問(wèn)題并加速訓(xùn)練收斂,其表達(dá)式為
式中 γ 、 β、xˉ、 σ2參數(shù)均在網(wǎng)絡(luò)訓(xùn)練過(guò)程中生成,并在推理過(guò)程中保持不變. 式(3)中OF為卷積層的輸出,將式(2)代入式(3)中,可得
令式(4)中第一項(xiàng)與第二項(xiàng)系數(shù)分別為B′與W′,則將卷積層與BN 層融合. 層間融合后的權(quán)重W′與偏置B′由本地端通過(guò)式(4)預(yù)處理后再導(dǎo)入至FPGA 存儲(chǔ)空間內(nèi),即可在硬件加速器中避免復(fù)雜的BN 層運(yùn)算,節(jié)省硬件資源開(kāi)銷(xiāo).
若直接使用在GPU 平臺(tái)訓(xùn)練得到的32 位浮點(diǎn)型參數(shù)輸入至FPGA 平臺(tái)進(jìn)行推理運(yùn)算,將消耗大量硬件資源以實(shí)現(xiàn)浮點(diǎn)運(yùn)算[17]. 同時(shí),32 位浮點(diǎn)型參數(shù)相對(duì)于量化數(shù)據(jù)位寬較大,需占用更大的DDR 數(shù)據(jù)傳輸帶寬. 故需采用數(shù)值量化,用整型運(yùn)算替代浮點(diǎn)運(yùn)算,以獲取硬件加速器運(yùn)算性能的提升. 本文采用的數(shù)值量化表達(dá)式為
式中:float表示32 位浮點(diǎn)型數(shù)值;fix表示運(yùn)算后的量化整型值;FIX_L表示量化寬度;FRAC_L表示小數(shù)位數(shù);Round()對(duì)數(shù)值四舍五入取整;Clamp()將數(shù)值限定在量化整型值所能表示的最大范圍內(nèi).
為兼顧檢測(cè)精度與檢測(cè)速度,本文采用16 位量化寬度進(jìn)行數(shù)值量化. 同時(shí),在不同網(wǎng)絡(luò)層間采用不同的小數(shù)位寬度對(duì)權(quán)重、偏置及特征數(shù)據(jù)進(jìn)行量化,即動(dòng)態(tài)量化,以滿足模型中不同網(wǎng)絡(luò)層對(duì)小數(shù)位數(shù)的需求,提升模型精度.
本文基于通道并行與權(quán)值駐留的硬件加速算法流程如圖2 所示. 啟動(dòng)硬件加速算法后,讀取雙倍速率(double data rate, DDR)同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器指定地址空間內(nèi)數(shù)據(jù),在全部輸出通道上與卷積核執(zhí)行并行運(yùn)算,依序執(zhí)行循環(huán),直至輸出特征圖數(shù)據(jù)均被回寫(xiě)至DDR 內(nèi). 通過(guò)并行加速算法,F(xiàn)PGA 平臺(tái)的并行架構(gòu)得到充分利用,有效提升了硬件加速器的吞吐量.
圖2 硬件加速算法流程圖Fig.2 Flow chart of hardware acceleration algorithm
硬件加速器在處理過(guò)程中需以直接存儲(chǔ)訪問(wèn)(direct memory access, DMA)方式對(duì)數(shù)據(jù)傳輸帶寬有限的片外DDR 發(fā)起大量數(shù)據(jù)訪問(wèn)請(qǐng)求,將增加數(shù)據(jù)讀取至片內(nèi)的等待時(shí)間. 本文采用權(quán)值駐留方式以減少訪問(wèn)片外DDR 的次數(shù). 通過(guò)設(shè)置片上權(quán)重存儲(chǔ)(random access memory, RAM),將本輪所需全部權(quán)重?cái)?shù)據(jù)從DDR 中讀取至該RAM 后,后續(xù)讀取請(qǐng)求可直接從片上權(quán)重RAM 內(nèi)獲取權(quán)重?cái)?shù)據(jù),避免了讀取權(quán)重?cái)?shù)據(jù)對(duì)DDR 傳輸帶寬的占用,減少了數(shù)據(jù)讀取操作的總耗時(shí).
本文基于乒乓存儲(chǔ)陣列設(shè)計(jì)的硬件加速器緊密流水線處理流程如圖3 所示. 加速器需完成DDR 數(shù)據(jù)讀取、運(yùn)算處理及DDR 數(shù)據(jù)回寫(xiě)3 種操作. 通過(guò)設(shè)置兩組完全相同的片上存儲(chǔ)陣列,加速器交替向輸入緩沖存放從DDR 讀取的數(shù)據(jù),并將輸出緩沖內(nèi)數(shù)據(jù)回寫(xiě)至DDR,有效縮短運(yùn)算處理操作等待數(shù)據(jù)讀寫(xiě)的空閑時(shí)間,并使得加速器處理總時(shí)間由耗時(shí)最長(zhǎng)的操作決定,詳細(xì)的系統(tǒng)性能評(píng)估方案于3.5 節(jié)提出.
圖3 硬件加速器的流水線處理流程Fig.3 Pipeline processing flow of hardware accelerator
基于FPGA 的目標(biāo)檢測(cè)神經(jīng)網(wǎng)絡(luò)系統(tǒng)總體架構(gòu)如圖4 所示,由處理器系統(tǒng)(processor system, PS)以及可編程資源(programable logic, PL)端的硬件加速器組成,通過(guò)用戶數(shù)據(jù)報(bào)協(xié)議(user datagram protocol,UDP)與上位機(jī)互聯(lián),實(shí)現(xiàn)端到端的目標(biāo)檢測(cè). 神經(jīng)網(wǎng)絡(luò)硬件加速器以運(yùn)算處理器(processing engine, PE)陣列為核心,與片上存儲(chǔ)陣列、池化陣列以及激活函數(shù)陣列進(jìn)行數(shù)據(jù)交互與運(yùn)算處理.
圖4 目標(biāo)檢測(cè)硬件加速系統(tǒng)總體架構(gòu)Fig.4 Overall architecture of object detection hardware acceleration system
本系統(tǒng)PEs 陣列包含的PE 數(shù)量由NPEs參數(shù)確定,每個(gè)PE 負(fù)責(zé)一個(gè)輸出通道上的數(shù)值運(yùn)算,其余模塊均依據(jù)NPEs參數(shù)作相應(yīng)變化,具有良好的可擴(kuò)展性,其數(shù)量關(guān)系如表1 所示. 片上權(quán)重RAM 與權(quán)重寄存器陣列位寬均為144 bit,以同時(shí)讀取單個(gè)卷積核3×3×16 bit 的參數(shù)量,MAX_IC表示權(quán)重RAM 中可駐留權(quán)重的最大輸入通道數(shù). 144 bit 位寬的輸出數(shù)據(jù)RAM 與池化數(shù)據(jù)RAM 可同時(shí)存儲(chǔ)9 組PEs 陣列或池化陣列的16 bit 輸出數(shù)據(jù),故其僅需PEs 數(shù)量的1/9 即可存儲(chǔ)全部輸出數(shù)據(jù),ceil()為向上取整函數(shù). 同時(shí),輸入數(shù)據(jù)RAM、輸出數(shù)據(jù)RAM、池化數(shù)據(jù)RAM、權(quán)重存儲(chǔ)陣列均以2.2 節(jié)中所描述的乒乓存儲(chǔ)方式構(gòu)建,故數(shù)量均為需求值的兩倍,以實(shí)現(xiàn)PEs 陣列的緊密流水線運(yùn)算,節(jié)約等待數(shù)據(jù)緩沖的時(shí)鐘周期.
表1 硬件加速器各模塊設(shè)置與數(shù)量Tab.1 Setting and number of hardware accelerator units
運(yùn)算處理器負(fù)責(zé)特征圖數(shù)據(jù)與權(quán)值的乘加、偏置及輸入通道維度上數(shù)據(jù)的累加、數(shù)據(jù)溢出處理與動(dòng)態(tài)量化4 種操作,其硬件結(jié)構(gòu)如圖5 所示.
圖5 運(yùn)算處理器PE 的硬件結(jié)構(gòu)Fig.5 Hardware structure of processing engine
每個(gè)PE 由9 個(gè)16 bit 乘法器及其它運(yùn)算與控制邏輯組成. 輸入數(shù)據(jù)選擇器(Mux)可控制輸入零元素以實(shí)現(xiàn)特征圖邊緣填充. PE 內(nèi)部為全流水線架構(gòu),支持?jǐn)?shù)據(jù)的連續(xù)輸入與運(yùn)算. 最后PE 需完成數(shù)據(jù)溢出處理,輸出數(shù)據(jù)將被限定在量化寬度可表示的范圍內(nèi). PE 中的左右移位模塊根據(jù)量化參數(shù)配置完成數(shù)據(jù)截?cái)嗪痛訑?shù)的小數(shù)位對(duì)齊. 為實(shí)現(xiàn)1×1 卷積運(yùn)算,將3×3 卷積核矩陣除(0,0)位置的元素設(shè)置為0,并仍按3×3 卷積流程運(yùn)算,通過(guò)該設(shè)計(jì)即可復(fù)用PE 完成不同卷積核尺度的運(yùn)算.
池化單元與激活函數(shù)單元的硬件結(jié)構(gòu)如圖6 所示,負(fù)責(zé)對(duì)PEs 輸出數(shù)據(jù)做池化與激活函數(shù)處理.
圖6 池化單元與激活函數(shù)單元的硬件結(jié)構(gòu)Fig.6 Hardware structure of pool unit and activation unit
若硬件加速器使能池化單元,則PEs 的運(yùn)算結(jié)果被直接輸入至池化單元以流水線方式處理,避免了卷積層與池化層間數(shù)據(jù)對(duì)片外DDR 的反復(fù)讀寫(xiě).該單元利用緩沖寄存器Reg 實(shí)現(xiàn)行內(nèi)數(shù)值比較,利用池化數(shù)據(jù)RAM 回環(huán)實(shí)現(xiàn)行間數(shù)值比較,其由外部狀態(tài)機(jī)控制,以相同硬件結(jié)構(gòu)實(shí)現(xiàn)任意步長(zhǎng)的池化運(yùn)算.
激活函數(shù)單元包括LeakyReLU 單元與Sigmoid單元,在數(shù)據(jù)回寫(xiě)至DDR 前實(shí)現(xiàn)激活函數(shù)處理.LeakyReLU 單元利用一個(gè)乘法器實(shí)現(xiàn)對(duì)輸入值的非線性處理. Sigmoid 單元使用查找表構(gòu)建,由于Sigmoid 函數(shù)關(guān)于(0,0.5)中心對(duì)稱,且在輸入大于+5 時(shí)輸出值相似,故查找表ROM 內(nèi)僅存儲(chǔ)輸入為0~+5范圍內(nèi)1 280 個(gè)采樣點(diǎn)的Sigmoid 函數(shù)輸出值,通過(guò)兩組Mux 實(shí)現(xiàn)地址選擇與輸出數(shù)值中心對(duì)稱處理,以片上ROM 替代了Sigmoid 函數(shù)中指數(shù)、除法等硬件難以實(shí)現(xiàn)的結(jié)構(gòu).
片外DDR 內(nèi)數(shù)據(jù)存儲(chǔ)方式與片上數(shù)據(jù)處理流程需和所設(shè)計(jì)的硬件加速器流水線相匹配,本節(jié)以3×3 卷積運(yùn)算為例說(shuō)明,如圖7 所示. 每層輸入特征圖dihw與輸出特征圖oohw按照相同順序存放在DDR內(nèi),以使本層的輸出特征圖可按相同存儲(chǔ)順序直接作為下一層的輸入特征圖被讀取. 由于采用輸出通道并行方式執(zhí)行卷積運(yùn)算,每一輪次處理需讀取單個(gè)輸入通道下對(duì)應(yīng)的全部輸出通道的權(quán)重,因此權(quán)重?cái)?shù)據(jù)wiokk按照輸出通道優(yōu)先方式存儲(chǔ)于DDR 內(nèi),可使權(quán)重?cái)?shù)據(jù)讀取時(shí)地址連續(xù),增加猝發(fā)讀取長(zhǎng)度,提升權(quán)重?cái)?shù)據(jù)的讀取速率.
圖7 數(shù)據(jù)存儲(chǔ)方案及讀寫(xiě)處理流程Fig.7 Scheme of data storage and flow of read and write processing
在啟動(dòng)硬件加速器后,首先執(zhí)行第1 輪DDR讀取操作,加速器讀取輸入特征圖d[0,0:2,:]與權(quán)重w[0,:,:,:]至片上存儲(chǔ)陣列,并以并行滑窗方式完成第一輪卷積運(yùn)算,隨后讀取DDR 中d[1,0:2,:]與w[1,:,:,:]完成第2 輪數(shù)據(jù)讀取與卷積運(yùn)算. 經(jīng)過(guò)i輪處理后所有輸入通道的前3 行數(shù)據(jù)均完成卷積與累加處理,得到所有輸出通道下對(duì)應(yīng)的第1 行輸出數(shù)據(jù). 此時(shí)執(zhí)行第1 輪DDR 寫(xiě)入操作,將數(shù)據(jù)分別回寫(xiě)至DDR內(nèi)的o[:,0,:]中,完成單行輸出特征圖數(shù)據(jù)的存儲(chǔ). 以此類(lèi)推,直至完成本層硬件加速處理.
池化單元與激活函數(shù)單元均可在PEs 卷積處理后使能或旁路,僅增加數(shù)據(jù)處理流水線長(zhǎng)度而不改變數(shù)據(jù)讀寫(xiě)及處理的流程. 上采樣在讀取輸入特征圖數(shù)據(jù)時(shí)實(shí)現(xiàn),在行內(nèi)讀取每個(gè)特征圖點(diǎn)時(shí),數(shù)據(jù)經(jīng)復(fù)制后再寫(xiě)入輸入數(shù)據(jù)RAM 內(nèi)實(shí)現(xiàn)行內(nèi)上采樣,同時(shí)需對(duì)同一行數(shù)據(jù)進(jìn)行兩次讀取以實(shí)現(xiàn)行間上采樣.拼接層需讀取DDR 不同地址空間內(nèi)的兩層特征圖數(shù)據(jù),因此僅需通過(guò)改變讀取地址即可實(shí)現(xiàn)特征圖的拼接操作.
單輪硬件加速器處理的各部分理論耗時(shí)如式(6)所示,分別為DDR 數(shù)據(jù)讀取時(shí)間Tread,PEs運(yùn)算處理時(shí)間Tprocess與DDR 數(shù)據(jù)回寫(xiě)時(shí)間Twrite.WDDR表示DDR 的數(shù)據(jù)傳輸帶寬,Tread由所需讀取的輸入特征圖及權(quán)重總數(shù)據(jù)量與DDR 數(shù)據(jù)傳輸帶寬之比得到,由于單輪處理中只讀取一次偏置數(shù)據(jù),故讀取偏置時(shí)間可被忽略.Tprocess由單輪硬件加速器處理所需總周期數(shù)與加速器運(yùn)行時(shí)鐘頻率fCLOCK之比獲得. 所需寫(xiě)入的輸出特征圖總數(shù)據(jù)量與DDR 數(shù)據(jù)傳輸帶寬之比即為DDR 數(shù)據(jù)回寫(xiě)時(shí)間Twrite.
由于硬件加速器的緊密流水線處理流程,其單輪次處理的理論總時(shí)間由3 個(gè)時(shí)間中的最大值決定.同時(shí),設(shè)計(jì)采用輸出通道并行架構(gòu),通道并行數(shù)量與NPEs參數(shù)相同,當(dāng)網(wǎng)絡(luò)層的輸出通道數(shù)O大于NPEs時(shí),需啟動(dòng)多輪硬件加速器處理以完成單層網(wǎng)絡(luò)層內(nèi)所有輸出通道的運(yùn)算. 因此,單層網(wǎng)絡(luò)層處理的理論總時(shí)間如式(7)所示.
本文采用UltraScale+ XCZU9EG 作為測(cè)試平臺(tái),所設(shè)計(jì)的硬件加速器以Verilog 語(yǔ)言編寫(xiě)并通過(guò)Vivado 軟件綜合實(shí)現(xiàn). ARM 處理器可向硬件加速器發(fā)送控制指令,實(shí)現(xiàn)不同參數(shù)配置下的硬件加速運(yùn)算,并通過(guò)控制UDP 加速器實(shí)現(xiàn)數(shù)據(jù)高速傳輸. 同時(shí),本文基于C#語(yǔ)言實(shí)現(xiàn)上位機(jī)軟件,其通過(guò)UDP網(wǎng)絡(luò)與硬件加速系統(tǒng)通信,并利用多線程技術(shù)向FPGA 傳輸待測(cè)圖像或?qū)PGA 回傳特征圖進(jìn)行后處理與結(jié)果顯示. 上位機(jī)與硬件加速系統(tǒng)以流水線處理各任務(wù),使系統(tǒng)具備高速連續(xù)的目標(biāo)檢測(cè)能力. 以上模塊共同構(gòu)成基于YOLOv3-Tiny 的端到端目標(biāo)檢測(cè)硬件加速系統(tǒng),系統(tǒng)實(shí)物圖如圖8 所示.
圖8 目標(biāo)檢測(cè)硬件加速系統(tǒng)實(shí)物Fig.8 Hardware acceleration system of object detection
在實(shí)際測(cè)試環(huán)境下,本文以硬件加速器每秒鐘可執(zhí)行乘加操作數(shù)(giga operations per second, GOPS,G為109次)評(píng)估其整體吞吐量與性能,其由單張待測(cè)圖像在網(wǎng)絡(luò)推理過(guò)程所需的理論乘加操作數(shù)與實(shí)際檢測(cè)執(zhí)行時(shí)間的比值確定. 同時(shí),根據(jù)吞吐量GOPS 與FPGA 片上LUT、BRAM、DSP 硬件資源使用量的比值評(píng)估其片上各硬件資源利用效率. 其中,DSP 作為FPGA 中最關(guān)鍵且稀缺的高速乘法運(yùn)算硬件資源,因此DSP 效率是評(píng)估硬件加速器整體效率的關(guān)鍵指標(biāo).
為達(dá)到系統(tǒng)性能與硬件資源效率間的平衡,本文設(shè)置NPEs為32、MAX_IC為512 對(duì)硬件加速器進(jìn)行FPGA 綜合實(shí)現(xiàn). 硬件加速器運(yùn)行頻率為300 MHz,功耗為4.12 W,其使用了36.0 k LUT、41.3 k FF、199 BRAM36k、298 DSP 的FPGA 硬件資源,達(dá)到了96.6 GOPS 的吞吐量與17.3 FPS 的檢測(cè)幀率,其具有0.32 GOPS/DSP 的DSP 效 率,2.68 GOPS/kLUT 的LUT 效率與0.49 GOPS/BRAM 的BRAM 效率.
在使用浮點(diǎn)數(shù)值的GPU 平臺(tái)與在本文使用動(dòng)態(tài)量化數(shù)值的FPGA 平臺(tái)分別執(zhí)行YOLOv3-Tiny 神經(jīng)網(wǎng)絡(luò),對(duì)MS COCO 2017 驗(yàn)證集進(jìn)行目標(biāo)檢測(cè),其部分結(jié)果如圖9 所示. 經(jīng)測(cè)試,使用動(dòng)態(tài)量化數(shù)值的FPGA 平臺(tái)的檢測(cè)精度mAP50為31.5%,相較于使用浮點(diǎn)數(shù)值的GPU 平臺(tái)僅下降1.6%. 在可接受的檢測(cè)精度損失下,縮減了網(wǎng)絡(luò)規(guī)模,提升了FPGA 硬件加速器整體運(yùn)算性能.
圖9 目標(biāo)檢測(cè)結(jié)果對(duì)比Fig.9 Comparison of object detection results
YOLOv3-Tiny 目標(biāo)檢測(cè)網(wǎng)絡(luò)在本文FPGA 硬件加速器與在CPU、GPU 平臺(tái)上實(shí)現(xiàn)的性能對(duì)比如表2 所示,輸入圖像像素尺寸為416×416. 本文所設(shè)計(jì)的硬件加速器吞吐量為96.6 GOPS,是CPU 平臺(tái)的1.1 倍,但功耗相較于CPU 平臺(tái)下降了15.8 倍. GPU平臺(tái)的功耗是本文硬件加速器的53.4 倍,但吞吐量?jī)H增加16.5 倍. 從能效比上看,相較于GPU 與CPU,本文硬件加速器分別有3.2 倍與17.4 倍的提升,具有最佳的能效比. 同時(shí),本文設(shè)計(jì)的硬件加速器功耗僅為4.12 W,更適用于功耗敏感型的邊緣計(jì)算設(shè)備.
表2 與CPU 和GPU 計(jì)算平臺(tái)的性能對(duì)比Tab.2 Comparision with CPU and GPU computing platform
本文設(shè)計(jì)的基于FPGA 的YOLOv3-Tiny 硬件加速器與先前其他同類(lèi)硬件加速器[10?14]的性能對(duì)比結(jié)果如表3 所示. 本文的硬件加速器吞吐量與DSP 效率分別為96.6 GOPS 與0.32 GOPS/DSP. 與YU[10]的設(shè)計(jì)相比,本文的硬件加速器吞吐量與DSP 效率分別是其9.2 倍與4.6 倍. ZHENG[11]使用優(yōu)化算法提升卷積效率,本設(shè)計(jì)的吞吐量與DSP 效率分別是其4.2倍與2.0 倍. AHMAD[12]使用了7.7 倍于本設(shè)計(jì)的DSP數(shù)量實(shí)現(xiàn)加速器,但吞吐量?jī)H提升了4.8 倍,同時(shí)其硬件部分設(shè)計(jì)僅包含卷積和BN 層處理且報(bào)告的是理論峰值吞吐量,而本設(shè)計(jì)實(shí)現(xiàn)了所有網(wǎng)絡(luò)層的加速功能,DSP 效率是其1.6 倍. PESTANA[13]設(shè)計(jì)的全可配加速器利用2.8 倍于本設(shè)計(jì)的DSP 實(shí)現(xiàn),但吞吐量?jī)H提升了1.9 倍,硬件資源利用效率較低,本設(shè)計(jì)的DSP 效率是其1.5 倍. ADIONO[14]使用通用卷積乘法實(shí)現(xiàn)加速器,本文根據(jù)其報(bào)告的執(zhí)行時(shí)間將原文的峰值吞吐量轉(zhuǎn)換為整體吞吐量,本文性能與DSP效率分別是其2.1 倍與1.7 倍. 綜上所述,本文提出的基于YOLOv3-Tiny 網(wǎng)絡(luò)的目標(biāo)檢測(cè)硬件加速器在保持較高整體吞吐量的同時(shí)減少了硬件資源使用量,與其他文獻(xiàn)相比具備最佳的DSP 效率與LUT 效率以及良好的BRAM 效率,平衡了系統(tǒng)性能與硬件資源用量的關(guān)系,更適用于在硬件資源敏感型設(shè)備中實(shí)現(xiàn)高效端到端目標(biāo)檢測(cè).
表3 與其他YOLOv3-Tiny 硬件加速器的性能對(duì)比Tab.3 Performance comparision with other YOLOv3-Tiny hardware accelerator
本文提出了一種基于YOLOv3-Tiny 網(wǎng)絡(luò)的端到端高效目標(biāo)檢測(cè)硬件加速系統(tǒng). 通過(guò)網(wǎng)絡(luò)結(jié)構(gòu)重組、層間融合與動(dòng)態(tài)數(shù)值量化方式實(shí)現(xiàn)網(wǎng)絡(luò)模型縮減,并基于通道并行與權(quán)值駐留的硬件加速算法與緊密流水線處理流程實(shí)現(xiàn)了硬件加速器的高效處理. 最后,設(shè)計(jì)了一套基于FPGA 的目標(biāo)檢測(cè)硬件加速系統(tǒng). 與其他同類(lèi)硬件加速器相比,擁有最佳的DSP與LUT 硬件資源利用效率,并具備高效準(zhǔn)確的端到端目標(biāo)檢測(cè)能力,適合在硬件資源敏感與功耗敏感的邊緣計(jì)算設(shè)備中應(yīng)用.