譚金林,范文童,劉亞虎,梁志鋒,王 梁,劉 斌,黃 斌
(1.西安電子科技大學(xué),陜西 西安 710071; 2.陜西航天技術(shù)應(yīng)用研究院有限公司,陜西 西安 710100)
遙感技術(shù)作為衡量國家技術(shù)水平和軍事能力的重要指標(biāo)之一,廣泛應(yīng)用于土地覆蓋統(tǒng)計[1-2]、水質(zhì)監(jiān)測[3-4]、城市氣象研究[5-6]以及軍事運輸[7-8]等領(lǐng)域。隨著遙感技術(shù)的發(fā)展,遙感數(shù)據(jù)的空間、時間、光譜、輻射分辨率越來越高,數(shù)據(jù)量越來越大,遙感進入了大數(shù)據(jù)時代[9-11]。同時,對遙感圖像實時傳輸?shù)囊笕找嫣岣?。傳統(tǒng)方法是將遙感圖像傳回地面站服務(wù)器,受衛(wèi)星與地面站之間通信帶寬的限制,容易造成星地通信阻塞,其實時傳輸性能不佳。
為了解決上述問題,Yang[12]引入邊緣計算方法,通過將遙感圖像的處理過程從地面站轉(zhuǎn)移到衛(wèi)星上,可以有效解決星地通信阻塞問題。遙感圖像在軌目標(biāo)檢測作為遙感圖像處理任務(wù)之一,對部署到邊緣設(shè)備上的目標(biāo)檢測算法提出了2個要求,即高精度和實時性[13]。傳統(tǒng)的目標(biāo)檢測通過滑動窗口掃描整個圖像,提取候選區(qū)域的特征進行識別和分類。2010年,Proia等人[14]將貝葉斯決策理論應(yīng)用于光學(xué)遙感圖像,并根據(jù)經(jīng)驗設(shè)計了滑窗尺寸和判別閾值,實現(xiàn)了海上船只的準(zhǔn)確檢測。然而,傳統(tǒng)目標(biāo)檢測算法需要手工設(shè)計特征,效率低、通用性差。
近年來,隨著深度學(xué)習(xí)技術(shù)的發(fā)展[15-17],尤其是以深度卷積神經(jīng)網(wǎng)絡(luò)(Deep Convolutional Neural Networks, DCNNs)為代表的一階段、兩階段目標(biāo)檢測算法的涌現(xiàn),基于DCNNs的遙感圖像目標(biāo)檢測算法逐步成為主流。2016年,Ren等人[18]提出了Faster R-CNN網(wǎng)絡(luò),通過共享卷積層實現(xiàn)了17 fps的檢測速度。2018年,Redmon等人[19]提出了YOLOv3網(wǎng)絡(luò),借鑒ResNet[20]的跨層連接機制和SPP-Net[21]的特征融合思想,結(jié)合多尺度特征圖進行目標(biāo)檢測,其mAP達到了74.3%,檢測速度高達35 fps。DCNNs算法以其良好的特征提取能力和泛化能力,開始在目標(biāo)檢測領(lǐng)域得到廣泛應(yīng)用。
然而,DCNNs的大尺度模型帶來了嚴(yán)重的計算負擔(dān)和高功耗,難以部署到衛(wèi)星的邊緣環(huán)境。鑒于FPGA具有邏輯資源豐富、并行度高、功耗低、開發(fā)周期短、可重構(gòu)等優(yōu)點,可將其作為圖形處理單元(Graphics Processing Unit, GPU)的一種替代方案來加速邊緣DCNNs的推理。例如,在2019年,丁立德等人[22]應(yīng)用定點和矩陣壓縮方法來優(yōu)化CNN模型,并將其部署在FT-1500和FPGA協(xié)同加速平臺上,結(jié)果顯示其檢測速度是FT-1500的40倍,而功耗僅為同等性能GPU的1/5。
本文提出一種基于FPGA實現(xiàn)深度神經(jīng)網(wǎng)絡(luò)推理加速的軟硬件協(xié)同加速架構(gòu)。以典型的深度神經(jīng)網(wǎng)絡(luò)YOLOv3為例,將YOLOv3網(wǎng)絡(luò)部署在ARM+FPGA的平臺上,其中FPGA用于構(gòu)建并行硬件邏輯的深度神經(jīng)網(wǎng)絡(luò)加速器,ARM用于加速任務(wù)的調(diào)度和網(wǎng)絡(luò)的預(yù)處理和后處理,在檢測精度損失微小的前提下實現(xiàn)深度神經(jīng)網(wǎng)絡(luò)的邊緣端部署,對衛(wèi)星實現(xiàn)實時的高精度、低功耗的目標(biāo)檢測算法具有重要的研究意義。
本章介紹采用Vitis AI加速方案進行CNN模型的FPGA部署與加速的流程。首先介紹軟硬件協(xié)同加速平臺,其次詳細闡述深度學(xué)習(xí)加速單元DPU的原理,最后說明如何在Vitis AI加速流程下聯(lián)合網(wǎng)絡(luò)模型和DPU在FPGA上部署網(wǎng)絡(luò)模型。
1.1.1 硬件開發(fā)平臺
為了解決遙感圖像目標(biāo)檢測領(lǐng)域復(fù)雜算法的邊緣部署問題,本文采用ARM和FPGA相結(jié)合的軟硬件協(xié)同加速平臺Zynq SoC,實現(xiàn)YOLOv3的邊緣部署。Zynq SoC由處理系統(tǒng)(Processing System, PS)與可編程邏輯(Programmable Logic, PL)這2個核心器件組成。
以ZCU104評估板上的Zynq MPSoC系列芯片為例,其內(nèi)部模塊結(jié)構(gòu)如圖1所示[23]。在進行復(fù)雜算法的開發(fā)時,將難以用RTL級語言實現(xiàn)的算法通過C/C++語言部署在Zynq的PS端,PS端根據(jù)需求將大吞吐量的計算任務(wù)通過AXI4協(xié)議高速總線分配給PL端的FPGA,利用FPGA的高速并行計算能力完成計算任務(wù)并回傳結(jié)果。整個硬件系統(tǒng)以PS端的ARM處理器運行主進程和任務(wù)調(diào)度,以PL端FPGA為核心硬件加速器件,既彌補了ARM處理器實時運算能力的不足,又提升了FPGA有限的算法實現(xiàn)能力。
圖1 Zynq MPSoC內(nèi)部模塊結(jié)構(gòu)
此外,在Zynq MPSoC系列芯片上還集成了與多種外設(shè)互聯(lián)的接口協(xié)議,如USB 3.0、SATA 3.1、串口(UART)、SPI、千兆以太網(wǎng)(GigE)等,大大增加了Zynq在不同嵌入式環(huán)境的泛用性。
1.1.2 軟件開發(fā)平臺
本文采用的軟件開發(fā)平臺是Xilinx公司推出的Vitis開發(fā)平臺,支持云端和邊緣端2類場景的應(yīng)用開發(fā)。Vitis開發(fā)平臺包含用于FPGA模塊化開發(fā)的Vivado開發(fā)工具、用于Zynq片上系統(tǒng)開發(fā)的Petalinux工具、專用于AI加速應(yīng)用的Vitis AI開發(fā)套件、提供多種語言函數(shù)的開源Vitis加速庫和輔助主機與FPGA間數(shù)據(jù)通信的XRT庫等。在Vitis開發(fā)平臺上進行邊緣設(shè)備應(yīng)用開發(fā)的流程如圖2所示。
圖2 Vitis平臺邊緣應(yīng)用開發(fā)流程圖
1)在Vivado工具上進行PL端FPGA硬件開發(fā),通過時序邏輯編程和模塊化設(shè)計搭建包含深度學(xué)習(xí)處理器單元(Deep-Learning Processing Unit, DPU)的底層硬件工程,對整個硬件工程進行綜合和布局布線得到比特流文件,之后導(dǎo)出包含比特流的XSA文件用于Zynq SoC的嵌入式開發(fā)。
2)在Vitis平臺中讀入XSA文件并轉(zhuǎn)換為Platform工程。PS端應(yīng)用程序的構(gòu)建和調(diào)試都基于Platform工程進行,Platform工程中除了包含比特流文件,還包含相應(yīng)Xilinx評估板的主芯片資源量、外設(shè)種類和管腳連接等信息。利用Platform配合Petalinux開發(fā)工具構(gòu)建片上系統(tǒng)的內(nèi)核鏡像,可以在PS端搭建一個或多個片上操作系統(tǒng),如Android、Linux、VxWorks系統(tǒng)等,這些操作系統(tǒng)稱為域。用Vitis平臺在Domain中進行PS端應(yīng)用程序的編寫和調(diào)試。在進行AI模型的部署和加速開發(fā)時,通過在Vitis平臺導(dǎo)入編譯后的網(wǎng)絡(luò)模型參數(shù),在應(yīng)用程序中調(diào)度FPGA加速任務(wù)的執(zhí)行。
3)對整個嵌入式工程進行系統(tǒng)級調(diào)試,將整個工程包裝成Zynq SoC的啟動鏡像Image文件,在芯片上電時引導(dǎo)域的啟動,在域中運行相應(yīng)的應(yīng)用程序可執(zhí)行文件。
Zynq SoC對于FPGA實現(xiàn)算法能力的提升讓深度學(xué)習(xí)網(wǎng)絡(luò)的邊緣環(huán)境部署成為可能。然而深度學(xué)習(xí)網(wǎng)絡(luò)的規(guī)模之大,如多達252層的YOLOv3網(wǎng)絡(luò),如何高效地給FPGA分配計算任務(wù)是個難點,在ARM上編寫程序?qū)嵤┤蝿?wù)調(diào)度也是一項極為繁雜的工作。
為了快速實現(xiàn)深度學(xué)習(xí)網(wǎng)絡(luò)的硬件部署,Xilinx公司整合了北京深鑒科技公司研發(fā)的深度學(xué)習(xí)工具包DNNDK,并將DPU結(jié)構(gòu)轉(zhuǎn)化為FPGA上的IP核供用戶進行自定義開發(fā)。網(wǎng)絡(luò)模型經(jīng)過DNNDK工具的量化、剪枝、混合編譯等處理得到二進制指令流文件,然后部署至DPU芯片進行硬件加速。
DPU IP核內(nèi)部可以根據(jù)Zynq SoC的邏輯資源量設(shè)置1~4個并行的DPU內(nèi)核。以設(shè)置單個DPU內(nèi)核為例,DPU IP核的實例化模塊如圖3所示[24]。
圖3 DPUIP核實例化模塊
IP核的S_AXI接口用于接收PS端發(fā)送的AXI4協(xié)議數(shù)據(jù),向IP核寄存器地址內(nèi)寫入配置數(shù)據(jù)以實現(xiàn)不同工作模式和功能,如復(fù)位控制、中斷控制、指令地址等。M_AXI接口用于以直接存儲器訪問(Direct Memory Access, DMA)方式從PS端的DDR(Double Data Rate SDRAM, 雙倍速率SDRAM)內(nèi)存中讀寫數(shù)據(jù),為了讀寫操作的高效執(zhí)行,其中M_AXI_DATA0和M_AXI_DATA1分別用于網(wǎng)絡(luò)參數(shù)的讀取和寫入,M_AXI_INSTR用于讀取指令信息。S_AXI與M_AXI端口的參考時鐘與復(fù)位輸入分別為s_axi_、m_axi_前綴輸入接口,由dpu_interrupt接口向主機設(shè)備提供中斷信號。此外,DPU中的數(shù)字信號處理器(Digital Signal Processor, DSP)模塊還采用了DDR技術(shù)來提升運算性能,即采用參考時鐘的雙邊沿作為時鐘基準(zhǔn)使運算速度提升為2倍,IP核的dpu_2x_clk輸入時鐘即是DSP模塊的參考時鐘,需保持為m_axi_dpu_aclk時鐘的同相二倍頻。
基于Zynq SoC平臺進行DPU內(nèi)核的開發(fā),采用亞里士多德架構(gòu)進行CNN模型的部署。亞里士多德架構(gòu)是深鑒科技公司提出的用于連接DPU內(nèi)核與其它外設(shè)的底層架構(gòu),主要應(yīng)用于目標(biāo)檢測、人臉識別等圖像處理任務(wù),如圖4所示。
圖4 亞里士多德架構(gòu)
亞里士多德架構(gòu)為Zynq SoC的PS端提供了一套用于映射深度學(xué)習(xí)網(wǎng)絡(luò)的可編程指令集,其中包含網(wǎng)絡(luò)模型的運行控制、中斷控制、可用內(nèi)存地址等信息,該指令集在網(wǎng)絡(luò)的編譯過程中產(chǎn)生,由ARM中的應(yīng)用處理單元進行指令集的管理。PL端的DPU獲得指令后進行解碼和任務(wù)調(diào)度,分配FPGA中的計算資源組成大規(guī)模數(shù)據(jù)運算的混合計算陣列,其中包含多個用于卷積運算的處理引擎(Processing Engine,PE)模塊,由FPGA中的乘法器、累加器等細粒度計算模塊構(gòu)建而成。DPU通過AXI4高速數(shù)據(jù)總線訪問板上的DDR內(nèi)存,與ARM共用同一塊內(nèi)存空間進行數(shù)據(jù)存取,有益于諸如深度學(xué)習(xí)網(wǎng)絡(luò)這樣大吞吐量的算法的參數(shù)存取。
本文采用Xilinx公司提供的Vitis AI加速方案,實現(xiàn)硬件平臺上遙感圖像目標(biāo)檢測模型的部署工作。在Vitis AI加速方案的基礎(chǔ)上,自定義網(wǎng)絡(luò)模型(即YOLOv3)開發(fā),待YOLOv3在服務(wù)器上訓(xùn)練完成后,經(jīng)Vitis AI開發(fā)工具部署至FPGA上,與DPU聯(lián)合運行實現(xiàn)網(wǎng)絡(luò)推理的硬件加速。
網(wǎng)絡(luò)模型的部署可分為以下3個主要步驟:網(wǎng)絡(luò)壓縮、網(wǎng)絡(luò)編譯和網(wǎng)絡(luò)部署。
1.3.1 網(wǎng)絡(luò)壓縮
深度學(xué)習(xí)網(wǎng)絡(luò)可以擬合復(fù)雜抽象的算法,同時也帶來了龐大的計算負擔(dān),消耗了更長的計算時間。尤其對于實時性高的應(yīng)用環(huán)境,參數(shù)量過大、檢測時間過長的網(wǎng)絡(luò)模型難以實施部署。另一方面,為了提高算法的擬合程度,神經(jīng)網(wǎng)絡(luò)的參數(shù)普遍存儲為32位浮點型數(shù)據(jù),而FPGA只適合定點型數(shù)據(jù)的運算,難以提供浮點數(shù)據(jù)計算時需要的大量存儲空間。
應(yīng)對上述2個問題,需要對訓(xùn)練后網(wǎng)絡(luò)模型進行參數(shù)壓縮,主要分為參數(shù)剪枝和參數(shù)量化2步。使用Vitis AI工具進行參數(shù)壓縮的流程如圖5所示。
圖5 網(wǎng)絡(luò)壓縮流程圖
通常未經(jīng)過壓縮的CNN模型各神經(jīng)元之間采用緊密型連接,其中包含大量權(quán)重值非常小的連接,它們占有大量的存儲空間和運算資源,但是對于網(wǎng)絡(luò)的性能影響微乎其微。采用參數(shù)剪枝的方法可以刪去其中權(quán)重很小的連接,減少網(wǎng)絡(luò)參數(shù)量,在每2輪剪枝之間進行一次微調(diào),即進行幾輪重訓(xùn)練以防止精度損失過大,如此反復(fù),直到在精度損失可接受的范圍內(nèi)將網(wǎng)絡(luò)參數(shù)量壓縮到最小,獲得最佳的運行速度。在Vitis AI套件中,AI優(yōu)化器提供了先進的網(wǎng)絡(luò)剪枝方案,最佳效果可以實現(xiàn)5倍以上的壓縮率,不過其剪枝性能與網(wǎng)絡(luò)模型相關(guān),不同的網(wǎng)絡(luò)剪枝效果不一。
對于剪枝后的網(wǎng)絡(luò)模型,其參數(shù)類型仍然是FP32浮點數(shù)據(jù),需要轉(zhuǎn)換為INT8定點數(shù)據(jù)后送入FPGA進行運算,這個轉(zhuǎn)換過程稱為參數(shù)量化。例如8位定點量化是對32位浮點數(shù)取最接近的8位整數(shù)進行替代,則參數(shù)信息被壓縮至1/4,該過程必定會造成精度損失。在Vitis AI套件中,AI量化器提供了一套用于CNN模型的量化方法:對原始網(wǎng)絡(luò)進行凍結(jié)(freeze)得到序列圖GraphDef,選取一小組無標(biāo)記的數(shù)據(jù)集圖像對GraphDef進行量化校準(zhǔn)(quantize calibration),然后對網(wǎng)絡(luò)中的卷積層、池化層等FP32浮點型參數(shù)進行量化得到INT8定點型參數(shù)。此外,在量化步驟的最后加入量化微調(diào)(quantize finetuning)步驟,通過小批次的重訓(xùn)練讓定點參數(shù)進一步收斂,從而避免過大的精度損失。網(wǎng)絡(luò)剪枝和量化過程用到的微調(diào)方法涉及網(wǎng)絡(luò)訓(xùn)練的操作,采用GPU加速可以有效縮短網(wǎng)絡(luò)壓縮的時間。
1.3.2 網(wǎng)絡(luò)編譯
經(jīng)過壓縮處理輸出的網(wǎng)絡(luò)模型是稀疏的定點模型,然后需要經(jīng)過編譯映射為高度優(yōu)化的DPU指令流,在FPGA上調(diào)度DPU內(nèi)核實現(xiàn)硬件加速。Vitis AI套件中的AI編譯器可以執(zhí)行量化后網(wǎng)絡(luò)的編譯操作,其中包含3個組件:解析器(Parser)、優(yōu)化器(Optimizer)和代碼生成器(Code-generator)。網(wǎng)絡(luò)編譯的流程如圖6所示。
圖6 網(wǎng)絡(luò)編譯流程圖
首先定點網(wǎng)絡(luò)模型經(jīng)過解析器得到其拓撲結(jié)構(gòu)(topology),結(jié)合模型所用框架創(chuàng)建一個內(nèi)部計算圖(computational graph)作為中間表示(Intermediate Representation, IR)。然后優(yōu)化器基于計算圖IR進行編譯與優(yōu)化過程,包括融合計算圖中各節(jié)點之間的運算、高效調(diào)度控制指令、充分復(fù)用DPU內(nèi)核的計算數(shù)據(jù)等。最后代碼生成器將優(yōu)化后的計算圖IR映射為DPU指令流。
1.3.3 網(wǎng)絡(luò)部署
網(wǎng)絡(luò)模型經(jīng)過剪枝、量化和編譯處理映射成DPU可用的指令流文件,同時在FPGA上搭建基于DPU內(nèi)核的模塊化硬件工程,最后一步就是調(diào)度DPU指令流,驅(qū)動DPU內(nèi)核分擔(dān)網(wǎng)絡(luò)推理過程的參數(shù)計算,實現(xiàn)網(wǎng)絡(luò)模型的推理加速。
Zynq SoC的PS端主機通常使用C或C++語言進行應(yīng)用程序(application, APP)的編程,新一代Vitis AI 1.2版本也支持Python語言的APP。網(wǎng)絡(luò)模型的部署流程如圖7所示。
圖7 網(wǎng)絡(luò)部署流程圖
XRT庫提供了多個C++語言和Python語言的DPU專用調(diào)度函數(shù),使用便捷的應(yīng)用程序接口(Application Programming Interface, API)實現(xiàn)DPU計算任務(wù)的執(zhí)行或DPU節(jié)點和張量信息的獲取。每一個DPU任務(wù)對應(yīng)一項具體的計算工作,且各任務(wù)分配的內(nèi)存空間相互獨立,支持多線程運行程序來提高主機端和DPU之間的數(shù)據(jù)吞吐量。應(yīng)用程序在GCC編譯工具編譯下輸出ARM端可用的指令集,再經(jīng)過匯編器編譯得到標(biāo)準(zhǔn)elf二進制文件;而DPU指令流文件在DNNAS集成編譯工具的編譯下得到硬件的elf文件。對DPU和ARM的elf文件在Vitis開發(fā)平臺執(zhí)行交叉編譯(cross compile),最后得到可以在PS端的片上系統(tǒng)內(nèi)運行的可執(zhí)行文件,實現(xiàn)深度學(xué)習(xí)網(wǎng)絡(luò)在FPGA上的快捷部署。
本文采用FPGA上的DPU內(nèi)核作為加速AI網(wǎng)絡(luò)推理的目標(biāo)部署硬件,在主機上編寫應(yīng)用程序調(diào)度DPU內(nèi)核執(zhí)行加速任務(wù)。
邊緣部署總體方案流程如圖8所示。首先,基于TensorFlow框架搭建YOLOv3網(wǎng)絡(luò)模型,并利用DIOR數(shù)據(jù)集對YOLOv3網(wǎng)絡(luò)進行訓(xùn)練。其次,對YOLOv3訓(xùn)練后的網(wǎng)絡(luò)參數(shù)進行處理,包括網(wǎng)絡(luò)參數(shù)凍結(jié)、網(wǎng)絡(luò)參數(shù)量化以及網(wǎng)絡(luò)參數(shù)編譯,從而得到二進制格式(即elf)的DPU指令流文件。同時,采用Vivado工具進行PL端設(shè)計,搭建以DPU單元為核心的FPGA模塊化工程,并將整個硬件設(shè)計導(dǎo)出為XSA文件,在Vitis統(tǒng)一開發(fā)平臺中轉(zhuǎn)化為Platform工程。然后,基于Platform工程和DPU指令流中的網(wǎng)絡(luò)結(jié)構(gòu)信息,采用C++語言編寫PS端應(yīng)用程序,經(jīng)過GCC/G++等編譯器輸出應(yīng)用程序的elf二進制文件。最后,在Vitis平臺進行包裝和混合編譯,分別導(dǎo)出包含Linux域的啟動鏡像和DPU可執(zhí)行文件,在Zynq SoC上使用DIOR測試集圖像執(zhí)行網(wǎng)絡(luò)推理的測試,調(diào)度DPU加速推理過程。
圖8 模型邊緣部署流程圖
1)部署模型。鑒于YOLOv3模型具備較好的檢測精度和實時性,并且其規(guī)模適中,因此本文采用YOLOv3進行實驗。本文基于TensorFlow框架搭建YOLOv3模型,并且在光學(xué)遙感圖像目標(biāo)檢測數(shù)據(jù)集DIOR[25]進行模型訓(xùn)練。
2)圖像預(yù)處理。首先,將圖像從800×800轉(zhuǎn)換為YOLOv3所需的416×416分辨率,采用雙線性插值法對圖像進行尺度變換,盡可能準(zhǔn)確地保留原圖像信息。然后,采用去均值方法對所有圖像減去數(shù)據(jù)集的像素均值RGB_mean=(100.28,102.83,93.05),濾除遙感圖像中比例過高的綠光,突顯目標(biāo)特征。最后,采用歸一化對所有像素除以全部像素的標(biāo)準(zhǔn)差,將像素值映射到更小的范圍內(nèi),減小奇異樣本的干擾。
3)模型訓(xùn)練。本文在Ubuntu 18.04系統(tǒng)下基于Python 3.6和TensorFlow r1.15開發(fā)庫進行YOLOv3的搭建和訓(xùn)練,訓(xùn)練過程采用NVIDIA公司的GeForce RTX 2080 GPU進行硬件加速。設(shè)計了尺度變換、去均值和歸一化等算法對數(shù)據(jù)集圖像進行預(yù)處理,采用K-means算法對訓(xùn)練集邊框坐標(biāo)進行聚類,得到9組先驗錨框:(10,5)、(6,11)、(20,9)、(10,21)、(35,17)、(21,40)、(51,70)、(103,101)、(215,240),采用GIoU函數(shù)作為損失函數(shù)來衡量網(wǎng)絡(luò)的檢測性能。訓(xùn)練后YOLOv3的最佳檢測精度如圖9所示。
圖9 YOLOv3在DIOR數(shù)據(jù)集上的最佳檢測精度
由圖9可以看出,與Li等人[25]獲得的57.1%的mAP相比,本文獲得的檢測精度略有提高。
4)網(wǎng)絡(luò)參數(shù)處理。訓(xùn)練完成的網(wǎng)絡(luò)參數(shù)先進行凍結(jié)處理,再送入AI量化器和AI編譯器,量化結(jié)果和編譯結(jié)果分別如圖10和圖11所示。
圖10 網(wǎng)絡(luò)參數(shù)量化結(jié)果
圖11 網(wǎng)絡(luò)參數(shù)編譯結(jié)果
網(wǎng)絡(luò)的輸入張量為H×W×C格式(高×寬×深度),3個輸出節(jié)點分別為第59、67、75層卷積層的輸出。YOLOv3浮點型參數(shù)大小約248 MB,經(jīng)過了量化、編譯的網(wǎng)絡(luò)參數(shù)為58.75 MB,量化過程實現(xiàn)了4倍的壓縮率。
5)部署平臺。本文在Xilinx Zynq MPSoC平臺上進行部署實驗,選擇XCZU7EV芯片作為ARM和FPGA的協(xié)同加速平臺,上面集成了4核Arm CortexTM-A53處理器和Ultrascale系列FPGA,再連接片外的4 GB DDR4 SDRAM作為系統(tǒng)內(nèi)存,用于存儲編譯后的網(wǎng)絡(luò)模型和測試數(shù)據(jù)集。
6)FPGA工程。本文構(gòu)建FPGA的Vivado工程,并采用Vitis Analyzer工具分析布局布線后的Zynq芯片的運行功耗,如圖12所示。
圖12 Zynq運行功耗
在ARM的Linux系統(tǒng)中執(zhí)行應(yīng)用程序,將DIOR測試集圖像送入YOLOv3網(wǎng)絡(luò)進行推理測試,設(shè)置程序線程數(shù)為最高值16,調(diào)度FPGA中的深度神經(jīng)網(wǎng)絡(luò)加速器加速網(wǎng)絡(luò)推理過程,其檢測速率如圖13所示。
圖13 Zynq MPSoC上的YOLOv3檢測速率
本文的軟硬件協(xié)同加速架構(gòu)獲得了26.8 fps的檢測速率,高于人眼視覺暫留的24 fps,達到了實時檢測的標(biāo)準(zhǔn)。對檢測結(jié)果進行評估,其檢測精度如圖14所示。
圖14 YOLOv3在DIOR測試集上的推理精度
本文的軟硬件協(xié)同加速架構(gòu)上運行的YOLOv3推理結(jié)果比部署前的推理結(jié)果略有下降,由于量化、編譯過程造成了2.06%的精度損失,而部署后的YOLOv3對DIOR數(shù)據(jù)集中不同類別的實例檢測效果基本一致,檢測準(zhǔn)確率越高的類別,部署后的檢測準(zhǔn)確率越穩(wěn)定。
YOLOv3部署前與部署后的圖像對比如圖15所示,可見二者的檢測效果大致相同,部署后網(wǎng)絡(luò)對少部分目標(biāo)實例存在漏檢或誤檢現(xiàn)象。
(a) 部署前檢測效果
(b) 部署后檢測效果
為了進一步說明軟硬件協(xié)同加速框架的性能,分別在CPU和GPU上進行了推理實驗。通過對三者在檢測精度、檢測速度和功耗方面的比較,說明了本框架的優(yōu)缺點。
本文在Ubuntu18.04系統(tǒng)上進行實驗,CPU選擇Intel?CoreTMi7-870@3.2 GHz,并配置32 GB的DDR4內(nèi)存,GPU選擇GeForce RTX 2080和GeForce GTX 1060。采用同一YOLOv3網(wǎng)絡(luò)訓(xùn)練后的網(wǎng)絡(luò)參數(shù)和DIOR測試集進行推理實驗,并采用htop和nvidia-smi工具監(jiān)測CPU和GPU的運行功耗,計算推理時間。各平臺的加速性能對比如表1所示,其中fpW表示每瓦特幀數(shù)。
表1 CPU與GPU的推理性能比較
由表1可見,本文加速架構(gòu)運行功耗僅為Intel i7-8700的1/4,檢測速率則達到了其5倍,能效比約為其20倍。與GPU相比,本文加速架構(gòu)的檢測速率達到了GeForce RTX 2080的2/3左右,稍高于GeForce GTX 1060,而運行功耗則遠低于2個GPU,能效比為GeForce RTX 2080的4.7倍和GeForce GTX 1060的6.2倍。此外,本文加速架構(gòu)基于ZYNQ MPSoC構(gòu)建,其體積小重量輕,比GPU更適合裝配到尺寸有限、供能有限的衛(wèi)星邊緣設(shè)備中。
本文提出了一種協(xié)同軟硬件加速框架來加速DCNNs的推理。首先,采用TensorFlow框架搭建YOLOv3模型,并在DIOR數(shù)據(jù)集上進行訓(xùn)練。訓(xùn)練后的權(quán)值用Vitis-AI加速方案進行量化和編譯,將網(wǎng)絡(luò)規(guī)模壓縮了4倍。其次,在FPGA上構(gòu)建了一個以DPU為核心的DCNN加速器,并根據(jù)FPGA邏輯資源合理配置DPU參數(shù)。同時,以FPGA加速任務(wù)的調(diào)度為核心構(gòu)建ARM應(yīng)用程序,通過Vitis工具交叉編譯為可執(zhí)行文件。最后,采用Xilinx ZynqMPSoC作為軟硬件協(xié)同加速平臺部署YOLOv3網(wǎng)絡(luò)。實驗結(jié)果表明,該框架的平均吞吐率為1.75 TOPs(26.8 fps),在DIOR上的mAP為56.72%,滿足實時檢測系統(tǒng)的要求。通過在CPU和GPU上的性能比較,該框架的效率是Intel i7-8700的20倍,是GeForce RTX 2080的4.7倍,適合在衛(wèi)星邊緣設(shè)備上部署。