戴 舒,汪慧蘭,許晨晨,劉 丹,張保俊
(安徽師范大學(xué) 物理與電子信息學(xué)院,安徽 蕪湖 241000)
隨著汽車保有量的增加,有效地檢測(cè)和識(shí)別道路交通場(chǎng)景下的行人目標(biāo),對(duì)減少交通事故、保證行人的出行安全具有重要的研究?jī)r(jià)值與現(xiàn)實(shí)意義。因此作為基于圖像視頻序列中的場(chǎng)景目標(biāo)檢測(cè)之一的行人檢測(cè)一直是計(jì)算機(jī)視覺領(lǐng)域的研究熱點(diǎn)[1-2]。隨著人工智能快速發(fā)展,基于卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)算法[3-4]逐步取代了采用機(jī)器學(xué)習(xí)的傳統(tǒng)目標(biāo)檢測(cè)的方法[5],顯著提升了目標(biāo)檢測(cè)的精確度和魯棒性。目前基于深度學(xué)習(xí)的目標(biāo)檢測(cè)任務(wù)主要有以下兩類檢測(cè)方法:一類是基于區(qū)域建議提取目標(biāo)候選區(qū)域的兩步檢測(cè)網(wǎng)絡(luò),通常具有高檢測(cè)精度,如Fast-RCNN[6],F(xiàn)aster-RCNN[7],Mask-RCNN[8]等;另一類是基于回歸思想的單步檢測(cè)模型,如YOLO(You Only Look Once)[9],SSD[10]以及在此基礎(chǔ)上改進(jìn)的檢測(cè)模型[11-13]等。從COCO,VOC等公開數(shù)據(jù)集上進(jìn)行測(cè)試分析,單步檢測(cè)網(wǎng)絡(luò)雖然在精度上稍稍遜色,但在檢測(cè)速度方面能更好地達(dá)到實(shí)時(shí)檢測(cè)。相比通用的目標(biāo)檢測(cè)任務(wù),交通場(chǎng)景下的車輛行人川流不息,行車安全至關(guān)重要,需要以最快速度將行人目標(biāo)準(zhǔn)確檢測(cè)出來,這對(duì)目標(biāo)檢測(cè)算法的運(yùn)行速度提出了更高的要求。綜合考慮,本文針對(duì)道路交通場(chǎng)景下的行人目標(biāo)檢測(cè)任務(wù),采用同時(shí)兼顧速度和檢測(cè)精度的YOLO[9]算法進(jìn)行研究。
YOLO最早是由Joseph Redom 等人于2016年在CVPR上提出的一個(gè)端到端的深度卷積神經(jīng)網(wǎng)絡(luò)模型[9],相比基于區(qū)域建議提取目標(biāo)候選區(qū)域的兩步檢測(cè)網(wǎng)絡(luò),在檢測(cè)速度方面能更好地達(dá)到實(shí)時(shí)檢測(cè)。但是由于輸入圖像尺寸固定,對(duì)檢測(cè)速度造成了一定程度的限制,同時(shí)每個(gè)格子最多只預(yù)測(cè)出一個(gè)物體,當(dāng)物體占畫面比例較小或重疊時(shí),對(duì)較小的目標(biāo)檢測(cè)效果不好。所以基于YOLO一代的問題,YOLOv2[11]提出了一些改進(jìn)和提升。首先在卷積層后加入批量標(biāo)準(zhǔn)化操作[14],給模型收斂帶來顯著的提升;其次,輸出層使用卷積層替代全連接層,采用k-means在訓(xùn)練集上進(jìn)行聚類產(chǎn)生合適的先驗(yàn)框使得模型的表示能力更強(qiáng),任務(wù)更容易學(xué)習(xí);訓(xùn)練時(shí)每隔幾次迭代后就會(huì)微調(diào)網(wǎng)絡(luò)的輸入尺寸,這使得網(wǎng)絡(luò)可以適應(yīng)多種不同尺度的輸入。但是由于該算法僅檢測(cè)最后一層卷積輸出層,小物體像素少,經(jīng)過層層卷積,在這一層上的信息幾乎體現(xiàn)不出來,導(dǎo)致難以識(shí)別,所以對(duì)于小物體的檢測(cè),YOLOv3[12]在這部分提升明顯。
YOLOv3采用特征融合以及多尺度檢測(cè)的方法,使得目標(biāo)的檢測(cè)精度和速度得到有效提升。YOLOv3的網(wǎng)絡(luò)架構(gòu)從YOLOv2的darknet-19[11]已經(jīng)發(fā)展到darknet-53[13],去掉了YOLOv2中的池化層和全連接層,并且在前向傳播過程中,張量的尺寸變換是通過改變卷積核的步長(zhǎng)來實(shí)現(xiàn)的。同時(shí),YOLOv3采用了殘差的設(shè)計(jì)思想,用簡(jiǎn)化的殘差塊加深了網(wǎng)絡(luò)結(jié)構(gòu),這樣的改進(jìn)使得網(wǎng)絡(luò)的速度得到很大的提升,YOLOv3結(jié)構(gòu)如圖1所示。
圖1 YOLOv3的結(jié)構(gòu)圖Fig.1 Structure of YOLOv3
darknet-53與網(wǎng)絡(luò)結(jié)構(gòu)對(duì)比如表1[13]所示,通過與網(wǎng)絡(luò)結(jié)構(gòu)比較,可知darknet-53與ResNet-101[15]或ResNet-152[15]的準(zhǔn)確率接近,但速度更快。
表1 Darknet-53與網(wǎng)絡(luò)結(jié)構(gòu)對(duì)比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
針對(duì)小目標(biāo)漏檢率高的問題,YOLOv3增加了從上至下的多級(jí)預(yù)測(cè),輸出了3個(gè)不同尺度的特征圖,如圖1所示。這里借鑒了特征圖金字塔網(wǎng)絡(luò)[16](Feature Pyramid Networks,FPN),采用多尺度來對(duì)不同大小的目標(biāo)進(jìn)行檢測(cè),其中,Y1,Y2,Y3的深度都是255,邊長(zhǎng)的規(guī)律是13∶26∶52。這是因?yàn)閷?duì)于COCO類別而言,有80個(gè)種類,所以每個(gè)候選框應(yīng)該對(duì)每個(gè)種類都輸出一個(gè)概率。YOLOv3設(shè)定的是每個(gè)網(wǎng)格單元設(shè)置3個(gè)候選框,所以每個(gè)候選框需要有(x,y,w,h,confidence)5個(gè)基本參數(shù),然后還要有80個(gè)類別的概率,所以網(wǎng)絡(luò)輸出的維度為3×(5+80)=255。
本文針對(duì)道路交通場(chǎng)景下的行人目標(biāo)檢測(cè)來說,只檢測(cè)行人這一個(gè)類別,輸出維度的張量應(yīng)為3×(5+1)=18。所以本文在原來YOLOv3的基礎(chǔ)上修改模型的分類器,將網(wǎng)絡(luò)模型的輸出修改為18維度的張量。
YOLOv3的損失函數(shù)主要分為三部分:目標(biāo)置信度損失Lconf(o,c),目標(biāo)分類損失Lcla(O,C),以及目標(biāo)定位偏移量損失Lloc(l,g),其中,λ1,λ2,λ3為平衡系數(shù)。總的損失函數(shù)如式(1):
L(O,o,C,c,l,g)=λ1Lconf(o,c)+λ2Lcla(O,C)+
λ3Lloc(l,g)。
(1)
YOLOv2的分類損失為交叉熵,針對(duì)COCO數(shù)據(jù)集,使用一個(gè)80類的交叉熵可以實(shí)現(xiàn)。YOLOv3在分類損失上不使用softmax+交叉熵來做,而是使用n個(gè)二值交叉熵來實(shí)現(xiàn)。比如在COCO上,使用Logistic+二值交叉熵處理,將一個(gè)80分類問題轉(zhuǎn)化為80個(gè)二分類問題。具體來說,與YOLOv2不同,YOLOv3的損失函數(shù)最大的變動(dòng)就是置信度損失和分類損失換成了二值交叉熵?fù)p失,其能刻畫兩個(gè)概率分布之間的距離,也就是說,交叉熵值越小,兩個(gè)概率分布越接近,同時(shí)利用sigmoid將神經(jīng)網(wǎng)絡(luò)的輸出映射到一個(gè)(0,1)區(qū)間。目標(biāo)置信度損失和目標(biāo)分類損失分別如式(2)和式(3)所示,都采用了二值交叉熵?fù)p失。
(2)
(3)
由式(2)和式(3)可知,當(dāng)?shù)趇個(gè)網(wǎng)格的第j個(gè)bounding box負(fù)責(zé)某一個(gè)真實(shí)目標(biāo)時(shí),才會(huì)去計(jì)算分類損失函數(shù)。對(duì)于一幅圖像,一般而言大部分內(nèi)容是不包含待檢測(cè)物體的,這樣會(huì)導(dǎo)致沒有物體的計(jì)算部分貢獻(xiàn)可能會(huì)大于有物體的計(jì)算部分,這會(huì)導(dǎo)致網(wǎng)絡(luò)傾向于預(yù)測(cè)單元格不含有物體。因此,本文通過減少?zèng)]有物體計(jì)算部分的貢獻(xiàn)權(quán)重來提高檢測(cè)的精確度。
目標(biāo)定位偏移量損失如式(4)所示。采用的是真實(shí)偏差值與預(yù)測(cè)偏差值之差的平方和。
(4)
基于以上分析,將YOLOv2和YOLOv3目標(biāo)檢測(cè)算法應(yīng)用到針對(duì)道路交通場(chǎng)景下的行人目標(biāo)檢測(cè)當(dāng)中,對(duì)兩種網(wǎng)絡(luò)模型得到的行人目標(biāo)檢測(cè)結(jié)果進(jìn)行客觀分析,驗(yàn)證了基于YOLOv3的行人檢測(cè)方法的有效性。圖2展示了基于YOLO的行人檢測(cè)算法的流程框圖。
圖2 基于YOLO的行人檢測(cè)算法的流程框圖Fig.2 Flow diagram of pedestrain detection algorithm based on YOLO
為使訓(xùn)練數(shù)據(jù)集具有較高的質(zhì)量,實(shí)驗(yàn)主要從VOC2007數(shù)據(jù)集中獲取包含行人的圖片1 000張,根據(jù)Pascal VOC的標(biāo)簽標(biāo)注標(biāo)準(zhǔn),使用LabelImg標(biāo)注工具,生成訓(xùn)練所需要的xml文件,每一個(gè)圖片名對(duì)應(yīng)一個(gè)相應(yīng)名字的label.xml。為提高模型的檢測(cè)能力,選擇加州理工大學(xué)提供的Caltech Pedestrian Benchmark行人檢測(cè)數(shù)據(jù)庫,將獲得的不同時(shí)間段的視頻按1幀/s進(jìn)行截圖,獲取訓(xùn)練樣本后再進(jìn)行篩選,得到包含圖片和標(biāo)簽文件的行人數(shù)據(jù)集共2 000張,最后將圖片生成相應(yīng)的訓(xùn)練集和測(cè)試集文件。圖3為訓(xùn)練集及測(cè)試集中部分樣本圖像。
圖3 訓(xùn)練集及測(cè)試集中部分樣本圖像Fig.3 Sample images of part of training set and test set
本實(shí)驗(yàn)操作系統(tǒng)為L(zhǎng)inux 16.04.5LTS,實(shí)驗(yàn)顯卡為NVIDIA GeForce GTX1080GPU,GPU數(shù)量為4,系統(tǒng)的內(nèi)存為64 G,CUDA的版本為9.0。
為了加速網(wǎng)絡(luò)參數(shù)的訓(xùn)練,通過加載darknet53的預(yù)訓(xùn)練模型,修改參數(shù)文件,設(shè)置batch=64,subdivisions=8,這樣每輪迭代會(huì)從所有訓(xùn)練集里隨機(jī)抽取64個(gè)樣本參與訓(xùn)練,64個(gè)樣本又被均分為8組,送入網(wǎng)絡(luò)進(jìn)行訓(xùn)練,減輕內(nèi)存占用的壓力。如果學(xué)習(xí)率設(shè)置過大,權(quán)值更新速度過快,容易越過最優(yōu)值;相反,學(xué)習(xí)率設(shè)置得太小又更新得慢,效率低。所以將學(xué)習(xí)率調(diào)整到0.001,加快網(wǎng)絡(luò)的收斂。當(dāng)?shù)螖?shù)大于1 000時(shí),采用policy的更新方式。在此基礎(chǔ)上利用行人數(shù)據(jù)集進(jìn)行模型的訓(xùn)練并保存日志文件。
算法損失變化曲線如圖4所示,縱坐標(biāo)Avg Loss值表示整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)在訓(xùn)練過程中損失函數(shù)的變化情況,最后期望趨近于0。觀察可知,YOLOv3在前幾百次的迭代中損失函數(shù)值較大,之后從0.6驟然下降到0.1附近,當(dāng)訓(xùn)練迭代到4 000次時(shí),學(xué)習(xí)率衰減10%,損失值緩慢下降。到達(dá)6 000次迭代時(shí),學(xué)習(xí)率又會(huì)在前一個(gè)學(xué)習(xí)率的基礎(chǔ)上再衰減10%,學(xué)習(xí)速率變慢,損失函數(shù)值小幅度減小。14 000次以后,損失函數(shù)的值基本不再減小,趨于穩(wěn)定。YOLOv2在接近5 000次的迭代后,損失從一開始的25下降到1附近,之后損失值緩慢下降趨近于零,到達(dá)40 000次的時(shí)候基本趨于穩(wěn)定。分析比較可知,YOLOv3較YOLOv2在訓(xùn)練過程中,損失下降迅速,網(wǎng)絡(luò)更加穩(wěn)定且收斂較快。IOU值變化曲線如圖5所示,Avg IOU表示在當(dāng)前迭代次數(shù)中,候選框與真實(shí)標(biāo)記的邊框之間交集與并集的比值。它的值最好趨近于1。
觀察曲線的變化情況,可知隨著迭代次數(shù)的增加,YOLOv2的Avg IOU值整體呈上升趨勢(shì),但震蕩嚴(yán)重,不夠穩(wěn)定;YOLOv3的Avg IOU值整體呈不斷上升趨勢(shì),迭代次數(shù)到達(dá)5 000次以后,基本趨近于期望值1,矩形框跟目標(biāo)較好重合,模型檢測(cè)行人目標(biāo)性能較優(yōu)。
圖4 損失變化曲線Fig.4 Loss curve
圖5 IOU值變化曲線Fig.5 change in IOU
訓(xùn)練完成后,將測(cè)試集分別輸入到訓(xùn)練好的兩種網(wǎng)絡(luò)模型中進(jìn)行測(cè)試驗(yàn)證,得到Y(jié)OLOV2和YOLOV3兩種目標(biāo)檢測(cè)算法對(duì)測(cè)試集中行人樣本的檢測(cè)結(jié)果,部分識(shí)別結(jié)果分別如圖6和圖7所示。
圖6 YOLOv2的行人目標(biāo)識(shí)別結(jié)果Fig.6 Pedestrian target recognition results of YOLOv2
通過觀察識(shí)別結(jié)果可知,當(dāng)圖像中的行人目標(biāo)大量重疊時(shí),YOLOv2的識(shí)別率較低,有漏檢現(xiàn)象,YOLOv3的識(shí)別效果較好。對(duì)于光線較暗以及目標(biāo)像素較模糊的圖像,相較于YOLOv3,YOLOv2行人目標(biāo)存在漏檢和誤檢現(xiàn)象較嚴(yán)重,YOLOv3的檢測(cè)精確度更高。分析可知,YOLOv3在數(shù)據(jù)復(fù)雜多變的情況下,神經(jīng)網(wǎng)絡(luò)模型的泛化能力更好,抗干擾能力更強(qiáng),可以有效應(yīng)對(duì)在實(shí)際場(chǎng)景下的運(yùn)動(dòng)模糊和光線較差等不良因素。對(duì)兩種算法在1 000張行人樣本測(cè)試集中的識(shí)別結(jié)果進(jìn)行統(tǒng)計(jì),采用準(zhǔn)確率和召回率對(duì)識(shí)別結(jié)果進(jìn)行比較,各項(xiàng)指標(biāo)對(duì)比情況如表2所示。
表2 兩種網(wǎng)絡(luò)模型的各項(xiàng)指標(biāo)對(duì)比
Tab.2 Indexes of the two network models are compared
檢測(cè)模型準(zhǔn)確率/%召回率/%平均準(zhǔn)確度/%YOLOv287.2982.8682.69YOLOv395.4393.3789.78
分析以上數(shù)據(jù)可知,基于本文的行人數(shù)據(jù)集,相對(duì)于YOLOv2,YOLOv3的準(zhǔn)確度提升8.1%,召回率提升10.5%,平均準(zhǔn)確度提升7%。同時(shí),由于YOLOv3網(wǎng)絡(luò)架構(gòu)縱橫交叉,許多多通道的卷積層沒有繼承性,而且每個(gè)真實(shí)目標(biāo)矩形框只匹配一個(gè)先驗(yàn)框,每個(gè)尺度只預(yù)測(cè)3個(gè)框(YOLOv2預(yù)測(cè)5個(gè)框),降低了網(wǎng)絡(luò)的復(fù)雜度,使得YOLOv3的檢測(cè)速度較快,對(duì)于320*320的圖像,YOLOv3的檢測(cè)速度可以達(dá)到22 ms。
本文詳細(xì)闡述了利用YOLO網(wǎng)絡(luò)模型來實(shí)現(xiàn)復(fù)雜道路交通場(chǎng)景下的行人檢測(cè)方法,包括修改模型的分類器以及優(yōu)化網(wǎng)絡(luò)參數(shù)。實(shí)驗(yàn)結(jié)果表明,YOLOv3無論是在檢測(cè)精度還是速度上都遠(yuǎn)遠(yuǎn)超過YOLOv2,取得了良好的檢測(cè)效果,并且模型具有較強(qiáng)的泛化能力。下一步,針對(duì)模型對(duì)圖片中重疊目標(biāo)的漏檢情況,可從增加訓(xùn)練樣本圖片的數(shù)量和質(zhì)量來著手,也可通過改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu),使其在具有密集目標(biāo)的場(chǎng)景下提高檢測(cè)的準(zhǔn)確率。