文獻(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.
0 引言
近年來(lái),,以卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,DNN)為代表的深度學(xué)習(xí)算法在許多計(jì)算機(jī)視覺任務(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ù)見性,。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開發(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)特征提取,,偽代碼如下:
其中(Noy,Nox),、Nof,、Nif、(Nky,,Nkx),、S分別代表輸出特征圖、輸出特征圖數(shù)、輸入特征圖數(shù),、卷積核大小和步長(zhǎng),。pixelL(m,r,,c)代表輸出特征圖m中r行c列的像素,。
1.2 池化層
對(duì)輸入特征圖降采樣,縮小特征圖的規(guī)模,,一般跟在卷積層后,。YOLOv2-Tiny采用最大池化層,最大池化層偽代碼如下所示:
其中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ì)算模塊與輸出寫回模塊。
對(duì)應(yīng)的加速器數(shù)據(jù)流偽代碼如下:
2.2 卷積模塊
對(duì)卷積循環(huán)中輸出特征圖數(shù)和輸入特征圖數(shù)兩維展開,,形成Tof×Tif個(gè)并行乘法單元和Tof個(gè)深度的加法樹,,流水地處理乘加計(jì)算。以Tof=2,,Tif=3為例,,如圖2所示,。
充滿流水線后,每個(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í)延為:
其中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í)延:
(2)將輸入特征圖像素塊傳輸?shù)狡暇彺娴膫鬏敃r(shí)延:
一般對(duì)兩個(gè)過(guò)程乒乓,輸入讀取時(shí)模塊的處理時(shí)延為:
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í)延:
(2)將權(quán)重參數(shù)傳輸?shù)狡暇彺娴膫鬏敃r(shí)延:
2.3.3 輸出寫回模塊
輸出寫回模塊的時(shí)延LatencyStore由兩部分組成:
(1)將輸出特征圖像素塊傳輸?shù)紻MA的傳輸時(shí)延:
(2)通過(guò)DMA將Tof張輸出特征圖Toy×Tox大小的像素塊寫回片外的訪存時(shí)延:
通過(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開發(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所示。
對(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控制器顯示在顯示屏上。
對(duì)應(yīng)的顯示屏上的檢測(cè)結(jié)果如圖4所示,。COCO數(shù)據(jù)集中圖片進(jìn)行驗(yàn)證的檢測(cè)結(jié)果如圖5所示,。
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上,,但是各層間由于沒有使用乒乓緩沖,導(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ù)雜度,。
矩陣分塊的方式,并行計(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倍左右。
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)