(1.西北工業(yè)大學 計算機學院,西安 710072;2.西安職業(yè)技術(shù)學院 動漫軟件學院,西安 710077)
圖像目標檢測作為當前計算機視覺和深度學習領(lǐng)域的研究熱點,主要解決圖像中目標的類別和位置信息的獲取問題。早期的圖像目標檢測算法主要基于手工特征提取和分類器實現(xiàn),如HOG+SVM方法[1]和DPM[2]算法等,不僅缺乏有效的圖像表征方法,而且計算復雜。自2012年Krizhevsky等人提出的深度卷積神經(jīng)網(wǎng)絡(luò)AlexNet[3]在ImageNet大規(guī)模視覺識別挑戰(zhàn)賽中奪冠以來,掀起了深度學習技術(shù)在圖像識別應(yīng)用領(lǐng)域的研究熱潮。眾多研究者提出了諸如R-CNN[4]、Faster R-CNN[5]、YOLO[6]和SSD[7]等優(yōu)秀的深度學習目標檢測算法,較大程度地提高了圖像目標檢測的效率和識別準確率。
在當前研究中,為了構(gòu)建深度學習圖像目標識別系統(tǒng),算法的實現(xiàn)分為軟件和硬件兩類。大部分研究者采用軟件編程或基于當前流行的Caffe[8]或TensorFlow[9]等深度學習框架在CPU或GPU上實現(xiàn)[3-9]。也有一些研究者采用FPGA或ASIC來設(shè)計專用的硬件算法加速器的實現(xiàn)方式[10-11]。采用軟件編程方式存在著計算效率低、占用資源多以及功耗高等缺點?;贏SIC實現(xiàn)雖然可以獲得良好的計算效率和功耗,但是存在靈活性差和成本高的問題。而FPGA以其豐富的片上資源和可重構(gòu)的特性,比較適合用于實現(xiàn)硬件算法加速器,但是當前研究中并沒有完全發(fā)揮出算法和FPGA的計算潛能。
為了適應(yīng)圖像目標檢測的嵌入式實時應(yīng)用需求,充分挖掘目標檢測算法及FPGA的并行計算特性,本文首先對基于SSD[7]與MobileNet[12]的深度學習目標檢測算法進行了計算優(yōu)化;然后在基于ZYNQ可擴展平臺上搭建了圖像目標檢測系統(tǒng),并給出了了軟硬件的詳細設(shè)計;最后通過多個實驗表明,系統(tǒng)可有效實現(xiàn)圖像目標檢測的功能,對于VGA分辨率(640*480)的視頻圖像處理速度可以達到 45FPS,滿足嵌入式實時應(yīng)用的要求。
目前主流的深度學習目標檢測算法包括以Faster R-CNN[5]為代表的基于區(qū)域選擇的目標檢測算法,和以YOLO[6]和SSD[7]為代表的基于回歸學習的目標檢測算法。后者相對于前者具有更好的計算效率,只需前饋網(wǎng)絡(luò)一次計算即可得到檢測結(jié)果。同時,SSD[7]算法相對于YOLO[6]算法具有較高的識別準確率。因此,本文中將采用基于SSD[7]框架的深度學習目標檢測算法進行設(shè)計。
SSD[7]算法模型通過一個基礎(chǔ)的深度卷積神經(jīng)網(wǎng)絡(luò)來提取圖像的特征,然后在多尺度特征圖上的提取局部特征,并將得到的特征用于預測結(jié)果。基于MobileNet[12]的SSD[7]深度學習算法模型如圖1所示。
圖1 基于MobileNet的SSD深度學習算法模型
為了實現(xiàn)實時處理,本研究采用了適用于嵌入式移動端的輕量級的MobileNet[12]代替文獻[7]中的VGGNet作為SSD[7]算法的基礎(chǔ)卷積神經(jīng)網(wǎng)絡(luò)。MobileNet[12]采用了如圖2(b)所示的深度可分離卷積代替標準卷積,很大程度減少了深度卷積網(wǎng)絡(luò)的參數(shù)和計算量。
圖2 深度可分離卷積與標準卷積的對比[7]
從圖1算法模型和圖2中MobileNet[12]的計算結(jié)構(gòu)可以看出,特征提取算法是由卷積層、批量歸一化層和非線性激活函數(shù)層。下面將根據(jù)這些層的計算抽象出算法加速器所支持的基本運算并進行優(yōu)化。
1.1.1 卷積層
卷積層由多個局部濾波器(卷積核)組成,主要用于從輸入特征圖中提取不同的局部特征。當輸入特征圖的尺寸為W×H×Cin,Cout個通道的卷積核表示為Kx×Ky×Cin×Cout,則位于輸出特征圖fo(fo∈Cout)的(x,y)位置上的神經(jīng)元N的計算公式如式(1)所示。
(1)
式中,W和B為參數(shù)分別表示權(quán)重和偏置,N表示神經(jīng)元,Sx和Sy表示卷積運算在x和y方向上的步長。深度可分離卷積的卷積核通道數(shù)Cout的值為1,輸出特征圖由對應(yīng)的輸入特征圖進行卷積運算得到。
1.1.2 批量歸一化層
批量歸一化層使得整個網(wǎng)絡(luò)模型更加穩(wěn)定,并且加快了深度卷積網(wǎng)絡(luò)訓練和收斂的速度,以特征圖為一批時,它的計算如式(2)所示。
(2)
式中,mean,variance,scalefactor和ε均為學習得到的參數(shù),mean為與特征圖同維度的均值向量、variance為與特征圖同維度的方差向量,scalefactor為一維縮放因子,ε為一個很小的常數(shù),通常取0.00001。
1.1.3 縮放層
縮放層對歸一化后的神經(jīng)元N進行比例縮放和位移,它的計算如式(3)所示:
(3)
式中,α和β為與特征圖同維度的向量參數(shù)。在模型中并不體現(xiàn)該層,由于本文采用深度學習框架Caffe[8]進行算法模型的訓練和參數(shù)的獲取,在該框架中將實際的批量歸一化計算分為式(2)和式(3)兩步來實現(xiàn)。
1.1.4 非線性激活函數(shù)層
為了使深度神經(jīng)網(wǎng)絡(luò)具有非線性的學習及表達能力,在其中加入了非線性激活函數(shù)層。在基于MobileNet[12]的SSD[7]算法中采用了非線性整流函數(shù)(ReLU)作為非線性激活函數(shù),它的計算公式如式(4)所示。
(4)
式中,Ni表示輸入神經(jīng)元。
本文在設(shè)計目標檢測系統(tǒng)時,側(cè)重于算法推理階段的計算,訓練及參數(shù)獲取將采用深度學習框架Caffe[8]完成。根據(jù)對算法各層的分析,從圖2、式(2)和式(3)可以看出實際歸一化層和縮放層位于卷積層之后,它們的計算都是針對特征圖內(nèi)單個神經(jīng)元進行的。因此,通過對訓練獲取的參數(shù)進行預處理,即可將它們合并到卷積層進行計算。具體過程為,設(shè)定卷積層輸出神經(jīng)元為Nconv,批量歸一化層輸出神經(jīng)元為NBN,縮放層輸出神經(jīng)元為Nscale,首先根據(jù)式(2),令:
(5)
(6)
則根據(jù)式(2)、式(5)和式(6),式(3)可以變?yōu)?
Nscale=αNBN+β=α(PBN_a*Nconv+PBN_b)+
β=αPBN_a*Nconv+αPBN_b+β.
(7)
將式(2)帶入到式(7),可以得到:
αPBN_b+β
(8)
式中,α,β,PBN_a,PBN_b為與卷積運算輸出特征圖同維且對應(yīng)的參數(shù)向量。將批量歸一化層和縮放層的參數(shù)與卷積層的權(quán)重參數(shù)進行合并,即可實現(xiàn)三層合一,不僅減少了參數(shù)而且減少了計算量。
另外由于算法加速器部分采用了16位有符號定點數(shù)來表示神經(jīng)元和參數(shù),因此對于非線性激活函數(shù)ReLU通過判斷神經(jīng)元的符號位即可實現(xiàn),為了計算的便利性將其設(shè)計在算法加速器的計算單元(PE)內(nèi),減少了分層計算時將特征圖存儲后再取出計算的時間。
實時圖像目標檢測嵌入式系統(tǒng)應(yīng)具有圖像數(shù)據(jù)的采集、處理及輸出的功能,基于Xilinx公司的ZYNQ可擴展開發(fā)平臺設(shè)計了如圖3所示的圖像目標檢測系統(tǒng)。
圖3 基于ZYNQ的圖像目標檢測系統(tǒng)結(jié)構(gòu)框圖
根據(jù)ZYNQ系統(tǒng)的結(jié)構(gòu)和對算法可加速部分的分析進行軟硬件的劃分。優(yōu)化后的深度學習目標檢測算法的大量計算集中在卷積網(wǎng)絡(luò)計算,占據(jù)了整個算法計算量的90%以上,因此將該部分采用ZYNQ的可編程邏輯端(PL端)以硬件算法加速器的方式實現(xiàn)。算法的PriorBox計算、非最大值抑制計算和Softmax輸出因包含開方、指數(shù)等計算不便采用硬件實現(xiàn),因此將采用軟件方式計算。系統(tǒng)的圖像采集、緩存及輸出顯示操作將采用軟件方式在ZYNQ的可編程系統(tǒng)端(PS端)實現(xiàn)。
在如圖3所示的系統(tǒng)結(jié)構(gòu)中,實時的圖像采集采用了一款30W像素的CMOS攝像頭,捕獲畫面分辨率為640×480,幀速率30/60 FPS可選,輸出為YUV格式,通過USB接口將捕獲到的視頻圖像緩存于DDR4存儲器中。
圖像的預處理通過ARM處理器通過軟件方式完成。主要實現(xiàn)將采集到的YUV圖像轉(zhuǎn)換為RGB格式,并進行圖像目標檢測前的調(diào)整大小和去均值操作。
圖像的目標檢測由深度學習硬件算法加速器完成。算法加速器的參數(shù)及操作指令存儲于片外的FLASH存儲器中,在系統(tǒng)啟動時通過AXI總線發(fā)送至PL端FPGA的BRAM中,進行圖像目標檢測時,將預處理后的圖像通過AXI總線發(fā)送至FPGA的用于存儲輸入特征圖的BRAM中進行目標檢測計算,計算完成后將計算結(jié)果通過AXI總線發(fā)送至PS端緩存中。由PS端完成算法的其余計算。
圖像目標檢測結(jié)果的輸出顯示由軟件實現(xiàn),將DDR4緩存中的目標檢測結(jié)果經(jīng)過標注后通過開發(fā)板的HDMI接口在顯示器上顯示。
ZYNQ的可編程系統(tǒng)端(PS端)的ARM處理器運行在Linux操作系統(tǒng)之上,Linux操作系統(tǒng)的鏡像文件存儲在外部的SD存儲卡中。PS端的軟件編程采用了Linux下的PYTHON語言在Jupyter Notebook環(huán)境下實現(xiàn)。在本系統(tǒng)中,軟件用于控制整個系統(tǒng)的工作流程,主要實現(xiàn)對采集圖像的預處理,調(diào)用可編程邏輯端的深度學習算法加速器計算,算法的其余計算,以及計算結(jié)果在采集圖像上標注后輸出顯示,系統(tǒng)工作的流程如圖4所示。
圖4 系統(tǒng)工作流程圖
目標檢測系統(tǒng)的軟件部分還包括了參數(shù)預處理軟件和深度學習指令編譯器軟件。由于這兩部分是在本系統(tǒng)外一次完成,在此不再贅述。
2.3.1 體系結(jié)構(gòu)設(shè)計
根據(jù)算法分析及系統(tǒng)軟硬件的劃分,算法加速器主要完成算法優(yōu)化后的卷積計算,具有并行度高,計算量大的特點,在此基礎(chǔ)上設(shè)計了如圖5所示的算法加速器體系結(jié)構(gòu)。
圖5 深度學習算法加速器體系結(jié)構(gòu)圖
算法加速器結(jié)構(gòu)包含了:I/O控制器、指令緩存、譯碼器、多核神經(jīng)處理單元、緩存控制器、特征圖緩存(包含輸入特征圖緩存、輸出特征圖緩存和臨時緩存)和參數(shù)緩存。
算法加速器工作時,首先接收系統(tǒng)發(fā)送的參數(shù)存儲于參數(shù)緩存,接著在圖像預處理完成后接收系統(tǒng)發(fā)送的算法加速器指令并讀取圖像數(shù)據(jù)存于特征圖緩存中,在緩存控制器的控制下從特征圖緩存和參數(shù)緩存中讀取卷積運算的數(shù)據(jù)和參數(shù)經(jīng)過數(shù)據(jù)建立組織后發(fā)送至多核神經(jīng)處理單元進行卷積運算。多核神經(jīng)處理單元包含八個處理核,按照特征圖并行的方式進行計算,神經(jīng)處理單元內(nèi)為二維的計算單元,以二維并行的方式完成特征圖內(nèi)神經(jīng)元的計算。神經(jīng)處理單元完成計算后將輸出特征圖經(jīng)過緩存控制器存儲于特征圖緩存中,以便于下一層計算。直至一幀圖像計算完成后將卷積運算結(jié)果經(jīng)I/O控制器發(fā)送至PS端,用于后續(xù)的PriorBox、非最大值抑制及Softmax輸出計算。
2.3.2 神經(jīng)處理單元核和計算單元的設(shè)計
神經(jīng)處理單元核的設(shè)計思路來源于圖像卷積運算時的二維滑動窗口過程,采用了二維計算單元的組織方式,并且支持局部的神經(jīng)元數(shù)據(jù)傳輸,以此來減少多次讀取特征圖的代價。設(shè)計的神經(jīng)處理單元如圖6所示。
圖6 神經(jīng)處理單元結(jié)構(gòu)
在每個神經(jīng)處理單元核內(nèi)包含8*8個計算單元,可同時計算一個特征圖中的64個神經(jīng)元的卷積運算。計算單元采用局部寄存器設(shè)計支持神經(jīng)元數(shù)據(jù)的行與列傳輸,基于乘累加器設(shè)計了卷積運算單元,通過判斷符號位實現(xiàn)了ReLU的計算,所設(shè)計的計算單元如圖7所示。
圖7 計算單元結(jié)構(gòu)
采用Vivado2018.1開發(fā)環(huán)境基于Xilinx的ZCU104評估板進行算法加速器的硬件實現(xiàn),占用可編程邏輯端的資源情況如表1所示。
深度學習目標檢測算法模型基于深度學習框架Caffe以離線方式進行訓練,訓練過程中采用的硬件環(huán)境包括:
表1 算法加速器主要資源占用情況
Intel Core i7 6700HQ CPU和NVIDIA的GTX960 GPU。訓練數(shù)據(jù)集采用了在Microsoft的COCO[13]數(shù)據(jù)集上進行預訓練,然后在Pascal VOC0712[14]數(shù)據(jù)集上微調(diào)訓練,可檢測不包括背景的20種物體,獲得的平均精度均值(mAP)為0.727。在獲取參數(shù)并進行預處理后對系統(tǒng)進行測試。
系統(tǒng)測試環(huán)境為Xilinx的ZCU104評估開發(fā)板。開發(fā)板的PS端運行頻率為500MHz,PL端運行頻率為200 MHz。采用VOC0712[14]訓練驗證標準數(shù)據(jù)集進行靜態(tài)圖片的系統(tǒng)測試測得平均精度均值(mAP)為0.721。
在單幅圖片的目標檢測時,本文開發(fā)系統(tǒng)對比基于Caffe[8]的深度學習框架在3.1節(jié)所述CPU和GPU上的運行速度如表2所示。
表2 本文與Caffe在CPU/GPU上運行速度對比
對攝像頭實時采集圖像進行目標檢測時,近景目標檢測效果如圖8所示,遠景檢測效果如圖9所示,連續(xù)幀的目標檢測效果如圖10所示。
圖8 近景效果圖
圖9 遠景效果圖
圖10 連續(xù)幀檢測效果圖
根據(jù)測試結(jié)果可以看出,在標準測試集上進行測試時,本文設(shè)計系統(tǒng)的測試精確率與深度學習軟件框架Caffe[8]的測試結(jié)果誤差不超過1%。由表2可得,本系統(tǒng)的處理速度是CPU的4.9倍,是GPU的1.7倍,檢測速度達到45FPS完全滿足實時處理的需求。由圖8、圖9和圖10可以看出本系統(tǒng)完全滿足對實時采集數(shù)據(jù)的目標識別,但是對于重疊物和小目標的識別還需改進。
本文針對圖像目標檢測的嵌入式實時應(yīng)用,在對算法優(yōu)化的基礎(chǔ)上,采用軟硬件結(jié)合的方式,基于ZYNQ可擴展處理平臺設(shè)計了一種基于深度學習的實時目標檢測系統(tǒng)。經(jīng)過多項測試,該系統(tǒng)處理速度可以達到45FPS,完全滿足嵌入式實時圖像目標檢測的應(yīng)用需求。