《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的深度學(xué)習(xí)目標(biāo)檢測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
基于FPGA的深度學(xué)習(xí)目標(biāo)檢測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
2019年電子技術(shù)應(yīng)用第8期
陳 辰1,嚴(yán) 偉2,夏 珺1,柴志雷1
1.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無(wú)錫214122;2.北京大學(xué) 軟件與微電子學(xué)院,北京102600
摘要: 針對(duì)當(dāng)前深度學(xué)習(xí)目標(biāo)檢測(cè)算法計(jì)算復(fù)雜度高和內(nèi)存需求大等問(wèn)題,設(shè)計(jì)并實(shí)現(xiàn)了一種基于FPGA的深度學(xué)習(xí)目標(biāo)檢測(cè)系統(tǒng)。設(shè)計(jì)對(duì)應(yīng)YOLOv2-Tiny目標(biāo)檢測(cè)算法的硬件加速器,對(duì)加速器各模塊的處理時(shí)延建模,給出卷積計(jì)算模塊的詳細(xì)設(shè)計(jì)。實(shí)驗(yàn)結(jié)果表明,與CPU相比,CPU+FPGA的異構(gòu)系統(tǒng)是雙核ARM-A9能效的67.5倍,Xeon的94.6倍;速度是雙核ARM-A9的84.4倍,Xeon的5.5倍左右。并且,當(dāng)前設(shè)計(jì)在性能上超過(guò)之前的工作。
中圖分類號(hào): TP391
文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.190318
中文引用格式: 陳辰,嚴(yán)偉,夏珺,等. 基于FPGA的深度學(xué)習(xí)目標(biāo)檢測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2019,45(8):40-43,47.
英文引用格式: Chen Chen,Yan Wei,Xia Jun,et al. Design and implementation of FPGA-based deep learning object detection system[J]. Application of Electronic Technique,2019,45(8):40-43,47.
Design and implementation of FPGA-based deep learning object detection system
Chen Chen1,Yan Wei2,Xia Jun1,Chai Zhilei1
1.School of Internet of Things Engineering,Jiangnan University,Wuxi 214122,China; 2.School of Software & Microelectronics,Peking University,Beijing 102600,China
Abstract: Aiming at the problems of higher computational complexity and larger memory requirements of current object detection algorithm, we designed and implemented an FPGA-based deep learning object detection system. We also designed the hardware accelerator corresponding to the YOLOv2-Tiny object detection algorithm, modeled the processing delay of each accelerator module, and describe the design of the convolution module. The experimental results show that it is 5.5x and 94.6x of performance and energy gains respectively when comparing with the software Darknet on an 8-core Xeon server, and 84.8x and 67.5x over the software version on the dual-core ARM cortex-A9 on Zynq. Also, the current design outperforms the previous work in performance.
Key words : deep learning;object detection;FPGA;hardware accelerator

0 引言

    近年來(lái),以卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,DNN)為代表的深度學(xué)習(xí)算法在許多計(jì)算機(jī)視覺(jué)任務(wù)上取得了巨大突破,如圖像分類、目標(biāo)檢測(cè)、畫質(zhì)增強(qiáng)等[1-2]。然而,隨著識(shí)別率的提高,深度學(xué)習(xí)算法的計(jì)算復(fù)雜度和內(nèi)存需求也急劇增加,當(dāng)前的通用處理器無(wú)法滿足其計(jì)算需求。主流的解決方法是采用圖形處理器(Graphics Processing Unit,GPU)、專用集成電路(Application Specific Integrated Circuit,ASIC)芯片或現(xiàn)場(chǎng)可編程門陣列(Field-Programmable Gate Array,FPGA)來(lái)提升計(jì)算性能。GPU采用單指令流多數(shù)據(jù)流架構(gòu),想要充分發(fā)揮計(jì)算性能,需要大批量數(shù)據(jù),并且由于高并行度導(dǎo)致的高功耗,很難應(yīng)用于對(duì)功耗有嚴(yán)格限制的場(chǎng)合[3]。ASIC對(duì)于具體應(yīng)用可以獲得最佳性能和能效,但是研發(fā)周期長(zhǎng),需要對(duì)市場(chǎng)有長(zhǎng)久的預(yù)見(jiàn)性。FPGA作為一種高性能、低功耗的可編程芯片,可以使用硬件描述語(yǔ)言來(lái)設(shè)計(jì)數(shù)字電路,以形成對(duì)應(yīng)算法的加速電路結(jié)構(gòu)。與GPU相比,F(xiàn)PGA低功耗、低延時(shí),適用于小批量流式應(yīng)用[4]。與ASIC相比,F(xiàn)PGA可以通過(guò)配置重新改變硬件結(jié)構(gòu),對(duì)具體應(yīng)用定制硬件,適用于深度學(xué)習(xí)這種日新月異、不斷改變的場(chǎng)景。

    本文首先介紹深度學(xué)習(xí)中的YOLOv2-Tiny目標(biāo)檢測(cè)算法[5],然后設(shè)計(jì)對(duì)應(yīng)的硬件加速器,并且就加速器中各模塊的處理時(shí)延進(jìn)行簡(jiǎn)單建模,給出卷積模塊的詳細(xì)設(shè)計(jì),最后,在Xilinx公司的Zedboard開(kāi)發(fā)板上進(jìn)行評(píng)估。

1 YOLOv2-Tiny模型簡(jiǎn)介

    YOLOv2-Tiny目標(biāo)檢測(cè)算法由以下3步組成:

    (1)對(duì)任意分辨率的RGB圖像,將各像素除以255轉(zhuǎn)化到[0,1]區(qū)間,按原圖長(zhǎng)寬比縮放至416×416,不足處填充0.5。

    (2)將步驟(1)得到的416×416×3大小的數(shù)組輸入YOLOv2-Tiny網(wǎng)絡(luò)檢測(cè),檢測(cè)后輸出13×13×425大小的數(shù)組。對(duì)于13×13×425數(shù)組的理解:將416×416的圖像劃分為13×13的網(wǎng)格。針對(duì)每個(gè)網(wǎng)格,預(yù)測(cè)5個(gè)邊框,每個(gè)邊框包含85維特征(共5×85=425維)。85維特征由3部分組成:對(duì)應(yīng)邊框中包含的80類物體的概率(80維),邊框中心的相對(duì)偏移以及相對(duì)長(zhǎng)寬比的預(yù)測(cè)(4維),邊框是否包含物體的可信度(1維)。

    (3)處理步驟(2)中得到的13×13×425大小的數(shù)組,得到邊框的中心和長(zhǎng)寬。根據(jù)各邊框覆蓋度、可信度和物體的預(yù)測(cè)概率等,對(duì)13×13×5個(gè)邊框進(jìn)行處理,得到最有可能包含某物體的邊框。根據(jù)原圖的長(zhǎng)寬比,將得到的邊框調(diào)整到原圖尺度,即得到物體的位置與類別信息。

    YOLOv2-Tiny由16層組成,涉及3種層:卷積層(9層)、最大池化層(6層)以及最后的檢測(cè)層(最后1層)。其中,卷積層起到特征提取的作用,池化層用于抽樣和縮小特征圖規(guī)模。將步驟(1)稱為圖像的預(yù)處理,步驟(3)稱為圖像的后處理(后處理包含檢測(cè)層的處理)。

1.1 卷積層

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

rgzn2-1.1-x1.gif

其中(Noy,Nox)、Nof、Nif、(Nky,Nkx)、S分別代表輸出特征圖、輸出特征圖數(shù)、輸入特征圖數(shù)、卷積核大小和步長(zhǎng)。pixelL(m,r,c)代表輸出特征圖m中r行c列的像素。

1.2 池化層

    對(duì)輸入特征圖降采樣,縮小特征圖的規(guī)模,一般跟在卷積層后。YOLOv2-Tiny采用最大池化層,最大池化層偽代碼如下所示:

rgzn2-1.2-x1.gif

其中Max函數(shù)表示返回兩者中較大的值,MIN表示某最小值常量,其他參數(shù)含義與卷積層類似。由于池化層與卷積層類似,只是將卷積層的乘加運(yùn)算替換為比較運(yùn)算;同時(shí),考慮到卷積層往往在網(wǎng)絡(luò)中占據(jù)90%以上的計(jì)算量,因此下文主要討論卷積模塊的設(shè)計(jì)。

2 基于FPGA的YOLOv2-Tiny加速器設(shè)計(jì)

2.1 加速器架構(gòu)介紹

    如圖1所示,加速器采用三層存儲(chǔ)架構(gòu):片外存儲(chǔ)、片上緩存和處理單元內(nèi)的局部寄存器。加速器從片外存儲(chǔ)中讀取卷積核權(quán)重參數(shù)與輸入特征圖像素到FPGA的片上緩存,通過(guò)多次復(fù)用片上緩存中的數(shù)據(jù)來(lái)減少訪存次數(shù)和數(shù)據(jù)量。同時(shí),計(jì)算得到的中間結(jié)果都保留在片上輸出緩存或者局部寄存器中,直至計(jì)算出最終的結(jié)果才寫回片外存儲(chǔ)。同時(shí),也可以看出,加速器的時(shí)延主要由三部分組成:訪存時(shí)延、片上傳輸時(shí)延和計(jì)算時(shí)延。對(duì)應(yīng)于該加速器架構(gòu),實(shí)際可以分為4個(gè)模塊:輸入讀取模塊、權(quán)重讀取模塊、計(jì)算模塊與輸出寫回模塊。

rgzn2-t1.gif

    對(duì)應(yīng)的加速器數(shù)據(jù)流偽代碼如下:

rgzn2-gs1-2.gif

2.2 卷積模塊

    對(duì)卷積循環(huán)中輸出特征圖數(shù)和輸入特征圖數(shù)兩維展開(kāi),形成Tof×Tif個(gè)并行乘法單元和Tof個(gè)rgzn2-2.2-x1.gif深度的加法樹,流水地處理乘加計(jì)算。以Tof=2,Tif=3為例,如圖2所示。

rgzn2-t2.gif

    充滿流水線后,每個(gè)時(shí)鐘從Tif個(gè)輸入緩存中讀入Tif個(gè)像素,從Tof×Tif個(gè)權(quán)重緩存中讀入相同位置的參數(shù),Tof×Tif個(gè)并行乘法單元復(fù)用Tif個(gè)輸入像素進(jìn)行乘法計(jì)算。Tof個(gè)加法樹將乘積兩兩相加,得到的結(jié)果和中間結(jié)果累加后,寫回對(duì)應(yīng)輸出緩存。卷積模塊對(duì)應(yīng)的處理時(shí)延為:

    rgzn2-gs3.gif

其中Const表示流水線初始化等其他操作所需時(shí)鐘,F(xiàn)req表示加速器的工作時(shí)鐘頻率。

2.3 各模塊的時(shí)延建模

    本節(jié)介紹除卷積計(jì)算模塊外,另外三個(gè)模塊(輸入讀取模塊、權(quán)重讀取模塊、輸出寫回模塊)的處理時(shí)延。在此約定,MM(Data Length, Burst Lengthmax)表示以最大突發(fā)長(zhǎng)度Burst Lengthmax訪存讀取或?qū)懭隓ata Length長(zhǎng)度的連續(xù)數(shù)據(jù)所需的訪存時(shí)延。

2.3.1 輸入讀取模塊

    輸入讀取模塊的時(shí)延LatencyLoad IFM由兩部分組成:

    (1)通過(guò)DMA從片外讀取Tif張輸入特征圖像Tiy×Tix大小的像素塊到片上的訪存時(shí)延:

    rgzn2-gs4.gif

    (2)將輸入特征圖像素塊傳輸?shù)狡暇彺娴膫鬏敃r(shí)延:

    rgzn2-gs5.gif

    一般對(duì)兩個(gè)過(guò)程乒乓,輸入讀取時(shí)模塊的處理時(shí)延為:

    rgzn2-gs6.gif

2.3.2 權(quán)重讀取模塊

    權(quán)重讀取模塊的時(shí)延LatencyLoad W由兩部分組成:

    (1)通過(guò)DMA從片外讀取Tof個(gè)卷積核中對(duì)應(yīng)Tif張輸入特征圖的Nky×Nkx個(gè)權(quán)重到片上的訪存時(shí)延:

    rgzn2-gs7.gif

    (2)將權(quán)重參數(shù)傳輸?shù)狡暇彺娴膫鬏敃r(shí)延:

    rgzn2-gs8-9.gif

2.3.3 輸出寫回模塊

    輸出寫回模塊的時(shí)延LatencyStore由兩部分組成:

    (1)將輸出特征圖像素塊傳輸?shù)紻MA的傳輸時(shí)延:

    rgzn2-gs10.gif

    (2)通過(guò)DMA將Tof張輸出特征圖Toy×Tox大小的像素塊寫回片外的訪存時(shí)延:

    rgzn2-gs11-13.gif

    通過(guò)乒乓緩沖設(shè)計(jì),將輸入讀取模塊的時(shí)延LatencyLoad、卷積模塊的計(jì)算時(shí)延LatencyCompute和輸出寫回模塊的時(shí)延LatencyStore相互掩蓋,以減少總時(shí)延。

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

3.1 實(shí)驗(yàn)環(huán)境

    基于Xilinx公司的Zedboard開(kāi)發(fā)板(Dual-core ARM-A9+FPGA),其中FPGA的BRAM_18Kb、DSP48E、FF和LUT資源數(shù)分別為280、220、106 400和53 200。雙核 ARM-A9,時(shí)鐘頻率667 MHz,內(nèi)存512 MB。采用Logitech C210攝像頭,最大分辨率為640×480,最高可達(dá)到30 f/s。當(dāng)前目標(biāo)檢測(cè)系統(tǒng)的FPGA資源耗費(fèi)如表1所示。

rgzn2-b1.gif

    對(duì)比的其他CPU平臺(tái):服務(wù)器CPU Intel E5-2620 v4(8 cores)工作頻率為2.1 GHz,內(nèi)存為256 GB。

3.2 總體架構(gòu)

    如圖3所示,從USB攝像頭處得到采集圖像,存儲(chǔ)在內(nèi)存中,由ARM進(jìn)行預(yù)處理后交由FPGA端的YOLOv2-Tiny加速器進(jìn)行目標(biāo)檢測(cè),檢測(cè)后的相關(guān)數(shù)據(jù)仍存放在內(nèi)存中。經(jīng)ARM后處理后,將帶有檢測(cè)類別與位置的圖像寫回內(nèi)存中某地址,并交由FPGA端的HDMI控制器顯示在顯示屏上。

rgzn2-t3.gif

    對(duì)應(yīng)的顯示屏上的檢測(cè)結(jié)果如圖4所示。COCO數(shù)據(jù)集中圖片進(jìn)行驗(yàn)證的檢測(cè)結(jié)果如圖5所示。

rgzn2-t4.gif

rgzn2-t5.gif

3.3 性能評(píng)估

    當(dāng)前的設(shè)計(jì)在性能上超過(guò)了之前的工作,如表2所示。文獻(xiàn)[6]中的設(shè)計(jì)雖然通過(guò)縮小模型以及減小數(shù)據(jù)精度等方式將簡(jiǎn)化后的整個(gè)YOLOv2-Tiny網(wǎng)絡(luò)按層全部映射到FPGA上,但是各層間由于沒(méi)有使用乒乓緩沖,導(dǎo)致訪存與數(shù)據(jù)傳輸時(shí)延無(wú)法與計(jì)算時(shí)延重疊。文獻(xiàn)[7]中的設(shè)計(jì)將卷積運(yùn)算轉(zhuǎn)化為通用矩陣乘法運(yùn)算,并通過(guò)矩陣分塊的方式并行計(jì)算多個(gè)矩陣分塊,但是將卷積轉(zhuǎn)化為通用矩陣乘法需要在每次計(jì)算前對(duì)卷積核參數(shù)復(fù)制與重排序,增加了額外的時(shí)延與復(fù)雜度。

rgzn2-b2.gif

    矩陣分塊的方式,并行計(jì)算多個(gè)矩陣分塊,但是將卷積轉(zhuǎn)化為通用矩陣乘法需要在每次計(jì)算前對(duì)卷積核參數(shù)復(fù)制與重排序,增加了額外的時(shí)延與復(fù)雜度。

    如表3所示,與CPU相比,CPU+FPGA的異構(gòu)系統(tǒng)是雙核ARM-A9能效的67.5倍,Xeon的94.6倍;速度是雙核ARM-A9的84.4倍,Xeon的5.5倍左右。

rgzn2-b3.gif

4 結(jié)論

    基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法在準(zhǔn)確度上已超過(guò)了傳統(tǒng)方法,然而隨著準(zhǔn)確度的提高,計(jì)算復(fù)雜度和內(nèi)存需求也急劇增加,當(dāng)前的通用處理器無(wú)法滿足其計(jì)算需求。本文設(shè)計(jì)并實(shí)現(xiàn)了一種基于FPGA的深度學(xué)習(xí)目標(biāo)檢測(cè)系統(tǒng),設(shè)計(jì)了YOLOv2-Tiny硬件加速器,就加速器中各模塊的處理時(shí)延進(jìn)行簡(jiǎn)單建模,給出卷積模塊的詳細(xì)設(shè)計(jì),最終實(shí)現(xiàn)的設(shè)計(jì)性能超過(guò)了當(dāng)前的工作。

參考文獻(xiàn)

[1] RUSSAKOVSKY O,DENG J,SU H,et al.Imagenet large scale visual recognition challenge[J].International Journal of Computer Vision,2015,115(3):211-252.

[2] LIN T Y,MAIRE M,BELONGIE S,et al.Microsoft coco:common objects in context[C].European Conference on Computer Vision. Springer,Cham,2014:740-755.

[3] YU J,GUO K,HU Y,et al.Real-time object detection towards high power efficiency[C].2018 Design,Automation & Test in Europe Conference & Exhibition(DATE).IEEE,2018:704-708.

[4] CONG J,F(xiàn)ANG Z,LO M,et al.Understanding performance differences of FPGAs and GPUs[C].2018 IEEE 26th Annual International Symposium on Field-Programmable Custom Computing Machines(FCCM).IEEE,2018.

[5] REDMON J, FARHADI A.YOLO9000:better,faster,stronger[C].Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition,2017:7263-7271.

[6] 張雲(yún)軻,劉丹.基于小型Zynq SoC硬件加速的改進(jìn)TINYYOLO實(shí)時(shí)車輛檢測(cè)算法實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2019,39(1):192-198.

[7] WAI Y J,YUSSOF Z B M,SALIM S I B,et al.Fixed point implementation of Tiny-Yolo-v2 using OpenCL on FPGA[J].International Journal of Advanced Computer Science and Applications,2018,9(10).



作者信息:

陳  辰1,嚴(yán)  偉2,夏  珺1,柴志雷1

(1.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無(wú)錫214122;2.北京大學(xué) 軟件與微電子學(xué)院,北京102600)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。