胡晶晶
(東北大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,沈陽 110819)
基于嵌入式端設(shè)備的實(shí)時(shí)目標(biāo)檢測和識別系統(tǒng)是計(jì)算機(jī)視覺方向研究的熱點(diǎn)和基礎(chǔ)性工作[1],同時(shí)目標(biāo)檢測也被廣泛應(yīng)用于醫(yī)療、農(nóng)業(yè)、監(jiān)控等各種領(lǐng)域。隨著深度學(xué)習(xí)的發(fā)展,基于深度學(xué)習(xí)的目標(biāo)檢測方法被大量研究,有較多算法被相繼提出,比如R-CNN(region-based convolutional neural network)模型、Fast R-CNN模型、Faster R-CNN模型、YOLO模型、SSD(single shot multi?box detector)模型等[2-5]。為了應(yīng)用到特定化的場景中,對這些算法的改進(jìn)和加速方案也是層出不窮,目標(biāo)檢測更趨向于精細(xì)化和背景復(fù)雜化,比如監(jiān)控、交通人臉識別和手勢識別以及輕小異物等目標(biāo)較小分辨率低的場景,對準(zhǔn)確度和實(shí)時(shí)性要求高,研究者們主要通過對這些算法進(jìn)行改進(jìn)以提高實(shí)時(shí)性或準(zhǔn)確性,或者通過對特定的算法進(jìn)行硬件設(shè)計(jì)而實(shí)現(xiàn)良好的算法性能。
由于CNN需要較大的計(jì)算量、并行操作和存儲空間。而FPGA芯片能夠以并行化的方式高速處理數(shù)據(jù),能夠以流水線的思想設(shè)計(jì)并有著充足的邏輯資源和較高的運(yùn)行速度[6],且具有低功耗的特點(diǎn),F(xiàn)PGA往往可以擁有超過GPU的處理速度,同時(shí)兼顧能效比,能夠滿足對CNN的硬件加速條件,因此可用于實(shí)現(xiàn)目標(biāo)檢測的實(shí)時(shí)性要求。文獻(xiàn)[7]提出了面向小目標(biāo)的多尺度Faster-RCNN算法,提升了以低層特征為主要檢測依據(jù)的小目標(biāo)檢測任務(wù)的精度,比原始的Faster-RCNN提高約5%,但是在實(shí)時(shí)性上略有損失;文獻(xiàn)[8]實(shí)現(xiàn)了基于Faster-RCNN的快速目標(biāo)檢測,將最后的目標(biāo)識別階段的全連接層替換為卷積層實(shí)現(xiàn)算法素的提升,損失了部分精確度。Faster-RCNN算法在檢測準(zhǔn)確度上性能良好,在檢測實(shí)時(shí)性上有待提高,因此文章考慮到實(shí)際開發(fā)需求,在保證精確度的同時(shí),對Faster-RCNN算法進(jìn)行加速用于嵌入端設(shè)備進(jìn)行目標(biāo)檢測。
文章在上述工作的基礎(chǔ)上對Faster-RCNN算法進(jìn)行改進(jìn),在實(shí)時(shí)性和準(zhǔn)確性之間進(jìn)行權(quán)衡。為提高運(yùn)算效率并充分利用FPGA的并行計(jì)算和流水線技術(shù)的優(yōu)勢,將Faster-RCNN算法最后的目標(biāo)識別階段的全連接層改為卷積層,實(shí)現(xiàn)卷積層的硬件加速,同時(shí)在是識別小目標(biāo)的精度方面采用多尺度的方法,使用標(biāo)準(zhǔn)的區(qū)域建議網(wǎng)絡(luò)(RPN)生成建議區(qū)域,并結(jié)合較淺層卷積特征圖(即conv3和conv4)的特征圖用于ROI池。該方法識別準(zhǔn)確率高、速度快、模型的魯棒性高,可以提供高效準(zhǔn)確的中小目標(biāo)檢測算法。為此改進(jìn)的Faster-RCNN設(shè)計(jì)相應(yīng)的FPGA加速電路,實(shí)現(xiàn)精度和準(zhǔn)確度均有所提升的端設(shè)備目標(biāo)檢測。
Faster-RCNN神經(jīng)網(wǎng)絡(luò)利用“區(qū)域建議算法”生成位置。但是,傳統(tǒng)區(qū)域方案算法的計(jì)算成本仍然很高,使得其運(yùn)行時(shí)間慢,對實(shí)時(shí)應(yīng)用不切實(shí)際。一般來說,F(xiàn)aster-RCNN由兩個(gè)主要部分組成:生成建議區(qū)域的RPN和RCNN網(wǎng)絡(luò),對區(qū)域進(jìn)行分類[4]。區(qū)域建議網(wǎng)絡(luò)RPN在2D圖像中提取可能包含目標(biāo)的一系列感興趣區(qū)域(ROI)。RPN與目標(biāo)檢測網(wǎng)絡(luò)共享一些卷積層。最終通過末尾的幾個(gè)卷積層和全連接層進(jìn)行最終預(yù)測位置框的回歸和框內(nèi)目標(biāo)的分類。RPN在Faster-RCNN通道中起著重要作用,因?yàn)樗鼘Ψ诸惼鳎?]的準(zhǔn)確性產(chǎn)生重大影響。Faster-RCNN網(wǎng)絡(luò)結(jié)果如圖1所示。
圖1 Faster-RCNN網(wǎng)絡(luò)結(jié)果
Faster-RCNN在PASCAL VOC數(shù)據(jù)集上實(shí)現(xiàn)了最先進(jìn)的性能。它們可以探測人、動物或車輛等物體。這些對象通常占據(jù)圖像的大部分[9]。然而,在實(shí)際的問題中,比如監(jiān)控拍攝和行人識別手勢識別等,檢測的物體通常是較小的和低分辨率的物體。Faster-RCNN中的檢測網(wǎng)絡(luò)很難檢測到分辨率低的小目標(biāo)。因?yàn)镽OI池層僅從一個(gè)深層特征圖映射構(gòu)建特征,感受野太大,VGG-16模型從“CONV5”層進(jìn)行ROI池,經(jīng)過該層后,矩陣的長和寬均為原來的1/16,如果目標(biāo)大小小于16個(gè)像素,那么即使建議的區(qū)域是正確的,投影的ROI池區(qū)域也小于“CONV5”層中的1個(gè)像素。因此,檢測器將很難根據(jù)僅來自一個(gè)像素的信息來預(yù)測對象類別和分類框位置。當(dāng)然不考慮較為極端的情況,對于中小目標(biāo)的檢測應(yīng)該做到利用多層信息實(shí)現(xiàn)更精準(zhǔn)的識別定位。
因此,在Faster-RCNN網(wǎng)絡(luò)中,采用特征金字塔FPN[10]的思想,結(jié)合全局和局部特征(即多尺度)來增強(qiáng)全局上下文和局部信息,利用不同分辨率特征圖做融合來提升特征的豐富度和信息含量來檢測不同大小的目標(biāo),可以幫助魯棒地檢測我們感興趣的目標(biāo)。為了增強(qiáng)網(wǎng)絡(luò)的能力,結(jié)合了來自較淺卷積特征圖的特征圖,即conv3和conv4,用于ROI池化,使得網(wǎng)絡(luò)可以檢測到ROI區(qū)域中包含較高比例信息的較低級別特征。同時(shí)對于目標(biāo)分類時(shí)的全連接層用卷積層進(jìn)行替換,增加前向傳播的速度,在確保精度的同時(shí)可實(shí)現(xiàn)卷積層的并行計(jì)算,提升算法整體的速度,并在整體設(shè)計(jì)上采用流水線技術(shù)實(shí)現(xiàn)資源最大利用。改進(jìn)的模型圖如圖2所示。
圖2 改進(jìn)的Faster-RCNN模型
在模型的前兩個(gè)卷積層中,每個(gè)卷積層會連接一個(gè)ReLU層、一個(gè)LRN層和一個(gè)Max-pooling層。在接下來的三個(gè)卷積層中,在每個(gè)卷積層之后只連接一個(gè)ReLU層,并且它們的輸出也被用作三個(gè)對應(yīng)的ROI池化層和歸一化層的輸入,如圖2所示。將這些做L2正則化輸出級聯(lián)并收縮,以用作下最后改進(jìn)的一個(gè)卷積層的輸入。模型的最后,連接一個(gè)用于對象分類的softmax層和一個(gè)負(fù)責(zé)邊界框細(xì)化的回歸函數(shù)。
對于目標(biāo)檢測算法,最耗時(shí)的部分就是其中的卷積神經(jīng)網(wǎng)絡(luò)的卷積運(yùn)算,尤其是在特征提取階段的3×3卷積操作占了95%以上的計(jì)算量[11]。因此硬件加速部分對Faster-RCNN中的CNN部分進(jìn)行加速。同時(shí)將Faster-RCNN算法最后的目標(biāo)識別的卷積層在FPGA的PE單元上做處理,提高算法速度。
FPGA是可編程芯片,因此FPGA的設(shè)計(jì)方法包括硬件設(shè)計(jì)和軟件設(shè)計(jì)兩部分。硬件包括FPGA芯片電路、存儲器、輸入輸出接口電路以及其他設(shè)備;軟件即是相應(yīng)的HDL程序以及最新的基于高層次綜合的程序方法,底層語言采用Verilog硬件描述語言,高層次語言采用C語言進(jìn)行開發(fā),開發(fā)工具為Xilinx公司推出的Vivado HLS,并實(shí)現(xiàn)相應(yīng)電路的轉(zhuǎn)換,降低開發(fā)難度。
硬件FPGA選擇ZYNQ UltraScale+MPSoC開發(fā)板,該系列是Xilnx公司推出的首款全可編程異構(gòu)多處理SoC,集成了處理系統(tǒng)(PS)和可編程邏輯(PL)。硬件參數(shù)如表1所示。
表1 Zynq UItraScale+MPSoc硬件參數(shù)
在進(jìn)行算法的軟硬件實(shí)現(xiàn)方案時(shí)[12],由于圖像預(yù)處理和識別結(jié)果輸出部分與應(yīng)用的前后端聯(lián)系緊密,且對計(jì)算能力要求低,故可在PC端實(shí)現(xiàn);而目標(biāo)檢測前向計(jì)算和識別操作需要計(jì)算量大且并行度高,任務(wù)內(nèi)的數(shù)據(jù)吞吐量相對較高[13],因此該部分通過硬件加速,以充分發(fā)揮FPGA的計(jì)算優(yōu)勢。系統(tǒng)整體設(shè)計(jì)如圖3所示。
圖3 硬件整體設(shè)計(jì)
在圖3中,目標(biāo)檢測總體架構(gòu)由PC和FPGA兩部分組成,PC端承擔(dān)神經(jīng)網(wǎng)絡(luò)訓(xùn)練和調(diào)試任務(wù),F(xiàn)PGA承擔(dān)神經(jīng)網(wǎng)絡(luò)的加速任務(wù)。其中,外部存儲器DDR用于存儲目標(biāo)圖像數(shù)據(jù)與權(quán)值,PS與PL協(xié)同工作,兩者通過AXI_HP口進(jìn)行數(shù)據(jù)通信,從而實(shí)現(xiàn)各個(gè)模塊數(shù)據(jù)與權(quán)值的傳輸。DDR控制器作為數(shù)據(jù)圖像處理的核心,利用AXI4_memory_map獲取數(shù)據(jù)圖像信息,經(jīng)由AXI4_streaming對信息流格式加以處理,以此實(shí)現(xiàn)信息統(tǒng)一管理。經(jīng)過處理后的數(shù)據(jù)轉(zhuǎn)入加速器完成片上緩存操作,在加速器作用下,緩存區(qū)信息得以快速處理,而后通過AXI4總線返回DDR模塊[14]。
CNN加速器的基本模型是處理單元(process element,PE)從輸入緩沖寄存器獲取輸入特征,從保存權(quán)重值的緩沖寄存器獲取權(quán)重值,然后從輸出緩沖區(qū)獲取中間結(jié)果與本次計(jì)算結(jié)果累加寫回輸出緩沖區(qū)。結(jié)合優(yōu)化的Faster-RCNN模型和FPGA上的有限資源,設(shè)計(jì)CNN的硬件加速器部分。由于模型中的參數(shù)量大,且中間的特征圖數(shù)量也很多,網(wǎng)絡(luò)所有的權(quán)值參數(shù)和特征圖存儲在片外存儲器。因此,在數(shù)據(jù)傳輸中需要設(shè)計(jì)片上緩存區(qū)(FIFO)。計(jì)算單元也從緩沖區(qū)讀取,雖然會減少片上存儲資源地占用,但是也會加大帶寬和計(jì)算時(shí)延。因此,文章設(shè)計(jì)選擇將輸出特征圖的中間結(jié)果存儲在片上BRAM中,并且對于3×3卷積先進(jìn)行通道循環(huán),計(jì)算完成部分卷積核,再繼續(xù)計(jì)算下一部分的卷積核。
文章優(yōu)化的Faster-RCNN模型主要包括3×3卷積層、1×1卷積層、最大池化層。在3×3卷積層后直接進(jìn)行池化計(jì)算,輸出特征圖。在3×3卷積計(jì)算出輸出特征圖的部分通道后,將輸出結(jié)果緩存在片上BRAM,與1×1卷積層卷積核的對應(yīng)通道計(jì)算,在1×1卷積層計(jì)算完成后再將輸出特征圖緩存在片外存儲器,實(shí)現(xiàn)各通道并行計(jì)算。偏置功能和激活功能在卷積層內(nèi)部實(shí)現(xiàn)。因此將計(jì)算分塊,并采用流水結(jié)構(gòu)方式實(shí)現(xiàn)不同模塊并行計(jì)算,如圖4所示。
圖4 并行模式計(jì)算數(shù)據(jù)流向
對5層conv網(wǎng)絡(luò)均采用結(jié)構(gòu)內(nèi)并行和網(wǎng)絡(luò)間并行的方式設(shè)置多個(gè)PE單元并行處理,整體加速結(jié)構(gòu)如圖5所示。
圖5 CNN加速結(jié)構(gòu)設(shè)計(jì)
在PC端的模型訓(xùn)練完成后,將權(quán)重值、偏置值和測試圖像通過PCIe接口發(fā)送到FPGA端;數(shù)據(jù)分別存儲到DDR4中,DDR4控制器向IP核輸入數(shù)據(jù),啟動加速,IP核則依據(jù)流水線的方式計(jì)算每層conv網(wǎng)絡(luò)的中間結(jié)果,保存至FIFO緩存單元,CNN加速IP核中所有層運(yùn)算結(jié)束后輸出最終識別結(jié)果,PL端將該結(jié)果以直接內(nèi)存讀?。╠irect memory access,DMA)方式發(fā)送至PS端的DDR4中完成整個(gè)神經(jīng)網(wǎng)絡(luò)的硬件加速。
本實(shí)驗(yàn)的數(shù)據(jù)集采用分辨率較小的Small Ob?ject Dataset[15],數(shù)據(jù)集中包含了小目標(biāo)的測試數(shù)據(jù)集:合成細(xì)胞、行人、魚、海鷗、蜜蜂以及蒼蠅。圖像中的目標(biāo)只有10~30像素高(圖6)。選取其中的honeybee數(shù)據(jù)集進(jìn)行測試。
圖6 實(shí)踐數(shù)據(jù)集
訓(xùn)練所用的圖片在輸入模型前,統(tǒng)一縮放為1000×600大小,并根據(jù)訓(xùn)練集顏色分布的均值和方差進(jìn)行歸一化。對于VGG16網(wǎng)絡(luò)每個(gè)尺度的特征圖對應(yīng)候選區(qū)域建議網(wǎng)絡(luò)的錨點(diǎn)尺寸不同,conv1_2層對應(yīng)的尺度參數(shù)為2,4;conv2_2和conv3_3為4,8;conv4_3和conv5_3為8,16;其余參數(shù)均與原始Faster-RCNN一致。
將訓(xùn)練數(shù)據(jù)分為兩部分,一部分用于評估模型的性能,一部分用于模型訓(xùn)練。識別結(jié)果如圖7所示。
圖7 honeybee數(shù)據(jù)集識別結(jié)果
在低分辨率和較小的目標(biāo)檢測實(shí)驗(yàn)中,模型給出了較好的實(shí)驗(yàn)性能,在準(zhǔn)確度和速度上均表現(xiàn)良好。表2是傳統(tǒng)的Faster-RCNN與我們改進(jìn)后的Faster-RCNN的識別結(jié)果性能對比。
表2 識別精度和時(shí)間對比
從以上實(shí)驗(yàn)結(jié)果可以看出:采用的改進(jìn)的Faster-RCNN算法在精度上有明顯的提升,對檢測目標(biāo)的定位精度很高,對比原有Faster-RCNN的檢測效果有了明顯的提升。同時(shí)其識別速度較快,在單張GeForce RTX 2080 Ti上的平均識別用時(shí)為0.5 s,達(dá)到了實(shí)時(shí)檢測的效果,可以運(yùn)用此方法將該模型應(yīng)用于日常的較低分辨率的嵌入式目標(biāo)檢測設(shè)備中。提高檢測的工作效率和準(zhǔn)確性。
文章采用了軟硬件協(xié)同的方式基于端到端的Faster-RCNN算法實(shí)現(xiàn)了中小問題的目標(biāo)檢測,由于文章是針對特定數(shù)據(jù)集進(jìn)行的識別,模型的訓(xùn)練也需要在PC端完成,對于數(shù)據(jù)的清洗和處理也需要花費(fèi)時(shí)間,因此文章只提出對一種比較典型的與農(nóng)業(yè)生產(chǎn)有關(guān)的蜜蜂數(shù)據(jù)集進(jìn)行了目標(biāo)檢測的測試。但是考慮到該數(shù)據(jù)集具有的代表性作用,因此將論文中提出的目標(biāo)檢測方式用于其他生活中類似的目標(biāo)檢測是合理的。而文章中采用FPGA實(shí)現(xiàn)算法的加速,同時(shí)由于FPGA的可編程和可移植特性,能夠用于嵌入式的端檢測設(shè)備,在該項(xiàng)目的后期工作中,項(xiàng)目組成員會在其他較為典型的小目標(biāo)數(shù)據(jù)集上進(jìn)行進(jìn)一步的測試,提高算法的魯棒性和通用性。