戴 舒,汪慧蘭,許晨晨,劉 丹,張保俊
(安徽師范大學 物理與電子信息學院,安徽 蕪湖 241000)
隨著汽車保有量的增加,有效地檢測和識別道路交通場景下的行人目標,對減少交通事故、保證行人的出行安全具有重要的研究價值與現實意義。因此作為基于圖像視頻序列中的場景目標檢測之一的行人檢測一直是計算機視覺領域的研究熱點[1-2]。隨著人工智能快速發展,基于卷積神經網絡的目標檢測算法[3-4]逐步取代了采用機器學習的傳統目標檢測的方法[5],顯著提升了目標檢測的精確度和魯棒性。目前基于深度學習的目標檢測任務主要有以下兩類檢測方法:一類是基于區域建議提取目標候選區域的兩步檢測網絡,通常具有高檢測精度,如Fast-RCNN[6],Faster-RCNN[7],Mask-RCNN[8]等;另一類是基于回歸思想的單步檢測模型,如YOLO(You Only Look Once)[9],SSD[10]以及在此基礎上改進的檢測模型[11-13]等。從COCO,VOC等公開數據集上進行測試分析,單步檢測網絡雖然在精度上稍稍遜色,但在檢測速度方面能更好地達到實時檢測。相比通用的目標檢測任務,交通場景下的車輛行人川流不息,行車安全至關重要,需要以最快速度將行人目標準確檢測出來,這對目標檢測算法的運行速度提出了更高的要求。綜合考慮,本文針對道路交通場景下的行人目標檢測任務,采用同時兼顧速度和檢測精度的YOLO[9]算法進行研究。
YOLO最早是由Joseph Redom 等人于2016年在CVPR上提出的一個端到端的深度卷積神經網絡模型[9],相比基于區域建議提取目標候選區域的兩步檢測網絡,在檢測速度方面能更好地達到實時檢測。但是由于輸入圖像尺寸固定,對檢測速度造成了一定程度的限制,同時每個格子最多只預測出一個物體,當物體占畫面比例較小或重疊時,對較小的目標檢測效果不好。所以基于YOLO一代的問題,YOLOv2[11]提出了一些改進和提升。首先在卷積層后加入批量標準化操作[14],給模型收斂帶來顯著的提升;其次,輸出層使用卷積層替代全連接層,采用k-means在訓練集上進行聚類產生合適的先驗框使得模型的表示能力更強,任務更容易學習;訓練時每隔幾次迭代后就會微調網絡的輸入尺寸,這使得網絡可以適應多種不同尺度的輸入。但是由于該算法僅檢測最后一層卷積輸出層,小物體像素少,經過層層卷積,在這一層上的信息幾乎體現不出來,導致難以識別,所以對于小物體的檢測,YOLOv3[12]在這部分提升明顯。
YOLOv3采用特征融合以及多尺度檢測的方法,使得目標的檢測精度和速度得到有效提升。YOLOv3的網絡架構從YOLOv2的darknet-19[11]已經發展到darknet-53[13],去掉了YOLOv2中的池化層和全連接層,并且在前向傳播過程中,張量的尺寸變換是通過改變卷積核的步長來實現的。同時,YOLOv3采用了殘差的設計思想,用簡化的殘差塊加深了網絡結構,這樣的改進使得網絡的速度得到很大的提升,YOLOv3結構如圖1所示。

圖1 YOLOv3的結構圖Fig.1 Structure of YOLOv3
darknet-53與網絡結構對比如表1[13]所示,通過與網絡結構比較,可知darknet-53與ResNet-101[15]或ResNet-152[15]的準確率接近,但速度更快。
表1 Darknet-53與網絡結構對比Tab.1 Darknet-53 is compared with other network structures

BackboneTop-1Top-5Bn OpsBFLOP/sFPSDarknet-19[11]74.191.87.291 246171ResNet-101[15]77.193.719.71 03953ResNet-152[15]77.693.829.41 09037Darknet-53[13]77.293.818.71 45778
針對小目標漏檢率高的問題,YOLOv3增加了從上至下的多級預測,輸出了3個不同尺度的特征圖,如圖1所示。這里借鑒了特征圖金字塔網絡[16](Feature Pyramid Networks,FPN),采用多尺度來對不同大小的目標進行檢測,其中,Y1,Y2,Y3的深度都是255,邊長的規律是13∶26∶52。這是因為對于COCO類別而言,有80個種類,所以每個候選框應該對每個種類都輸出一個概率。YOLOv3設定的是每個網格單元設置3個候選框,所以每個候選框需要有(x,y,w,h,confidence)5個基本參數,然后還要有80個類別的概率,所以網絡輸出的維度為3×(5+80)=255。
本文針對道路交通場景下的行人目標檢測來說,只檢測行人這一個類別,輸出維度的張量應為3×(5+1)=18。所以本文在原來YOLOv3的基礎上修改模型的分類器,將網絡模型的輸出修改為18維度的張量。
YOLOv3的損失函數主要分為三部分:目標置信度損失Lconf(o,c),目標分類損失Lcla(O,C),以及目標定位偏移量損失Lloc(l,g),其中,λ1,λ2,λ3為平衡系數。總的損失函數如式(1):
L(O,o,C,c,l,g)=λ1Lconf(o,c)+λ2Lcla(O,C)+
λ3Lloc(l,g)。
(1)
YOLOv2的分類損失為交叉熵,針對COCO數據集,使用一個80類的交叉熵可以實現。YOLOv3在分類損失上不使用softmax+交叉熵來做,而是使用n個二值交叉熵來實現。比如在COCO上,使用Logistic+二值交叉熵處理,將一個80分類問題轉化為80個二分類問題。具體來說,與YOLOv2不同,YOLOv3的損失函數最大的變動就是置信度損失和分類損失換成了二值交叉熵損失,其能刻畫兩個概率分布之間的距離,也就是說,交叉熵值越小,兩個概率分布越接近,同時利用sigmoid將神經網絡的輸出映射到一個(0,1)區間。目標置信度損失和目標分類損失分別如式(2)和式(3)所示,都采用了二值交叉熵損失。
(2)
(3)

由式(2)和式(3)可知,當第i個網格的第j個bounding box負責某一個真實目標時,才會去計算分類損失函數。對于一幅圖像,一般而言大部分內容是不包含待檢測物體的,這樣會導致沒有物體的計算部分貢獻可能會大于有物體的計算部分,這會導致網絡傾向于預測單元格不含有物體。因此,本文通過減少沒有物體計算部分的貢獻權重來提高檢測的精確度。
目標定位偏移量損失如式(4)所示。采用的是真實偏差值與預測偏差值之差的平方和。
(4)

基于以上分析,將YOLOv2和YOLOv3目標檢測算法應用到針對道路交通場景下的行人目標檢測當中,對兩種網絡模型得到的行人目標檢測結果進行客觀分析,驗證了基于YOLOv3的行人檢測方法的有效性。圖2展示了基于YOLO的行人檢測算法的流程框圖。

圖2 基于YOLO的行人檢測算法的流程框圖Fig.2 Flow diagram of pedestrain detection algorithm based on YOLO
為使訓練數據集具有較高的質量,實驗主要從VOC2007數據集中獲取包含行人的圖片1 000張,根據Pascal VOC的標簽標注標準,使用LabelImg標注工具,生成訓練所需要的xml文件,每一個圖片名對應一個相應名字的label.xml。為提高模型的檢測能力,選擇加州理工大學提供的Caltech Pedestrian Benchmark行人檢測數據庫,將獲得的不同時間段的視頻按1幀/s進行截圖,獲取訓練樣本后再進行篩選,得到包含圖片和標簽文件的行人數據集共2 000張,最后將圖片生成相應的訓練集和測試集文件。圖3為訓練集及測試集中部分樣本圖像。

圖3 訓練集及測試集中部分樣本圖像Fig.3 Sample images of part of training set and test set
本實驗操作系統為Linux 16.04.5LTS,實驗顯卡為NVIDIA GeForce GTX1080GPU,GPU數量為4,系統的內存為64 G,CUDA的版本為9.0。
為了加速網絡參數的訓練,通過加載darknet53的預訓練模型,修改參數文件,設置batch=64,subdivisions=8,這樣每輪迭代會從所有訓練集里隨機抽取64個樣本參與訓練,64個樣本又被均分為8組,送入網絡進行訓練,減輕內存占用的壓力。如果學習率設置過大,權值更新速度過快,容易越過最優值;相反,學習率設置得太小又更新得慢,效率低。所以將學習率調整到0.001,加快網絡的收斂。當迭代次數大于1 000時,采用policy的更新方式。在此基礎上利用行人數據集進行模型的訓練并保存日志文件。
算法損失變化曲線如圖4所示,縱坐標Avg Loss值表示整個網絡結構在訓練過程中損失函數的變化情況,最后期望趨近于0。觀察可知,YOLOv3在前幾百次的迭代中損失函數值較大,之后從0.6驟然下降到0.1附近,當訓練迭代到4 000次時,學習率衰減10%,損失值緩慢下降。到達6 000次迭代時,學習率又會在前一個學習率的基礎上再衰減10%,學習速率變慢,損失函數值小幅度減小。14 000次以后,損失函數的值基本不再減小,趨于穩定。YOLOv2在接近5 000次的迭代后,損失從一開始的25下降到1附近,之后損失值緩慢下降趨近于零,到達40 000次的時候基本趨于穩定。分析比較可知,YOLOv3較YOLOv2在訓練過程中,損失下降迅速,網絡更加穩定且收斂較快。IOU值變化曲線如圖5所示,Avg IOU表示在當前迭代次數中,候選框與真實標記的邊框之間交集與并集的比值。它的值最好趨近于1。
觀察曲線的變化情況,可知隨著迭代次數的增加,YOLOv2的Avg IOU值整體呈上升趨勢,但震蕩嚴重,不夠穩定;YOLOv3的Avg IOU值整體呈不斷上升趨勢,迭代次數到達5 000次以后,基本趨近于期望值1,矩形框跟目標較好重合,模型檢測行人目標性能較優。

圖4 損失變化曲線Fig.4 Loss curve

圖5 IOU值變化曲線Fig.5 change in IOU
訓練完成后,將測試集分別輸入到訓練好的兩種網絡模型中進行測試驗證,得到YOLOV2和YOLOV3兩種目標檢測算法對測試集中行人樣本的檢測結果,部分識別結果分別如圖6和圖7所示。

圖6 YOLOv2的行人目標識別結果Fig.6 Pedestrian target recognition results of YOLOv2
通過觀察識別結果可知,當圖像中的行人目標大量重疊時,YOLOv2的識別率較低,有漏檢現象,YOLOv3的識別效果較好。對于光線較暗以及目標像素較模糊的圖像,相較于YOLOv3,YOLOv2行人目標存在漏檢和誤檢現象較嚴重,YOLOv3的檢測精確度更高。分析可知,YOLOv3在數據復雜多變的情況下,神經網絡模型的泛化能力更好,抗干擾能力更強,可以有效應對在實際場景下的運動模糊和光線較差等不良因素。對兩種算法在1 000張行人樣本測試集中的識別結果進行統計,采用準確率和召回率對識別結果進行比較,各項指標對比情況如表2所示。
表2 兩種網絡模型的各項指標對比
Tab.2 Indexes of the two network models are compared

檢測模型準確率/%召回率/%平均準確度/%YOLOv287.2982.8682.69YOLOv395.4393.3789.78
分析以上數據可知,基于本文的行人數據集,相對于YOLOv2,YOLOv3的準確度提升8.1%,召回率提升10.5%,平均準確度提升7%。同時,由于YOLOv3網絡架構縱橫交叉,許多多通道的卷積層沒有繼承性,而且每個真實目標矩形框只匹配一個先驗框,每個尺度只預測3個框(YOLOv2預測5個框),降低了網絡的復雜度,使得YOLOv3的檢測速度較快,對于320*320的圖像,YOLOv3的檢測速度可以達到22 ms。
本文詳細闡述了利用YOLO網絡模型來實現復雜道路交通場景下的行人檢測方法,包括修改模型的分類器以及優化網絡參數。實驗結果表明,YOLOv3無論是在檢測精度還是速度上都遠遠超過YOLOv2,取得了良好的檢測效果,并且模型具有較強的泛化能力。下一步,針對模型對圖片中重疊目標的漏檢情況,可從增加訓練樣本圖片的數量和質量來著手,也可通過改進網絡結構,使其在具有密集目標的場景下提高檢測的準確率。