羅建華,黃 俊,白鑫宇
(重慶郵電大學 通信與信息工程學院,重慶 400065)
隨著近年來計算機技術的快速發(fā)展,計算機視覺領域也得到了充分發(fā)展.作為計算機視覺的基本問題之一,目標檢測在視頻領域與圖像領域發(fā)揮著重大作用,與人臉識別、人類行為分析,自動駕駛等技術息息相關.但通用的目標檢測算法在檢測小目標物體時由于分辨率較低、圖像模糊等原因導致特征表達能力弱,提取特征不足,在實際應用中存在著漏檢、誤檢及定位精確度不高的情況,嚴重影響目標檢測精度,是目標檢測領域待解決的一個重要問題[1].
傳統的目標檢測方法主要采用手動提取體征,然后通過滑窗的方式來進行檢測.通常采用方向梯直方圖(Histogram of Oriented Gradients,HOG)[2]、尺度不變特征變換(Scale-invariant Feature Transform,SIFT)[3]、可變形部件模型(Deformable Parts Model,DPM)[4]等方式提取物體特征.而真實場景下,常常由于遮擋,距離太遠等因素導致難以提取特征,檢測時常會出現漏檢和誤檢等情況,無法滿足實際需求.隨著深度學習的興起,其提取到的深度特征相比于傳統的手工特征具有更強大的表征能力,基于深度學習的目標檢測算法逐漸成為目標檢測算法的主流.主流的目標檢測算法主要分為兩大類,第1類為兩階段目標檢測算法(two stage),代表為R-CNN(region-convolution neural network)[5]、Fast-RCNN[6]、Faster-RCNN[7]等模型,這類算法將目標檢測分為兩步,首先利用滑動窗口在圖片上獲得候選區(qū)域,并且提取候選區(qū)域的特征向量,然后利用回歸等方法對候選區(qū)域進行分類和位置預測,該類算法在一定程度上提升了目標檢測的準確率.第2類為單階段目標檢測算法(one stage),代表為SSD(single shot multibox detector)[8]、YOLO(you only look once)[9]、YOLOv2[10]、YOLOv3[11],該類算法采取直接回歸目標類別的方式,在一定程度上提升了目標檢測的速度.
盡管目標檢測算法在傳統方式及深度學習方式上已經取得不錯的成績,但仍存在以下問題:對小目標檢測的研究還不成熟,小目標分辨率低、像素占比少.小目標物體其自身占有固定的低分辨率,在目標檢測過程中提取到的有效信息十分有限;卷積神經網絡中深層感受野大,經過多次下采樣后特征圖不斷減小,更難提取特征,導致小目標檢測存在嚴重的物體漏檢、誤檢等情況[12].
本文基于改進的YOLOv3模型,針對道路檢測中小目標檢測時效果不佳及漏檢率較高等問題,首先對YOLOv3網絡結構進行修改,將檢測尺度擴展到4種尺度.并且利用DIOU損失代替YOLOv3算法中預測框平方損失,保持置信度交叉熵損失以及類別概率交叉熵損失函數不變.同時對目標邊框應用K-means++算法進行維度聚類,選取更為合適的Anchor Box.在混合數據集上與其他目標檢測算法進行對比試驗,結果表明改進后的YOLOv3模型在不影響實時性的情況下,小目標的漏檢率有了明顯下降,平均精度有了明顯的提升.
YOLOv3算法是基于YOLOv2算法的基礎上,融合特征金字塔網絡(feature pyramid network,FPN)[13]、殘差網絡(ResNet)[14]等方法提出來的單階段目標檢測算法,它將目標檢測問題轉換為回歸問題,將圖片輸入后即可直接得到目標位置以及類別信息,實現了端到端的檢測.YOLOv3主要由Darknet-53特征提取網絡及預測網絡兩部分組成,Darknet-53包含5個殘差塊,為了避免網絡層數的加深引起的梯度爆炸現象,其借鑒了殘差網絡的思想,使用了大量的跳躍連接保證避免梯度彌散的現象.Darknet-53與傳統的CNN結構不同,不含有全連接層與池化層,為全卷積網絡,其中包含眾多1×1卷積層和3×3卷積層,共包含53個卷積層.在進行道路目標檢測時,由于車輛和攝像頭的距離有遠有近,車輛在圖片上呈現的大小也不等,最后一層輸出的特征圖的尺寸僅為13×13,是原始圖像的1/32.網絡層數越深,導致丟失的小物體的特征越多.在深度神經網絡中,語義信息往往包含在深層次網絡結構中;而淺層網絡結構中具有更大的分辨率并保留了更多的位置信息.YOLOv3網絡由大量DBL結構組成,其中包含卷積層,批量標準化層和激活函數.網絡結構如圖1所示.
圖1 YOLOv3網絡結構Fig.1 YOLOv3 network structure
YOLOv3在預測方面,利用FPN選取主干網絡上3個不同尺度的特征圖進行預測,分別為13×13、26×26、52×52,每種規(guī)模可以預測3個目標邊框.由于多次卷積后小物體的特征容易消失,因此52×52的網格用來檢測小物體.對于一張圖片,初始將其劃分為K×K的網格,如果一個物體的中心落在某個單元格上,那么這個單元格就負責檢測這個物體.最終特征圖輸出的張量大小為K×K×(3×(4+1+C)).其中包括了確定一個目標邊框中所需要的4個中心點坐標、置信度得分以及物體類別.然后將置信度得分小于閾值的邊框得分置為0,最后采用NMS(非極大值抑制)算法去除重復的邊界框,保留得分最大的邊界框為最后的預測框.
不同于YOLOv2算法,YOLOv3算法中選取9個Anchor Box作為人工選取的初始侯選邊框.Anchor Box的大小由K-means聚類算法對數據集進行聚類得到.預測過程中,網絡輸出相對于Anchor Box的偏移量分別為tx,ty,tw,th,Anchor Box和Bounding Box的關系圖如圖2所示.
其中Bounding Box的坐標計算公式如式(1)所示:
bx=σ(tx)+cx
by=σ(ty)+cy
bw=pwetw
bh=pheth
(1)
式(1)中bx,by,bw,bh,分別為Bounding Box的中心坐標及框的寬高;cx,cy分別為當前網格坐標偏移量;pw,ph分別為對應Anchor Box的寬高,利用 sigmoid 函數將偏移量限制在當前網格中,利于收斂;tw和th代表預測框的寬高偏移量.
圖2 Anchor Box與Bounding Box關系圖Fig.2 Relationship between Anchor Box and Bounding Box
損失函數一般用來評價模型的預測值和真實值的誤差,在網絡學習速度的快慢及最終模型預測效果的好壞起著關鍵的作用.YOLOv3中l(wèi)oss由邊界框損失、置信度損失及分類損失3部分組成,如式(2)所示:
(2)
λcoord和λnoobj分別代表邊界框損失和置信度損失的權重.
針對本文所提出的問題,使用目前國際上最大的道路場景下計算機視覺數據集KITTI,其中包括了市區(qū)、鄉(xiāng)村和高速公路等場景下采集的真實圖像數據,每張圖像中多達15輛車和30個行人,并且進行了不同程度的遮擋和截斷[15].KITTI數據集中一共包含8個類別:car、van、truck、pedestrian、pedestrian(sitting)、cyclist、tram以及misc.從KITTI官方網站所下載來的數據集中,訓練集中包含7481張有標注信息的圖片.同時本文將car、van、truck、tram合并為car類,pedestrian(sitting)、cyclistc、pedestrian合并為pedestrian類,并且刪除misc,即本文只需檢測行人及車輛.
由于KITTI中行人樣本相比于車輛樣本較少,可能會導致過擬合問題,導致最終模型泛化能力差.本文在KITTI數據集的基礎上,融合CQUPT-data,形成混合數據集.其中CQUPT-data為自制數據集,圖片的獲取來源為校園內手機攝像頭實拍,總共拍攝了1000張圖片,采取人工手動標注的方式進行標注.本文所采用的混合數據集中共包含8481張圖片,其中7000張用于訓練驗證數據集,1481張圖片用于測試數據集.數據集中部分圖片如圖3所示.
圖3 數據集示例Fig.3 Example of data set
本文提出的改進的YOLOv3模型在傳入數據時選用寬、高均為416個像素點,整體像素為416×416的預處理圖像.
YOLOv3利用FPN結構,利用3個不同的尺度的Anchor Box檢測物體,針對大目標物體檢測效果較佳,因其對淺層信息的提取不充分,在經過多次卷積后小目標物體特征信息丟失,在實際場景中對于小目標物體依舊存在漏檢情況.
針對上述情況,在原有基礎上新增一個檢測尺度,為104×104的特征層,用于將淺層信息提取出來.將104×104的特征層與其他3個特征層進行融合,形成新的特征提取網絡.使得淺層的特征具有較強的位置信息,深層的特征具有較強的語義信息,在降低小目標的漏檢率的同時還增強定位的精度.
改進后的YOLOv3網絡結構如圖4所示,在YOLOv3網絡中進行多次卷積操作,將尺寸為13×13的特征層經過上采樣擴張成26×26的大小,同時與26×26的特征層進行融合,將融合的結果輸入到下一特征層,直到4個檢測尺度相融合.本文設計的4個檢測尺度同時利用淺層高分辨率及深層高語義信息,且在并沒有顯式的增加網絡復雜度的情況下,增強了網絡結構的表征能力,改進后的YOLOv3網絡結構能夠更好適應小目標物體的檢測.
圖4 改進后YOLOv3網絡結構Fig.4 Improved YOLOv3 network structure
IOU是目標檢測中最常用的指標,可以用來評價輸出框與真實框的距離,如公式(3)所示:
(3)
式(3)中A,B分別代表預測框和真實框.IOU具有尺度不變性,但如果兩個框沒有相交,如圖5所示.
圖5 IOU為0的情況Fig.5 Condition where IOU is 0
此時A框與B框,A框與C框的IOU都為0.但A框與B框的距離小于A框與C框的距離.此時IOU無法衡量兩邊界框的距離.YOLOv3算法在計算邊界框損失時采或L2范數來計算位置回歸損失,在評測時卻采用IOU判斷是否檢測到目標.如果直接將IOU作為損失函數,此時loss=0,沒有梯度回傳,無法進行學習訓練.
Rezatofighi等[16]提出了GIOU的思想,先計算兩個框的最小閉包區(qū)域面積Ac,再計算出IOU,然后計算閉包區(qū)域中不屬于兩個框的區(qū)域占閉包區(qū)域的比重,最后利用IOU減去所述比重得到GIOU,如公式(4)所示:
(4)
與IOU類似,GIOU也是一種距離度量,并且GIOU是IOU的下界,在兩個框無限重合的情況下,IOU=GIOU=1.與IOU只關注重疊區(qū)域不同,GIOU不僅關注重疊區(qū)域,還關注非重合區(qū)域,能夠更好的反映兩者的重合度.YOLOv3中邊界框損失由L2范數評估,由于L2范數對物體的尺度比較敏感,SSD論文中直接采用distance losses,即以IOU代替邊界框損失,但IOU無法直接優(yōu)化沒有重疊的Bounding Box.
GIOU針對兩框不相交的情況,提出了一種解決思路.Zheng等人[17]指出,GIOU仍然存在局限性.GIOU實際上通過增大預測框的大小來使其與目標框重疊,如果兩框是相交的,此時GIOU退化為了IOU,即GIOU仍然存在收斂速度慢,并且回歸不準等問題.由此引出了DIOU的思想,與GIOU類似,DIOU在與目標框不重疊時,仍然可以為邊界框提供移動方向.而DIOU可以直接最小化兩個目標框的距離,因此比GIOU收斂的更快.
DIOU表達式如式(5)所示:
(5)
式(5)中,d=ρ2(b,bgt)表示預測框與實際框中心點之間的直線距離,c表示兩者矩形閉包的對角線長度.
本文使用DIOUloss代替YOLOv3中邊界框損失函數:
DIOUloss=1-DIOU
(6)
當兩邊界框DIOU越大時,DIOUloss越小,網絡會朝著預測框與真實框重疊度較高的方向去優(yōu)化.修改后的損失函數如式(7)所示:
(7)
為了驗證改進后損失函數的有效性,使用改進后的損失函數代替原YOLOv3中的損失函數,Anchor Box大小保持不變.表1分別展示了使用IOU、GIOU、DIOU邊界框損失函數在混合數據集上目標檢測效果對比.從表1中可以看出,使用GIOU改進損失函數的YOLOv3算法在混合數據集上目標檢測的平均精度為90.32%,相比于原始YOLOv3算法沒有實質性的提升,這是由于檢測過程中存在大量重疊的邊界框,此時GIOU并沒有進行實質性的優(yōu)化.而使用DIOU改進損失函數的YOLOv3算法的平均精度有顯著提升,達到了92.17%,檢測速度為42.88f·s-1.
表1 YOLOv3改變損失函數后檢測效果Table 1 YOLOv3 detects the effect after changing the loss function
YOLOv3中每一個輸出尺度都采用3個不同的Anchor Box進行預測,Anchor Box尺寸是針對數據集而變化的,需要通過聚類方式得到.原始YOLOv3算法中的Anchor Box尺寸是根據COCO數據集聚類得到,由于COCO數據集中類別太多,且尺寸不一,因此聚類出的Anchor Box形狀不一.本文僅僅針對車輛以及行人,需要重新對混合數據集進行聚類,選出更有代表性的Anchor Box.原始YOLOv3算法采用K-means[18]算法選取Anchor Box,但由于 K-means算法中對初始點的選取比較敏感,需要多次聚類才能得到結果,并且結果不一定是全局最優(yōu),只能保證局部最優(yōu).本文采取K-means++[19]算法,在選取初始點時進行改進,能夠使得聚類中心之間距離足夠遠,并且將距離定義為:
d=1-GIOU(box,centroid)
(8)
K-means++算法步驟如下:
1)從數據集X中隨機選取一個樣本作為聚類中心Ci.
2)對于數據集X中的每一個樣本點Xi,計算出它與最近聚類中心的距離D(Xi).其中:
D(Xi)=1-GIOU(Xi,Ci)
(9)
3)計算每個樣本被選為下一個聚類中心的概率:
(10)
依此選出下一個聚類中心.
4)重復步驟2)和步驟3),直到K個聚類中心被選出.
5)利用上述步驟選定的K個聚類中心運行標準的K-means算法.
依據聚類中心選取9個Anchor Box,使用logistic回歸函數對不同尺度上的每個Anchor Box進行置信度回歸,預測出Bounding Box,然后根據置信度選出最合適的類別.
本文使用優(yōu)化后的K-means++聚類算法,對混合數據集進行聚類分析.保持K值為9不變,經聚類算法迭代后選取的對應Anchor Box的寬高分別為(14,37)、(8,77)、(23,53)、(18,136)、(37,76)、(60,108)、(38,261)、(93,173)、(147,291).
表2 YOLOv3改變聚類算法后檢測效果Table 2 YOLOv3 detects the effect after changing the clustering algorithm
對混合數據集分別使用不同的聚類算法進行聚類得到Anchor Box,其檢測效果如表2所示.從表2中可以看出,使用改進K-means++的YOLOv3算法在混合數據集上的平均精度為91.23%,檢測速度為43.23f·s-1.
本次實驗基于Linux平臺通過Python語言實現,配置Ubuntu 18.04系統,應用深度學習框架Tensorflow1.13.2搭配Keras2.1.5搭建網絡模型,硬件環(huán)境為Inter(R)Core(TM)i7-8750H CPU、16GB內存、NVIDIA GeForce GTX1080Ti 11G顯存.數據集采用自制混合數據集.
對YOLOv3算法和改進的YOLOv3算法分別采用批梯度下降的方式進行訓練,使用遷移學習的思想,加載darknet53.conv.74預訓練權重進行訓練.樣本總共進行50000次迭代,其中批量大小設置為64,初始學習率設定為0.001,動量為0.95,權重衰減系數為0.0002.在網絡迭代40000次和45000次時將學習率分別下降為0.0001和0.00001,使得模型盡快收斂,圖6為訓練過程中平均損失函數收斂曲線.
圖6 avg_loss收斂曲線Fig.6 Avg_loss convergence curve
本文使用均值平均精度(mAP)與每秒檢測幀數(FPS)兩項指標對模型進行評價,小目標漏檢率通過對比YOLOv3算法前后的預測效果評估.其中精確率與召回率的定義為:
(11)
(12)
準確率表示某一類別預測目標中預測正確占總正確樣本的比例,召回率表示預測目標正確占總預測樣本的比例.以召回率為橫坐標,準確率為縱坐標,繪制出P-R曲線,曲線下的面積即為AP.由于本文數據集中只包含兩個樣本,mAP計算如式(13)所示:
(13)
選取6組城市道路圖片,并且分別使用改進后的YOLOv3算法和原始YOLOv3算法進行檢測.實驗結果如圖7所示.
圖7 檢測結果示意圖Fig.7 Schematic diagram of detection results
在第1、2組實驗中,由于距離較遠,靠后的車輛像素較小,原始YOLOv3算法僅僅只能檢測出常規(guī)物體,而漏掉了最后兩輛車.得益于本文所提出的改進YOLOv3算法,本文算法成功的檢測出了漏檢的車輛.
在第3組實驗中,由于樹干的遮擋,并且右側行人的像素較小,原始YOLOv3算法僅僅檢測出正前方的車輛,而漏掉了右側行人.而改進的YOLOv3可以正確定位到右側行人,并且成功的檢測出來該目標.表明本算法在進行小目標檢測時具有良好的抗遮擋能力.
在第4、5組實驗中,最后的車輛距離較遠,原始YOLOv3算法只能檢測出正前方的小轎車,并不能定位較遠的目標.而本文算法在圖像模糊和像素占比少的情況下,依舊能夠成功檢測出漏掉的小目標.
在第6組實驗中,原始YOLOv3算法在檢測過程中漏掉了右側一個行人目標.而本文算法不僅成功檢測出該行人,而且成功檢測出最后的小車.
基于上述分析,原始YOLOv3算法對于小目標檢測均存在漏檢的情況,而本文所提出改進的YOLOv3算法不僅可以有效檢測出遺漏的行人及車輛,并且在檢測小目標時具有良好的抗遮擋能力.
表3 YOLOv3算法改進前后效果對比 Table 3 YOLOv3 algorithm before and after the improvement of the effect comparison
為了進一步驗證本文提出方法的有效性,本文通過檢測精度及召回率對改進的YOLOv3算法進行評價.表3中展示了YOLOv3算法在混合數據集上前后對比實驗的結果.從表中可以看出,相比于原始YOLOv3算法,改進后的YOLOv3算法在混合數據集上的精度及召回率均有提升,對小物體檢測的召回率提高了1.57%,達到90.05%,有效的降低了小物體的漏檢率.
本文還將改進的YOLOv3算法與Faster-RCNN、SSD、YOLOv2,YOLOv3等目標檢測算法進行對比,均采用自制混合數據集進行車輛與行人檢測.同時選取mAP和檢測速度兩項指標對算法進行評估,為了進一步對目標檢測算法進行評估,還引入F1-score指標.
(14)
F1-score是對精度和召回率的調和平均,可以更準確的反映模型的好壞.
表4中展示了其他目標檢測算法與改進的YOLOv3算法對比實驗結果.
表4 改進后算法與其他目標檢測算法對比 Table 4 Comparison between the improved algorithm and other target monitoring algorithms
從表4中可以看出,YOLOv3的平均精度達到了92.82%,檢測速度達到了42.87f·s-1,滿足實時性的要求.同時,本文所提出的改進YOLOv3模型的F1-score排名第一,同時兼顧了高準確率與高召回率,優(yōu)于其他對比試驗.
針對傳統目標檢測算法在檢測小目標物體時漏檢率較高,檢測精度低的問題.本文基于原始YOLOv3算法進行了改進,首先新增了一個檢測尺度,用于降低小目標的漏檢率,并且使用K-means++聚類算法對數據集重新進行聚類,得到合適的Anchor Box,提高了檢測的平均精度和速度.然后使用DIOU損失替代邊界框損失,提高了定位準確度及平均精度.將改進的YOLOv3算法在自制混合數據集上與原始YOLOv3算法進行對比實驗.實驗結果表明改進的YOLOv3能夠有效的降低小目標的漏檢率,并且在不影響檢測速度的情況下,提高檢測的平均精度.本實驗檢測的平均精度達到92.82%.
道路小目標檢測在很多領域具有重要作用,例如交通安全,智能交通,無人駕駛等等,目前該研究依然具有一定的挑戰(zhàn)性.本文主要通過改變特征融合結構、即新增一個檢測尺度,從而更有利于小目標物體檢測.但不同檢測場景下的小目標信息各不相同,即多尺度融合方法的可遷移性較差,并不適合遷移學習,在某個具體場景進行小目標檢測時,要選擇合適的特征融合結構[22].隨著深度學習的發(fā)展及硬件設備的更新,未來可以采用更具優(yōu)勢的YOLOv4網絡來進行道路小目標檢測[23],進一步提升算法的性能.