張志超 王 劍 章隆兵 肖俊華
(*計(jì)算機(jī)體系結(jié)構(gòu)國家重點(diǎn)實(shí)驗(yàn)室(中國科學(xué)院計(jì)算技術(shù)研究所) 北京 100190)
(**中國科學(xué)院計(jì)算技術(shù)研究所 北京 100190)
(***中國科學(xué)院大學(xué) 北京 100049)
(****中國電子科技集團(tuán)公司第十五研究所 北京 100083)
深度學(xué)習(xí)技術(shù)[1]不僅在圖像處理應(yīng)用中取得了較大的發(fā)展,在遙感影像目標(biāo)圖像識(shí)別中也取得了廣泛的應(yīng)用。目前,基于卷積神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)技術(shù)逐漸向輕量化模型[2]發(fā)展,使得輕量化模型能夠在低處理能力的處理器上使用。在解決了輕量化模型的準(zhǔn)確率問題后,還可以進(jìn)一步采用硬件加速浮點(diǎn)卷積網(wǎng)絡(luò)的方法進(jìn)行加速?,F(xiàn)有的卷積神經(jīng)網(wǎng)絡(luò)的加速研究包括參數(shù)量化方法[3-4]、輕量型網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)、硬件卷積加速結(jié)構(gòu)設(shè)計(jì)等方法。
輕量型網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)方法主要采用分層卷積、分組卷積、點(diǎn)卷積和小卷積核等方式降低卷積的計(jì)算量,減少特征圖跨通道提取特征的計(jì)算量。MobileNet[5]采用點(diǎn)卷積以及深度分離卷積結(jié)構(gòu)降低模型的計(jì)算量。ShuffleNet[6]采用通道洗牌策略促進(jìn)通道間特征融合,從而提升準(zhǔn)確率。輕量型網(wǎng)絡(luò)結(jié)合Yolo[7]檢測算法也取得了高準(zhǔn)確率與低處理時(shí)延[8-10]。輕量型網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)從軟件卷積結(jié)構(gòu)層面降低模型復(fù)雜度,適合現(xiàn)場可編程門陣列(field programmable gate array,FPGA)定制硬件處理核直接加速浮點(diǎn)卷積模型獲取加速能力。
硬件結(jié)構(gòu)設(shè)計(jì)包括兩種方法,一種是基于專用集成電路(application specific integrated circuit,ASIC)設(shè)計(jì)卷積計(jì)算單元和矩陣運(yùn)算單元等方式獲取加速能力[11-13]。另一種是基于FPGA 的加速浮點(diǎn)卷積計(jì)算方法,主要通過高層次綜合(high-level synthesis,HLS)[14-15]或者開放運(yùn)算語言(open computing language,OpenCL)[16-18]加速的方式,采用循環(huán)展開優(yōu)化以及緩存設(shè)計(jì)方式提升處理能力?;诟↑c(diǎn)的加速方式能夠更好地去耦合軟硬件協(xié)同開發(fā)。
本文針對星載飛機(jī)目標(biāo)型號(hào)快速準(zhǔn)確分類的需求,提出了一種基于FPGA 的浮點(diǎn)可分離卷積加速方法,達(dá)到了圖像分類高準(zhǔn)確率、高吞吐量、高效能計(jì)算的效果。本文的主要貢獻(xiàn)如下。
(1)提出了一種基于FPGA 的浮點(diǎn)可分離卷積加速方法,結(jié)合輕量型卷積網(wǎng)絡(luò)高準(zhǔn)確率、低計(jì)算復(fù)雜度的特點(diǎn),以及浮點(diǎn)可分離卷積網(wǎng)絡(luò)加速技術(shù),提供高吞吐量、高準(zhǔn)確率的計(jì)算模式支撐。
(2)利用數(shù)據(jù)流調(diào)度技術(shù)以及浮點(diǎn)可分離卷積乘累加設(shè)計(jì),解決了可分離卷積的浮點(diǎn)加速線速吞吐問題,同時(shí)也解耦合了軟硬件協(xié)同開發(fā)。
(3)利用多核協(xié)同計(jì)算的方式,對多層卷積計(jì)算協(xié)同加速,避免過大的卷積核帶來的超寬線寬問題造成的硬件時(shí)序收斂難題,進(jìn)一步提升整個(gè)加速器的吞吐量。
針對遙感影像飛機(jī)目標(biāo)型號(hào)分類任務(wù)快速低功耗處理的需求,需要在遙感影像機(jī)場區(qū)域中快速識(shí)別飛機(jī)目標(biāo)的型號(hào),對存在敏感的飛機(jī)目標(biāo)型號(hào)的熱點(diǎn)區(qū)域圖像回傳給數(shù)據(jù)中心后,進(jìn)一步進(jìn)行高精度目標(biāo)處理分析。本文算法結(jié)合應(yīng)用需求,一方面采用通用的輕量型網(wǎng)絡(luò)MobileNet,從軟件層面解決目標(biāo)型號(hào)分類精度問題,同時(shí)降低卷積運(yùn)算的復(fù)雜度;另一方面,從FPGA 加速浮點(diǎn)深度可分離卷積網(wǎng)絡(luò)層面提升運(yùn)算吞吐量。二者維持一個(gè)浮點(diǎn)卷積模型的編程接口,使得軟硬件開發(fā)去耦合。
基于深度可分離卷積(depthwise separable convolution,DSC) 的MobileNet 算法,通過點(diǎn)卷積(pointwise convolution,PC)和深度分離卷積(depthwise convolution,DC)提取特征圖,大幅降低了卷積過程的運(yùn)算量,且在通用數(shù)據(jù)集圖像分類任務(wù)上達(dá)到了較高的準(zhǔn)確率。基于MobileNet 卷積網(wǎng)絡(luò)模型在ImageNet 數(shù)據(jù)集圖像分類任務(wù)TOP-1 準(zhǔn)確率達(dá)到了70.6%[5],在CPU 平臺(tái)上的處理時(shí)間為113 ms[1],相對于其他模型準(zhǔn)確率較高且模型計(jì)算復(fù)雜度適中,適合將該網(wǎng)絡(luò)模型通過遷移學(xué)習(xí)的方式解決機(jī)場區(qū)域內(nèi)飛機(jī)目標(biāo)的型號(hào)分類。
(1)基于MobileNet 的可分離卷積網(wǎng)絡(luò)結(jié)構(gòu)描述
MobileNet 網(wǎng)絡(luò)中的可分離卷積與二維卷積的使用方式對比如圖1 所示,圖1 表示一個(gè)常規(guī)二維卷積運(yùn)算需要一個(gè)深度分離卷積加一個(gè)點(diǎn)卷積協(xié)同運(yùn)算。
圖1 二維卷積與可分離卷積使用方式對比
MobileNet 飛機(jī)目標(biāo)型號(hào)分類卷積網(wǎng)絡(luò)的輸入為128×128 像素的3 通道衛(wèi)星影像,輸出為1000個(gè)目標(biāo)型號(hào)的類別信息,共28 個(gè)卷積層,1 個(gè)平均池化層,1 個(gè)全連接層,能夠最多分類1000 個(gè)目標(biāo)。具體的MobileNet 每層的卷積或池化參數(shù)配置如表1所示。
表1 MobileNet 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
(2)模型復(fù)雜度分析
通過卷積參數(shù)量計(jì)算以及卷積計(jì)算乘累加數(shù)計(jì)算,其中池化層沒有參數(shù),乘累加數(shù)不統(tǒng)計(jì),該模型的權(quán)重?cái)?shù)量為4.24×106,總大小為16.96 MB,總乘累加操作數(shù)為0.186 GMAC。由此可見,該分類模型為一個(gè)深層輕量化的目標(biāo)分類網(wǎng)絡(luò),適于在FPGA 上實(shí)現(xiàn)全浮點(diǎn)精度的深度可分離卷積網(wǎng)絡(luò)運(yùn)算加速。
為了降低軟硬件協(xié)同加速M(fèi)obileNet的開發(fā)耦合度,采用浮點(diǎn)原始模型參數(shù)的方式進(jìn)行加速,保持了與原模型一致性的輸出與分類準(zhǔn)確率;采用基于數(shù)據(jù)流調(diào)度的浮點(diǎn)深度可分離卷積加速設(shè)計(jì)方案,利用多層卷積網(wǎng)絡(luò)流水線協(xié)同的方式并行加速計(jì)算,提升最終的運(yùn)算吞吐量。
針對基于卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)區(qū)域篩選算法,設(shè)計(jì)基于數(shù)據(jù)流計(jì)算的卷積神經(jīng)網(wǎng)絡(luò)加速器。Xilinx UltraScale+系列新品的內(nèi)部物理結(jié)構(gòu)分布為3個(gè)超級(jí)邏輯區(qū)(super logic region,SLR),每個(gè)邏輯區(qū)覆蓋芯片內(nèi)部的一個(gè)Die,整顆芯片由3 顆Die 通過基底層互聯(lián)。
考慮邏輯分區(qū)問題,將整個(gè)數(shù)據(jù)流計(jì)算分為3大塊,第1 塊超級(jí)邏輯區(qū)(SLR0)覆蓋卷積網(wǎng)絡(luò)的前13 層卷積層計(jì)算,即從cnv0 到cnv6_2 的計(jì)算;第2塊超級(jí)邏輯區(qū)(SLR1)覆蓋中間10 層卷積層計(jì)算,即從cnv7_1 到cnv11_2 的計(jì)算;第3 塊超級(jí)邏輯區(qū)(SLR2)覆蓋后5 層卷積層計(jì)算,包括全連接計(jì)算,全連接計(jì)算可抽象為1×1 的卷積計(jì)算,即從cnv12_1 到fc 的計(jì)算。
超級(jí)邏輯區(qū)之間通過Xilinx 堆疊硅片互聯(lián)(stacked silicon interconnect,SSI)技術(shù)互聯(lián),在超級(jí)邏輯區(qū)邊緣有特定的專用寄存器進(jìn)行跨邏輯區(qū)通信,基底層有超長線(super long line,SLL)來連接專用傳輸寄存器。超級(jí)邏輯區(qū)的內(nèi)部訪存和跨邏輯區(qū)通信需求均通過SLL 互聯(lián)實(shí)現(xiàn)。具體的基于數(shù)據(jù)流計(jì)算的可分離卷積神經(jīng)網(wǎng)絡(luò)加速總體架構(gòu)如圖2所示。
圖2 基于數(shù)據(jù)流調(diào)度的MobileNet 加速總體架構(gòu)
本節(jié)闡述基于數(shù)據(jù)流的點(diǎn)卷積層計(jì)算,主要包括卷積層權(quán)重輸入、權(quán)重緩存、卷積輸入數(shù)據(jù)流寬度變換、卷積計(jì)算陣列、批歸一化處理、非線性響應(yīng)等部分。具體的基于數(shù)據(jù)流的卷積層初始化與計(jì)算流程如圖3 所示,其中權(quán)重初始化只在權(quán)重緩存初始化的時(shí)候運(yùn)行一次,后續(xù)的卷積計(jì)算不再需要從動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dynamic random access memory,DRAM)中調(diào)度緩存數(shù)據(jù),降低存儲(chǔ)帶寬的開銷,避免卷積計(jì)算陣列需要等待權(quán)重?cái)?shù)據(jù)。
圖3 點(diǎn)卷積層初始化與計(jì)算流程
與常規(guī)卷積層計(jì)算流程相比,點(diǎn)卷積不需要進(jìn)行輸入數(shù)據(jù)流調(diào)度,只需要將輸入寬度為處理單元(process element,PE)個(gè)數(shù)的浮點(diǎn)數(shù)據(jù)流轉(zhuǎn)換為輸入寬度為單指令多數(shù)據(jù)(single instruction multiple data,SIMD)個(gè)數(shù)的浮點(diǎn)數(shù)據(jù)流,因?yàn)辄c(diǎn)卷積進(jìn)行的卷積運(yùn)算核為1 ×1,通常的特征圖維持的H×W×C即可滿足1×1 卷積的計(jì)算需求,不需要在特征圖上跨行調(diào)度數(shù)據(jù),因此簡化了輸入數(shù)據(jù)流調(diào)度為輸入數(shù)據(jù)流寬度變換。卷積計(jì)算陣列依然采用基于前向累加鏈的卷積計(jì)算陣列設(shè)計(jì),批歸一化操作與非線性響應(yīng)操作均無變化。
本部分闡述基于數(shù)據(jù)流的深度分離卷積層計(jì)算,主要包括卷積層權(quán)重輸入、深度分離卷積層權(quán)重緩存、深度分離卷積輸入數(shù)據(jù)調(diào)度、深度分離卷積計(jì)算陣列、批歸一化處理、非線性響應(yīng)等部分。具體的基于數(shù)據(jù)流的深度分離卷積層初始化與計(jì)算流程如圖4 所示,其中權(quán)重初始化只在權(quán)重緩存初始化的時(shí)候運(yùn)行一次,后續(xù)的深度分離卷積計(jì)算不再需要從DRAM 中調(diào)度緩存數(shù)據(jù),降低存儲(chǔ)帶寬的開銷,避免深度分離卷積計(jì)算陣列需要等待權(quán)重?cái)?shù)據(jù)。
圖4 深度分離卷積層初始化與計(jì)算流程
與常規(guī)卷積層計(jì)算流程相比,深度分離卷積的批歸一化操作與非線性響應(yīng)操作均無變化。
(1)深度分離卷積層數(shù)據(jù)流調(diào)度
基于數(shù)據(jù)流的深度分離卷積計(jì)算要求輸入數(shù)據(jù)以及權(quán)重都能夠達(dá)到線速吞吐,這樣深度分離卷積計(jì)算單元的流水周期不會(huì)出現(xiàn)空轉(zhuǎn),計(jì)算效率達(dá)到最高?;诰€速吞吐的數(shù)據(jù)流調(diào)度要求,設(shè)計(jì)多端口的權(quán)重緩存,能夠提供PE組權(quán)重,每組權(quán)重有1個(gè)權(quán)重32 位浮點(diǎn)數(shù);設(shè)計(jì)多端口深度分離卷積輸入緩存,能夠提供1 個(gè)32 位浮點(diǎn)數(shù)特征圖輸入;同時(shí)引入與深度分離卷積s行同等大小的輸入先入先出隊(duì)列(first input first output,FIFO),與深度分離卷積輸入緩存構(gòu)成異構(gòu)“乒乓”緩存,去耦合上個(gè)階段的計(jì)算輸出調(diào)度和本階段的深度分離卷積計(jì)算輸入調(diào)度。輸入特征圖的輸入寬度為上一層PE個(gè)數(shù)量的32 位浮點(diǎn)數(shù),通過輸入FIFO 轉(zhuǎn)換寬度為1 個(gè)32 位浮點(diǎn)數(shù)據(jù)。卷積計(jì)算單元的輸出為PE個(gè)32 位浮點(diǎn)數(shù)據(jù)計(jì)算輸出。具體的卷積層數(shù)據(jù)流調(diào)度如圖5所示,實(shí)現(xiàn)了一組數(shù)據(jù)計(jì)算多個(gè)深度分離卷積輸出,利用了輸入數(shù)據(jù)的局部性。
圖5 深度分離卷積層數(shù)據(jù)流調(diào)度
(2)深度分離卷積層輸入緩存設(shè)計(jì)
深度分離卷積層輸入緩存的Stride行(Stride為深度分離卷積滑窗步進(jìn))大小與輸入FIFO 的大小一致、結(jié)構(gòu)不同,卷積層輸入緩存將H×W×C的輸入特征圖轉(zhuǎn)換為卷積核所需的k×k的輸入,通過在多組寄存器滑窗,為深度分離卷積計(jì)算陣列提供計(jì)算深度分離卷積所需的線性輸入。具體的深度分離卷積輸入緩存設(shè)計(jì)如圖6 所示。
圖6 卷積層輸入緩存設(shè)計(jì)
深度分離卷積層輸入緩存包括k×Stride行寄存器組,其中k為深度分離卷積核大小,Stride為深度分離卷積滑窗的步進(jìn)大小。每行寄存器緩存輸入特征圖多個(gè)通道一行的數(shù)據(jù),即W×C個(gè)數(shù)據(jù),W為輸入特征圖的寬度,IC為輸入特征圖的通道數(shù)。每個(gè)寄存器行都可以按照SIMD=1 個(gè)浮點(diǎn)數(shù)的寬度輸出數(shù)據(jù),一個(gè)像素的多個(gè)通道數(shù)據(jù)按照SIMD的寬度分為b個(gè)Block,每個(gè)Block 按照順序放在寄存器行里。由于深度分離卷積的空間訪存特性,需要從多個(gè)寄存器行里順序讀取數(shù)據(jù),按照卷積核行列計(jì)算的要求順序輸出SIMD寬度的輸入特征圖數(shù)據(jù)流。
多個(gè)寄存器組分開存放,可以將深度分離卷積輸入特征圖的輸出調(diào)度和輸入調(diào)度分開,除了初始化讀入k行輸入特征圖像素,后續(xù)可以按照Stride行補(bǔ)充輸入特征圖數(shù)據(jù)。雖然訪問的同一個(gè)深度分離卷積輸入緩存,利用多行深度分離卷積輸入緩存寄存器,由此可以將輸入數(shù)據(jù)與輸出數(shù)據(jù)調(diào)取去耦合,避免數(shù)據(jù)依賴和數(shù)據(jù)污染,實(shí)現(xiàn)無鎖的數(shù)據(jù)輸入輸出同時(shí)調(diào)度,滿足深度分離卷積計(jì)算單元SIMD個(gè)浮點(diǎn)數(shù)據(jù)的輸出線速調(diào)度要求。
(3)深度分離卷積層權(quán)重緩存設(shè)計(jì)
針對在片上緩存該層深度分離卷積計(jì)算所需的全部卷積,并且權(quán)重緩存的輸出能按照深度分離卷積計(jì)算陣列PE×1 的計(jì)算模式輸出面向多個(gè)處理單元PE輸出每組1 個(gè)浮點(diǎn)權(quán)重?cái)?shù)據(jù)等要求,設(shè)計(jì)深度分離卷積層權(quán)重緩存。
深度分離卷積層參數(shù)按照式(1)維度順序進(jìn)行存放,其中PE為深度分離卷積計(jì)算單元的處理單元個(gè)數(shù),每個(gè)深度分離卷積處理單元輸入數(shù)據(jù)的寬度SIMD為1,每個(gè)數(shù)據(jù)均為32 位浮點(diǎn)數(shù)據(jù)。
深度分離卷積權(quán)重緩存T的計(jì)算如式(2)所示,其中OC為深度分離卷積核輸出通道數(shù)量,k為深度分離卷積核大小。
深度分離卷積層權(quán)重緩存具有PE組獨(dú)立的緩存行,每個(gè)行的輸出寬度為1 個(gè)浮點(diǎn)數(shù),由于卷積計(jì)算陣列的多個(gè)PE輸出為輸出特征圖的一個(gè)像素的連續(xù)屬性,故需要在權(quán)重緩存里將深度分離卷積權(quán)重按照多個(gè)PE行寄存器交叉存儲(chǔ),保證輸出的PE組權(quán)重通過深度分離卷積計(jì)算陣列得到的是連續(xù)的輸出特征圖一個(gè)像素內(nèi)部的連續(xù)屬性值。具體的存放順序如圖7 所示。
圖7 深度分離卷積層權(quán)重緩存設(shè)計(jì)
(4)深度分離卷積陣列計(jì)算單元設(shè)計(jì)
針對深度分離卷積計(jì)算高吞吐量的計(jì)算需求,設(shè)計(jì)深度分離卷積計(jì)算陣列。每個(gè)時(shí)鐘周期能夠處理PE個(gè)乘累加計(jì)算,其中PE為深度分離卷積陣列的行數(shù),深度分離卷積輸入特征圖數(shù)據(jù)的個(gè)數(shù)為1,輸出為PE個(gè)深度分離卷積計(jì)算輸出,PE個(gè)浮點(diǎn)數(shù)據(jù)屬于同一個(gè)輸出特征圖像素的連續(xù)屬性值。
考慮浮點(diǎn)累加器調(diào)度延遲問題,主要在與累加器輸出要反饋到累加器輸入上,這個(gè)延遲決定了累加器的吞吐速率,如果能夠打破累加器的后向反饋,則可以使累加器性能達(dá)到線速,進(jìn)而深度分離卷積計(jì)算陣列達(dá)到線速。
卷積的累加次數(shù)是固定的,且累加次數(shù)隨著每個(gè)深度分離卷積層參數(shù)的變化而變化。基于數(shù)據(jù)流的卷積計(jì)算陣列支持面向不同的深度分離卷積層分別配置深度分離卷積計(jì)算參數(shù),主要是深度分離卷積陣列大小,為此本文設(shè)計(jì)了一個(gè)基于前向累加鏈的深度分離卷積累加器,深度分離卷積計(jì)算單元的每個(gè)PE輸出1 個(gè)數(shù)據(jù),通過加法樹1 和2 分別匯聚k個(gè)數(shù)累加?;谇跋蚣臃ㄦ湹纳疃确蛛x卷積累加器共需N個(gè)加法器,計(jì)算如式(3)所示。通過前向加速樹的方式避免了卷積累加計(jì)算的負(fù)反饋過程,使得累加成為一個(gè)開環(huán)的設(shè)計(jì),既完成了累加計(jì)算,又能夠達(dá)到線速吞吐的目的。具體的基于前向加法樹的深度分離卷積累加器設(shè)計(jì)如圖8 所示。
圖8 基于前向加法樹的深度分離卷積累加器設(shè)計(jì)
基于乘法矩陣與前向加法樹的卷積計(jì)算陣列包含兩部分,一是乘法矩陣,完成PE個(gè)數(shù)的乘法運(yùn)算;二是加法樹矩陣,將多個(gè)周期的k×k個(gè)數(shù)匯聚成一個(gè)數(shù),完成同一個(gè)深度分離卷積計(jì)算的累加功能?;谇跋蚣臃涞木矸e陣列設(shè)計(jì),打破了浮點(diǎn)數(shù)累加的后向反饋,不依賴于加法器的具體延遲,通過延長流水線的方式達(dá)到了深度分離卷積計(jì)算的線速累加和輸出。具體的基于乘法矩陣以及前向加法鏈的深度分離卷積計(jì)算陣列如圖9 所示。
圖9 基于乘法矩陣與前向加法樹的深度分離卷積計(jì)算陣列
基于流式的卷積網(wǎng)絡(luò)加速器可以配置不同的PE、SIMD參數(shù),設(shè)計(jì)分析模型,可以獲得不同的加速器性能。本節(jié)通過分析模型計(jì)算硬件預(yù)估性能,結(jié)合HLS 高級(jí)綜合資源占用分析,選取性能最高的MobileNet 加速器進(jìn)行分階段設(shè)計(jì),以適應(yīng)VU9P FPGA 芯片的分超級(jí)邏輯區(qū)放置資源。由于MobileNet 模型可以調(diào)節(jié)不同的模型神經(jīng)元通道深度α值來配置不同通道數(shù)的模型網(wǎng)絡(luò),但是對于硬件設(shè)計(jì)單元來講,可以針對不同的神經(jīng)元通道深度α值來設(shè)計(jì)MobileNet 加速器,對應(yīng)的模型計(jì)算復(fù)雜度以及加速器處理吞吐量則隨之有增減。
(1)MobileNet 卷積網(wǎng)絡(luò)加速器配置
針對MobileNet 模型α值為1,結(jié)合硬件加速器各層PE、SIMD配置進(jìn)行設(shè)計(jì)。MobileNet_α_1卷積網(wǎng)絡(luò)加速器配置如表2 所示,處理速度達(dá)到了725.64 FPS,硬件卷積處理資源性能達(dá)到了308.588 GFLOPS,相關(guān)吞吐量數(shù)據(jù)在214 MHz主頻下得到。MobileNet_α_0.75 加速器和MobileNet_α_0.5 加速器的配置與MobileNet_α_1 加速器大致相同,不同的地方在于MobileNet_α_0.75 加速器cnv1_2 層的SIMD參數(shù)設(shè)置為12,MobileNet 各α值的硬件計(jì)算吞吐量大致相同,由于不同的模型神經(jīng)元深度,吞吐量則按比例縮放。
表2 MobileNet_α_1 卷積網(wǎng)絡(luò)加速器配置
(2)基于分析模型的MobileNet 加速器性能分析
對不同神經(jīng)元深度α 值的MobileNet 加速器分析模型進(jìn)行對比分析,具體如表3 所示,相關(guān)吞吐量數(shù)據(jù)在214 MHz 主頻下得到。MobileNet_α_0.5加速器處理速率最高,達(dá)到了1451.28 FPS,性能是MobileNet_α_1 的1 倍,各加速器的硬件計(jì)算吞吐量大致相同。
表3 基于分析模型的MobileNet 加速器性能對比分析
(1)MobileNet 卷積網(wǎng)絡(luò)加速器資源占用分析
基于Vivado_HLS 高級(jí)綜合工具的MobileNet卷積網(wǎng)絡(luò)加速器資源占用分析如表4 所示,其中BRAM 為塊隨機(jī)存儲(chǔ)器,DSP 為數(shù)字信號(hào)處理器,FF為觸發(fā)器,LUT 為查找表,URAM 為超級(jí)隨機(jī)存儲(chǔ)器。從SLR 資源用量占比來看,不同α值的MobileNet 加速器所需資源占用超出單個(gè)SLR 的資源總量,該配置中URAM 資源占用率最高,達(dá)到了SLR 資源用量占比的184%,影像后續(xù)的綜合實(shí)現(xiàn)過程,需要分割成多個(gè)階段進(jìn)行配置。從片上資源用量占比來看,各個(gè)α值的MobileNet 加速器所需各類資源大致相同,雖然各個(gè)加速器的PE、SIMD配置大致相同,但輸入輸出的調(diào)度、加法鏈的長度以及加法樹大小不同,導(dǎo)致了資源占比略有不同,但都未超過片上資源總量的62%,表明基于分析模型的MobileNet 加速器參數(shù)設(shè)置合理,適合在片上進(jìn)行綜合仿真。
表4 MobileNet 卷積網(wǎng)絡(luò)加速器資源占用
基于高級(jí)綜合工具的MobileNet 卷積網(wǎng)絡(luò)加速器資源占用對比分析如圖10 所示。MobileNet_α_1加速器的資源占用最高的為DSP 資源,達(dá)到了片上可用資源占比的62%,使得加速器規(guī)模不能進(jìn)一步擴(kuò)大規(guī)模,同時(shí)也預(yù)留了資源給其他應(yīng)用處理模塊。各類資源的用量均已超出單個(gè)SLR 資源的總量,如不對MobileNet 各α值的加速器按照3 個(gè)SLR 進(jìn)行切分設(shè)計(jì)加速器核,則不能滿足Vivado 綜合的時(shí)序收斂要求。
圖10 MobileNet 卷積網(wǎng)絡(luò)加速器資源占用對比
(2)分階段設(shè)計(jì)加速器資源占用對比分析
由于VU9PFPGA芯片內(nèi)含3個(gè)邏輯分區(qū),整體的MobileNet 加速器占用的資源超過了一個(gè)邏輯分區(qū),同時(shí)該設(shè)計(jì)需要一個(gè)較高的主頻設(shè)計(jì)以期獲得較高的吞吐能力,需要將MobileNet 加速器切割為3個(gè)加速器核,分別進(jìn)行仿真設(shè)計(jì)。具體的MobileNet分階段設(shè)計(jì)加速器資源占用對比如圖11 所示,MobileNet_α_0.5 加速器各項(xiàng)資源占用均值在24%~71%之間,MobileNet_α_0.75 加速器各項(xiàng)資源占用均值在47%~82%之間,MobileNet_α_1 加速器各項(xiàng)資源占用均值在30%~100%之間,均能充分利用片上資源進(jìn)行綜合,同時(shí)又避免對布線資源過度使用造成擁塞,避免了高頻時(shí)鐘加速器設(shè)計(jì)的綜合實(shí)現(xiàn)時(shí)序不收斂的問題。
圖11 分階段設(shè)計(jì)加速器資源占用對比
可分離卷積網(wǎng)絡(luò)加速器使用高級(jí)語言綜合形成處理核以及Vivado 板卡仿真結(jié)合的方式獲得最終可執(zhí)行的比特流,Vivado_HLS 版本為2019.1,Vivado 版本為2019.1,基于Vivado 綜合工具的MobileNet 可分離卷積網(wǎng)絡(luò)加速器資源占用分析如圖12所示。其中,LUTRAM 為基于查找表的隨機(jī)存儲(chǔ)器,IO 為輸入輸出,GT 為千兆位收發(fā)器,BUFG 為一般時(shí)鐘緩存,MMCM 為混合模式時(shí)鐘管理器,PLL為鎖相環(huán)。通過分析,基于Vivado 的資源占用與基于HLS 的資源占用大致相當(dāng),不同α值的MobileNet加速器設(shè)計(jì)在IO、GT、BUFG、MMCM 以及PLL 資源占用情況一致,在LUT、LUTRAM、FF、BRAM、URAM以及DSP 資源占用情況略有差別,符合設(shè)計(jì)的要求。最大的資源占用率為URAM,約為70%,其他的資源占用均低于70%,使得加速器能夠在有限的布線資源約束下時(shí)序收斂。
圖12 加速器綜合實(shí)現(xiàn)后資源占用對比
基于Vivado 仿真工具的MobileNet 卷積網(wǎng)絡(luò)加速器功耗分析如表5 所示,MobileNet_α_1 加速器片上功耗為22.226 W,基于板卡測得處理速度為633.69 FPS;MobileNet_α_0.75 加速器片上功耗為23.144 W,基于板卡測得處理速度為855.12 FPS;MobileNet_α_0.5 加速器片上功耗為20.974 W,基于板卡測得處理速度為1283.90 FPS。不同α值的加速器功耗大致相當(dāng),由于設(shè)計(jì)的片上計(jì)算吞吐量大致相同,不同α值按比例縮減了模型的計(jì)算復(fù)雜度,其在板卡處理速度上按比例增加。
表5 基于Vivado 的MobileNet 卷積網(wǎng)絡(luò)加速器功耗對比
基于開源Google Earth 衛(wèi)星遙感影像數(shù)據(jù),本文采樣了多時(shí)相的0.5 m 分辨率的全球多個(gè)機(jī)場影像數(shù)據(jù),并標(biāo)注了30 類具體的飛機(jī)型號(hào)分類數(shù)據(jù)作為模型訓(xùn)練數(shù)據(jù)。具體的飛機(jī)型號(hào)標(biāo)注樣本數(shù)據(jù)集如圖13 所示,包括30 類常見飛機(jī)型號(hào)類型,共計(jì)7882 張圖片,每個(gè)類別的數(shù)量從76 到820 張不等。本文將該部分?jǐn)?shù)據(jù)集做成2 個(gè)訓(xùn)練數(shù)據(jù)集,并在MobileNet 分類模型上進(jìn)行訓(xùn)練得出相應(yīng)的模型準(zhǔn)確率。從數(shù)據(jù)量的降序排列的前15 類別抽取數(shù)據(jù),構(gòu)成15 類飛機(jī)型號(hào)分類數(shù)據(jù)集,稱為Plane15 數(shù)據(jù)集,共計(jì)6017 張數(shù)據(jù),采用該數(shù)據(jù)集訓(xùn)練出的模型稱為Plane15 模型;全部30 類別數(shù)據(jù)構(gòu)成30 類飛機(jī)型號(hào)分類數(shù)據(jù)集,稱為Plane30 數(shù)據(jù)集,采用該數(shù)據(jù)集訓(xùn)練出的模型稱為Plane30 模型。
圖13 飛機(jī)型號(hào)標(biāo)注樣本數(shù)據(jù)集
訓(xùn)練參數(shù)的設(shè)置包括批處理大小為16,最大迭代次數(shù)為200 000 次,優(yōu)化器選擇Adam 優(yōu)化器,初始學(xué)習(xí)速率為0.0001。訓(xùn)練平臺(tái)采用Titan Xp 進(jìn)行訓(xùn)練,軟件框架采用TensorFlow 1.5.0。訓(xùn)練時(shí)對數(shù)據(jù)進(jìn)行4 倍擴(kuò)充,包括旋轉(zhuǎn)0 °和90 °,飽和度增強(qiáng)0 倍和1 倍,訓(xùn)練、驗(yàn)證、測試數(shù)據(jù)集比例按照8∶1∶1劃分。
分別用Plane15 數(shù)據(jù)集和Plane30 數(shù)據(jù)集訓(xùn)練MobileNet 模型Plane15 模型,訓(xùn)練過程如圖14 所示,經(jīng)過30 000 次迭代后模型基本收斂,在70 000次迭代時(shí)的損失與準(zhǔn)確率曲線基本穩(wěn)定。在20 萬次迭代中,選擇各個(gè)數(shù)據(jù)集不同α值網(wǎng)絡(luò)的最優(yōu)模型進(jìn)行準(zhǔn)確率測試。Plane15_α_1 模型經(jīng)過200 000批次迭代訓(xùn)練后驗(yàn)證準(zhǔn)確率為98.9%,測試Top-1 準(zhǔn)確率為98.9%;Plane15_α_0.75 模型經(jīng)過200 000 批次迭代訓(xùn)練后驗(yàn)證準(zhǔn)確率為98.2%,測試Top-1 準(zhǔn)確率為97.8%;Plane15_α_0.5 模型經(jīng)過200 000 批次迭代訓(xùn)練后驗(yàn)證準(zhǔn)確率為98.3%,測試Top-1 準(zhǔn)確率為98.5%;Plane30_α_1 模型經(jīng)過200 000 批次迭代訓(xùn)練后驗(yàn)證準(zhǔn)確率為96.9%,測試Top-1 準(zhǔn)確率為97.2%;Plane30_α_0.75 模型經(jīng)過200 000 批次迭代訓(xùn)練后驗(yàn)證準(zhǔn)確率為97.2%,測試Top-1 準(zhǔn)確率為97.3%;Plane30_α_0.5 模型經(jīng)過200 000 批次迭代訓(xùn)練后驗(yàn)證準(zhǔn)確率為96.3%,測試Top-1 準(zhǔn)確率為96.1%。Plane30 相關(guān)數(shù)據(jù)集模型在驗(yàn)證集和測試集上的準(zhǔn)確率比Plane15 數(shù)據(jù)集相關(guān)模型稍低一些,但也表現(xiàn)了相當(dāng)高的準(zhǔn)確率,這證明谷歌的MobileNet 模型在其他應(yīng)用上也有很好的學(xué)習(xí)與泛化能力,具體的測試結(jié)果如表6 所示。
圖14 MobileNet 模型訓(xùn)練過程
表6 模型準(zhǔn)確率實(shí)驗(yàn)結(jié)果
經(jīng)過Vivado 綜合工具綜合后,在VCU 1525 板卡對MobileNet 模型進(jìn)行了吞吐量測試,并將其結(jié)果與GPU 模型進(jìn)行性能對比,具體的模型性能對比如表7 所示。GPU 的速度測試從batch 為1、2、4、8、16中挑出最高的性能進(jìn)行對比,batch 為8 時(shí),MobileNet 模型的GPU 性能最高。Plane15 與Plane30模型都是基于MobileNet 的GPU 分類實(shí)例,測試吞吐量大致相當(dāng),功耗較高?;贔PGA 實(shí)現(xiàn)的MobileNet_α_0.5 模型達(dá)到了最高的吞吐量,為1283.90 FPS,是GPU 模型的2.61、2.27 倍,功耗遠(yuǎn)低于GPU 平臺(tái),計(jì)算效能是GPU 的18.66、16.24倍。MobileNet 加速器相對于GPU 的加速比為1.10~2.61 倍,能效比為7.44~18.66 倍,具體的加速比與能效比結(jié)果如圖15 所示。
圖15 MobileNet 加速器與GPU 加速比與能效比
表7 加速器性能對比
將MobileNet_FPS 725 的性能與其他工作對比,如表8 所示,文獻(xiàn)[16,18]的工作采用了基于硬核浮點(diǎn)DSP 的Intel Arria 10 器件,吞吐量較高,除了采用浮點(diǎn)硬核加速的相關(guān)工作,本文算法的運(yùn)算吞吐量達(dá)到了最高值,為236.04 GFLOPS;運(yùn)算效能也達(dá)到了最高值,為10.62 GFLOPS/W,GOPS/DSP 指標(biāo)也取得了較好結(jié)果。實(shí)驗(yàn)結(jié)果表明,基于乘法矩陣與前向加法樹的深度分離卷積計(jì)算陣列設(shè)計(jì)有效地解決了浮點(diǎn)可分離卷積計(jì)算的線速吞吐瓶頸,提高了DSP 資源的利用率,進(jìn)一步提升了加速器的吞吐量與效率。
表8 與其他浮點(diǎn)加速卷積網(wǎng)絡(luò)工作對比
本文面向遙感影像飛機(jī)型號(hào)分類應(yīng)用,采用輕量型網(wǎng)絡(luò)MobileNet 構(gòu)建型號(hào)分類模型,并通過基于FPGA 的數(shù)據(jù)流調(diào)度與浮點(diǎn)模型進(jìn)行加速,突破了浮點(diǎn)加速可分離卷積的線速吞吐問題,達(dá)到了加速模型與原始模型準(zhǔn)確率一致性的要求,使得軟硬件協(xié)同開發(fā)去耦合,軟件算法人員專注于訓(xùn)練模型以及模型認(rèn)知不確定性研究。通過在Xilinx VCU1525開發(fā)板上構(gòu)建浮點(diǎn)可分離卷積圖像分類網(wǎng)絡(luò)加速器,運(yùn)算性能最高為236.04 GFLOPS,型號(hào)分類處理速度為633 FPS,功耗為22.226 W。實(shí)驗(yàn)結(jié)果表明,本文方法計(jì)算速度達(dá)到了Titan X GPU 的1.10~2.61倍,計(jì)算效能是Titan X GPU 的7.44~18.66倍。通過與同類的FPGA 加速浮點(diǎn)卷積網(wǎng)絡(luò)方案對比,本文方法計(jì)算吞吐量以及計(jì)算能效比達(dá)到了最優(yōu)。后續(xù)可就基于輕量型網(wǎng)絡(luò)的多尺度目標(biāo)檢測加速進(jìn)一步開展研究。