舒壯壯,單 梁,馬苗苗,屈 藝,李 軍
(南京理工大學 自動化學院,江蘇 南京 210094)
隨著自動駕駛、視頻監(jiān)控以及機器人視覺等領域研究的發(fā)展,行人檢測作為其中的重要組成部分,具有極大的應用前景。近些年來深度學習的發(fā)展,也給行人檢測提供了新的思路,與基于機器學習的行人檢測算法相比較,基于卷積神經(jīng)網(wǎng)絡(Convolution neural network,CNN)的深度學習方法極大地推動了行人檢測算法的發(fā)展。
傳統(tǒng)行人檢測算法的設計思想主要是先基于手工設計的特征算子提取行人特征,再利用機器學習的分類模型將檢測問題轉(zhuǎn)換為分類問題來確定行人的位置。Dalal等[1]提出經(jīng)典的方向梯度直方圖(Histograms of oriented gradients,HOG)模型,借助于梯度算子提取特征,再使用支持向量機(Support vector machine,SVM)分類模型將檢測問題劃分為若干個小方格中的分類問題以最終實現(xiàn)行人的檢測。在傳統(tǒng)的行人檢測算法中,特征算子提取到的特征只能是該算子所關注的特征信息,無法充分利用圖像中既有的全部信息,缺乏有效的圖像表達能力,比如HOG模型中的算子僅僅關注梯度信息。
隨著CNN的發(fā)展,行人檢測算法的研究借助于CNN實現(xiàn)飛速發(fā)展。劉翔羽[2]針對手工設計算子提取能力不足的問題,創(chuàng)新地將CNN融入了傳統(tǒng)算法。先是使用CNN提取圖像的不同特征,再使用HOG算子提取CNN提取到的特征圖中的梯度信息。與傳統(tǒng)的HOG模型相比較,因特征提取能力變強而提升了檢測精度。完全基于CNN的區(qū)域卷積神經(jīng)網(wǎng)絡(Region-convolution neural network,R-CNN)[3-6]系列目標檢測算法的提出給行人檢測算法帶來了新的研究方向?;诳焖賲^(qū)域卷積神經(jīng)網(wǎng)絡(Faster region-convolution neural network,Faster R-CNN)[5],Zhang等[7]針對行人檢測中的遮擋難題提出遮擋處理區(qū)域卷積神經(jīng)網(wǎng)絡(Occlusion-aware R-CNN)行人檢測算法,該算法將Faster R-CNN[5]的感興趣區(qū)域(Region of interests,ROI)層中融入了人體特征信息并修改Faster R-CNN的損失函數(shù),在法國國家信息與自動化研究所(Institut National de Recherche en Informatique et en Automatique,INRIA)數(shù)據(jù)集上得到了最佳結(jié)果。Li等[8]為減少不同行人尺度變化帶來的影響提出Scale-aware Fast R-CNN行人檢測算法,該算法使用分而治之的思想針對不同尺度的行人使用不同的子網(wǎng)絡,各個子網(wǎng)絡的輸出融合后作為最后的輸出結(jié)果,獲得不錯的檢測結(jié)果。盡管R-CNN系列的算法提高了檢測精度,但是實時性較差,消耗的計算資源也很大。Redmon 等[9]提出的YOLOv3目標檢測算法平衡了檢測實時性和精度,由于特征提取網(wǎng)絡借鑒了ResNet[10]并且融入了特征金字塔網(wǎng)絡(Feature pyramid networks,FPN)[11]結(jié)構(gòu),具備較強的多尺度特征提取能力,因此比Faster R-CNN[5]更加適用于多尺度行人檢測。葛雯等[12]在原來的FPN基礎上額外增加1個尺度來更好地檢測極小體型行人。施政等[13]在YOLOv3中使用Darknet-53提取可見光和紅外光2類狀態(tài)下的特征,并結(jié)合了注意力機制(Attention mechanism),得到較好的行人檢測結(jié)果。為更好地將行人檢測算法應用于機器人這類缺乏計算資源的平臺,本文提出一種基于YOLOv3的改進行人檢測算法。
YOLOv3在通用數(shù)據(jù)集MS COCO(Microsoft common objects in context)上使用K均值(K-means)聚類方法生成大中小全尺度物體的先驗框。然而行人檢測與通用目標檢測相比,行人身體的長寬比基本是固定的(大致是1.5)。MSCOCO中很大一部分目標的長寬比與行人的比例差距較大,直接將所獲得的先驗框應用于行人檢測將會增加訓練模型的時間。
(1)先從給定樣本X中隨機挑選1個當作第1個聚類中心co。
(3)重復步驟(2)直到選擇出K個聚類中心。
(4)在MSCOCO的行人子集上使用K-means算法獲得先驗框。
由于YOLOv3的特征提取網(wǎng)絡Darknet-53為了提取不同尺度的特征信息而直接借鑒深度殘差網(wǎng)絡(Deep residual network,DRN)和FPN結(jié)構(gòu),所提取到的特征中會出現(xiàn)較多的與行人長寬比不匹配的信息,而特征提取網(wǎng)絡提取到的特征很大程度上直接影響后續(xù)的檢測定位部分的精度以及訓練模型的時間。因此,針對Darknet-53應用于行人檢測時提取到較多與行人不匹配的信息的問題,改進了當前Darknet-53的網(wǎng)絡結(jié)構(gòu)。
整個特征提取網(wǎng)絡的第1部分尤為重要,它決定著整個特征提取網(wǎng)絡從場景中提取到的特征信息量。Darknet-53以及其他借鑒ResNet的特征提取網(wǎng)絡的第1層所使用的結(jié)構(gòu)一般是1個3×3的卷積網(wǎng)絡和1個池化層,來提取原始的特征信息。為從輸入圖中提取到更多特征,采用如圖1所示的莖塊層(Stream block)結(jié)構(gòu),可以在基本沒有增加有效計算力的情況下有效地增加所提取到的特征信息量,且比通過增加第1個卷積層的通道數(shù)能融合更多的信息。
圖1 莖塊層結(jié)構(gòu)圖
原Darknet-53特征提取網(wǎng)絡中主要使用的結(jié)構(gòu)是如圖2所示的稠密層(Dense layer),通過堆疊Dense layer形成Darknet-53。此類結(jié)構(gòu)輸出層只能獲得單一尺度的感受野(Receptive field)。為獲取不同尺度的感受野,本文將其改進為如圖3所示的二路稠密層(Two-way dense layer)結(jié)構(gòu)。其中1條分支使用的是和Darknet-53中的Dense layer一樣的3×3的卷積核和1×1的卷積核,來提取特征;另1條分支摒棄了原來的“短路”設計,采用2個堆疊的3×3卷積核來提取大目標特征;因而在提取到特征信息的同時,能夠更多地保留大物體尺度特征。
圖2 稠密層結(jié)構(gòu)圖
圖3 二路稠密層結(jié)構(gòu)圖
改進后的新特征提取網(wǎng)絡依舊只使用3個尺度的特征融合,例如葛雯[12]的論文中新添加了1個更小尺度的特征融合設計,用于檢測更低分辨率的行人,不僅無法顯著提高mAP(Mean average percision),而且產(chǎn)生更大的計算量,降低了實時性,得不償失。
在損失函數(shù)部分,針對目標定位損失使用L2范數(shù)計算損失值時存在的不足,提出了改進的方法。在YOLOv3的損失函數(shù)中,整個損失函數(shù)分為3個部分:目標定位偏移損失Lloc、目標置信度損失Lconf和目標分類損失Lcls。
在目標定位偏移損失中,YOLOv3使用L2范數(shù)計算預測框與真實框(Ground-truth boxes)之間的差值。
(1)
圖4 L2損失函數(shù)失效場景示意圖
針對以上問題,本文改進為基于交并比(Intersection over union,IoU)函數(shù)的變體廣義交并比(Generalized intersection over union,GIoU)[14],來計算目標定位損失值。針對預測框Ai與對應的真實框Bi,損失值計算如下
(2)
(3)
(4)
式中:N是預測產(chǎn)生的矩形框個數(shù),Ci是Ai與Bi的最小覆蓋矩形。IoUi表征的是Ai與Bi的重疊程度,取值范圍是[0,1]。當Ai與Bi接近完全重合時GIoU(Ai,Bi)=IoU(A,B)=1,而當Ai與Bi接近完全不重合時GIoU(Ai,Bi)=-1,因此GIoUi取值范圍是[-1,1],1-GIoUi的取值范圍是[0,2],總能為每次的檢測做出有效反饋。而且改進的GIoU損失函數(shù)是1個有界函數(shù),不容易發(fā)生梯度爆炸且具有尺度不變性,比L2更加適合作為損失函數(shù)。
在目標置信度損失Lconf中,采用二值交叉熵損失函數(shù)預測目標矩形框內(nèi)存在目標的概率。
(5)
(6)
在目標類別損失Lcls中,同樣采用二值交叉熵損失函數(shù)來預測目標矩形框內(nèi)存在的行人對象。
(7)
(8)
總的損失值為3個損失值的加權和
Loss=λ1Lloc+λ2Lconf+λ3Lcls
式中:λ1、λ2、λ3是3個用于平衡損失值的平衡因子,在最終的代碼實現(xiàn)中將λ1、λ2、λ3分別取為1(h×w×9)、1(h×w×9×2)、1(h×w×9×2),其中h、w是輸入圖像的高度和寬度,9是先驗框的數(shù)量。
為了驗證基于YOLOv3改進的行人檢測算法的有效性,本實驗使用MSCOCO訓練集中的“person”子集來訓練模型,分別使用MSCOCO測試集的“person”子集和自制的行人數(shù)據(jù)集作為測試集合來驗證模型。
為更好提高召回率,并且減少最終所得的檢測器對數(shù)據(jù)集特定樣本的依賴性,在訓練過程中對MSCOCO的“person”子集進行標準的數(shù)據(jù)增廣(Data augmentation)操作,比如隨機翻轉(zhuǎn)、隨機伸縮圖像尺度、隨機裁剪以及隨機改變圖像顏色(亮度、飽和度、對比度),并對數(shù)據(jù)進行簡單的線性處理,使得在沒有數(shù)據(jù)覆蓋的區(qū)域能使用簡單線性插值進行學習。
將訓練所得檢測模型在MSCOCO測試集中的行人子集以及自制的行人數(shù)據(jù)集上進行對比分析,驗證模型皆在CPU i7 8700上進行推理實驗。MSCOCO測試集上的結(jié)果如表1所示。
可以看出,YOLOv3算法經(jīng)過改進,應用在行人檢測上,不僅檢測精度得到了提高,而且也幾乎沒有影響到實時性,對于缺乏計算資源且沒有圖形處理器(Graphics processing unit,GPU)的平臺設備也適用。為了驗證基于YOLOv3改進的行人檢測算法在不同復雜場景下的泛化性能,采集了人群比較密集的樣本621張,對樣本進行行人標定,共有2 731個行人邊界框,從準確數(shù)、誤檢數(shù)、成功率3個方面對算法進行比較分析,結(jié)果如表2所示。其中,對部分樣本的行人檢測效果如圖5和圖6所示。在圖5(a)與圖6(a)中,2個算法都能正常檢測左側(cè)稀疏的人群,而對右側(cè)的嚴重密集重疊的3個人,YOLOv3算法只能檢測出1個人,本文改進算法可以檢測出2人。在圖5(b)與圖6(b)中也能發(fā)現(xiàn),改進算法比YOLOv3可以更加精確地發(fā)現(xiàn)行人。從表1、表2以及圖5、圖6可以看出,基于YOLOv3改進的行人檢測算法在不同的背景下的檢測結(jié)果都相對原始的YOLOv3算法具有較大的提升,更加適合行人檢測場合。
表2 自制數(shù)據(jù)集的2種算法結(jié)果表
圖5 YOLOv3算法的檢測結(jié)果圖
圖6 本文改進算法的檢測結(jié)果圖
與YOLOv3的通用目標檢測算法相比,本文改進算法通過改進預處理過程的錨框、特征提取網(wǎng)絡以及目標定位損失函數(shù),使其更加易于提取行人特征并提供有效反饋,幾乎不影響模型的推理速度,而且還提高了檢測精度。因此本文改進算法更加適用于行人檢測。未來還將繼續(xù)研究行人檢測如何更好地應用到移動機器人領域。