胡晶晶
(東北大學計算機科學與工程學院,沈陽 110819)
基于嵌入式端設備的實時目標檢測和識別系統是計算機視覺方向研究的熱點和基礎性工作[1],同時目標檢測也被廣泛應用于醫療、農業、監控等各種領域。隨著深度學習的發展,基于深度學習的目標檢測方法被大量研究,有較多算法被相繼提出,比如R-CNN(region-based convolutional neural network)模型、Fast R-CNN模型、Faster R-CNN模型、YOLO模型、SSD(single shot multi?box detector)模型等[2-5]。為了應用到特定化的場景中,對這些算法的改進和加速方案也是層出不窮,目標檢測更趨向于精細化和背景復雜化,比如監控、交通人臉識別和手勢識別以及輕小異物等目標較小分辨率低的場景,對準確度和實時性要求高,研究者們主要通過對這些算法進行改進以提高實時性或準確性,或者通過對特定的算法進行硬件設計而實現良好的算法性能。
由于CNN需要較大的計算量、并行操作和存儲空間。而FPGA芯片能夠以并行化的方式高速處理數據,能夠以流水線的思想設計并有著充足的邏輯資源和較高的運行速度[6],且具有低功耗的特點,FPGA往往可以擁有超過GPU的處理速度,同時兼顧能效比,能夠滿足對CNN的硬件加速條件,因此可用于實現目標檢測的實時性要求。文獻[7]提出了面向小目標的多尺度Faster-RCNN算法,提升了以低層特征為主要檢測依據的小目標檢測任務的精度,比原始的Faster-RCNN提高約5%,但是在實時性上略有損失;文獻[8]實現了基于Faster-RCNN的快速目標檢測,將最后的目標識別階段的全連接層替換為卷積層實現算法素的提升,損失了部分精確度。Faster-RCNN算法在檢測準確度上性能良好,在檢測實時性上有待提高,因此文章考慮到實際開發需求,在保證精確度的同時,對Faster-RCNN算法進行加速用于嵌入端設備進行目標檢測。
文章在上述工作的基礎上對Faster-RCNN算法進行改進,在實時性和準確性之間進行權衡。為提高運算效率并充分利用FPGA的并行計算和流水線技術的優勢,將Faster-RCNN算法最后的目標識別階段的全連接層改為卷積層,實現卷積層的硬件加速,同時在是識別小目標的精度方面采用多尺度的方法,使用標準的區域建議網絡(RPN)生成建議區域,并結合較淺層卷積特征圖(即conv3和conv4)的特征圖用于ROI池。該方法識別準確率高、速度快、模型的魯棒性高,可以提供高效準確的中小目標檢測算法。為此改進的Faster-RCNN設計相應的FPGA加速電路,實現精度和準確度均有所提升的端設備目標檢測。
Faster-RCNN神經網絡利用“區域建議算法”生成位置。但是,傳統區域方案算法的計算成本仍然很高,使得其運行時間慢,對實時應用不切實際。一般來說,Faster-RCNN由兩個主要部分組成:生成建議區域的RPN和RCNN網絡,對區域進行分類[4]。區域建議網絡RPN在2D圖像中提取可能包含目標的一系列感興趣區域(ROI)。RPN與目標檢測網絡共享一些卷積層。最終通過末尾的幾個卷積層和全連接層進行最終預測位置框的回歸和框內目標的分類。RPN在Faster-RCNN通道中起著重要作用,因為它對分類器[4]的準確性產生重大影響。Faster-RCNN網絡結果如圖1所示。

圖1 Faster-RCNN網絡結果
Faster-RCNN在PASCAL VOC數據集上實現了最先進的性能。它們可以探測人、動物或車輛等物體。這些對象通常占據圖像的大部分[9]。然而,在實際的問題中,比如監控拍攝和行人識別手勢識別等,檢測的物體通常是較小的和低分辨率的物體。Faster-RCNN中的檢測網絡很難檢測到分辨率低的小目標。因為ROI池層僅從一個深層特征圖映射構建特征,感受野太大,VGG-16模型從“CONV5”層進行ROI池,經過該層后,矩陣的長和寬均為原來的1/16,如果目標大小小于16個像素,那么即使建議的區域是正確的,投影的ROI池區域也小于“CONV5”層中的1個像素。因此,檢測器將很難根據僅來自一個像素的信息來預測對象類別和分類框位置。當然不考慮較為極端的情況,對于中小目標的檢測應該做到利用多層信息實現更精準的識別定位。
因此,在Faster-RCNN網絡中,采用特征金字塔FPN[10]的思想,結合全局和局部特征(即多尺度)來增強全局上下文和局部信息,利用不同分辨率特征圖做融合來提升特征的豐富度和信息含量來檢測不同大小的目標,可以幫助魯棒地檢測我們感興趣的目標。為了增強網絡的能力,結合了來自較淺卷積特征圖的特征圖,即conv3和conv4,用于ROI池化,使得網絡可以檢測到ROI區域中包含較高比例信息的較低級別特征。同時對于目標分類時的全連接層用卷積層進行替換,增加前向傳播的速度,在確保精度的同時可實現卷積層的并行計算,提升算法整體的速度,并在整體設計上采用流水線技術實現資源最大利用。改進的模型圖如圖2所示。

圖2 改進的Faster-RCNN模型
在模型的前兩個卷積層中,每個卷積層會連接一個ReLU層、一個LRN層和一個Max-pooling層。在接下來的三個卷積層中,在每個卷積層之后只連接一個ReLU層,并且它們的輸出也被用作三個對應的ROI池化層和歸一化層的輸入,如圖2所示。將這些做L2正則化輸出級聯并收縮,以用作下最后改進的一個卷積層的輸入。模型的最后,連接一個用于對象分類的softmax層和一個負責邊界框細化的回歸函數。
對于目標檢測算法,最耗時的部分就是其中的卷積神經網絡的卷積運算,尤其是在特征提取階段的3×3卷積操作占了95%以上的計算量[11]。因此硬件加速部分對Faster-RCNN中的CNN部分進行加速。同時將Faster-RCNN算法最后的目標識別的卷積層在FPGA的PE單元上做處理,提高算法速度。
FPGA是可編程芯片,因此FPGA的設計方法包括硬件設計和軟件設計兩部分。硬件包括FPGA芯片電路、存儲器、輸入輸出接口電路以及其他設備;軟件即是相應的HDL程序以及最新的基于高層次綜合的程序方法,底層語言采用Verilog硬件描述語言,高層次語言采用C語言進行開發,開發工具為Xilinx公司推出的Vivado HLS,并實現相應電路的轉換,降低開發難度。
硬件FPGA選擇ZYNQ UltraScale+MPSoC開發板,該系列是Xilnx公司推出的首款全可編程異構多處理SoC,集成了處理系統(PS)和可編程邏輯(PL)。硬件參數如表1所示。

表1 Zynq UItraScale+MPSoc硬件參數
在進行算法的軟硬件實現方案時[12],由于圖像預處理和識別結果輸出部分與應用的前后端聯系緊密,且對計算能力要求低,故可在PC端實現;而目標檢測前向計算和識別操作需要計算量大且并行度高,任務內的數據吞吐量相對較高[13],因此該部分通過硬件加速,以充分發揮FPGA的計算優勢。系統整體設計如圖3所示。

圖3 硬件整體設計
在圖3中,目標檢測總體架構由PC和FPGA兩部分組成,PC端承擔神經網絡訓練和調試任務,FPGA承擔神經網絡的加速任務。其中,外部存儲器DDR用于存儲目標圖像數據與權值,PS與PL協同工作,兩者通過AXI_HP口進行數據通信,從而實現各個模塊數據與權值的傳輸。DDR控制器作為數據圖像處理的核心,利用AXI4_memory_map獲取數據圖像信息,經由AXI4_streaming對信息流格式加以處理,以此實現信息統一管理。經過處理后的數據轉入加速器完成片上緩存操作,在加速器作用下,緩存區信息得以快速處理,而后通過AXI4總線返回DDR模塊[14]。
CNN加速器的基本模型是處理單元(process element,PE)從輸入緩沖寄存器獲取輸入特征,從保存權重值的緩沖寄存器獲取權重值,然后從輸出緩沖區獲取中間結果與本次計算結果累加寫回輸出緩沖區。結合優化的Faster-RCNN模型和FPGA上的有限資源,設計CNN的硬件加速器部分。由于模型中的參數量大,且中間的特征圖數量也很多,網絡所有的權值參數和特征圖存儲在片外存儲器。因此,在數據傳輸中需要設計片上緩存區(FIFO)。計算單元也從緩沖區讀取,雖然會減少片上存儲資源地占用,但是也會加大帶寬和計算時延。因此,文章設計選擇將輸出特征圖的中間結果存儲在片上BRAM中,并且對于3×3卷積先進行通道循環,計算完成部分卷積核,再繼續計算下一部分的卷積核。
文章優化的Faster-RCNN模型主要包括3×3卷積層、1×1卷積層、最大池化層。在3×3卷積層后直接進行池化計算,輸出特征圖。在3×3卷積計算出輸出特征圖的部分通道后,將輸出結果緩存在片上BRAM,與1×1卷積層卷積核的對應通道計算,在1×1卷積層計算完成后再將輸出特征圖緩存在片外存儲器,實現各通道并行計算。偏置功能和激活功能在卷積層內部實現。因此將計算分塊,并采用流水結構方式實現不同模塊并行計算,如圖4所示。

圖4 并行模式計算數據流向
對5層conv網絡均采用結構內并行和網絡間并行的方式設置多個PE單元并行處理,整體加速結構如圖5所示。

圖5 CNN加速結構設計
在PC端的模型訓練完成后,將權重值、偏置值和測試圖像通過PCIe接口發送到FPGA端;數據分別存儲到DDR4中,DDR4控制器向IP核輸入數據,啟動加速,IP核則依據流水線的方式計算每層conv網絡的中間結果,保存至FIFO緩存單元,CNN加速IP核中所有層運算結束后輸出最終識別結果,PL端將該結果以直接內存讀取(direct memory access,DMA)方式發送至PS端的DDR4中完成整個神經網絡的硬件加速。
本實驗的數據集采用分辨率較小的Small Ob?ject Dataset[15],數據集中包含了小目標的測試數據集:合成細胞、行人、魚、海鷗、蜜蜂以及蒼蠅。圖像中的目標只有10~30像素高(圖6)。選取其中的honeybee數據集進行測試。

圖6 實踐數據集
訓練所用的圖片在輸入模型前,統一縮放為1000×600大小,并根據訓練集顏色分布的均值和方差進行歸一化。對于VGG16網絡每個尺度的特征圖對應候選區域建議網絡的錨點尺寸不同,conv1_2層對應的尺度參數為2,4;conv2_2和conv3_3為4,8;conv4_3和conv5_3為8,16;其余參數均與原始Faster-RCNN一致。
將訓練數據分為兩部分,一部分用于評估模型的性能,一部分用于模型訓練。識別結果如圖7所示。

圖7 honeybee數據集識別結果
在低分辨率和較小的目標檢測實驗中,模型給出了較好的實驗性能,在準確度和速度上均表現良好。表2是傳統的Faster-RCNN與我們改進后的Faster-RCNN的識別結果性能對比。

表2 識別精度和時間對比
從以上實驗結果可以看出:采用的改進的Faster-RCNN算法在精度上有明顯的提升,對檢測目標的定位精度很高,對比原有Faster-RCNN的檢測效果有了明顯的提升。同時其識別速度較快,在單張GeForce RTX 2080 Ti上的平均識別用時為0.5 s,達到了實時檢測的效果,可以運用此方法將該模型應用于日常的較低分辨率的嵌入式目標檢測設備中。提高檢測的工作效率和準確性。
文章采用了軟硬件協同的方式基于端到端的Faster-RCNN算法實現了中小問題的目標檢測,由于文章是針對特定數據集進行的識別,模型的訓練也需要在PC端完成,對于數據的清洗和處理也需要花費時間,因此文章只提出對一種比較典型的與農業生產有關的蜜蜂數據集進行了目標檢測的測試。但是考慮到該數據集具有的代表性作用,因此將論文中提出的目標檢測方式用于其他生活中類似的目標檢測是合理的。而文章中采用FPGA實現算法的加速,同時由于FPGA的可編程和可移植特性,能夠用于嵌入式的端檢測設備,在該項目的后期工作中,項目組成員會在其他較為典型的小目標數據集上進行進一步的測試,提高算法的魯棒性和通用性。