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