葉 飛,劉子龍
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
目標(biāo)檢測(cè)的目的是從不同的視覺信息中識(shí)別圖像中所要確定對(duì)象的大小以及位置情況,并且將其從不同背景圖像中分離出來。對(duì)于行人的檢測(cè)是在給定的圖像與視頻中判斷是否有行人。行人檢測(cè)的算法可分為:基于背景建模、基于輪廓模板、基于底層特征和基于統(tǒng)計(jì)分析學(xué)習(xí)4大類[1]。在行人檢測(cè)的算法中,比較經(jīng)典的行人檢測(cè)方法包括Dalal 等人提出的梯度直方圖(Histogram of Oriented Gradient,HOG)以及與線性分類器支持向量機(jī)(Support Vector Machine,SVM)結(jié)合的行人檢測(cè)方法,后者在MIT行人數(shù)據(jù)集上展現(xiàn)出了十分出色的性能[2-3]。Felazenszwalb等人隨后提出了一種改進(jìn)的組件模型(Deformable Part Model,DPM)算法,其對(duì)于形變之后的目標(biāo)對(duì)象具有很強(qiáng)的魯棒性[4-5]。
最近幾年,得益于計(jì)算機(jī)算力提升,深度學(xué)習(xí)得到了巨大的發(fā)展,許多研究者將深度學(xué)習(xí)和目標(biāo)檢測(cè)結(jié)合來起來。使用深度神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)與傳統(tǒng)的目標(biāo)檢測(cè)算法相比具有許多優(yōu)點(diǎn)。傳統(tǒng)的方法使用底層信息,對(duì)于行人目標(biāo)的檢測(cè)能力不足,且往往依靠人工手動(dòng)來獲取特征。使用深度學(xué)習(xí)的方法可以通過大量的數(shù)據(jù)學(xué)習(xí)相應(yīng)數(shù)據(jù)差異的特征?;谏窠?jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)可分為兩類:一種是基于區(qū)域的區(qū)域卷積神經(jīng)網(wǎng)絡(luò)(Region-Convolutional Neural Networks,R-CNN)系列,例如 Fast R-CNN、Faster R-CNN;另外一種是基于回歸的SSD(Single Shot Multi Box Detector)和YOLO(You Only Look Once)系列[6-7]。
從網(wǎng)絡(luò)結(jié)構(gòu)來看,YOLO和R-CNN網(wǎng)絡(luò)區(qū)別如下:(1)YOLO的訓(xùn)練和檢測(cè)、特征提取和回歸分類都是在一個(gè)網(wǎng)絡(luò)中完成的,是一個(gè)單獨(dú)的端到端的網(wǎng)絡(luò);(2)YOLO將對(duì)象檢測(cè)看作一個(gè)回歸問題,一旦將圖像輸入網(wǎng)絡(luò),就可以獲得圖像中對(duì)象位置以及們的類別和相應(yīng)的置信概率[8]。 R-CNN系列的檢測(cè)結(jié)果可以分為兩個(gè)部分:目標(biāo)對(duì)象類別(分類)、目標(biāo)對(duì)象位置和邊界框(回歸問題)。YOLOv3檢測(cè)方法于2018年被首次提出。當(dāng)測(cè)試320×320的圖像時(shí),YOLOv3運(yùn)行22 ms后達(dá)到28.2 mAP。同SSD相比,該方法獲得的結(jié)果準(zhǔn)確度一致,但是速度是SSD的3倍[9-10]。
因此,本文使用基于神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)算法,把改進(jìn)后的YOLOv3網(wǎng)絡(luò)用于行人檢測(cè)。主要改進(jìn)如下:改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu),將復(fù)雜的主干網(wǎng)絡(luò)簡(jiǎn)化,并且采用GIOU 損失函數(shù)的替代IoU(Intersection over Union)損失函數(shù)[11]。實(shí)驗(yàn)中使用INRIA數(shù)據(jù)集得到該算法的行人檢測(cè)模型參數(shù)。實(shí)驗(yàn)結(jié)果顯示該算法用于行人檢測(cè)速度快,并且具有良好的識(shí)別精確度。
YOLO將檢測(cè)看作一個(gè)回歸問題[8],具體的步驟如下:(1)在該神經(jīng)網(wǎng)絡(luò)中輸入一張新的圖片來預(yù)測(cè)檢測(cè);(2)將輸入圖像分成S×S網(wǎng)格;(3)假設(shè)對(duì)象的正確標(biāo)定框的中心點(diǎn)落在某個(gè)網(wǎng)格中時(shí),則選用該網(wǎng)格來識(shí)別對(duì)象。所有的網(wǎng)格輸出B預(yù)測(cè)邊界框,包含了邊界框的位置信息內(nèi)容(中心點(diǎn)坐標(biāo)x、y;寬度w;高度h)和預(yù)測(cè)置信度(Prediction Confindence,PC)。
YOLOv3利用了Faster R-CNN 錨框(Anchor box)的思想[6],舍棄了手動(dòng)選擇的錨框的的過程,并在選擇邊界框的尺寸上過程使用K-means聚類,得到了更好的錨框[9]。YOLOv3使用這種方法獲得9個(gè)聚類中心,可以更好地覆蓋圖像特征。YOLO還采用了類似于功能金字塔網(wǎng)絡(luò)(Feature Pyramid Network,F(xiàn)PN)的多尺度預(yù)測(cè)網(wǎng)絡(luò)[12]。對(duì)多尺度特征圖特征進(jìn)行預(yù)測(cè)時(shí),YOLOv3可以取得不同尺度的圖像特征,并可極大改進(jìn)對(duì)識(shí)別小目標(biāo)的能力。結(jié)合錨框和多尺度預(yù)測(cè)思想,YOLOv3首先根據(jù)錨框的長(zhǎng)度和寬度為每個(gè)比例特征圖分配幾個(gè)錨框,然后計(jì)算每個(gè)標(biāo)注圖像錨框的聯(lián)合交叉(IoU),并將目標(biāo)信息分配給最接近其形狀錨框的特征映射。在執(zhí)行邊界框回歸訓(xùn)練時(shí),反向傳播將使預(yù)測(cè)的邊界框更接近圖像中目標(biāo)框。
YOLOv3使用Darknet53網(wǎng)絡(luò)作為主干,結(jié)構(gòu)如圖1所示。
由圖1可以看出,它的結(jié)構(gòu)和ResNet(Residual Neural Network)網(wǎng)絡(luò)和非常類似,均使用殘差網(wǎng)絡(luò)來網(wǎng)絡(luò)變得更深[13]。另外,全卷積結(jié)構(gòu)的使用進(jìn)一步提升了檢測(cè)速度。在每一個(gè)尺度內(nèi),為了便于計(jì)算損失函數(shù),輸出若干個(gè)3×3和1×1的卷積層。
YOLOv3算法的損失函數(shù)為:坐標(biāo)位置損失(coordinate error)、IoU損失(IoU error)和分類誤差(classification error)。首先對(duì)S×S網(wǎng)絡(luò)進(jìn)行計(jì)算
(1)
設(shè)
(2)
STw,h=2-w×h
(3)
式中,BC是交叉熵?fù)p失函數(shù);ST是計(jì)算比例因子函數(shù)。YOLOv3的損失函數(shù)如下
(4)
(5)
(6)
coorderr是坐標(biāo)位置損失,在坐標(biāo)誤差中。中心坐標(biāo)使用交叉熵?fù)p失,寬度以及高度使用方差損失。將λ1設(shè)置為0.5,可以減小寬度與高度對(duì)計(jì)算的影響。此外,只有當(dāng)網(wǎng)格中存在預(yù)測(cè)對(duì)象時(shí)才能進(jìn)行坐標(biāo)誤差計(jì)算。iouerr是IoU損失,其中對(duì)于含有目標(biāo)網(wǎng)格和不含有目標(biāo)的網(wǎng)格權(quán)重是不一致的。因此,加入λ2=0.5來減弱沒有目標(biāo)的網(wǎng)格對(duì)損失函數(shù)損失值的影響[14-15]。classerr是分類誤差,僅僅適用于具有目標(biāo)的網(wǎng)格,其使用交叉熵函數(shù)計(jì)算損失。
最后,YOLOv3使用Sigmoid函數(shù)作為類別預(yù)測(cè)的激活函數(shù)。與Softmax函數(shù)相比,Sigmoid函數(shù)可有效解決同一個(gè)目標(biāo)有兩個(gè)標(biāo)簽的問題[9]。
YOLO v3通過參考?xì)埐罹W(wǎng)絡(luò)提出Darknet53網(wǎng)絡(luò),并通過殘差結(jié)構(gòu)降低了訓(xùn)練的難度,由Darknet53網(wǎng)絡(luò)實(shí)現(xiàn)了多類別檢測(cè)。但是,對(duì)于單一目標(biāo)的檢測(cè)而言,復(fù)雜的網(wǎng)絡(luò)是冗余的。復(fù)雜的網(wǎng)絡(luò)意味著含有過多的參數(shù),將導(dǎo)致訓(xùn)練變得復(fù)雜,大大影響訓(xùn)練的效率,造成過擬合,也會(huì)影響檢測(cè)的速度。
為了檢測(cè)單一行人目標(biāo),本文保留YOLOv3的多尺度檢測(cè)部分,并使用Darknet19網(wǎng)絡(luò)取代Darknet53[16]。Darknet19網(wǎng)絡(luò)如圖2所示。
圖2 Darknet19網(wǎng)絡(luò)結(jié)構(gòu)Figure 2. Darknet19 network architecture
由圖2可以看出Darknet19去除了殘差網(wǎng)絡(luò),降低了網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜度。
在YOLOv3中,多尺度融合是將3個(gè)特征層進(jìn)行融合。本文選擇了3個(gè)尺度的特征層,最終的網(wǎng)絡(luò)模型如圖3所示。
圖3 改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)Figure 3. Improved network structure
在實(shí)際檢測(cè)中使用YOLOv3算法進(jìn)行訓(xùn)練得到相同的損失值時(shí)會(huì)出現(xiàn)不同結(jié)果,不能正確反映預(yù)測(cè)框與正確框之間的的位置情況。為了消除這個(gè)不穩(wěn)定影響并優(yōu)化檢測(cè)準(zhǔn)確度,本文使用具有損失函數(shù)特性的GIoU(Generalized Intersection over Union)作為損失函數(shù)。該函數(shù)具有尺度不變的特性,且沒有IoU作損失函數(shù)的缺陷。
IoU計(jì)算式如下
(7)
式中,A代表正確標(biāo)定框的面積;B代表預(yù)測(cè)框的面積??梢钥闯鲇袃煞N情況(重合和未重合)可以使IoU為零,所以在計(jì)算梯度時(shí)會(huì)產(chǎn)生錯(cuò)誤。
GIoU計(jì)算式如下
(8)
式中,C代表兩個(gè)框的最小閉包區(qū)域面積??梢钥闯鲈趦蓚€(gè)框沒有重合的情況下, GIoU與IoU是相等的。但是GIoU優(yōu)于IoU的地方在于它可以充分地反映兩個(gè)框(標(biāo)定與預(yù)測(cè))之間的重合程度,并且可以關(guān)注兩者非重合的區(qū)域。
本文實(shí)驗(yàn)環(huán)境為:Ubuntu18.04,64位操作系統(tǒng),GPU為GTX980Ti。對(duì)于行人的目標(biāo)檢測(cè)實(shí)驗(yàn)結(jié)果,本文采用檢測(cè)精確度(Average Precision,AP)、召回率(Recall)、檢測(cè)速度(Detection Rate,DR)3個(gè)指標(biāo)來對(duì)本文算法進(jìn)行評(píng)價(jià)。
訓(xùn)練網(wǎng)絡(luò)中數(shù)據(jù)預(yù)處理是十分關(guān)鍵的一步。本文實(shí)驗(yàn)選取了來自INRIA數(shù)據(jù)集的圖片,該數(shù)據(jù)集中總共1 804張圖片,包含3 542個(gè)行人。除此以外,本研究還選取了網(wǎng)絡(luò)上500張行人圖片進(jìn)行對(duì)數(shù)據(jù)集的擴(kuò)充。具體方法為:首先將網(wǎng)絡(luò)上收集的行人圖片進(jìn)行標(biāo)注,再將圖片的標(biāo)注信息文件格式轉(zhuǎn)換為YOLOv3可以識(shí)別的格式;然后把兩組數(shù)據(jù)集合成一組數(shù)據(jù)并且按訓(xùn)練集與測(cè)試集為8∶2的比例進(jìn)行分配;最后將分配好的圖像數(shù)據(jù)用于訓(xùn)練。
在訓(xùn)練階段,使用改進(jìn)的YOLOv3訓(xùn)練。相關(guān)系數(shù)如表1所示。
表1 模型參數(shù)設(shè)置Table 1. Model parameter setting
為了驗(yàn)證修改后網(wǎng)絡(luò)的有效性,文中比較了Darknet19網(wǎng)絡(luò)與Darknet53網(wǎng)絡(luò)在同一數(shù)據(jù)集中訓(xùn)練時(shí)間及實(shí)際檢測(cè)效果。在同一數(shù)據(jù)集中分別訓(xùn)練10小時(shí)和23小時(shí),訓(xùn)練的損失值變化對(duì)比如圖所示。
圖4 不同網(wǎng)絡(luò)結(jié)構(gòu)的損失對(duì)比Figure 4. Loss comparison of different network structures
由圖4可以看出,在相同的參數(shù)條件下, Darknet19網(wǎng)絡(luò)下降更快,數(shù)據(jù)的波動(dòng)更小。
在實(shí)際檢測(cè)效果方面,本文分別使用兩個(gè)網(wǎng)絡(luò)來測(cè)試相同的圖像,隨機(jī)選取一張測(cè)試實(shí)例效果圖如圖6和圖7所示。
圖6 基于Darknet53網(wǎng)絡(luò)檢測(cè)后Figure 6. After detection based on Darknet53 network
圖7 基于Darknet19網(wǎng)絡(luò)檢測(cè)后Figure 7. After detection based on Darknet19 network
由圖6和圖7可以看出在降低網(wǎng)絡(luò)結(jié)構(gòu)的復(fù)雜度之后,并未出現(xiàn)未識(shí)別出錯(cuò)的檢測(cè)區(qū)域,也未出現(xiàn)漏檢現(xiàn)象。
綜上,通過對(duì)比實(shí)驗(yàn)可知,在訓(xùn)練階段,改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)可提高訓(xùn)練的速度,并且使訓(xùn)練更加穩(wěn)定;在檢測(cè)階段,改進(jìn)后的網(wǎng)絡(luò)出色地完成了檢測(cè)任務(wù)。
為了驗(yàn)證改進(jìn)損失函數(shù)的有效性以及該改進(jìn)為整體網(wǎng)絡(luò)貢獻(xiàn)的程度,文中基于Darknet19網(wǎng)絡(luò),分別使用原始損失函數(shù)和改進(jìn)后損失函數(shù)的模型在相同數(shù)據(jù)集下進(jìn)行實(shí)驗(yàn)。最終得到的結(jié)果如表2所示。
表2 不同損失函數(shù)對(duì)比Table 2. Comparison of different loss functions
如表2所示,相較于原來,使用GIoU 損失函數(shù)之后的精確率提高了3%左右,在召回率上也有一定的提升。
將本文采用的算法與現(xiàn)階段主流的神經(jīng)網(wǎng)絡(luò)模型Faster R-CNN和傳統(tǒng)的HOG+SVM算法進(jìn)行對(duì)比,對(duì)比結(jié)果如表3所示。
表3 不同檢測(cè)算法對(duì)比Table 3. Comparison of different detection algorithms
由表3可以看出,YOLOv3算法憑借著端到端網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)勢(shì),在檢測(cè)速度上達(dá)到了每張圖片0.051 s的速度,但是其只有68.12%的精確率;Faster R-CNN依靠生成候選框,再對(duì)候選框分類校準(zhǔn),檢測(cè)精度達(dá)到了80.64%。但是由于其網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜導(dǎo)致,因此檢測(cè)速度較慢,平均每張圖片用時(shí)需要0.416 s;傳統(tǒng)的HOG+SVM算法在精確度與速度上都不及其他算法;本文改進(jìn)后的算法是在YOLOv3算法上再精簡(jiǎn)網(wǎng)絡(luò)結(jié)構(gòu),相較于YOLOv3、Faster R-CNN和HOG+SVM算法,其檢測(cè)速度分別提升了0.036 s、0.401 s、0.459 s。使用更加直接的GIoU 損失函數(shù)使本文改進(jìn)算法在檢測(cè)精確率也得到了有效的提升,相較于YOLOv3提升了5%左右,略低于Faster R-CNN。
本文在YOLOv3的基礎(chǔ)上優(yōu)化了其網(wǎng)絡(luò)結(jié)構(gòu),使用更加簡(jiǎn)潔的Darknet19網(wǎng)絡(luò)與多尺度特征圖像結(jié)合,提升了檢測(cè)的速度;通過將邊界框回歸損失函數(shù)修改為GIoU loss損失函數(shù),提高檢測(cè)的準(zhǔn)確度。在INRIA數(shù)據(jù)集中,通過實(shí)驗(yàn)對(duì)比采用該算法取得的預(yù)期效果。另外,本文中改進(jìn)算法具有網(wǎng)絡(luò)簡(jiǎn)單且體積小的特點(diǎn),為各種跨平臺(tái)移植提供了可能。但由于單步檢測(cè)的準(zhǔn)確度低于雙步的檢測(cè)算法,因此所提算法在檢測(cè)精度尤其是小目標(biāo)的檢測(cè)精度上仍有待研究。