亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Zynq7000 FPGA異構(gòu)平臺(tái)的YOLOv2加速器設(shè)計(jì)與實(shí)現(xiàn)*

        2019-10-24 07:45:18柴志雷
        計(jì)算機(jī)與生活 2019年10期
        關(guān)鍵詞:排序特征設(shè)計(jì)

        陳 辰,柴志雷,2+,夏 珺

        1.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無(wú)錫214122

        2.數(shù)學(xué)工程與先進(jìn)計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室,江蘇 無(wú)錫214125

        +通訊作者E-mail:zlchai@jiangnan.edu.cn

        1 引言

        卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)已在圖像分類(lèi)、目標(biāo)檢測(cè)等領(lǐng)域被廣泛應(yīng)用[1-2]。為了滿(mǎn)足卷積神經(jīng)網(wǎng)絡(luò)對(duì)高強(qiáng)度計(jì)算能力的需求,當(dāng)前數(shù)據(jù)中心、服務(wù)器端不僅采用ASIC(application specific integrated circuit)或GPU(graphics processing unit)處理大批量數(shù)據(jù)[3],考慮到能效等因素也會(huì)大規(guī)模部署FPGA(field-programmable gate array)[4]。除了ASIC 外,F(xiàn)PGA 也可以很好地滿(mǎn)足嵌入式端低功耗高性能的需求[5]。并且,F(xiàn)PGA 可重構(gòu)的特點(diǎn)很好地適應(yīng)當(dāng)前深度學(xué)習(xí)日新月異的演變速度,因此已有許多基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)加速器的研究[6]。

        Zhang 等人設(shè)計(jì)出一種輸入和輸出特征圖數(shù)目二維展開(kāi)的SIMD(single instruction multiple data)卷積神經(jīng)網(wǎng)絡(luò)加速器架構(gòu),并且提出采用Roofline模型進(jìn)行加速器設(shè)計(jì)空間的探索[7]。Qiu等人深入分析了CNN 模型的計(jì)算與存儲(chǔ)瓶頸,提出了參數(shù)重排序以及數(shù)據(jù)量化的具體流程,并設(shè)計(jì)出了一種在卷積核長(zhǎng)寬二維展開(kāi)的加速器架構(gòu)。但是,在建模時(shí)并沒(méi)有將傳輸延時(shí)也考慮在內(nèi),導(dǎo)致實(shí)際性能與理論性能相差接近47%[8]。雖然Rahman等人提出了一種將帶寬考慮在內(nèi)的加速器模型,但只是根據(jù)傳輸數(shù)據(jù)量建模,并沒(méi)有考慮實(shí)際傳輸時(shí)延[9]。Ma 等人詳細(xì)分析了基于卷積循環(huán)展開(kāi)SIMD架構(gòu)的設(shè)計(jì)可能性,并提出在輸出特征圖數(shù)、寬度和高度三維展開(kāi)的SIMD架構(gòu)加速器。然而,由于提出的架構(gòu)將特征圖像素和權(quán)重都緩存在片上,導(dǎo)致所耗費(fèi)的FPGA資源過(guò)多,很難在低端FPGA 上使用[10]。為了提高FPGA計(jì)算資源的動(dòng)態(tài)利用率,Shen 等人提出設(shè)計(jì)多個(gè)加速器并發(fā)處理不同層,并且通過(guò)多通道數(shù)據(jù)傳輸改進(jìn)傳輸時(shí)延[11]。Li等人設(shè)計(jì)了一種層間流水,層內(nèi)輸入、輸出特征圖數(shù)和卷積核寬三維展開(kāi)的加速器架構(gòu),但也只適用于資源足夠多的FPGA[12]。Zhang 等人提出通過(guò)增大突發(fā)傳輸長(zhǎng)度來(lái)有效利用帶寬,以及通過(guò)參數(shù)復(fù)用和多批量處理來(lái)提高處理全連接層時(shí)計(jì)算單元的利用效率[13]。盧冶等人提出了一種面向邊緣計(jì)算的嵌入式FPGA 平臺(tái)卷積神經(jīng)網(wǎng)絡(luò)的通用構(gòu)建方法,但是用于評(píng)估的模型過(guò)于簡(jiǎn)單,并且只設(shè)計(jì)了一種類(lèi)似文獻(xiàn)[7]的加速器架構(gòu)[14]。另外,硬件設(shè)計(jì)的開(kāi)發(fā)周期是非常長(zhǎng)的,這也是導(dǎo)致硬件相關(guān)研究緩慢的一大原因。因此,可以通過(guò)高層次綜合(high-level synthesis,HLS)來(lái)快速地描述和實(shí)現(xiàn)所需的硬件架構(gòu),由此造成的額外資源開(kāi)銷(xiāo)和開(kāi)發(fā)效率的提升相比是可以接受的[15-16]。

        因此,使用HLS 設(shè)計(jì)并實(shí)現(xiàn)了一種在輸入和輸出特征圖數(shù)二維展開(kāi)的SIMD 卷積神經(jīng)網(wǎng)絡(luò)加速器架構(gòu),并使用了參數(shù)重排序、多通道數(shù)據(jù)傳輸?shù)葍?yōu)化策略。以目前在業(yè)界被廣泛應(yīng)用的YOLOv2 目標(biāo)檢測(cè)算法[1]為例,來(lái)介紹將CNN模型映射到FPGA上的完整流程。在Zedboard 上獲得了30.15 GOP/s 的性能,與Xeon E5-2620 v4 CPU 相比,能效是其120.4倍,性能是其7.3倍;與雙核ARM-A9 CPU相比,能效是其86 倍,性能是其112.9 倍。同時(shí),在性能上也超過(guò)現(xiàn)有的工作。

        本文的貢獻(xiàn)如下:

        (1)設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)加速器,給出將YOLOv2模型映射到FPGA上的完整流程,對(duì)加速器的性能和所需資源進(jìn)行深入分析和建模,將實(shí)際傳輸延時(shí)考慮在內(nèi),極大地縮小了加速器理論與實(shí)際時(shí)延的誤差。代碼已在github 開(kāi)源(https://github.com/dhm2013724/yolov2_xilinx_fpga)。

        (2)改進(jìn)了基于FPGA 的SIMD 二維展開(kāi)的卷積神經(jīng)網(wǎng)絡(luò)加速器架構(gòu)中的輸入和輸出模塊,使得傳輸像素塊能夠以較大的突發(fā)長(zhǎng)度進(jìn)行傳輸,有效提高了總線帶寬的實(shí)際利用率。

        2 基本概念

        本章主要介紹YOLOv2 模型涉及到的相關(guān)概念、突發(fā)傳輸以及卷積計(jì)算的優(yōu)化策略。

        2.1 YOLOv2模型簡(jiǎn)介

        YOLOv2 一共包含4 種類(lèi)型的層:卷積層、池化層、路由層和重排序?qū)?。其中,卷積層起到特征提取的作用,池化層用于像素抽樣,路由層用于多層次的特征融合,重排序?qū)佑糜谔卣鞯某闃又嘏?。在?xùn)練時(shí)常用批量歸一化來(lái)加速訓(xùn)練收斂[17],通過(guò)激活函數(shù)給網(wǎng)絡(luò)增加非線性擬合能力。批歸一化和激活函數(shù)一般都跟在卷積層后。

        (1)卷積層(convolutional layer)

        對(duì)多張輸入特征圖以對(duì)應(yīng)卷積核進(jìn)行卷積來(lái)實(shí)現(xiàn)特征提取,偽代碼如下所示:

        其中R、C、M、N、K、S分別代表輸出特征圖高度、輸出特征圖寬度、輸出特征圖數(shù)、輸入特征圖數(shù)、卷積核大小和步長(zhǎng)。pixelL(m,r,c)代表輸出特征圖m中r行c列的像素。全連接層可看作K=1,S=1 的特殊卷積層。

        (2)池化層(pool layer)

        對(duì)輸入特征圖降采樣,以降低特征圖的規(guī)模,同時(shí)也具有保持某種不變性(旋轉(zhuǎn)、平移、伸縮等)的功能,一般跟在卷積層后。最大池化層偽代碼如下所示:

        其中,Max 表示在K×K的鄰域中返回最大像素,其他參數(shù)含義與卷積層類(lèi)似。

        (3)路由層(route layer)

        將多層的輸出特征圖級(jí)聯(lián),作為下一層的輸入特征圖,實(shí)質(zhì)是將多維度的特征信息簡(jiǎn)單融合。

        (4)重排序?qū)樱╮eorganization layer)

        將給定的大尺度輸入特征圖在鄰域內(nèi)按位置抽樣,同位置像素形成子圖,如圖1所示。

        Fig.1 Reorganization with stride of 2圖1 步長(zhǎng)S為2時(shí)的重排序過(guò)程

        若步長(zhǎng)S=2,則一張W×H的輸入特征圖在2×2的鄰域內(nèi)按位置抽樣,最終輸出4張W/2×H/2 的子圖。

        (5)批歸一化(batch normalization,BN)

        深度學(xué)習(xí)常通過(guò)批歸一化加快訓(xùn)練收斂[17]。如果某卷積層在訓(xùn)練階段使用了批量歸一化,那么在推斷階段,該層的每個(gè)輸出特征圖像素都需要經(jīng)過(guò)以下映射:

        其中,bn0、bn1、sc0、sc1在訓(xùn)練完成后為常數(shù)??梢詫⑹剑?)與式(2)合并,得到:

        由于BN 一般跟在卷積計(jì)算后,激活函數(shù)前,并且由式(3)可知,BN實(shí)際是做一個(gè)線性變換,因此可以將其與對(duì)應(yīng)的卷積計(jì)算融合,得到新的卷積核權(quán)重和偏置參數(shù),公式如下所示:

        其中,Am和Bm為針對(duì)不同輸出特征圖m的相應(yīng)常數(shù)。本文之后的權(quán)重和偏置參數(shù)默認(rèn)都已經(jīng)過(guò)融合。

        (6)激活函數(shù)

        激活函數(shù)對(duì)每個(gè)輸出特征圖像素做一個(gè)非線性變換,主要用于給網(wǎng)絡(luò)增加非線性擬合的能力,一般位于批歸一化后。YOLOv2 中用到的激活函數(shù)是

        2.2 突發(fā)傳輸

        實(shí)際讀寫(xiě)DRAM(dynamic random access memory)的帶寬往往與突發(fā)傳輸長(zhǎng)度、數(shù)據(jù)位寬和時(shí)鐘頻率有關(guān)[13]。當(dāng)數(shù)據(jù)位寬和時(shí)鐘頻率保持不變時(shí),傳輸同樣長(zhǎng)度的連續(xù)數(shù)據(jù),突發(fā)傳輸長(zhǎng)度越長(zhǎng),傳輸時(shí)延越小。如圖2所示。

        Fig.2 Effective bandwidth for 64 MB transmission圖2 傳輸連續(xù)64 MB的有效帶寬

        在Xilinx 的Zedboard 開(kāi)發(fā)板上測(cè)試32 位AXI4 Master 接口在不同突發(fā)傳輸長(zhǎng)度下,向DRAM 寫(xiě)入連續(xù)的64 MB數(shù)據(jù)測(cè)得的實(shí)際帶寬??v軸是實(shí)測(cè)帶寬(單位:MB/s),橫軸是突發(fā)傳輸長(zhǎng)度,從1 至256。100 MHz 工作頻率下,在突發(fā)長(zhǎng)度為256 時(shí),能夠得到最大有效帶寬332 MB/s,此時(shí)的帶寬效率為332/400 ≈83%。150 MHz 工作頻率下,在突發(fā)長(zhǎng)度為256 時(shí),能夠得到最大有效帶寬489 MB/s,此時(shí)的帶寬效率為489/600 ≈81%。

        在已測(cè)得實(shí)際對(duì)應(yīng)不同突發(fā)傳輸長(zhǎng)度的有效帶寬的前提下,根據(jù)算法1,對(duì)讀寫(xiě)DRAM 的時(shí)延進(jìn)行仿真。

        算法1讀寫(xiě)DRAM時(shí)延仿真

        輸入:(1)連續(xù)傳輸32 位數(shù)據(jù)長(zhǎng)度Length(32 bit);(2)最大突發(fā)長(zhǎng)度BurstLengthmax(1~256);(3)對(duì)應(yīng)1~256突發(fā)長(zhǎng)度的有效帶寬數(shù)組Bandwidth[256](MB/s)。

        輸出:時(shí)延Latency(s)。

        初始化時(shí)延Latency=0.0

        計(jì)算以最大突發(fā)長(zhǎng)度傳輸?shù)拇螖?shù)Nummax∶

        計(jì)算剩余項(xiàng)的突發(fā)長(zhǎng)度BurstLengthRm:

        BurstLengthRm=Length%BurstLengthmax

        計(jì)算以最大傳輸長(zhǎng)度傳輸?shù)膫鬏敃r(shí)延:

        若剩余項(xiàng)不為0,計(jì)算剩余項(xiàng)的傳輸時(shí)延:

        否則,LatencyRm=0

        Latency=Latencymax+LatencyRm

        下文以MM(Length,BurstLengthmax)來(lái)表示在最大突發(fā)長(zhǎng)度為BurstLengthmax的前提下,傳輸連續(xù)Length個(gè)32位數(shù)據(jù)的傳輸時(shí)延。

        2.3 卷積優(yōu)化策略

        大多數(shù)卷積神經(jīng)網(wǎng)絡(luò)中,卷積層占90%以上的計(jì)算量,而全連接層占據(jù)90%以上的參數(shù)量[8]。由于全連接層也可看作特殊的卷積層,因此針對(duì)CNN 計(jì)算和帶寬瓶頸的優(yōu)化主要是對(duì)卷積層加速策略的研究,一般分為展開(kāi)和分塊兩種[10]。

        (1)展開(kāi)(unroll)

        在不考慮訪存時(shí)延的前提下,如果計(jì)算單元無(wú)法快速地計(jì)算所給數(shù)據(jù),那么計(jì)算將成為瓶頸。當(dāng)前的大部分研究通過(guò)對(duì)卷積循環(huán)中的多維度展開(kāi),設(shè)計(jì)多個(gè)并行乘法和加法計(jì)算單元來(lái)提高計(jì)算能力[7-14]。本文對(duì)輸出特征圖數(shù)M和輸入特征圖數(shù)N兩維進(jìn)行部分展開(kāi),形成Tm×Tn個(gè)并行乘法單元和Tm個(gè)lbTn深度的加法樹(shù),并行流水地計(jì)算卷積中的乘法和加法。其中,Tm為輸出特征圖數(shù)M維度的并行度/展開(kāi)度,Tn為輸入特征圖數(shù)N維度的并行度。

        (2)分塊(tile)

        由于FPGA的片上存儲(chǔ)資源相對(duì)于CNN計(jì)算所需的存儲(chǔ)空間來(lái)說(shuō)是極其不足的(一般小于10 MB),因此當(dāng)前大部分研究主要利用卷積計(jì)算的數(shù)據(jù)局部性,對(duì)卷積循環(huán)進(jìn)行多維劃分,使得在進(jìn)行卷積計(jì)算時(shí),多次復(fù)用片上數(shù)據(jù)。從而,某些數(shù)據(jù)只需要從片外存儲(chǔ)中讀取或?qū)懭肷倭看螖?shù),極大地降低了訪存次數(shù)和訪存數(shù)據(jù)量,使得訪存不至于成為CNN 加速的瓶頸。

        本文加速器設(shè)計(jì)所對(duì)應(yīng)的卷積層分塊與展開(kāi)策略的偽代碼如下所示:

        其中I、O、W分別代表輸入特征圖、輸出特征圖和卷積核參數(shù),一般存放于片外存儲(chǔ)DRAM中。Ibuf、Obuf、Wbuf分別代表在FPGA加速器上設(shè)計(jì)的片上輸入緩存、輸出緩存和參數(shù)緩存。偏置參數(shù)由于數(shù)據(jù)量較少,在進(jìn)行卷積計(jì)算前可以全部讀取到片上存儲(chǔ)bias中。

        每次從片外DRAM 讀取Tn張輸入特征圖的((Tr-1)×S+K)×((Tc-1)×S+K)大小的像素塊以及對(duì)應(yīng)的Tm×Tn×K2大小的權(quán)重參數(shù),復(fù)用片上輸入特征圖像素塊和權(quán)重參數(shù),將中間結(jié)果保留在片上緩存中,只有得到最終的輸出像素塊后,向片外寫(xiě)出Tm張輸出特征圖的Tr×Tc大小的像素塊。

        3 從CNN模型到FPGA加速器構(gòu)建

        本章主要描述從CNN模型到FPGA加速的完整流程,如圖3所示。

        Fig.3 Flow chart from CNN model to FPGA acceleration圖3 從CNN模型到FPGA加速的流程圖

        (1)模型分析與任務(wù)劃分:首先,需要對(duì)模型進(jìn)行深入分析,理解模型算法的原理和數(shù)據(jù)流。其次,根據(jù)模型在不同階段所做的運(yùn)算,考慮FPGA和CPU的特點(diǎn),將任務(wù)劃分給FPGA和CPU。CPU適合做控制性、串行、計(jì)算量較少的任務(wù),而FPGA適合做并行度高、計(jì)算密集型的任務(wù)。

        (2)針對(duì)分配到FPGA 上的任務(wù):通過(guò)量化可以降低計(jì)算復(fù)雜度,減少計(jì)算單元所耗費(fèi)的資源,從而設(shè)計(jì)出更多的并行計(jì)算單元,提高加速器性能。此外,需要設(shè)計(jì)對(duì)應(yīng)的加速器模塊來(lái)加速各層的處理,加速器的優(yōu)化策略包括參數(shù)重排序、雙緩沖設(shè)計(jì)和多通道數(shù)據(jù)傳輸?shù)取?/p>

        (3)針對(duì)分配到CPU上的任務(wù):可利用CPU的浮點(diǎn)運(yùn)算單元加快浮點(diǎn)計(jì)算。同時(shí),在編譯時(shí)可采用編譯優(yōu)化加速任務(wù)處理。此外,還有諸如多線程并行、cache緩存優(yōu)化等優(yōu)化策略。基于CPU的性能優(yōu)化已非常成熟,這里不再詳細(xì)敘述。

        3.1 YOLOv2網(wǎng)絡(luò)模型分析與任務(wù)劃分

        3.1.1 模型分析

        通過(guò)對(duì)文獻(xiàn)[1]及YOLOv2源碼分析可知,YOLOv2的目標(biāo)檢測(cè)步驟如下:

        (1)圖像預(yù)處理:輸入任意分辨率的RGB 圖片,除以256轉(zhuǎn)化到[0,1]區(qū)間,按原圖長(zhǎng)寬比調(diào)整到416×416大小,不足處填充0.5。

        (2)網(wǎng)絡(luò)檢測(cè):輸入預(yù)處理得到的416×416×3 的圖像數(shù)組,經(jīng)YOLOv2網(wǎng)絡(luò)檢測(cè)后,輸出包含檢測(cè)目標(biāo)信息的13×13×425大小的數(shù)組。

        (3)圖像后處理:對(duì)輸出的13×13×425 數(shù)組進(jìn)行處理,得到檢測(cè)邊框的中心、長(zhǎng)寬、邊框可信度和物體的預(yù)測(cè)概率等,根據(jù)原圖長(zhǎng)寬比,將得到的邊框調(diào)整到原圖尺度,完成檢測(cè)。

        3.1.2 任務(wù)劃分

        由于圖像預(yù)處理和后處理部分計(jì)算量不大且在圖像處理總延時(shí)中占比極少,同時(shí)考慮到后處理涉及指數(shù)計(jì)算,而FPGA實(shí)現(xiàn)指數(shù)擬合的資源耗費(fèi)較大,因此將圖像的預(yù)處理和后處理部分放在CPU端處理。

        YOLOv2 網(wǎng)絡(luò)中一共涉及4 類(lèi)層:卷積層、池化層、路由層和重排序?qū)?。卷積層占據(jù)模型的大部分計(jì)算量,已有的研究表明使用FPGA加速卷積運(yùn)算是非常有效的[7-14]。最大池化與卷積類(lèi)似,只是缺少輸入特征圖數(shù)維度,并使用比較運(yùn)算代替乘加運(yùn)算。因此,將卷積層和池化層的處理放在FPGA端[18]。路由層可通過(guò)預(yù)先設(shè)置內(nèi)存偏移地址來(lái)實(shí)現(xiàn)。重排序?qū)拥某闃又嘏排cDMA(direct memory access)類(lèi)似,但與傳統(tǒng)DMA不同,因此也在FPGA端處理。

        3.2 動(dòng)態(tài)定點(diǎn)16位量化

        CNN 對(duì)于數(shù)據(jù)精度有很強(qiáng)的魯棒性,在保持準(zhǔn)確度不變的前提下,可以通過(guò)降低數(shù)據(jù)位寬來(lái)減少計(jì)算耗費(fèi)的資源[7]。并且,隨著數(shù)據(jù)位寬降低,傳輸數(shù)據(jù)量也隨之降低。本文采用與文獻(xiàn)[8]和文獻(xiàn)[19]類(lèi)似的流程對(duì)權(quán)重參數(shù)和輸入輸出特征圖進(jìn)行動(dòng)態(tài)定點(diǎn)16位量化。

        定點(diǎn)數(shù)xfixed可由以下公式表示:

        其中,bw表示定點(diǎn)數(shù)的位寬,exp表示階碼,Bi∈{0,1}。定點(diǎn)數(shù)xfixed采用補(bǔ)碼表示,最高位為符號(hào)位。

        浮點(diǎn)數(shù)xfloat與定點(diǎn)數(shù)xfixed的相互轉(zhuǎn)化如下:

        由于定點(diǎn)數(shù)位寬有限且階碼固定,因此將浮點(diǎn)數(shù)xfloat轉(zhuǎn)換為定點(diǎn)數(shù)xfixed,再轉(zhuǎn)換回新浮點(diǎn)數(shù)x′float后,可能會(huì)有精度誤差。

        動(dòng)態(tài)定點(diǎn)數(shù)據(jù)量化由3步組成:

        (1)權(quán)重參數(shù)量化

        首先,找到每層的權(quán)重最優(yōu)階碼expw:

        其中,Wfloat表示某層的任意權(quán)重參數(shù)原始浮點(diǎn)值,W(bw,expw)表示在給定位寬bw和階碼expw下將Wfloat定點(diǎn)化后轉(zhuǎn)換回浮點(diǎn)的新浮點(diǎn)數(shù)W′float。通過(guò)式(10),希望找到最優(yōu)階碼expw使得原始權(quán)重與定點(diǎn)化后的權(quán)重絕對(duì)誤差和最小。偏置參數(shù)的量化與其類(lèi)似,在此不過(guò)多敘述。

        (2)輸入輸出特征圖量化

        按網(wǎng)絡(luò)的前向順序?qū)斎胼敵鎏卣鲌D進(jìn)行量化,使每一層的輸出特征圖像素有共同的階碼expout。階碼expout滿(mǎn)足以下公式:

        其中,Pxfloat表示某層的原輸出特征圖浮點(diǎn)像素值,Out(bw,expo)表示給定位寬bw和階碼expo下定點(diǎn)化后轉(zhuǎn)換回浮點(diǎn)的浮點(diǎn)數(shù)Px′float。其余與權(quán)重參數(shù)量化類(lèi)似。此外,由于在預(yù)處理時(shí)將RGB 像素值轉(zhuǎn)化到[0,1]區(qū)間,因此當(dāng)位寬bw為16時(shí),可將第一層的輸入特征圖階碼定為14。

        (3)中間結(jié)果量化

        雖然前兩步已將權(quán)重和輸入輸出特征圖定點(diǎn)化,但在處理時(shí)還是先轉(zhuǎn)換成浮點(diǎn)進(jìn)行計(jì)算,并且中間結(jié)果以浮點(diǎn)存儲(chǔ)。

        通過(guò)量化中間結(jié)果可以用定點(diǎn)數(shù)的乘加和移位來(lái)擬合浮點(diǎn)乘加運(yùn)算,使得推斷過(guò)程除預(yù)處理和后處理階段外,在FPGA 端都以定點(diǎn)數(shù)進(jìn)行計(jì)算和傳輸。中間結(jié)果階碼expinter滿(mǎn)足以下公式:

        另外,使用動(dòng)態(tài)定點(diǎn)量化時(shí),激活函數(shù)Leaky ReLU 也要進(jìn)行相應(yīng)的量化操作。當(dāng)位寬bw為16時(shí),使用與0xccc相乘和右移15位的定點(diǎn)運(yùn)算擬合與0.1相乘的操作。量化后的公式如下所示:

        3.3 基于FPGA的設(shè)計(jì)與優(yōu)化

        除路由層外,其他層都是將上一層的輸出作為當(dāng)前層的輸入,輸出結(jié)果作為下一層的輸入,串行順序處理。如圖4(a)所示,將路由層的功能通過(guò)預(yù)先設(shè)置存取地址偏移實(shí)現(xiàn)后,F(xiàn)PGA加速器只需根據(jù)相關(guān)參數(shù)讀取內(nèi)存數(shù)據(jù)、處理數(shù)據(jù)和將數(shù)據(jù)寫(xiě)回內(nèi)存即可。

        如圖4(b)所示,每次讀取或?qū)懭攵鄩K數(shù)據(jù),對(duì)FPGA片上緩存的數(shù)據(jù)塊復(fù)用結(jié)束后,再進(jìn)行下一次讀取,保證每塊數(shù)據(jù)只從片外讀取少量次數(shù)以減少訪存次數(shù)和傳輸數(shù)據(jù)量。

        對(duì)于每次取到的分塊數(shù)據(jù),根據(jù)圖4(c)的控制流處理:將從片外讀取到的數(shù)據(jù)發(fā)送到片上緩存,根據(jù)層的類(lèi)別交由CONV、POOL、REORG 模塊進(jìn)行處理。處理后的數(shù)據(jù)寫(xiě)回輸出緩沖,待得到最終結(jié)果后寫(xiě)回片外。

        加速器總體架構(gòu)如圖5所示,加速器對(duì)外有多個(gè)AXI master 接口和一個(gè)AXILite slave 接口。通過(guò)AXILite slave接口讀寫(xiě)控制、數(shù)據(jù)和狀態(tài)寄存器。多個(gè)AXI master 接口并發(fā)讀取輸入特征圖和寫(xiě)回輸出特征圖,一個(gè)獨(dú)立的AXI master接口負(fù)責(zé)讀取每層權(quán)重參數(shù)。

        Data scatter模塊生成對(duì)應(yīng)寫(xiě)入地址,并將從片外讀到的輸入特征圖像素塊分發(fā)到片上緩存。Data gather生成寫(xiě)回地址,將輸出緩存中的輸出特征圖像素塊寫(xiě)回片外。

        紅色處理模塊分別負(fù)責(zé)卷積層(CONV 和Leaky ReLU)、最大池化層(POOL)及重排序?qū)樱≧EORG)的處理。用于讀寫(xiě)特征圖的AXI master 接口數(shù)由以下公式?jīng)Q定:

        Fig.4 Execution schedule圖4 執(zhí)行調(diào)度流

        Fig.5 Accelerator overall architecture圖5 加速器總體架構(gòu)

        其中,NCin表示并發(fā)讀取特征圖的AXI master 接口數(shù),NCout表示并發(fā)寫(xiě)回DRAM 的AXI master 接口數(shù)。由于AXI4協(xié)議本身讀寫(xiě)通道獨(dú)立,讀寫(xiě)操作并發(fā),因此實(shí)際用于數(shù)據(jù)傳輸?shù)腁XI master接口數(shù)由并發(fā)通道多的一側(cè)決定。再加上用于權(quán)重讀取的接口,實(shí)際AXI master接口數(shù)NAXIM=NChannel+1。

        另一方面,HLS 生成的AXI4 master 接口模塊內(nèi)部讀寫(xiě)通道都擁有類(lèi)似DMA的硬件結(jié)構(gòu),可以看作(NCin+NCout+1)個(gè)獨(dú)立的DMA并發(fā)訪存。

        3.3.1 輸入輸出模塊

        由于AXI4 master 接口讀寫(xiě)通道獨(dú)立,因此讀寫(xiě)操作可以并發(fā)執(zhí)行。通過(guò)讀通道從DRAM 讀取數(shù)據(jù),由數(shù)據(jù)分發(fā)(data scatter)模塊控制多個(gè)讀通道的DMA 完成輸入特征圖像素塊的讀取,并將讀取的數(shù)據(jù)塊分發(fā)到對(duì)應(yīng)輸入緩存;由數(shù)據(jù)收集(data gather)模塊將輸出緩存中的像素塊寫(xiě)回DRAM,控制多個(gè)寫(xiě)通道的DMA完成輸出特征圖像素塊的寫(xiě)入,如圖6所示。

        圖6(a)中的TRow和TCol由輸出特征圖像素塊的寬度Tr和高度Tc、卷積核大小K和步長(zhǎng)S決定,公式如下:

        如圖6(a)所示,數(shù)據(jù)分發(fā)模塊從內(nèi)存順序讀取Tn張TRow×TCol大小的輸入特征圖像素塊,每個(gè)像素塊按行優(yōu)先順序讀取并分發(fā)到Tn個(gè)獨(dú)立的片上輸入緩存。與此類(lèi)似,圖6(b)中的數(shù)據(jù)收集模塊從Tm個(gè)獨(dú)立的片上輸出緩存中順序讀取Tr×Tc大小的像素塊寫(xiě)回片外。

        Fig.6 Single channel data transmission圖6 單通道數(shù)據(jù)傳輸

        為了減少數(shù)據(jù)的傳輸時(shí)延,在數(shù)據(jù)分發(fā)和收集模塊中還添加了額外的行緩沖,并且進(jìn)行了雙緩沖設(shè)計(jì)。輸入輸出模塊的雙緩沖時(shí)序如圖7所示。

        (1)對(duì)于數(shù)據(jù)分發(fā)模塊從片外DRAM 讀取輸入特征圖像素塊到片上緩存的過(guò)程

        如圖7(a)所示,數(shù)據(jù)分發(fā)模塊的雙緩沖的設(shè)計(jì)使得訪存地址、片上緩存偏移的計(jì)算、將輸入特征圖像素塊從DRAM讀取到行緩沖的時(shí)延和像素從行緩沖寫(xiě)入輸入緩存的時(shí)延重疊,減少數(shù)據(jù)的傳輸時(shí)延。

        輸入行緩沖所需的存儲(chǔ)資源NLoadLineBRAM為:

        其中,行緩沖大小LineBufferSizeLoad滿(mǎn)足:

        ConeBRAM表示單塊BRAM(block RAM)的存儲(chǔ)能力(典型值為18 Kb),Bitwidth表示當(dāng)前的數(shù)據(jù)寬度,Tcmax表示各層的最大Tc值,Smax和Kmax以此類(lèi)推。NCin表示多通道并發(fā)輸入數(shù),此處無(wú)多通道數(shù)據(jù)傳輸情況下為1。

        根據(jù)片上緩存和特征圖的寬度盡可能長(zhǎng)地連續(xù)傳輸數(shù)據(jù),提高帶寬效率。行緩沖每次傳輸?shù)妮斎胩卣鲌D行數(shù)NTRowOneLine如下所示:

        Fig.7 Timing graph for double buffered design圖7 雙緩沖設(shè)計(jì)時(shí)序圖

        只有當(dāng)讀取的輸入特征圖的寬度小于TCol時(shí),每次行緩沖才會(huì)讀取連續(xù)的多行像素。

        ①訪存地址、片上緩存偏移的計(jì)算、將輸入特征圖像素塊從DRAM 讀取到行緩沖的時(shí)延LatencyLoad1公式如下:

        其中,Const為模塊相關(guān)常數(shù)(流水線初始化時(shí)鐘等),F(xiàn)req為加速器工作的時(shí)鐘頻率,BitwidthInterface為AXI Master 接口數(shù)據(jù)位寬,BurstLengthmax為設(shè)置的最大突發(fā)長(zhǎng)度。

        ②將行緩沖中的像素寫(xiě)入輸入緩存的時(shí)延LatencyLoad2如下:

        上述兩個(gè)處理過(guò)程雙緩沖的循環(huán)次數(shù)InputPing-PongLoops(IPPL)如下所示:

        使用雙緩沖設(shè)計(jì)后,輸入特征圖讀取時(shí)延LatencyLoadIFM為:

        (2)對(duì)于數(shù)據(jù)接收模塊從片上輸出緩存寫(xiě)出像素塊到片外DRAM的過(guò)程

        如圖7(b)所示,數(shù)據(jù)接收模塊將訪存地址、片上緩存偏移的計(jì)算、像素從輸出緩存搬移到行緩沖的時(shí)延和將行緩沖中的像素寫(xiě)回內(nèi)存的時(shí)延重疊。

        輸出行緩沖所需存儲(chǔ)資源NStoreLineBRAM為:

        NCout表示多通道并發(fā)輸出數(shù),此處為1。輸出行緩沖大小LineBufferSizeStore滿(mǎn)足以下約束:

        行緩沖每次傳輸?shù)妮敵鎏卣鲌D行數(shù)NTrOneLine如下所示:

        ①訪存地址、片上緩存偏移的計(jì)算、從輸出緩存搬移到行緩沖的時(shí)延LatencyStore1如下所示:

        ②將行緩沖中的像素寫(xiě)回內(nèi)存的時(shí)延LatencyStore2如下所示:

        上述兩個(gè)處理過(guò)程雙緩沖的循環(huán)次數(shù)Output-PingPongLoops(OPPL)如下:

        使用雙緩沖設(shè)計(jì)后,輸出時(shí)延LatencyStore為:

        3.3.2 卷積模塊

        對(duì)卷積循環(huán)中輸出特征圖數(shù)M和輸入特征圖數(shù)N兩維部分展開(kāi),形成Tm×Tn個(gè)并行乘法計(jì)算單元和Tm個(gè)lbTn深度的加法樹(shù),流水地處理乘加運(yùn)算[20]。其中,Tm為輸出并行度,Tn為輸入并行度。以Tm=2,Tn=4為例,如圖8所示。

        Fig.8 Convolution module(Tm=2,Tn=4)圖8 卷積模塊(Tm=2,Tn=4)

        充滿(mǎn)流水線后,每個(gè)時(shí)鐘周期卷積模塊從對(duì)應(yīng)的Tn個(gè)獨(dú)立輸入特征圖緩存中讀入Tn個(gè)相同位置的像素,與此同時(shí)從Tm×Tn個(gè)獨(dú)立的卷積核緩存中讀入相同位置的權(quán)重,Tm×Tn個(gè)并行乘法單元復(fù)用Tn個(gè)輸入像素進(jìn)行乘法計(jì)算。Tm個(gè)加法樹(shù)將乘積兩兩相加,得到的結(jié)果和部分和累加后,寫(xiě)回對(duì)應(yīng)輸出緩存或局部寄存器中。

        卷積模塊對(duì)應(yīng)的計(jì)算時(shí)延LatencyCompute:

        卷積模塊的資源大部分用于乘法器和加法器的設(shè)計(jì)。單一乘法器和加法器的資源耗費(fèi)與數(shù)據(jù)精度息息相關(guān)。由文獻(xiàn)[7]和實(shí)際評(píng)估可知,乘法器和加法器主要耗費(fèi)DSP(digital signal processing)和LUT(look-up table)資源。不同精度下,乘法器和加法器的資源耗費(fèi)如表1所示。

        Table 1 Resource consumption comparison表1 資源耗費(fèi)比較

        浮點(diǎn)32 位精度時(shí),設(shè)計(jì)單個(gè)乘法器和加法器的DSP 和LUT 的耗費(fèi)較大。與浮點(diǎn)32 位時(shí)相比,定點(diǎn)16位精度的加法器只耗費(fèi)少量LUT,不耗費(fèi)DSP;乘法器和移位電路耗費(fèi)的資源也大大降低。因此,在保證數(shù)據(jù)精度的前提下,定點(diǎn)計(jì)算具有較大的優(yōu)勢(shì)。

        在輸出并行度為T(mén)m,輸入并行度為T(mén)n的條件下,卷積模塊的主要DSP 資源耗費(fèi)NDSP和LUT 資源耗費(fèi)NLUT如下:

        其中,CostMul和CostAdd分別對(duì)應(yīng)不同精度下,乘法器和加法器的對(duì)應(yīng)資源耗費(fèi)。CostSelect對(duì)應(yīng)圖8 中的2選1選擇電路和累加器的LUT耗費(fèi),本設(shè)計(jì)中典型值為8。

        3.3.3 池化模塊

        YOLOv2 中的池化層都為K=S=2 的最大池化層。對(duì)單一輸入特征圖,以2×2 大小且步長(zhǎng)S=2 的窗口滑動(dòng),取其中的最大像素作為輸出。最大池化操作與卷積操作類(lèi)似,不同之處在于:(1)只需要對(duì)單一輸入特征圖進(jìn)行抽樣;(2)運(yùn)算單元不是乘法器和加法器,而是比較器。硬件結(jié)構(gòu)如圖9所示。

        充滿(mǎn)流水線后,每個(gè)時(shí)鐘周期,池化模塊從Tpool個(gè)獨(dú)立的輸入特征圖緩存中讀取相同位置的像素與當(dāng)前最大值比較,同時(shí)有Tpool個(gè)比較器在進(jìn)行不同輸入特征圖的比較運(yùn)算。比較K2次后,將得到的最大值寫(xiě)入輸出緩存中。由于在加速器整體架構(gòu)中(圖5),各層共用輸入和輸出模塊,池化模塊的并行度Tpool≤min(Tnmax,Tmmax)。

        池化模塊的計(jì)算時(shí)延LatencyCompute:

        Fig.9 Pooling module圖9 池化模塊

        池化模塊主要耗費(fèi)LUT 資源用于多路選擇器、比較器和寄存器的設(shè)計(jì)??紤]到其所耗費(fèi)資源較少,這里不再過(guò)多說(shuō)明。

        3.3.4 重排序模塊

        重排序?qū)拥奶幚磉^(guò)程與最大池化層類(lèi)似,都是對(duì)單一輸入特征圖的像素進(jìn)行抽樣。不同之處在于,最大池化層輸出K×K鄰域內(nèi)的最大像素到單一輸出特征圖,而重排序?qū)訉×K鄰域內(nèi)的輸入像素輸出到K×K張的輸出特征圖相同位置。因此,針對(duì)YOLOv2中K=S=2 的重排序?qū)?,重排序模塊只使用1 塊輸入緩存和4 塊輸出緩存,并設(shè)計(jì)一個(gè)4 路選擇器,每次從輸入緩存讀取1 個(gè)像素寫(xiě)入對(duì)應(yīng)的輸出緩存。

        重排序模塊的處理時(shí)延LatencyCompute如下:

        3.4 優(yōu)化策略

        3.4.1 參數(shù)重排序

        參數(shù)重排序,將卷積層所需參數(shù)預(yù)先重排,使得每次傳輸?shù)膮?shù)在DRAM 中連續(xù)存儲(chǔ),可以以較大的突發(fā)長(zhǎng)度進(jìn)行傳輸,有效提高了帶寬的利用效率[13]。

        對(duì)于權(quán)重參數(shù),由于只跟當(dāng)前層相關(guān),因此根據(jù)當(dāng)前層的塊劃分(這里指各層的Tn和Tm)對(duì)各層權(quán)重預(yù)先進(jìn)行重排序,以減少訪存次數(shù)和增大突發(fā)長(zhǎng)度。以Layer 0為例,如圖10所示。

        Fig.10 Weight arrangement in DRAM圖10 在DRAM中的參數(shù)排序

        第0 層的核權(quán)重為32×3×3×3(M×N×K×K)也可看作32×3×9(M×N×K2),其中M=32,N=3,K=3。如圖10(a)所示,原始參數(shù)在內(nèi)存中按行優(yōu)先順序存儲(chǔ)。如果將卷積循環(huán)按Tm=16 和Tn=1劃分,那么需要按箭頭順序從DRAM 中讀取16×1×9 大小的參數(shù)6次。但由于參數(shù)不連續(xù),共需訪存32×3=96 次,每次的突發(fā)長(zhǎng)度為9。

        如圖10(b)所示,參數(shù)重排序后,由于讀取參數(shù)連續(xù)存放,只需訪存6 次,每次突發(fā)長(zhǎng)度為16×9=144。增大突發(fā)長(zhǎng)度并且減少大量的訪存次數(shù),使得有效帶寬大大增加。

        參數(shù)讀取模塊與輸入模塊類(lèi)似,也添加了行緩沖并進(jìn)行雙緩沖設(shè)計(jì)。不同排序下的參數(shù)讀取模塊的傳輸次數(shù)NumTrans和連續(xù)傳輸?shù)膮?shù)長(zhǎng)度LengthTrans,如下所示:

        其中,Normal 表示不使用參數(shù)重排時(shí),從DRAM 讀取Tm次Tn×K×K個(gè)連續(xù)參數(shù);而Rearrangement 表示經(jīng)過(guò)參數(shù)重排序后,從DRAM讀取K×K次Tm×Tn個(gè)連續(xù)參數(shù)。

        行緩沖所需的存儲(chǔ)資源為:

        每次從DRAM 讀取連續(xù)LengthTrans個(gè)權(quán)重參數(shù)到行緩沖中的時(shí)延如下:

        將行緩沖中的LengthTrans個(gè)參數(shù)寫(xiě)入片上參數(shù)緩存中的時(shí)延:

        從DRAM讀取NumTrans次LengthTrans個(gè)連續(xù)參數(shù)的讀取時(shí)延LatencyLoadW:

        3.4.2 乒乓緩沖

        通過(guò)乒乓緩沖的設(shè)計(jì),將從片外DRAM 讀取數(shù)據(jù)的時(shí)延LatencyLoad、在片上數(shù)據(jù)處理的時(shí)延LatencyCompute和將處理完的數(shù)據(jù)寫(xiě)回片外DRAM的時(shí)延LatencyStore重疊,減少總時(shí)延[7-8]。

        由于讀取權(quán)重和輸入特征圖像素塊的過(guò)程可以并發(fā)執(zhí)行,從片外DRAM讀取數(shù)據(jù)的時(shí)延LatencyLoad由權(quán)重讀取時(shí)延LatencyLoad和輸入特征圖讀取時(shí)延LatencyLoadIFM中較大的一項(xiàng)決定:

        沒(méi)有權(quán)重參數(shù)的最大池化層和重排序?qū)覮atencyLoadW為0。

        如式(9)可知,卷積由六維乘加循環(huán)組成,與池化和重排序?qū)硬煌?,包括?duì)輸入特征圖數(shù)維度N的遍歷。故不使用乒乓時(shí),卷積層各部分時(shí)延不重疊,輸入特征圖數(shù)維度N的內(nèi)層循環(huán)需重復(fù)N/Tn次讀取和計(jì)算操作,才能輸出最終結(jié)果。此時(shí),內(nèi)層循環(huán)的時(shí)延LatencyInner:

        卷積層處理的總時(shí)延Latency為:

        若使用乒乓緩沖,則讀取時(shí)延LatencyLoad和卷積計(jì)算時(shí)延LatencyCompute重疊,讀取和計(jì)算操作經(jīng)(N/Tn+1)次循環(huán)后輸出最終結(jié)果,此時(shí)內(nèi)層循環(huán)時(shí)延LatencyInner為:

        與卷積層相比,池化層和重排序?qū)尤鄙佥斎胩卣鲌D數(shù)N維度,故只考慮讀取、數(shù)據(jù)處理和寫(xiě)回三者是否兩兩重疊。不使用乒乓時(shí),三者線性進(jìn)行,在時(shí)間上不重疊,處理總時(shí)延Latency為:

        使用乒乓緩沖設(shè)計(jì)后,三者的處理過(guò)程兩兩重疊,此時(shí)處理總時(shí)延Latency為:

        使用乒乓時(shí),對(duì)應(yīng)輸入緩存和輸出緩存所耗費(fèi)的BRAM資源數(shù)如下:

        其中,BitwidthInter表示中間結(jié)果的數(shù)據(jù)位寬,典型值為32。對(duì)于權(quán)重緩存,數(shù)據(jù)量較小時(shí)使用FF(flipflop)和LUT 資源設(shè)計(jì);數(shù)據(jù)量較大時(shí),使用BRAM資源設(shè)計(jì),BRAM的耗費(fèi)如下:

        不使用雙緩沖時(shí),對(duì)應(yīng)BRAM資源耗費(fèi)減半。

        3.4.3 多通道數(shù)據(jù)傳輸

        3.3.1 節(jié)中的輸入輸出模塊每次順序地讀取或?qū)懭攵嗵卣鲌D的像素塊。考慮到DRAM實(shí)際帶寬大于單接口的總線帶寬,可通過(guò)多通道數(shù)據(jù)傳輸,減少傳輸時(shí)延[11]。如圖11所示。

        Fig.11 Multi-channel data transmission圖11 多通道數(shù)據(jù)傳輸

        圖11 與圖6 類(lèi)似,但是圖11(a)中數(shù)據(jù)分發(fā)模塊變?yōu)镹Cin個(gè)子輸入模塊,每個(gè)子輸入模塊從DRAM讀取張輸入特征圖的像素塊到片上緩存。圖11(b)中數(shù)據(jù)收集模塊變?yōu)镹Cout個(gè)子輸出模塊,每個(gè)子輸出模塊將張輸出特征圖的像素塊從片上緩存寫(xiě)回到片外。各輸入輸出子模塊間無(wú)依賴(lài)性,并發(fā)地完成數(shù)據(jù)傳輸。此時(shí),在式(20)、式(23)和式(24)中NCin>1,式(24)、式(27)和式(28)中NCout>1。同時(shí),由于讀寫(xiě)通道的增加,式(17)和式(24)中行緩沖占用的BRAM數(shù)目也會(huì)隨之增加。

        4 實(shí)驗(yàn)評(píng)估

        4.1 軟硬件實(shí)驗(yàn)環(huán)境

        CNN 模 型:YOLOv2 和YOLOv2-Tiny(416×416),模型對(duì)應(yīng)的數(shù)據(jù)集為COCO數(shù)據(jù)集[21]。

        FPGA平臺(tái):Xilinx Zedboard開(kāi)發(fā)板(Dual-coreARMA9+FPGA),其中FPGA 的BRAM_18Kb、DSP48E、FF和LUT資源數(shù)分別為280、220、106 400和53 200。

        CPU平臺(tái):服務(wù)器CPU Intel E5-2620 v4(8 cores)工作頻率2.1 GHz,256 GB內(nèi)存。Zedboard上的雙核ARM-A9,時(shí)鐘頻率667 MHz,512 MB內(nèi)存。

        使用Vivado HLS 2018.2 HLS 進(jìn)行加速器設(shè)計(jì),Vivado v2018.2 進(jìn)行綜合和布局布線。功耗采用VC470 功耗測(cè)量?jī)x外部測(cè)量板級(jí)系統(tǒng)功耗。對(duì)于E5-2620 v4,采用散熱設(shè)計(jì)功耗(thermal design power,TDP)作為總功耗(實(shí)際功耗大于TDP)。由于Zedboard是ARM+FPGA異構(gòu)SoC平臺(tái),F(xiàn)PGA的計(jì)算功耗通過(guò)計(jì)算時(shí)系統(tǒng)的峰值功耗減去FPGA 復(fù)位后系統(tǒng)的空閑功耗得到。

        4.2 加速器性能與資源耗費(fèi)的評(píng)估

        選擇動(dòng)態(tài)定點(diǎn)16 位精度下的加速器架構(gòu),采用參數(shù)重排序、乒乓緩沖和多通道數(shù)據(jù)傳輸三種優(yōu)化策略,其中Tmmax=32,Tnmax=4,Trmax=26,Tcmax=26,Kmax=3,Smax=2,NCin=4,NCout=2。給定以上硬件設(shè)計(jì)參數(shù)后,實(shí)際加速器設(shè)計(jì)已確定。此時(shí),還需確定各層在當(dāng)前加速器設(shè)計(jì)下對(duì)應(yīng)的Tm、Tn、Tr和Tc。

        各層的Tr和Tc由以下公式得出:

        其中,OH和OW分別表示輸出特征圖的高度和寬度。通過(guò)式(49)和式(51),可以得出各層輸入和輸出緩存能夠存儲(chǔ)的像素塊的最大寬高。對(duì)于YOLOv2中的池化層和重排序?qū)?,S=K=2。

        對(duì)于卷積層,Tm和Tn由以下公式得出:

        當(dāng)Tmmax和Tnmax給定后,已確定卷積計(jì)算模塊的設(shè)計(jì)。因此,各卷積層的輸入并行度Tn和輸出并行度Tm不能超過(guò)相應(yīng)最大值。

        對(duì)于池化層,Tm和Tn由以下公式得出:

        由于各計(jì)算模塊復(fù)用輸入輸出模塊,因此池化層的并行度Tpool≤Tm,實(shí)驗(yàn)中Tpool=Tm。

        S=2 的重排序?qū)訉⒁粡堓斎胩卣鲌D抽樣重排為4張輸出特征圖,因此Tn=1,Tm=4。

        4.2.1 資源耗費(fèi)評(píng)估

        如表2所示,結(jié)合給定參數(shù)和上文中對(duì)各模塊資源耗費(fèi)的公式,將估計(jì)資源耗費(fèi)與實(shí)際資源耗費(fèi)進(jìn)行對(duì)比。

        DSP 主要用于卷積模塊中加法器和乘法器的設(shè)計(jì)。根據(jù)式(32),DSP 耗費(fèi)128 個(gè),實(shí)際設(shè)計(jì)中多出的DSP用于其他模塊的設(shè)計(jì)。

        BRAM_18Kb主要用于實(shí)現(xiàn)存儲(chǔ)量大的緩存,除上文中所提及的各模塊對(duì)BRAM 的耗費(fèi)外,AXI Master 接口也會(huì)耗費(fèi)BRAM 來(lái)實(shí)現(xiàn)接口緩存(在當(dāng)前設(shè)計(jì)下,耗費(fèi)NAXIM×2=10 BRAM)。偏置參數(shù)的緩存耗費(fèi)額外的兩個(gè)BRAM。此外,根據(jù)式(49)、式(50)、式(17)、式(38)和式(24),加上輸入緩存(3×4×2)、輸出緩存(2×32×2)、片上輸入行緩沖(2)、權(quán)重行緩沖(2)和輸出行緩沖(2×2)所耗費(fèi)的BRAM 資源,共耗費(fèi)BRAM_18Kb 170 個(gè),即85 個(gè)BRAM_36Kb,與實(shí)際BRAM耗費(fèi)接近。

        由于單個(gè)權(quán)重緩存的存儲(chǔ)量過(guò)?。↘2×Bitwidth=9×16=144 bit),無(wú)法充分利用BRAM資源。在設(shè)計(jì)時(shí)考慮使用LUT和FF來(lái)實(shí)現(xiàn)權(quán)重緩存(在當(dāng)前設(shè)計(jì)下,單個(gè)權(quán)重緩存耗費(fèi)約43 個(gè)LUT)。因此,當(dāng)前權(quán)重緩存共耗費(fèi)43×Tmmax×Tnmax×2=11 008 個(gè)LUT。由式(33)可知,此時(shí)16 位定點(diǎn)精度的卷積模塊耗費(fèi)19 968 個(gè)LUT。因此,共耗費(fèi)約30 976 個(gè)LUT。剩余LUT用于其他模塊的設(shè)計(jì)。

        4.2.2 性能與能效評(píng)估

        YOLOv2模型除路由層、圖像的預(yù)處理和后處理外,剩余29層。其中包括23層卷積層、5層池化層和1 層重排序?qū)?。由于篇幅原因,? 僅列出其中部分層的評(píng)估結(jié)果。列中的R(Real)表示該列數(shù)據(jù)為實(shí)測(cè)值,E(Estimated)表示該列數(shù)據(jù)是根據(jù)上文公式得到的估計(jì)值。

        以相對(duì)誤差對(duì)時(shí)延模型進(jìn)行評(píng)價(jià),相對(duì)誤差δ公式如下:

        即測(cè)量的絕對(duì)誤差與被測(cè)量的真值之比。

        以表中最后一行總延時(shí)為例,YOLOv2模型的總時(shí)延誤差約為,總計(jì)算時(shí)延誤差約為0.8%,總輸入時(shí)延誤差約為10.7%,總輸出時(shí)延誤差約為10.4%。雖然本模型的主要誤差仍集中于傳輸時(shí)延部分約為10%,但已遠(yuǎn)小于文獻(xiàn)[8]中的誤差47%。并且加速后卷積層的時(shí)延仍占總時(shí)延的95%(930.560/977.485 ≈95.2%)。

        當(dāng)前的工作在性能上也超過(guò)之前的工作,如表4所示。文獻(xiàn)[22]設(shè)計(jì)了一個(gè)7×7的行緩沖,能夠適應(yīng)3×3 和7×7 的卷積核。由于分別設(shè)計(jì)卷積模塊和全連接模塊處理對(duì)應(yīng)層,計(jì)算單元的利用率并不高。雖然工作頻率很高,但性能僅達(dá)到18.82 GOP/s。文獻(xiàn)[23]基于Intel的OpenCL采用通用矩陣乘法對(duì)矩陣分塊,塊間并行乘加的方式加速。然而,此方法需要每次將輸入特征圖和卷積核參數(shù)重排序,增加了預(yù)處理時(shí)延和復(fù)雜度。

        如表5所示,與CPU相比,CPU+FPGA的異構(gòu)系統(tǒng)是雙核ARM-A9 能效的86 倍左右,Xeon 的120.4倍。速度是雙核ARM-A9 的112.9 倍,Xeon 的7.3 倍左右。其中,將FPGA 復(fù)位后測(cè)量板級(jí)電源功耗,得到只使用雙核ARM-A9計(jì)算時(shí)的功耗。此時(shí)的功耗較低,但是由于計(jì)算能力弱,使得計(jì)算時(shí)延過(guò)長(zhǎng),能效低。Xeon恰恰與其相反,計(jì)算性能強(qiáng),使得計(jì)算時(shí)延很短,但是由于功耗過(guò)高,導(dǎo)致能效低下。與前兩者不同,使用CPU+FPGA的異構(gòu)系統(tǒng),功耗略高于雙核ARM-A9,但使用FPGA 加速,大幅度提高計(jì)算性能,在計(jì)算時(shí)延和能效上都獲得了不錯(cuò)的表現(xiàn)。

        Table 2 FPGA resource consumption表2 FPGA資源耗費(fèi)

        Table 3 Actual and estimated delay(partial)表3 實(shí)際與估計(jì)時(shí)延(部分) ms

        Table 4 Comparison with other FPGA work表4 與其他的FPGA工作比較

        Table 5 Comparison with CPU表5 與CPU的比較

        基于Xeon CPU 的評(píng)估由YOLOv2 源碼編譯(-Ofast)后執(zhí)行得到,數(shù)據(jù)精度為float32(同條件下,F(xiàn)ixed16執(zhí)行時(shí)間約為15.78 s)。動(dòng)態(tài)定點(diǎn)16位數(shù)據(jù)量化得到的模型,在準(zhǔn)確度上與原模型接近,COCO數(shù)據(jù)集上mAP(mean average precision)達(dá)到約48.1%。

        5 結(jié)束語(yǔ)

        本文以YOLOv2 目標(biāo)檢測(cè)算法為例,設(shè)計(jì)并實(shí)現(xiàn)了一種在卷積輸入和輸出特征圖數(shù)二維展開(kāi)的SIMD卷積神經(jīng)網(wǎng)絡(luò)加速器架構(gòu),介紹將卷積神經(jīng)網(wǎng)絡(luò)模型映射到FPGA 上的完整流程。對(duì)加速器的性能和所需資源進(jìn)行分析和建模,將實(shí)際傳輸延時(shí)考慮在內(nèi),極大地縮小了加速器理論與實(shí)際時(shí)延的誤差。同時(shí),改進(jìn)了加速器架構(gòu)中的輸入和輸出模塊,有效提高了總線帶寬的利用效率。

        未來(lái)進(jìn)一步的改進(jìn)方向主要有4個(gè)方面:

        (1)考慮多種數(shù)據(jù)復(fù)用模式,適應(yīng)不同維度“形狀”下的訪存需求,平衡計(jì)算與傳輸時(shí)延;(2)降低數(shù)據(jù)精度;(3)使用Winograd等快速矩陣乘法提高計(jì)算性能;(4)設(shè)計(jì)更細(xì)粒度的加速器或通過(guò)多層融合以減少總時(shí)延。

        猜你喜歡
        排序特征設(shè)計(jì)
        排序不等式
        恐怖排序
        如何表達(dá)“特征”
        不忠誠(chéng)的四個(gè)特征
        節(jié)日排序
        瞞天過(guò)?!律O(shè)計(jì)萌到家
        刻舟求劍
        兒童繪本(2018年5期)2018-04-12 16:45:32
        抓住特征巧觀察
        設(shè)計(jì)秀
        海峽姐妹(2017年7期)2017-07-31 19:08:17
        有種設(shè)計(jì)叫而專(zhuān)
        Coco薇(2017年5期)2017-06-05 08:53:16
        国产av天堂一区二区二区| 特黄做受又硬又粗又大视频小说| 尤物视频在线观看| 18禁高潮出水呻吟娇喘蜜芽| 亚洲成aⅴ人在线观看| 色999欧美日韩| 超碰观看| 少妇被猛烈进入中文字幕| 媚药丝袜美女高清一二区| 好紧好爽免费午夜视频| 国产尤物av尤物在线观看| 97久久天天综合色天天综合色hd| 国产成人精品日本亚洲专区6| 日韩精品首页在线观看| 久久精品国产亚洲av日韩精品| 久久麻传媒亚洲av国产| 精品国产yw在线观看| 国产精品国三级国产av| 97成人碰碰久久人人超级碰oo| 亚洲最新偷拍网站| 开心激情站开心激情网六月婷婷 | 脱了老师内裤猛烈进入| 无码尹人久久相蕉无码| 久久99精品久久久久久久清纯| 日韩狼人精品在线观看| 亚洲国产熟女精品传媒| 特级毛片爽www免费版| 国产性猛交╳xxx乱大交| 国产高清精品自在线看| 一区二区三区日本美女视频 | 青青操国产在线| 亚洲高清在线视频网站| av在线免费观看麻豆| 欧洲成人一区二区三区| 久久99久久99精品中文字幕| 久久AV老司机精品网站导航| 色偷偷av一区二区三区人妖| 成人av在线久色播放| 天码人妻一区二区三区| 黄色毛片在线看| 丰满人妻一区二区三区免费|