• 正文
    • 第一部分 設計概述
    • 第二部分 系統(tǒng)組成及功能說明
    • 第三部分 完成情況及性能參數(shù)
    • 第四部分 總結(jié)
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

基于FPGA的遙感圖像智能處理系統(tǒng)

02/07 16:59
1268
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大俠好,歡迎來到FPGA技術江湖,江湖偌大,相見即是緣分。大俠可以關注FPGA技術江湖,在“闖蕩江湖”、"行俠仗義"欄里獲@取其他感興趣的資源,或者一起煮酒言歡?!爸缶蒲詺g”進入IC技術圈,這里有近50個IC技術公眾號。

第一部分 設計概述

1.1 設計目的

近些年隨著人工智能技術的發(fā)展,深度神經(jīng)網(wǎng)絡算法逐步在星載、機載等遙感數(shù)據(jù)處理中得到廣泛應用,在災害預警及應急、海洋應用、環(huán)境監(jiān)測、國土資源等方面起到越來越重要的作用,如圖 1 所示。但衛(wèi)星、無人機等需要對遙感 圖像進行實時處理的應用場景,都對實現(xiàn)平臺具有嚴格的體積、重量、功耗的限制。而深度神經(jīng)網(wǎng)絡又具有運算復雜度高、存儲帶寬需求大的特點。在高時效性要求與資源功耗等空間環(huán)境的強約束下,通用處理平臺難以支撐在軌人工智能 應用的計算需求。這都使得人工智能技術在上述領域應用面臨著巨大的挑戰(zhàn)。因此亟需開展支持星載、機載人工智能應用的核心硬件與基礎軟件技術研究。

為了解決上述問題,我們提出了基于 FPGA 的深度卷積神經(jīng)網(wǎng)絡的核心硬件系統(tǒng)架構(gòu),并基于此架構(gòu)搭建了遙感圖像智能處理系統(tǒng)。該系統(tǒng)具有高性能、低功耗、延時低等特點,可以為空間人工智能應用提供支撐。

1.2 應用領域

本作品在 FPGA 上實現(xiàn)了改進后的 YOLOv2 目標檢測網(wǎng)絡,能夠完成對遙感場景下飛機、汽車、港口等多尺度、多類型目標的高精度快速檢測及分類,在海洋、水旱等監(jiān)測與應急救災等多領域中都可以發(fā)揮重要作用。此外,本作品相比于與 CPU、GPU 通用處理平臺功耗更低,并且具有同等功率下運行效率高(能效比高)等優(yōu)勢。在星載、機載等資源受限的條件下,作品可以滿足深度神經(jīng)網(wǎng)絡的龐大的計算量與存儲需求,為遙感圖像的在線處理提供了可能。同時,本作品為我們后續(xù)研制相關 ASIC 芯片提供了前端驗證。衛(wèi)星所獲取到的遙感圖像可以通過該芯片完成在軌實時處理,僅將有效信息下發(fā)地面站,從而減少星地鏈路的傳輸壓力。

1.3 主要技術特點

本設計提出了一種用于光學遙感目標智能檢測識別的 FPGA 實現(xiàn)方法。

首先,我們選取 YOLOv2 作為基礎網(wǎng)絡,對該網(wǎng)絡的結(jié)構(gòu)進行了優(yōu)化。改進后的網(wǎng)絡在多尺度、多類型目標的遙感圖像處理任務中表現(xiàn)出更優(yōu)的性能。并引入了基于對稱量化的混合精度運算,降低了網(wǎng)絡中的浮點運算規(guī)模,使該網(wǎng)絡更 適合部署在 FPGA 硬件平臺上。

其次,我們提出了一種卷積神經(jīng)網(wǎng)絡處理引擎,該引擎可以實現(xiàn)卷積神經(jīng)網(wǎng)絡中常見的操作,例如卷積、激活、池化等。該引擎還可以實現(xiàn)網(wǎng)絡中所涉及到 的多種卷積類型。在此基礎上,我們充分挖掘神經(jīng)網(wǎng)絡中卷積運算的并行運算潛力,搭建運算流水線結(jié)構(gòu),提高了處理性能。此外,我們還提出了一種有效的數(shù)據(jù)存儲和訪問策略,該策略可實現(xiàn)低延遲計算和高存儲帶寬利用率。

最后,我們成功在 Xilinx VC709 上部署了改進的 YOLOv2 網(wǎng)絡。與傳統(tǒng)實 現(xiàn)平臺相比,該作品在保證檢測精度的同時,極大地降低了功耗和運算復雜度, 更加適合部署在低功耗應用場景。

1.4 主要創(chuàng)新點

(1) 面向 FPGA 對算法進行優(yōu)化。采用混合精度神經(jīng)網(wǎng)絡處理方法,利用低位寬的整數(shù)運算對部分浮點運算進行近似,從而優(yōu)化硬件結(jié)構(gòu),降低邏輯資源與存儲資源開銷。

(2) 構(gòu)建通用可配置的向量處理引擎。由于改進的 YOLOv2 網(wǎng)絡引入了空洞卷積、轉(zhuǎn)置卷積等多種類型的卷積運算,增大了部署在 FPGA 上的難度。因此我 們凝練多種卷積運算類型的共同處理特點,提出了一種可配置的向量處理引擎。該引擎可以在 FPGA 上實現(xiàn)多類型卷積運算,節(jié)省了資源,且極大提高了設計的靈活性。

(3) 構(gòu)建適用于神經(jīng)網(wǎng)絡的并行處理策略。本設計挖掘神經(jīng)網(wǎng)絡中卷積運算的并行運算潛力,合理利用 FPGA 上的運算資源,搭建運算流水線結(jié)構(gòu),實現(xiàn)卷積神經(jīng)網(wǎng)絡前向推斷的高效處理。提高了處理性能。

(4) 搭建了基于 FPGA 的低功耗遙感圖像處理系統(tǒng)。與傳統(tǒng)的卷積神經(jīng)網(wǎng)絡的實現(xiàn)平臺 GPU 相比,該作品的功耗要低一個數(shù)量級。同時,在 DOTA 遙感數(shù)據(jù)集上的測試表明,本作品的檢測性能與 GPU 一致。因此本作品在功耗和處理速度之間取得折衷,在功耗受限的特定應用場景中部署更具優(yōu)勢。

第二部分 系統(tǒng)組成及功能說明

2.1 算法介紹

2.1.1 改進的 YOLOv2 網(wǎng)絡結(jié)構(gòu)

近年來,多種基于卷積神經(jīng)網(wǎng)絡的方法被提出,例如 R-CNN、SSD和 YOLO 等,都被廣泛用于深度學習領域的目標檢測。與其他方法相比,YOLO 確保了準確性和速度之間的極佳折衷。在本作品中,我們選用了一種改進的 YOLOv2 網(wǎng)絡用于遙感物體檢測。該網(wǎng)絡采用了擴展卷積和轉(zhuǎn)置卷積,從而提高了復雜光學遙感場景中 多尺度物體的性能。該網(wǎng)絡在模型復雜度和對象檢測性能之間進行了權衡。其網(wǎng)絡 結(jié)構(gòu)如圖 2 所示,其中,基礎工作包含多個計算層,它們相互連接在一起。主要層 是卷積層,池化層,批量歸一化層和激活函數(shù)。

2.1.2 面向 FPGA 的量化策略

目前,多數(shù)的卷積神經(jīng)網(wǎng)絡訓練后的網(wǎng)絡模型為浮點類型。若采用該方式進行前向推斷,所有運算操作均為浮點類型,會給 FPGA 實現(xiàn)帶來巨大的存儲和計算壓力。

針對上述問題,我們采用了基于量化算法的深度神經(jīng)網(wǎng)絡混合精度計算方法, 利用低位寬的數(shù)據(jù)類型進行數(shù)據(jù)表達與計算,從而有效優(yōu)化硬件結(jié)構(gòu)設計。量化算法可看作對卷積神經(jīng)網(wǎng)絡模型進行近似線性變換,在不改變卷積神經(jīng)網(wǎng)絡的運算類型與運算結(jié)構(gòu)的前提下,將全浮點的網(wǎng)絡參數(shù)全部轉(zhuǎn)化為適合 FPGA 實現(xiàn)的整數(shù)型, 以此降低硬件加速器的復雜度;同時保持一定的浮點精度計算,支撐遙感圖像智能處理的海量計算需求。量化過程的示意圖如圖 3 所示。但是上述方法在訓練階段難以直接實現(xiàn),這是由于整型表達導致了網(wǎng)絡不可導。此外,混合精度計算帶來一定的誤差,影響網(wǎng)絡處理性能。針對上述問題,我們采用了模擬硬件處理的量化神經(jīng)網(wǎng)絡訓練方法,有效保證低位寬數(shù)據(jù)表達網(wǎng)絡的正常訓練,采用為了有效抑制量化推斷帶來的誤差。在前向推斷階段,應用上述方法設計混合精度處理引擎,相比于浮點計算引擎,能夠大幅降低計算引擎所需資源。在有限的邏輯資源條件下,所能集成的引擎集成度大幅調(diào)高,系統(tǒng)處理能力及效率也隨之提高。

2.1.3 卷積神經(jīng)網(wǎng)絡基本功能層

1、卷積層

卷積層是卷積神經(jīng)網(wǎng)絡的核心處理,一個二維卷積的操作如圖 4 所示。一個 卷積層的內(nèi)部包含多個卷積核,每個卷積核的所有元素都對應一個參數(shù),每個卷 積核對應一個偏置。我們用 y 來表示圖像卷積后的輸出,用 i 和 j 來表示輸出圖 像的行和列,用 x 表示輸入圖像,用 w 表示卷積核的參數(shù),用m和n來表示卷 積核的行和列,M 和 N 表示卷積核的長和寬,則卷積的過程遵循公式 1:

卷積示意圖如圖 4 所示:

卷積運算是一種具有多層次循環(huán)的乘累加運算。在神經(jīng)網(wǎng)絡中卷積運算涉及的數(shù)據(jù)量很大,F(xiàn)PGA 的運算單元有限,往往不能并行處理全部的輸入數(shù)據(jù);同時 FPGA 片上存儲資源也是有限的,卷積運算的大量原始圖像、參數(shù)與中間結(jié)果也不能完全存在片上,因此需要將運算數(shù)據(jù)分塊處理。數(shù)據(jù)切分往往涉及多個維 度,并且當原始數(shù)據(jù)被分塊時,處理時會產(chǎn)生多個中間結(jié)果,中間結(jié)果可通過疊加得到最終結(jié)果。

2、批次規(guī)范化層

目前多數(shù)卷積神經(jīng)網(wǎng)絡會在卷積層后插入批次規(guī)范化層,其的定義如公式 2 所示:

其中,μ 和 σ 表示輸入特征圖的均值和標準差估計值。γ 和 β 是批歸一化層的學習參數(shù)。從公式上看批次規(guī)范化層可分為兩部分,第一部分是輸入的規(guī)范化;第二部分是在此基礎上進行線性變換。從運算類型上來看,批次規(guī)范化層屬于像素級乘加運算。

3、激活函數(shù)

卷積神經(jīng)網(wǎng)絡中每個神經(jīng)元節(jié)點都是接收上一層網(wǎng)絡的輸出值作為本層網(wǎng)絡的輸入值,并將本層網(wǎng)絡的操作結(jié)果傳遞給下一層。在多層的卷積神經(jīng)網(wǎng)絡之中,上一層的輸出值與下一層的輸入值之間會插入激活函數(shù),如圖 5 所示。

常用的激活函數(shù) ReLU 函數(shù)如公式 3 所示,圖 6 為 ReLU 激活函數(shù)示意圖。

ReLU 函數(shù)的本質(zhì)是與 0 做比較,大于 0 的數(shù)字保持不變,小于零的數(shù)值激活為 0,計算過程簡單易于實現(xiàn)。但是 ReLU 函數(shù)也存在一定的問題,對于負數(shù) 輸入可能會導致梯度彌散,因此也有網(wǎng)絡采用 LeakyReLU 作為激活或函數(shù)。LeakyReLU 是原始 ReLU 的一個變體,如公式 4 所示:

4、池化層

池化操作分為最大值池化與均值池化。在卷積神經(jīng)網(wǎng)絡中,卷積層后面往往跟著一個池化層。在卷積層提取完特征之后,會有一個池化層來對輸入特征圖像的信息進行過濾,并且進行特征選擇。

池化計算層的使用是模仿人類大腦提取信息時的降維和抽象的過程。它主要有三個作用:

1)池化采樣使網(wǎng)絡模型降低了對特征位置的敏感程度,容許特征學習過程中一些特征位置細微改變的存在,讓網(wǎng)絡在處理圖像扭曲方面的能力得到增強;

2)池化層又稱降采樣層,它降低了特征映射圖的維度,同時減小了下一層 計算輸入的數(shù)據(jù)規(guī)模,進而減小計算量和參數(shù)個數(shù),這對于硬件實現(xiàn)是非常有利的;

3)池化層在一定程度上能夠降低數(shù)據(jù)過擬合的風險。池化操作主要是將單個點的結(jié)果替換為某個區(qū)域的特征統(tǒng)計量。均值池化在相鄰的 2×2 的區(qū)域內(nèi),將四個數(shù)求和再求平均值,得到輸出結(jié)果,用四個像素點 的平均值來代替這一區(qū)域的像素值;最大值池在相鄰 2×2 區(qū)域內(nèi)的最大值來代替這一區(qū)域的像素值,如圖 7 所示。

2.2 整體系統(tǒng)介紹

神經(jīng)網(wǎng)絡算法處理過程均具備可并行度高、可復用度高、處理數(shù)據(jù)量大、處理流程復雜的特點,可歸類為數(shù)據(jù)流驅(qū)動的運算密集型處理過程。為了滿足以上處理特點,需要設計大規(guī)模的處理陣列進行并行處理,為滿足這一條件本方案采用 Xilinx VC709 板卡作為實現(xiàn)平臺。Xilinx VC709 板卡上核心 FPGA 為 XC7V690T,配備獨立雙通道 DDR3(512bit@200MHz)?;谠撈脚_,本方案設計了神經(jīng)網(wǎng)絡硬件加速系統(tǒng)架構(gòu),如圖 8 所示。

我們所提出的神經(jīng)網(wǎng)絡硬件加速系統(tǒng)架構(gòu)主要包括 3 個子系統(tǒng):

1、處理引擎子系統(tǒng)

該子系統(tǒng)負責神經(jīng)網(wǎng)絡具體算法的實施,主要完成計算處理的任務。神經(jīng)網(wǎng) 絡處理引擎陣列由 32 個處理引擎組成,每個處理引擎由 32 個乘累加器構(gòu)成,進行高并行向量乘加運算。

除引擎陣列外,該子系統(tǒng)配有相應的輸入與輸出控制,輸入控制負責從輸入存儲子系統(tǒng)獲取原始數(shù)據(jù);輸出控制負責實現(xiàn)中間結(jié)果與最終結(jié)果的存儲路由。處理引擎子系統(tǒng)的所有控制需要與主狀態(tài)機進行交互。

2、存儲子系統(tǒng)

存儲子系統(tǒng)實現(xiàn)對內(nèi)外部的存儲模塊進行管理,可分為存儲器單元以及存儲路由控制。

存儲器單元:用于實現(xiàn)數(shù)據(jù)緩沖,分為外部存儲器和內(nèi)部存儲器。外部存儲器采用 2 片容量大、順序訪問速度快的 DDR 芯片,用于保存原始數(shù)據(jù)與模型參數(shù),數(shù)據(jù)緩沖周期長的數(shù)據(jù)保存在其中,內(nèi)部存儲器采用訪問速度快、位寬大、 功耗低、容量小、可隨機訪問的 BRAM,用于緩存部分數(shù)據(jù)及數(shù)據(jù)運算中間結(jié)果,數(shù)據(jù)緩沖周期短的數(shù)據(jù)保存在其中。為保證不同圖像處理引擎訪問存儲器單元時不發(fā)生數(shù)據(jù)堵塞,將存儲空間劃分成不同容量的獨立子存儲單元。內(nèi)部緩存包括:輸入特征圖緩沖區(qū)、參數(shù)緩沖區(qū)、輸出特征圖緩沖區(qū)以及中間結(jié)果緩沖區(qū)。

存儲路由控制:每個子存儲單元通過輸入/輸出接口與存儲仲裁單元相連,處理引擎也通過數(shù)據(jù)訪問接口與存儲仲裁單元相連,可實現(xiàn)多通道引擎和存儲器之間的訪問映射。內(nèi)部存儲器與處理引擎陣列子系統(tǒng)間的內(nèi)存訪問映射由主狀態(tài)進行配置。

3、指令處理子系統(tǒng)

指令處理子系統(tǒng)又指令隊列、指令解碼器、主狀態(tài)機構(gòu)成。指令隊列從外部接收指令需要處理的指令并儲存,所有指令順序排列,先入先出。指令解碼器負責從指令隊列中取出指令,進行指令解析并傳輸給主狀態(tài)機。主狀態(tài)機將存儲訪問指令傳輸至存儲子系統(tǒng),用于配置該條指令的數(shù)據(jù)讀/寫通路;將處理指令傳輸至處理引擎子系統(tǒng),用于選擇處理算法引擎與配置引擎參數(shù)。主狀態(tài)在算法處理過程中與存儲子系統(tǒng)和處理引擎子系統(tǒng)均進行交互,以實現(xiàn)流程控制。當指令隊列中所有指令全部處理完成后,從外部繼續(xù)接受下一批處理指令,直至指令全部處理完成。

2.3 各模塊介紹

2.3.1 指令處理子系統(tǒng)

接收解析后的指令,對各個模塊進行配置。主狀態(tài)機將存儲訪問指令傳輸至存儲子系統(tǒng),用于配置該條指令的數(shù)據(jù)讀/寫通路;將處理指令傳輸至處理引擎子系統(tǒng),用于選擇處理算法引擎與配置引擎參數(shù)。主狀態(tài)在算法處理過程中與存儲子系統(tǒng)和處理引擎子系統(tǒng)均進行交互,以實現(xiàn)流程控制。

如圖 9 所示,主狀態(tài)機由狀態(tài)切換模塊和狀態(tài)輸出模塊組成。用于配置信息和模塊間的握手。

2.3.2 處理引擎子系統(tǒng)

該模塊包含三個功能,分別是卷積運算、批量標準化(BN)融合層運算、激活 融合層運算。本設計方案中的運算模塊最多可對 32 個輸入通道的數(shù)據(jù)進行乘累 加運算,并將 32 個輸出通道的結(jié)果并行輸出。

為了令我們的處理引擎子系統(tǒng)可以適用于多種卷積類型在 FPGA 上的實現(xiàn), 我們對卷積運算進行了分析和改進。以常規(guī)卷積層為例,以單張圖計算 (BatchSize=1),其輸入特張圖張量為三維張量 Tensor(Nif, NH, NW),權重參數(shù) 為四維度張量 Tensor(Nof, Nif, Nkh, Nkw),輸出特征圖為三維張量 Tensor(Nof, NH, NW)。其中 Nif、NH、NW為分別表示輸入特征圖張量的輸入通道數(shù)、高、寬;Nkh、 Nkw為卷積核的高、寬;Nof為輸出特征圖張量的輸出通道數(shù)其計算公式

卷積運算可看為兩部分,上三層循環(huán)為輸出結(jié)果索引不參與疊加過程,下三 層循環(huán)為卷積計算核心部分。下三層循環(huán)計算可看作圖 12 中綠色立方體與紫色立方體的對應點乘法后再求和。目前已有的工程中我們按照上述循環(huán)展開方式進行設計,首先計算二維卷積核內(nèi)部計算,而后通過循環(huán)疊加將所有輸入通道進行 組合。但是這種方案在支持多種卷積運算時需要進行數(shù)據(jù)讀取重排序,在硬件實現(xiàn)時數(shù)據(jù)流控制較難。此外,卷積運算是一種具有多層次循環(huán)的乘累加運算。在神經(jīng)網(wǎng)絡中卷積運算涉及的數(shù)據(jù)量很大,F(xiàn)PGA 的運算單元有限,往往不能并行處理全部的輸入數(shù)據(jù);同時 FPGA 片上存儲資源也是有限的,卷積運算的大量原始圖像、參數(shù)與中間結(jié)果也不能完全存在片上,因此需要將運算數(shù)據(jù)分塊處理。數(shù)據(jù)切分往往涉及多個維度,并且當原始數(shù)據(jù)被分塊時,處理時會產(chǎn)生多個中間結(jié)果,中間結(jié)果可通過疊加得到最終結(jié)果。

針對上述問題,本方案采用了循環(huán)變換。對圖 10 中公式進行循環(huán)變換,將 Loop{1, 2, 3, 4}的順序變換為 Loop{2, 3, 1, 4},循環(huán)變換后的卷積運算公式如圖 11 所示。

從上述公式可以看出,經(jīng)過循環(huán)變換后的卷積計算在運算類型和運算數(shù)量上沒有任何變化,只改變了循環(huán)疊加順序。根據(jù)上述公式進行卷積運算可以分解為兩個步驟:

1、特征圖均按照輸入通道維度進行數(shù)據(jù)采樣,采樣的數(shù)據(jù)構(gòu)成特征圖向量, 其維度為(1, Nif,)。卷積核采用按輸出通道進行同位置獨立采樣(第一次運算時為所有輸出通道卷積核第一行第一個點的所有輸入通道數(shù)據(jù)),采樣后的數(shù)據(jù)構(gòu)成二維矩陣,其維度為(Nif, Nof)。采用后的特征圖向量與卷積核矩陣進行向量乘矩陣運算,即可得到特征圖結(jié)果向量,其維度為(1, Nof),這些結(jié)果對應輸出特征圖第一行第一個點的所有通道數(shù)據(jù)。該過程如圖 12 所示。

2、向右向下(向右至行尾后,從第二行第一個點開始)依次取特征圖向量, 此過程可以看作是步驟 1 中采樣位置在特征圖張量上的向右向下依次滑動。保持步驟 1 中的卷積核矩陣不變,重復步驟 1 即可獲得所有輸出特征圖中間結(jié)果,其 過程如圖 12 所示。

3、向右向下依次卷積核向量構(gòu)成卷積核矩陣,重復步驟 1、2,獲得第二組中間結(jié)果,這些中間結(jié)果與步驟 2 中所有結(jié)果進行對應位置相加,最終獲得所有輸出結(jié)果。應用此方法能夠突破原有方案中卷積核尺寸限制以及卷積類型的限制,通過循環(huán)疊加次數(shù)來實現(xiàn)不同尺寸卷積運算。

卷積運算模塊主要由卷積輸入控制模塊、卷積輸出控制模塊、卷積計算陣列模塊和卷積狀態(tài)控制、BN 輸入控制模塊、BN 融合模塊、激活融合模塊組成。圖 13 為卷積運算模塊的結(jié)構(gòu)框圖。

其中卷積計算陣列模塊包含 32 個計算單元(PE),每一個 PE 能一次完成 32 個數(shù)的乘累加運算。整個系統(tǒng)設計中包含 32 個并行排列的 PE。每個 PE 內(nèi)部由 32 個乘累加器組成,接收輸入特征圖、卷積核及中間結(jié)果。如圖 14 所示,每 個 PE 內(nèi)部的 32 個 MAC 相互級聯(lián),主要針對常規(guī)的卷積運算。

BN 運算模塊中包含 32 個 BN 處理單元,可以同時計算 32 個點的批量標準化及反量化運算,分別對應 32 個計算通道。每個計算單元中主要執(zhí)行 3 步運算。定點轉(zhuǎn)浮點、浮點乘法、浮點加法。如圖 15 所示:

激活運算模塊中包含 32 個激活處理單元,可以同時計算 32 個點的激活及量化運算。本層的兩個參數(shù)存儲在片上的兩塊 ROM 中,在換層時會提前被讀出, 通過判斷當前點的正負來參與運算。此外,本模塊還會進行一個定點轉(zhuǎn)浮點的運算。從而得到了 8bit 定點的輸出結(jié)果。如圖 16 所示:

2.3.3 輸入特征圖緩存模塊

輸入特征圖緩存模塊的功能是暫存來自 DDR 控制器發(fā)送的輸入特征圖數(shù)據(jù),并對運算模塊發(fā)出的讀請求進行響應,按照所需的數(shù)據(jù)順序進行讀出。

輸入特征圖緩存模塊由寫控制、讀控制、請求處理控制、片上存儲體組成, 如圖 17 所示。其中,存儲體是一塊數(shù)據(jù)位寬為 256 的 BRAM 構(gòu)成。大小為 1MB

2.3.4 卷積核緩沖模塊

卷積核緩存模塊的功能是對卷積核數(shù)據(jù)進行緩存,并處理來著卷積運算模塊的讀請求,將數(shù)據(jù)按特定的順序反復讀出。該緩存模塊能夠同時存儲 32 個輸出通道的卷積核。

卷積核緩存模塊由寫控制、讀控制、請求處理控制、片上存儲體組成,如圖 18 所示。其中,存儲體是 32 塊數(shù)據(jù)位寬為 256 的 BRAM 構(gòu)成,大小為 1MB。

2.3.5 中間緩存模塊

中間緩存模塊的功能是對卷積運算模塊輸出的中間結(jié)果進行緩沖,當卷積運算完成時,為卷積后續(xù)的 BN 模塊提供數(shù)據(jù)。

如圖 19 所示,中間緩存模塊由讀控制、寫控制以及 FIFO 存儲陣列組成,其中 FIFOs 由 32 個端口位寬位 32 的 FIFO 組成??偞笮?10243232b。

2.3.6 輸出緩存模塊

輸出緩存模塊用于存儲經(jīng)過 BN,融合等操作的計算結(jié)果。當存儲的數(shù)據(jù)達到預設值時,向 DDR 發(fā)送數(shù)據(jù),該緩沖區(qū)大小為 1MB。

輸出緩存模塊由參數(shù)配置、讀控制、寫控制、交互控制和存儲體組成,如圖 20 所示。

第三部分 完成情況及性能參數(shù)

3.1 測試平臺搭建

本作品在 Xilinx VC709 板卡上實現(xiàn)了改進版 YOLOv2 目標檢測算法。硬件 部分已完成了指令處理子系統(tǒng)、處理引擎子系統(tǒng)以及存儲子系統(tǒng)。其中,處理引擎子系統(tǒng)包含了普通、轉(zhuǎn)置、空洞卷積,以及池化、激活等操作,滿足本設計所采用的改進版 YOLOv2 的運算需求。

本作品的具體測試平臺包括上位機演示系統(tǒng)、Xilinx Zedboard 板卡以及 Xilinx VC709 板卡。其中,Zedboard 板卡和 VC709 板卡通過 FMC 連接器交互, 如圖 21 所示。本作品具體運行流程如下:

1、上位機演示系統(tǒng)負責前端界面的顯示,并完成待檢測圖片的加載、回傳結(jié)果的后處理及展示。待檢測圖片和回傳結(jié)果經(jīng)由網(wǎng)線傳輸。

2、Zedboard 板卡負責 Linux 操作系統(tǒng)及驅(qū)動的加載,并接收上位機傳送的待測圖片,并將待測圖片、YOLOv2 配置指令和相關參數(shù)經(jīng)由 FMC 連接器送與 VC709 板卡處理,檢測結(jié)果通過 FMC 連接器返回,并發(fā)往上位機。

3、VC709 板卡完成了指令處理子系統(tǒng)、處理引擎子系統(tǒng)以及存儲子系統(tǒng)的實現(xiàn),該板卡根據(jù)卷積神經(jīng)網(wǎng)絡的配置指令和參數(shù),對待測圖像進行檢測,并通 過 FMC 連接器將檢測結(jié)果返回給 Zedboard。

3.2 軟硬件環(huán)境介紹

1、FPGA 板卡:Xilinx Zedboard 和 Xilinx VC709

2、數(shù)據(jù)傳輸:雙絞線、FMC 連接器

3、設計軟件:Xilinx Vivado 2019.2

4、用于對網(wǎng)絡結(jié)果進行后處理及界面顯示的上位機

3.3 性能指標

1、準確性:利用 GPU 平臺改進的 YOLOv2 網(wǎng)絡在 DOTA 遙感數(shù)據(jù)集上測試,mAP 指標可以達到 69.0。我們在 FPGA 上所實現(xiàn)的該深度卷積神經(jīng)網(wǎng)絡的測試結(jié)果與 GPU 平臺運行結(jié)果一致,保證了作品的準確性。

2、運行效率:基于改進的 YOLOv2 網(wǎng)絡,對單張尺寸為 1024x1024 的圖像進行多目標檢測的處理時間為 0.9248 秒。若加上數(shù)據(jù)傳輸、結(jié)果后處理以及圖像顯示等過程,單張圖像的處理及展示時間約為 1.5 秒。(在視頻展示時,多張 圖測試過程中,由于作品的處理速度快于每張圖所展示的時長,所以可以看到原圖和檢測結(jié)果幾乎同時顯示。)

3、功耗:本作品在 200M 的時鐘頻率下,總功耗為 16W,單位功耗處理能力為 25GOPs/W。與 GPU 平臺相比,具有更低的功耗和更優(yōu)的能耗比。因此本作品更適合部署在對實現(xiàn)平臺的體積、重量、功耗有限制的應用環(huán)境中。

3.4 FPGA 資源利用率

本作品 FPGA 資源占用情況如表 1 所示,其中 DSP 占用了 65.78%,BRAM 占用了 54.01%,資源使用情況合理。該硬件平臺能夠有效部署 YOLOv2 目標檢測網(wǎng)絡,實現(xiàn)多尺度、多類型目標的高精度快速檢測及分類。

3.5 結(jié)果演示

本作品基于改進的 YOLOv2 網(wǎng)絡,在實現(xiàn)飛機、車輛等多目標的檢測的同時, 可實現(xiàn)多檢測目標的分類,其上位機界面顯示結(jié)果如圖 23 所示。

第四部分 總結(jié)

可擴展之處

(1)目前卷積神經(jīng)網(wǎng)絡的部署仍采用人工方式生成對應的指令代碼,未來可結(jié)合軟件編譯工具,是指令代碼生成自動化,從而達到多種網(wǎng)絡的動態(tài)部署和資源的動態(tài)分配。

(2)目前該作品暫不支持深度可分離卷積、分組卷積和 Shortcut 等運算方式,未來可在處理引擎子系統(tǒng)上進行擴展,進一步提高該作品的通用性。

(3)目前我們在 FPGA 上實現(xiàn)了深度卷積神經(jīng)網(wǎng)絡。但 FPGA 作為一種通用處理器,其處理性能和功耗控制都存在瓶頸。因此后續(xù)我們會以本作品為基礎, 設計與開發(fā)用于遙感圖像在軌實時處理的 ASIC 芯片。

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

任何技術的學習就好比一個江湖,對于每一位俠客都需要不斷的歷練,從初入江湖的小白到歸隱山林的隱世高人,需要不斷的自我感悟自己修煉,讓我們一起仗劍闖FPGA乃至更大的江湖。