4.1 動態(tài)重構硬件加速器系統(tǒng)總體架構設計
動態(tài)重構硬件加速器架構最重要的特征體現(xiàn)在系統(tǒng)運行時能夠利用動態(tài)重構技術,通過PS端主控制器通過加載新的可重配置文件,以此調用新運算算子IP核來完成新的圖像預處理加速運算。本系統(tǒng)可以通過調用多個動態(tài)重構的加速器通過流水線方式組合成新的圖像預處理硬件算法,并且能夠通過調用和部署深度學習算法在DPU模塊上,以滿足系統(tǒng)運算、算法加速和不同環(huán)境下應用的需求。
?EDRCA-YOLO加速器的硬件系統(tǒng)架構框圖
本文提出了一種可以部署YOLO算法的高效動態(tài)重構目標檢測算法加速器架構(Efficient Dynamic Reconfigurable Target Detection Algorithm Accelerator Architecture for YOLO,EDRCA-YOLO),該加速器整體架構如圖4-1所示。EDRCA-YOLO加速器系統(tǒng)在系統(tǒng)級層面,包含兩個子系統(tǒng),分別是視頻圖像預處理加速器系統(tǒng)和基于DPU的目標檢測網(wǎng)絡推理加速系統(tǒng)。而在硬件級層面,整個加速器分為處理器系統(tǒng)端(Processing System,PS)和可編程邏輯端(Progarmmable Logic,PL),并將PL端分為五個部分,分別是動態(tài)區(qū)域1、動態(tài)區(qū)域2、動態(tài)區(qū)域3、動態(tài)區(qū)域4和靜態(tài)區(qū)域。
PL端的靜態(tài)區(qū)域主要完成視頻流數(shù)據(jù)的輸入、視頻幀傳輸以及輸出,還有中斷、時鐘、復位信號的管理和對于動態(tài)區(qū)域的邏輯解耦,PL端與PS端的通信采用128位AXI4總線協(xié)議的總線,如S_AXI_HPC0_FPD、S_AXI_HPC1_FPD、S_AXI_HP0_FPD、S_AXI_HP1_FPD,以及32位的S_AXI_LPD、M_AXI_HPM0_LPD。其中S_AXI_HPC0_FPD、S_AXI_HPC1_FPD高性能接口提供了高性能計算(HPC)外設的AXI總線訪問接口,其中FPD代表“Fixed Platform Domain”,而對應的M_AXI_HPM0_LPD接口是一種高性能主接口,并在低功耗域內(nèi)訪問PL端的主接口,其接口總線設置為32位,通過AXI Interconnect模塊對PL端的動態(tài)重構模塊和DFX_Shutdown管理器模塊相連,作為傳輸控制命令信號的接口。S_AXI_HPC0_FPD、S_AXI_HPC1_FPD均為高性能接口通過與DPU模塊相連,為DPU和PS端的處理器提供高速通信,而S_AXI_LPD為DPU與PS端處理器之間提供低速的AXI總線訪問,使得主控制器能夠發(fā)送控制命令,對DPU進行控制。S_AXI_HP0_FPD、S_AXI_HP1_FPD、S_AXI_HP2_FPD、S_AXI_HP3_FPD作為高性能的AXI總線從接口,接口設置為128位并與三個DFX_Shutdown管理器模塊相連。DFX_Shutdown管理器模塊用于在動態(tài)重構期間確保動態(tài)區(qū)域和靜態(tài)區(qū)域之間的AXI總線接口的通信安全。當系統(tǒng)處于工作狀態(tài)時,發(fā)送至可重配置模塊的AXI通信任務以及從可重配置模塊(RM)發(fā)出的AXI通信任務將會被終止,以確保系統(tǒng)不會因為RM的通信任務無法完成而造成系統(tǒng)死鎖的狀態(tài),而當系統(tǒng)處于非工作狀態(tài)時,通信任務按照先前的狀態(tài)繼續(xù)。EDRCA-YOLO系統(tǒng)架構中包含兩個DFX_Shutdown管理器模塊,分別與VDMA模塊的M_AXI_MM2S接口和M_AXI_S2MM接口。
在信號管理上,系統(tǒng)利用時鐘管理器Clocking Wizard IP進行時鐘信號管理,利用中斷管理器AXI Interrupt Controller IP對時鐘信號和中斷信號進行管理。EDRCA-YOLOv5s加速器共設置了三個初始時鐘信號,分別是100MHz、200MHz和300MHz,分別為驅動靜態(tài)區(qū)域的各模塊,以及動態(tài)區(qū)域1、動態(tài)區(qū)域2、動態(tài)區(qū)域3和動態(tài)區(qū)域4的可重配置運算模塊提供初始時鐘,并通過Clocking Wizard IP 核對信號進行倍頻處理,分別得到600MHz和300MHz的是時鐘信號并與DPU IP核的dpu_2x_clk接口和m_axi_dpu_aclk接口連接。當一個中斷信號被觸發(fā)時,系統(tǒng)會保存當前的硬軟件系統(tǒng)狀態(tài),并將控制權轉移給負責處理中斷事件的中斷處理,然后系統(tǒng)恢復先前的程序狀態(tài),以便程序在中斷發(fā)生前繼續(xù)執(zhí)行。復位信號則分為靜態(tài)區(qū)域和動態(tài)重構區(qū)域,靜態(tài)區(qū)域的時鐘復位信號由處理器復位模塊將系統(tǒng)復位信號同步到靜態(tài)區(qū)域的時鐘域,整個動態(tài)區(qū)域的時鐘復位信號由單獨的處理器系統(tǒng)復位IP核模塊控制。此外在靜態(tài)區(qū)域中為了確保EDRCA-YOLO加速器系統(tǒng)的硬件設計在運行中保持動態(tài)重構分區(qū)功能模塊和靜態(tài)邏輯功能模塊之間不發(fā)生邏輯混亂的情況,本設計使用Decoupler模塊對每個可重構模塊做邏輯解耦處理,可以在重新配置期間對動態(tài)區(qū)域和和靜態(tài)區(qū)域之間的邏輯進行隔離,并且在區(qū)域內(nèi)使用DFX_Shutdown管理器模塊管理AXI4-Lite、AXI4-Stream和AXI4總線接口,以此為加速器的運行提供一個安全的工作環(huán)境。
四個動態(tài)區(qū)域通過加載圖像運算加速器負責EDRCA-YOLO加速器的圖像預處理加速任務,因而需要動態(tài)重構加速器系統(tǒng)架構具備穩(wěn)定和高帶寬。故在動態(tài)區(qū)域構造可重構模塊時,對可重構模塊的接口進行專用化設計,各個信號接口和寄存器地址都是固定的,在VIVADO HLS開發(fā)工具中使用高層次編譯語言(HLS)設計一個專用加速器模板,為每一個運算加速器生成統(tǒng)一的硬件接口,具體接口設置如4.2節(jié)的圖4-2所示,其采用的32位地址位寬度的m_AXI4總線,該總線采用突發(fā)傳輸模式,適用大規(guī)模連續(xù)地址的數(shù)據(jù)讀取和寫入,最大運行帶寬17GB/s,以滿足圖像處理算法部署在硬件上對運算速度的需求。
4.2 圖像預處理算法硬件加速設計
由于軍事戰(zhàn)場的環(huán)境惡劣,移動端的自動目標識別系統(tǒng)所采集的圖像往往會被陰天、霧霾天氣、煙霧環(huán)境和高速移動帶來的模糊所影響,使得系統(tǒng)拍攝的圖像質量下降。由于FTDS數(shù)據(jù)集不能將軍事戰(zhàn)場上面臨的所有環(huán)境都整合到一個數(shù)據(jù)集中,若目標檢測網(wǎng)絡輸入圖像的環(huán)境和訓練集中的環(huán)境相差甚遠,將會對目標檢測系統(tǒng)的檢測效果帶來很大的影響,比如帶來明顯的精度下降。為了降低不利環(huán)境下對自動目標識別系統(tǒng)精度的影響,故本動態(tài)重構算法加速器系統(tǒng)在PL端增加了圖像實時預處理環(huán)節(jié),預先對采集的圖像做圖像增亮和去霧霾和煙塵的算法加速處理,之后再傳輸?shù)揭訢PU IP核為運算核心的GSConv-YOLOV5s目標檢測網(wǎng)絡加速器子系統(tǒng)中做進一步的處理。
4.2.1 圖像預處理算法
在實際的戰(zhàn)地情況下,需要對不同的環(huán)境采用不同的圖像處理算法,以適應不同的現(xiàn)場需求。通常遇到的環(huán)境情況有環(huán)境過暗、過亮、模糊、霧霾和煙塵,且考慮到本系統(tǒng)的硬件計算資源有限,適合采用基礎算子通過本系統(tǒng)主控制端將各個算子調用組合為新的圖像預處理算法,以節(jié)約硬件計算資源,故本系統(tǒng)對于這些環(huán)境下的圖像增強處理算法和其組成算子,歸納為表4-1所示。其中,LUT(Look-Up Table)是顏色查找表算法,用于圖像的亮度調節(jié);add是圖像加法算法,用于圖像增強對比度;filiter2D是卷積濾波算法,用于對圖像進行去噪和邊緣的檢測;rbg2gray是用于將圖片由彩色轉換為灰度的算法;gray2rgb是將圖片由灰度轉換成彩色的算法。
如表4-1所示,本系統(tǒng)采用的圖像增強算法主要有伽馬變換、基于拉普拉斯濾波的圖像銳化和直方圖均衡化算法。
(1)伽馬變換算法,是一種基于灰度級的非線性圖像增強算法,可以通過調整圖像的灰度級分布來改變圖像的對比度和亮度。伽馬變換主要用于處理灰度圖像,對于本系統(tǒng)所用三維彩色圖像可以對每個顏色通道單獨進行伽馬變換,使得較暗的區(qū)域的亮度得到提升,而較亮的區(qū)域的亮度得到降低,經(jīng)過伽馬變換,圖像整體的細節(jié)表現(xiàn)會得到增強。伽瑪變換的數(shù)學表達公式如公式(4-1)所示。
式中:
r——灰度圖像的輸入值(原來的灰度值),取值范圍為[0,1];
s——經(jīng)過伽馬變換后的灰度輸出值;
C——灰度縮放系數(shù),通常取1;
γ——伽馬因子大小,控制了整個變換的縮放程度。
(2)基于拉普拉斯濾波的圖像銳化算法,一種經(jīng)典的圖像增強算法,它通過增強圖像的高頻分量來使圖像變得更加銳利,凸顯圖像中物體的邊緣輪廓。但是拉普拉斯濾波算法對噪聲比較敏感,因此本系統(tǒng)先通過高斯平滑算法去除圖像中的高頻噪聲,再對相應的噪聲進行抑制,然后采用3′3尺寸大小的拉普拉斯卷積核,對原始圖像進行離散卷積運算得到高頻分量圖像,再通過疊加運算將原始圖像和高頻分量圖像疊加,生成銳化后的圖像。其中在疊加高頻分量圖像時,可以通過控制增益因子,以控制圖像銳化程度。
(3)直方圖均衡化算法,是一種用于提高圖像對比度的數(shù)字圖像處理技術,其通過圖像的直方圖將原始圖像的像素值分布重新映射到一個均勻的分布上,從而使得圖像中的霧霾和模糊效果得到一定程度的改善,使得圖像更加清晰明亮。其表達式如式(4-2)所示。
式中:
L——灰度總數(shù);
k——累計次數(shù),k=0,1,2,…,L-1;
r——圖像的灰度級數(shù),
——各個灰度級治病像素在圖像中出現(xiàn)的概率;
——圖像中個灰度級中的像素個數(shù);
M——圖像高的像素數(shù);
N——圖像寬的像素數(shù)。
Sk——累計第K次的累計值。
4.2.2 可重構模塊的接口設計
如圖4-2所示,每個動態(tài)區(qū)域都對應著一個可重構模塊,EDRCA-YOLO加速器架構的可重構模塊(Reconfigurable Module,RM)有兩條總線,它們分別是32位的AXI_Stream輸入和輸出數(shù)據(jù)總線和32位的S_AXI_Control命令總線。這兩條總線都通過128位的系統(tǒng)總線與DDR4相連,通過地址寄存器即可調用可重構模塊內(nèi)部的加速器組對運算層并行加速??芍貥嬆K的參考時鐘為300MHz,由硬件平臺的時鐘通過內(nèi)部PLL,輸出控制時鐘300MHz。系統(tǒng)的復位信號源來自FPGA外部的復位鍵。當系統(tǒng)上電后,硬件平臺初始化DDR4控制器,并向復位模塊發(fā)送復位信號,之后每個可重構模塊和FPGA的外圍設備就處于預備狀態(tài)。
可重構模塊根據(jù)不同的計算任務的需要,可在可重構模塊內(nèi)嵌不同規(guī)格和數(shù)量的圖像處理運算加速器模塊,為了提高可重構模塊的集成度。當可重構模塊分配到不同的重構區(qū)域時,需要遵循同一個重構區(qū)域的原則,即可重構模塊占用的片上硬件資源數(shù)量應盡可能接近,以增強模塊計算性能和減少硬件資源的浪費[25]。內(nèi)嵌單個和兩個的可重構模塊模板頂層設計框圖如圖4-2所示,為了防止動態(tài)邏輯區(qū)域和靜態(tài)邏輯區(qū)域的邏輯混疊讓系統(tǒng)發(fā)生嚴重錯誤,故對可重構模塊進行了解耦設計,在靜態(tài)區(qū)域使用Decoupler模塊對可重構模塊的邏輯進行解耦。
4.2.3 預處理算法的IP核設計
圖像預處理算法硬件加速核的設計在Vitis?HLS(2020.2)開發(fā)工具上完成,并且通過調用Vitis視覺庫的函數(shù)API接口加速硬件開發(fā)過程。其中Vitis視覺庫提供了一種與OpenCV庫函數(shù)類似的專用于FPGA的標準硬件函數(shù)庫,并通過Vitis統(tǒng)一設計平臺開發(fā)與部署應用。如表4-1所示,預處理算法所需算子有LUT、add、filter2D、GaussianBlur、rbg2gray、gray2rbg,均調用Vitis視覺庫中對應的函數(shù)API接口。對于硬件加速核的IP核接口設計,以Filter2d算子為例,如圖4-3所示,外設接口包含32位的AXI_Stream的輸入與輸出接口,時鐘信號、復位信號和32位的s_AXI_Control接口,與可重構模塊的外設接口設計相同。對于Filter2d算子頂層函數(shù)的設計,在HLS中綜合的頂層函數(shù)是filter2d_accel(?)函數(shù):void filter2d_accel(stream_t& stream_in, stream_t& stream_out, short int filter[FILTER_SIZE*FILTER_SIZE], unsigned char shift, unsigned int rows,?unsigned int cols)。其中的stream_in和stream_out為視頻流的輸入和輸出;rows、cols分別為圖像高度和寬度;FILTER_SIZE為卷積核尺寸;shift為移位步長。在該函數(shù)中,先通過xf::cv::AXIvideo2xfMat函數(shù),將AXI_Stream數(shù)據(jù)類型的視頻流數(shù)據(jù)轉換成xf::cv::Mat數(shù)據(jù)類型,再調用Vitis視覺庫中的xf::cv::filter2D函數(shù),最后再通過xf::cv::xfMat2AXIvideo函數(shù)將xf::cv::Mat數(shù)據(jù)類型的視頻流數(shù)據(jù)轉換成AXI_Stream數(shù)據(jù)類型,之后通過Vitis?HLS開發(fā)工具即可得到filter2d_accel?的IP核,其他算子的IP核設計過程與filter2d算子相同。根據(jù)上述表述,對圖像預處理算子LUT、add、filter2D、rbg2gray、gray2rbg分別在Vitis HLS(2020.2)開發(fā)工具上進行設計并導出IP軟核,并加載到Vivado(2020.2)開發(fā)工具的軟核庫中以備PL端的硬件系統(tǒng)設計使用。
4.3 基于Vitis?AI的目標檢測網(wǎng)絡推理加速器方案
Vitis?AI 集成開發(fā)環(huán)境框架圖
基于Vitis AI的目標檢測網(wǎng)絡推理加速器方案是在XILINX公司的片上系統(tǒng)上部署深度學習網(wǎng)絡推理的高效解決方案,并且通過Vitis AI的開發(fā)工具庫可以依托Ubuntu?Linux操作系統(tǒng)實現(xiàn)深度學習模型的網(wǎng)絡優(yōu)化、編譯和部署[103]。如圖4-4所示,Vitis AI的開發(fā)工具庫支持Xilinx?ZYNQ?MPSoC系列的邊緣嵌入式硬件平臺和Xilinx Alveo系列的硬件加速卡。這些平臺提供了高性能的計算資源,使得在這些硬件平臺上通過Vitis?AI開發(fā)工具庫部署深度學習網(wǎng)絡時可以獲得很高的加速比。由圖可知Vitis?AI開發(fā)工具包包含AI優(yōu)化器、AI量化器和AI編譯器,在網(wǎng)絡優(yōu)化階段,可以使用各種技術來減小網(wǎng)絡的計算量和內(nèi)存占用,如算法優(yōu)化和剪枝,以最小的精度下降為代價以提高模型性能。除此以外算法優(yōu)化部分還包括循環(huán)優(yōu)化(展開、平鋪和交換),以最大限度地提高片上存儲器的數(shù)據(jù)流效率和緩存性能。為了提高系統(tǒng)數(shù)據(jù)吞吐量和減少延遲,最后的硬件架構設計包對于本文所提出的GSConv-YOLOv5s目標檢測算法的硬件部署中需要較多運算量的圖像前處理部分進行硬件并行加速設計,和合理的流水線并行設計與有效的內(nèi)存管理。在網(wǎng)絡編譯階段,可以選擇使用Vitis AI提供的優(yōu)化器來生成高效的硬件描述語言(Verilog?HDL)代碼,以便在硬件平臺上實現(xiàn)網(wǎng)絡推理。用戶可以通過編寫一些簡單的腳本來自動化這些任務,從而簡化整個流程。
論文中所采用的開發(fā)流程包括Vitis AI和PYNQ-Kria軟硬協(xié)同框架。首先,通在Ubuntu?18.04的Linux操作環(huán)境下部署Vitis AI集成開發(fā)環(huán)境,用于將網(wǎng)絡訓練階段得到的模型參數(shù)文件作為輸入。然后在通過在Docker虛擬環(huán)境中采用PyTorch深度學習框架以及Vitis?AI開發(fā)工具包來構建KV260硬件平臺匹配的編譯環(huán)境,并通過AI優(yōu)化器將網(wǎng)絡模型參數(shù)文件進行網(wǎng)絡優(yōu)化,還通過AI量化器將32位浮點型數(shù)據(jù)量化為8為整數(shù)定點型數(shù)據(jù),再通過AI編譯器構建出匹配KV260硬件開發(fā)平臺的硬件部署文件。最后將文件部署在在KV260上事先安裝好的PYNQ-Kria軟硬協(xié)同框架的PetaLinux操作環(huán)境中,使用C++和Python調用Vitis?AI集成開發(fā)環(huán)境下生成的硬件部署文件,來加載調用DPU完成網(wǎng)絡推理加速任務。
4.3.1 網(wǎng)絡壓縮
網(wǎng)絡壓縮是通過減少模型參數(shù)的數(shù)量來減小模型大小的一種技術??梢允褂眉糁土炕燃夹g來實現(xiàn)。其中,剪枝技術可以通過刪除模型中不必要的連接來減少模型參數(shù)的數(shù)量,進一步提高建模的準確性和可靠性。雖然FPGA可以有效地處理定點型數(shù)據(jù),但無法滿足浮點數(shù)據(jù)計算所需的大量存儲空間。因此,為了提高網(wǎng)絡模型的性能,必須對其實行參量縮小,這一過程基本上包括參量剪枝和參數(shù)量化兩個步驟。使用Vitis AI工具,可以有效地將參量縮小到圖4-4中的形式。
網(wǎng)絡壓縮流程圖
一般來說,未經(jīng)裁剪的卷積神經(jīng)網(wǎng)絡采取緊密型網(wǎng)絡連接方式,當中含有大批權重值極低的網(wǎng)絡連接分支,這些網(wǎng)絡連接分支占用巨量存儲和計算資源,但對網(wǎng)絡性能的影響卻很小。因此,通過參數(shù)剪枝技術,可以有效地去除權值極低的網(wǎng)絡連接,從而減少網(wǎng)絡參數(shù)量。在Vitis AI開發(fā)工具中,AI優(yōu)化器可以通過不斷重復的網(wǎng)絡剪枝操作,將網(wǎng)絡參數(shù)量減少到最小,從而達到最佳的運行速度,同時保證精度損失可接受。為了達到最佳效果,可以在每兩輪剪枝期間加以微調,即經(jīng)過幾輪重訓練,以達到5倍以上的壓縮率。然而,剪枝性能與網(wǎng)絡模型密切相關,不同的網(wǎng)絡模型會產(chǎn)生不同的剪枝效果。
剪枝后的網(wǎng)絡模型參數(shù)依然是32位浮點型數(shù)據(jù),但是在將其送往FPGA執(zhí)行加速運算之前,必須將其轉化為8位定點型數(shù)據(jù),這一過程被稱之為參數(shù)量化。比如,8位定點量化可以將32位的浮點數(shù)取最近似的8位整數(shù),從而將參數(shù)信息壓縮至原來的1/4,以便更好地描述模型的特征。Vitis AI開發(fā)工具中的AI量化器可以有效地定量CNN模式,它可以將原始網(wǎng)絡凍結,生成序列圖GraphDef,接著從一分組無標記的數(shù)據(jù)集中抽取圖像,經(jīng)過定量校準,最后對網(wǎng)絡系統(tǒng)中的卷積層、池化層等32位的浮點型參數(shù)加以定量量化,從而大大提高了量化后網(wǎng)絡模型的準確性和可靠性,而且可以有效地減少精度損失,從而提升模型的性能和可靠性。最后,加入量化微調步驟,通過小批次的重訓練讓定點參數(shù)進一步收斂,從而避免過大的精度損失。
4.3.2 網(wǎng)絡編譯
網(wǎng)絡編譯是一個非常重要的步驟。網(wǎng)絡編譯的目的是將訓練好的深度學習模型轉化為能夠在加速器上運行的代碼。在Vitis AI中,可以使用Xilinx的DNNDK工具對深度學習模型進行編譯。Vitis AI的網(wǎng)絡編譯技術主要包括兩個方面:模型轉換和模型優(yōu)化。模型轉換是將訓練好的深度學習模型轉換為能夠在加速器上運行的代碼。Vitis AI提供了多種模型轉換工具,包括DNNC(Deep Neural Network Compiler)、DNNDK(Deep Neural Network Development Kit)和VART(Vitis AI Runtime)。這些工具可以將模型從不同的框架(如TensorFlow、PyTorch、Caffe和ONNX)轉換為可以在加速器上運行的代碼。模型優(yōu)化是指對深度學習模型進行優(yōu)化,以提高其性能和功效效率。在Vitis AI中,有多種模型優(yōu)化技術可供選擇,包括剪枝和量化、數(shù)據(jù)重排和內(nèi)存對齊、層次并行、數(shù)據(jù)流。其中剪枝可以減少模型的大小和復雜度,從而提高推理速度。量化可以將高精度的浮點數(shù)轉換為低位寬的定點數(shù),從而減少存儲和計算需求;重排數(shù)據(jù)可以減少內(nèi)存帶寬的需求,從而提高性能。內(nèi)存對齊可以使數(shù)據(jù)存儲在連續(xù)的內(nèi)存位置上,從而提高緩存效率;層次并行可以將模型分成多個子模型,以在多個FPGA核心上并行執(zhí)行,從而提高性能;數(shù)據(jù)流可以將模型分成多個流水線階段,以最大化處理器的利用率,從而提高性能。
4.4 小結
本文重點描述了動態(tài)重構加速器系統(tǒng)架構EDRCA-YOLO的詳細設計。首先,對介紹了動態(tài)重構硬件加速器系統(tǒng)總體架構的設計。然后,闡述了圖像預處理算法及其硬件加速設計,詳細描述了可重構模塊和圖像預處理算法的IP核接口設計。最后,闡述了基于Vitis AI的目標檢測網(wǎng)絡模型推理加速器方案及網(wǎng)絡壓縮和網(wǎng)絡編譯的步驟。