国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于改進YOLOv4-Tiny的FPGA加速方法

2022-04-21 07:19曹遠(yuǎn)杰高瑜翔杜鑫昌涂雅培吳美霖
無線電工程 2022年4期
關(guān)鍵詞:加速器時延卷積

曹遠(yuǎn)杰,高瑜翔*,杜鑫昌,涂雅培,吳美霖

(1.成都信息工程大學(xué) 通信工程學(xué)院,四川 成都 610225;2.氣象信息與信號處理四川省高校重點實驗室,四川 成都 610225)

0 引言

近年來,隨著神經(jīng)網(wǎng)絡(luò)的快速發(fā)展,目標(biāo)檢測領(lǐng)域的要求越來越高。深度學(xué)習(xí)算法從AlexNet[1]到VGG[2],GoogLeNet[3],再到后來出現(xiàn)的ResNet[4]和DenseNet[5]。這些算法在性能提高的同時,效率也變得越來越低。由于存儲空間、算力以及帶寬資源限制,神經(jīng)網(wǎng)絡(luò)模型在移動設(shè)備和嵌入式設(shè)備上的存儲與計算仍然是一個巨大的挑戰(zhàn)。

在算法方面,為了降低算法所需資源,有模型壓縮和設(shè)計輕量級主干網(wǎng)絡(luò)2個方向。模型壓縮方式有知識蒸餾、剪枝[6]、量化等。例如Han等人[7]提出對網(wǎng)絡(luò)迭代剪枝,獲得一個精簡模型,最終在沒有精度損失的前提下AlexNet參數(shù)量減少了9倍。段杰等人[8]提出將BN層融入卷積層,可以加快前向推理速度。但僅僅依靠模型壓縮來實現(xiàn)輕量化還是不夠,還有一種方式是設(shè)計輕量級模型,例如SqueezeNet[9],MobileNets[10],Xception[11]等輕量級算法。許多輕量級算法并沒有考慮硬件實現(xiàn)等問題,計算量雖然有所降低,但硬件實現(xiàn)的效率依然很低。例如FPGA處理器遵循Roofline模型,根據(jù)算法的不同,瓶頸也不同。這種輕量級的模型計算量低,但是層數(shù)增加導(dǎo)致訪存量也增加,計算效率依然很低。為解決以上問題,提出了一種訪存量、參數(shù)量、計算量較小且采用Ghost殘差結(jié)構(gòu)所構(gòu)建的輕量級主干網(wǎng)絡(luò)(YOLO-GhostNet)[12]。

在硬件方面,由于卷積大部分時間在計算上,普通CPU無法滿足深度學(xué)習(xí)算法的實用性,用并行架構(gòu)的處理器能夠更好地適配神經(jīng)網(wǎng)絡(luò),因此硬件平臺轉(zhuǎn)向GPU和FPGA等并行處理器。GPU雖然效率很高,但是功耗太大,F(xiàn)PGA相比于GPU能夠更好地定制可重構(gòu)卷積IP[13-14]。例如Shen等人[15]提出對不同層設(shè)計多個加速器。Zhang等人[16]提出針對通信密集型通過增大突發(fā)傳輸長度來高效利用帶寬。Li等人[17]提出將輸出通道以及卷積核寬三維展開的并行架構(gòu),這些都只適用于資源較多的FPGA。

本文針對在較少資源FPGA上部署深度學(xué)習(xí)算法主要有以下幾點創(chuàng)新:① 針對部署資源問題對算法進行輕量化設(shè)計和壓縮;② 針對內(nèi)存空間問題對算法進行動態(tài)定點數(shù)量化以及分塊處理,設(shè)計高效數(shù)據(jù)傳輸模塊;③ 針對算法算子設(shè)計傳統(tǒng)卷積、通道卷積、池化等流水線架構(gòu)加速器。

1 YOLOv4-Tiny算法優(yōu)化

YOLO[18-19]是近年來比較受歡迎的圖像識別分類深度學(xué)習(xí)算法,Tiny版YOLO算法在精度范圍內(nèi)檢測速度快、效率高,但是針對嵌入式平臺還略顯笨重。

1.1 YOLOv4-Tiny結(jié)構(gòu)改進

改進網(wǎng)絡(luò)(YOLO-GhostNet)如圖1所示。

圖1 YOLO-GhostNet算法結(jié)構(gòu)

改進結(jié)構(gòu)采用圖1中Res殘差結(jié)構(gòu)代替YOLOv4-Tiny的殘差結(jié)構(gòu),將網(wǎng)絡(luò)大部分3×3標(biāo)準(zhǔn)卷積采用由一個點卷積和一個5×5的通道卷積替代。圖1中Ghost模塊為傳統(tǒng)卷積和通道卷積所構(gòu)成;Res為以Ghost卷積所構(gòu)建的殘差結(jié)構(gòu);DL,CBL分別為通道卷積和傳統(tǒng)卷積層。

1.2 基于結(jié)構(gòu)剪枝的模型壓縮

Batch Normalization[20]層用以加快深度學(xué)習(xí)訓(xùn)練收斂等問題。假設(shè)該BN層輸入為x,則輸出為:

(1)

由于深度學(xué)習(xí)網(wǎng)絡(luò)針對檢測種類、卷積深度、卷積層數(shù)的不同,冗余的參數(shù)也會不同。本文首先通過對BN層縮放系數(shù)γ和平移系數(shù)β添加L1正則化約束進行稀疏訓(xùn)練。再通過式(2)對每個通道篩選:

(2)

1.3 動態(tài)定點數(shù)量化

深度學(xué)習(xí)有很強的魯棒性,數(shù)據(jù)的細(xì)微變化對整體結(jié)果不會有太大的影響。依據(jù)這個特性,可以對網(wǎng)絡(luò)進行動態(tài)定點數(shù)量化[21]以降低資源占用。實驗表明,采用16 bit動態(tài)定點數(shù)量化可以獲得更好的精度與速度平衡。

本文采取的定點數(shù)量化如下:

yint=Round(xfloat×2n),

(3)

式中,yint為量化后數(shù)據(jù);Round()為四舍五入函數(shù);xfloat為需要轉(zhuǎn)換的浮點型數(shù)據(jù);n為量化系數(shù),依據(jù)每層數(shù)據(jù)的分布變化而變化。

對網(wǎng)絡(luò)量化步驟如下:

① 根據(jù)每層權(quán)值的分布找到最優(yōu)的小數(shù)位位寬n,n≤(m-1),m大于等于該層權(quán)值最大值的整數(shù)位位寬。由于采用的數(shù)據(jù)為有符號類型,所以最高位為符號位,在16 bit量化模式下,只有15 bit分布給整數(shù)位和小數(shù)位。

② 依據(jù)式(3)對每層權(quán)重和偏置進行16 bit量化。輸入輸出特征圖依據(jù)式(3)和式(4)對其量化與反量化:

yfloat=xint×2-e,

(4)

式中,yfloat為反量化后輸出;xint為需要反量化的數(shù)據(jù);e為特征圖量化系數(shù)。

③ 中間特征圖量化,如式(5)所示,為了減少計算,依據(jù)指數(shù)計算的特性,將2層量化系數(shù)通過式(6)對特征圖直接量化:

Inmapi=yint(yfloat(Outmapi-1,ei-1),ei)

(5)

Inmapi=yint(Outmapi-1,ei-ei-1),

(6)

式中,Inmapi為該層輸入特征圖;Outmapi-1為上一層輸出特征圖;ei,ei-1為本層和上一層的特征圖量化系數(shù)。

針對神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)的量化,由于網(wǎng)絡(luò)采用LeakyRelu激活函數(shù),對于小于0的像素點需乘0.1。所以將激活函數(shù)改為:

yLeakyRelu=max(x×0xccc>>15,x),

(7)

式中,yLeakyRelu為激活層輸出;max為返回最大值函數(shù);x為輸入數(shù)據(jù);>>為移位操作。

采用不同位寬設(shè)計卷積加速器消耗資源對比如表1所示。

表1 卷積加速器在不同精度消耗資源對比

表1對比了2種位寬精度在相同結(jié)構(gòu)下的各FPGA資源消耗。可以看出,使用32 bit位寬類型的加速器很快就用滿了DSP資源,瓶頸也會被DSP資源所限制。采用16 bit位寬類型在各資源上都降低了許多,可以利用更多的DSP資源對計算并行處理。

2 硬件設(shè)計

本文加速算法YOLO-GhostNet中包含尺寸為1×1和3×3、步長為1和2的傳統(tǒng)卷積層、尺寸為5×5的通道卷積層、最大池化層;上采樣層和路由層。其中,路由層特征圖疊加部分計算量很小,在PS端實現(xiàn),其他算子均在PL端設(shè)計。為了減少計算,本文設(shè)計在算法層面將BN層融入到卷積層中。

2.1 加速算子介紹

(1)傳統(tǒng)卷積與通道卷積

傳統(tǒng)卷積是將所有輸入特征圖通過卷積核計算后生成輸出特征圖,通道卷積是分組數(shù)等于輸入通道數(shù)的特殊分組卷積。2種卷積的卷積過程如圖2所示。

(a)傳統(tǒng)卷積

由圖2可以看出,傳統(tǒng)卷積與通道卷積輸出特征圖一樣,卷積計算過程不一樣,所以針對2種卷積分別定制了不同的卷積IP核。

(2)上采樣與下采樣

深度學(xué)習(xí)運用了圖像金字塔原理,其中不同尺寸的特征圖交互時需要用到上采樣或者下采樣。本算法中上采樣將每個像素點復(fù)制成4倍,生成2倍的長寬特征圖。下采樣采用最大池化層。最大池化層通過對周圍4個像素點的篩選,獲取像素值最大的點,從而將尺寸下采樣為原來長寬的一半。

(3)路由層

本算法中路由層包含Add和Concatenate層。由于Concatenate可以使用一些高效的函數(shù)庫實現(xiàn),而Add操作在PS端實現(xiàn)對整體效率有影響,所以將其在PL端實現(xiàn)。

Add層依據(jù)式(8)將各特征圖對應(yīng)像素點相加:

(8)

式中,yadd表示相加后的特征圖;c表示有c層特征圖需要相加;h,w,chout表示特征圖對應(yīng)的長寬通道數(shù)坐標(biāo)。

2.2 加速器構(gòu)建

加速器大致可分為輸入模塊、計算模塊和輸出模塊。幾種算子的加速器的不同在于計算模塊。由于片上資源有限,只能將一部分特征圖和一部分權(quán)重等參數(shù)加載計算輸出后再計算下一部分。分塊卷積如圖3所示。圖中,Tn,Tm,Th,Tw分別為分塊輸入通道數(shù)、輸出通道數(shù)、分塊長和高,ksize為卷積核長寬。

圖3 分塊卷積過程

(1)輸入模塊

算法數(shù)據(jù)傳輸?shù)慕涌诙荚O(shè)計為AXI4 master接口。每次卷積輸入分塊特征圖大小為Tn×Tm×Tw。數(shù)據(jù)讀入分為2個部分協(xié)同合作,第一部分為計算地址偏移,時延為Latencyinaddr和從DRAM讀取數(shù)據(jù)到行緩沖(Line_buf),時延為Latencyline;第二部分為從行緩沖讀取數(shù)據(jù)到計算輸入緩沖(IN_buf),時延為Latencyinbuf。讀取一個特征塊的時延如下:

Latencyinmap=Tn×Th(Latencyinaddr+Latencyline+Latencyinbuf),

(9)

式中,Latencyinmap為特征塊輸入時延;Tn×Th為特征塊所需要傳輸?shù)拇螖?shù),一次傳輸Tw長度的數(shù)據(jù)量。

然而第一部分和第二部分是可以同時工作的,為了將輸入數(shù)據(jù)流水線起來,輸入模塊設(shè)計了2個行緩沖,如圖4所示的Line_Buf0和Line_Buf1,由于HLS中2個函數(shù)所操作的數(shù)據(jù)沒有關(guān)系會自動綜合為并行執(zhí)行,所以可以將數(shù)據(jù)從DRAM讀取到行緩沖和將行緩沖中的數(shù)據(jù)寫入到計算緩存并行執(zhí)行,降低時延。

圖4 輸入模塊時序

一個分塊大小的數(shù)據(jù)需要讀取總次數(shù)為Tn×Th+1。特征塊傳輸時延降低為:

Latencyinmap=(Tn×Th+1)·

max(Latencyinaddr+Latencyline,Latencyinbuf)。

(10)

默認(rèn)特征圖排序為長寬和通道數(shù),通道數(shù)上內(nèi)存連續(xù)。為了提高帶寬利用,將特征圖序列改為通道數(shù)、長和寬的順序。特征圖長寬在本算法中為416,分塊Th和Tw大小設(shè)置為可以被416整除,可使資源利用率更高。根據(jù)式(10),輸入通道一定時,特征塊高度越小,特征塊傳輸時延越小。實驗表明,當(dāng)Th=14,Tw=52時能夠更好平衡帶寬利用和計算。

(2)計算模塊

依據(jù)算子的不同,計算模塊有卷積模塊、通道卷積模塊和池化模塊。池化模塊由于計算量較小,直接采用串行計算篩選最大值方式。主要對傳統(tǒng)卷積和通道卷積計算模塊進行優(yōu)化。

卷積計算是整個算法中耗時最大的部分,為了提升運算效率,本設(shè)計采用多輸入輸出通道并行計算方式,而VIVADO HSL軟件可以用PIPELINE指令設(shè)計通道并行和流水線處理乘加運算。并行處理方式有多種,可以是卷積核內(nèi)并行、特征圖塊的長寬并行以及輸入輸出通道并行。由于算法卷積核尺寸有很大一部分為1×1,所以卷積核內(nèi)并行效率很低。對于分塊長寬并行方式還涉及資源利用率和數(shù)據(jù)讀取效率等問題。最終在通道方向進行并行處理,傳統(tǒng)卷積塊計算時延如下:

(11)

式中,Latencycompu為計算模塊時延;Const[22]為初始時鐘;Freq為時鐘頻率。

(3)輸出模塊

數(shù)據(jù)輸出接口都設(shè)計為AXI4 master接口,模塊也分為兩部分,和輸入模塊相反,一部分是將輸出緩存中的數(shù)據(jù)搬運到行緩沖中,時延為Latencyoutbuf;第二部分為計算地址偏移和行緩沖中數(shù)據(jù)突發(fā)寫入DRAM中,時延為Latencyoutaddr和Latencydram。設(shè)計雙緩沖流水化后時延如下:

Latencyoutmap=(Tm×Th+1)·

max(Latencyoutbuf,Latencyoutaddr+Latencydram),

(12)

式中,Latencyoutmap為特征塊輸出時延;Tm,Th分別為輸出特征圖層數(shù)與輸出特征圖高度??梢钥吹剑魉蟮妮敵瞿K將第一部分和第二部分的時延重疊了,時序與圖4類似。

設(shè)計雙緩沖情況下,各模塊可以同時進行,重疊時延,增大效率。每計算輸出一個特征塊大小數(shù)據(jù)時延如下:

(13)

式中,Latencymap為計算輸出一個數(shù)據(jù)塊的時延;Chin為輸入特征層數(shù);Tn為特征塊輸入通道數(shù);Latencyinweights為加載權(quán)重延時??梢钥闯觯瑢⒏髂K流水化設(shè)計后可以實現(xiàn)加載特征數(shù)據(jù)延時、加載權(quán)重數(shù)據(jù)延時、計算延時、數(shù)據(jù)輸出延時的重疊,進一步提高整體效率。

加速器整體架構(gòu)將輸入和計算模塊、計算和輸出模塊兩兩進行乒乓流水化。傳統(tǒng)卷積各模塊時序如圖5所示,其他算子加速器類似。

圖5 卷積加速器各模塊時序

圖5中,Load_in_Buf為特征圖輸入模塊,Load_w_Buf為權(quán)重加載模塊,2個模塊時序如圖4所示。Compute()為計算模塊,pingpang模塊將輸入通道計算部分打包后與數(shù)據(jù)輸出模塊(Store_out_Buf)進行乒乓流水線輸出。各個模塊內(nèi)部還進行并行與流水線設(shè)計,提高整個加速器效率。

根據(jù)圖5和式(13),每計算Tm個輸出通道都需將輸入通道方向所有層數(shù)全部計算完畢。每輸出一個特征圖塊,需要讀取Chin×Th+1次數(shù)據(jù),寫入Tm×Th+1次數(shù)據(jù),當(dāng)Chin比較大時,讀取數(shù)據(jù)和輸出數(shù)據(jù)的時延重疊部分較少,會降低整體效率。實驗證明,設(shè)置Tn=4,Tm=32(Tm>>Tn)可以在時延重疊和資源占用方面獲得更高平衡。

通道卷積由于輸入通道等于輸出通道(Tm=Tn),每輸出一個特征塊時需要讀取Tn×Th+1次數(shù)據(jù),寫入Tm×Th+1次數(shù)據(jù),讀取數(shù)據(jù)與寫入數(shù)據(jù)時延差不多,所以設(shè)計Tm=Tn=16方式并行。

2.3 基于ARM的卷積設(shè)計

本次實驗分別在ARM和FPGA+ARM情況下對比算法效率。為了提高計算效率,采用im2col+GEMM(矩陣乘法)方式完成卷積設(shè)計。步驟如下:

(1)im2col

img2col是將輸入特征圖按照每次需要卷積的部分展平轉(zhuǎn)換為矩陣,轉(zhuǎn)換過程如圖6所示。圖中Input為輸入特征圖,以滑窗的方式將每次需要進行計算的部分存為內(nèi)存連續(xù)的一列。每列大小為卷積核的大小,圖中只展示了輸入通道為1的示意圖,多通道類似。Kernel為卷積核,也需要將每個卷積核展平方便計算。

圖6 特征圖和卷積核轉(zhuǎn)換到矩陣過程

(2)GEMM(矩陣乘法)

輸入和權(quán)重轉(zhuǎn)換為矩陣后,可以通過一些矩陣運算庫進行加速。從運算次數(shù)上看,雖然和滑窗方式?jīng)]有太大區(qū)別,但是轉(zhuǎn)化為矩陣后,數(shù)據(jù)在內(nèi)存上變成連續(xù)的,大大提升訪問效率,從而加快運算,速度上也可提升數(shù)倍。

3 結(jié)果分析

3.1 軟硬件環(huán)境

3.1.1 軟件環(huán)境

分別對比了YOLOv4-Tiny和改進算法YOLO-GhostNet兩種算法。2種算法均在Windows10操作環(huán)境下,PyCharm軟件中使用Keras 2.24和Tensorflow1.14框架進行訓(xùn)練,剪枝和量化部分均在該環(huán)境中完成。為提高效率,各加速器IP均在vivado HLS軟件下編寫完成。

數(shù)據(jù)集采用10 097張飲料數(shù)據(jù)集,其中包含4個種類飲料,每種2 500張,測試集908張,訓(xùn)練集8 281張,驗證集908張。

3.1.2 硬件環(huán)境

為了驗證算法性能,分別在CPU,ARM工作頻率和FPGA+ARM三種硬件上對算法進行評估。其中CPU為6-Core 的R5 3500X,工作頻率為3.6 GHz,內(nèi)存為16 GB(3 600 MHz);ARM為ARM Cortex-A9,工作頻率為667 MHz;FPGA+ARM為ZYNQ7020,工作頻率為180 MHz。

3.2 各加速器資源消耗情況

各加速器資源消耗情況如表2所示。

表2 各加速器及系統(tǒng)資源消耗

由表2可以看出,有3種加速器:Conv,Dpconv,Pool_Add_up,其中Conv為傳統(tǒng)卷積加速器,Dpconv為通道卷積加速器,Pool_Add_up將池化層、路由層和上采樣層打包成一個加速器。所構(gòu)建的系統(tǒng)資源消耗了大量的DSP,LUT和BRAM資源。資源利用率較高。

YOLOv4-Tiny和YOLO-GhostNet算法參數(shù)及在不同處理器上性能對比如表3所示。

表3 YOLOv4-Tiny和YOLO-GhostNet算法各參數(shù)及性能對比

表3中,mAP為算法平均精度,在精度上基本無損失;速度分別在3種處理器上運行測試,改進后的算法在FPGA+ARM工作頻率180 MHz時相對YOLOv4-Tiny算法在ARM單獨工作時性能提升35.2倍,在FPGA+ARM工作時性能提升2倍;相對本算法在ARM單獨工作性能提升20倍。BFLOPs為算法計算量,即:

BFLOPs=ksize×ksize×Chin×Chout×Win×Hout×2,

(14)

式中,BFLOPs為計算量;ksize,Chin,Chout,Win,Hout分別為卷積核尺寸、輸入通道數(shù)、輸出通道數(shù)和輸出特征圖尺寸。

YOLOv4-Tiny和YOLO-GhostNet算法在3種處理器下的功耗與能效如表4所示。

表4 YOLOv4-Tiny和YOLO-GhostNet算法功耗及其能效對比

由表4可以看出,對比能效方面,YOLOv4-Tiny算法在Zynq平臺能效是在CPU和ARM平臺能效的12.26倍和7.5倍。相較于改進后的算法,在Zynq平臺下的能效是在CPU和ARM平臺下能效的20倍和9倍。但是改進后的算法能效不論在哪個處理器下都低于 YOLOv4-Tiny。根據(jù)Roofline模型中的計算強度(計算量/訪存量)分析,YOLO-GhostNet算法計算強度是要低于YOLOv4-Tiny算法的,性能瓶頸受限于帶寬,不能完全利用處理器計算資源。

4 結(jié)束語

本文實驗以YOLOv4_Tiny算法為基礎(chǔ),為了部署方便等問題將算法進行GhostNet模塊設(shè)計、剪枝算法壓縮、動態(tài)定點16 bit量化。再根據(jù)芯片資源和算法類型設(shè)計神經(jīng)網(wǎng)絡(luò)卷積專用IP核,更進一步地提高算法推理效率。但是由于算法類型和板子總線帶寬利用率等問題,無法更進一步優(yōu)化,導(dǎo)致能效較低等問題。未來進一步改進主要有以下2點:① 使用帶寬更大的實驗平臺;② 對計算模塊進行更近一步的高效優(yōu)化,例如Winograd卷積等。

猜你喜歡
加速器時延卷積
莫比斯加速器眾創(chuàng)辦公空間
基于全卷積神經(jīng)網(wǎng)絡(luò)的豬背膘厚快速準(zhǔn)確測定
知識快餐店 科學(xué)加速器
國內(nèi)外醫(yī)用直線加速器可靠性對比研究
一種基于卷積神經(jīng)網(wǎng)絡(luò)的地磁基準(zhǔn)圖構(gòu)建方法
基于3D-Winograd的快速卷積算法設(shè)計及FPGA實現(xiàn)
一種并行不對稱空洞卷積模塊①
計算機網(wǎng)絡(luò)總時延公式的探討
計算機網(wǎng)絡(luò)總時延公式的探討
基于物聯(lián)網(wǎng)的IT運維可視化管理系統(tǒng)設(shè)計與實現(xiàn)