袁小平, 馬緒起, 劉 賽
(中國礦業(yè)大學信息與控制工程學院, 徐州 221116)
據(jù)中國汽車工業(yè)協(xié)會統(tǒng)計,2019年中國汽車產(chǎn)銷分別完成2 572.1萬輛和2 576.9萬輛,產(chǎn)銷量繼續(xù)蟬聯(lián)全球第一。然而過多的汽車保有量與相對落后的城市規(guī)劃、道路建設管理產(chǎn)生了沖突,導致城市道路擁擠不堪,交通安全隱患巨大,交通事故頻發(fā)。在現(xiàn)有道路環(huán)境下,提高道路管理水平減少行人車輛聚集擁堵成為中國乃至全世界亟待解決的問題。行人和車輛作為交通系統(tǒng)的主要參與對象,對于行人車輛的目標檢測成為解決現(xiàn)有交通問題的基礎和重點[1-2]。
對行人車輛的檢測可以分為基于人工特征的目標檢測算法和基于深度學習[3]的目標檢測算法?;谌斯ぬ卣鞯臋z測算法首先從圖像中提取出人工設計的特征,然后利用機器學習方法作為分類器,對提取出的圖像特征進行分類。代表算法包括提取出圖像的方向梯度直方圖(histogram of gradient,HOG)[4]特征,然后將HOG特征送入支持向量機(support vector machine, SVM)[5]進行分類。
然而人工設計的特征存在計算復雜、魯棒性差等缺點,使得基于人工特征的檢測算法的應用受到很大的限制。隨著計算機硬件的發(fā)展和卷積神經(jīng)網(wǎng)絡理論的成熟,基于深度學習的目標檢測算法在實時性和準確性方面表現(xiàn)出獨有的優(yōu)勢,成為了當前機器視覺領域的研究熱點。根據(jù)是否預生成候選框,基于深度學習的目標檢測算法又分為基于候選框生成的兩階段(two-stage)目標檢測算法和基于回歸的一階段(one-stage)目標檢測算法。
兩階段目標檢測算法將目標檢測分為兩步進行,首先生成包含目標的候選區(qū)域,然后對候選區(qū)域進行分類和邊框回歸。兩階段目標檢測算法的分類準確率和定位精度較高,但網(wǎng)絡較復雜速度慢,代表算法有SPPnet[6](spatial pyramid pooling networks)以及Faster-RCNN[7](faster Regions with CNN features)系列。與兩階段目標檢測算法不同,一階段目標檢測算法則將分類和定位都看作回歸問題,不需要生成候選區(qū)域直接對特征進行分類和邊框回歸。因此其檢測速度快,但分類準確率不高,尤其對中小目標的檢測效果不甚理想,代表算法有SSD(single shot multibox detector)[8]、RetinaNet[9]及YOLO(you only look once)[10-12]系列。
作為一階段檢測算法的代表,YOLOv3具有算法結構簡單、魯棒性好、檢測速度快、檢測精度較高等優(yōu)點,然而對于中小目標的識別準確率仍然達不到理想水平。針對此問題,在YOLOv3算法的基礎上,提出改進算法DX-YOLO,以期提高在行人車輛檢測任務中對中小目標的檢測效果。
YOLOv3以YOLOv2為基礎,使用新的卷積網(wǎng)絡Darknet-53進行特征提取,利用多尺度特征進行對象檢測,并且在最終的對象分類環(huán)節(jié)使用Logistic取代了Softmax。上述改進使得YOLOv3在保持速度優(yōu)勢的前提下,提升了預測精度。
與YOLOv2不同,YOLOv3使用了新的卷積網(wǎng)絡Darknet-53。如圖1所示,Darknet-53網(wǎng)絡包含 53 個卷積層,能夠提取到豐富的語義信息。由于使用了Resnet構成的殘差單元[13],通過引入shortcut短路連接,解決了網(wǎng)絡加深時出現(xiàn)的網(wǎng)絡性能下降的問題。為了減少參數(shù)量,沒有使用大的卷積核,而是采用1×1卷積核降低特征通道數(shù)量,3×3卷積核進行特征提取。同時隨著卷積層數(shù)的加深,神經(jīng)網(wǎng)絡會出現(xiàn)過擬合現(xiàn)象,為了抑制過擬合Darknet-53在卷積層后添加了批量歸一化層(batch normalization)。
Type為類型;Filters為卷積個數(shù);Size為尺寸;Output為輸出;Convolutional為卷積;Resnet unit為Resnet殘差單元;Avgpool為平均池化;Global為全局;Connected為全連接;Softmax為Softmax分類器圖1 Darknet-53特征提取網(wǎng)絡Fig.1 Feature extraction network of Darknet-53
不同尺度的感受野具有不同層次的語義信息,為實現(xiàn)不同細粒度的檢測,YOLOv3采用FPN[14](feature pyramid networks)結構,提取出不同尺度的特征圖進行對象檢測。對于輸入是416×416的圖片,網(wǎng)絡在79層獲得32倍下采樣13×13大小的特征圖,該特征圖的感受野大,包含抽象的語義信息,適合檢測大尺度的目標。為了檢測中等目標,對79層的特征圖作上采樣,與第61層特征圖進行拼接(concatenation),得到16倍下采樣26×26大小的特征圖。該特征圖的具有中等尺度的感受野,適合檢測中等尺度的對象。同樣的為了檢測小目標,對26×26大小的特征圖再次上采樣,并與第36層特征圖拼接(concatenation),得到8倍下采樣52×52大小的特征圖。該特征圖的感受野最小,適合檢測小尺度目標。
YOLOv3沿用了anchor錨框機制,為每種尺度的特征圖設定3種先驗框,在COCO數(shù)據(jù)集上9個先驗框的大小分別為:(10×13),(16×30),(33×23),(30×61),(62×45),(59×119),(116×90),(156×198),(373×326)。由于52×52的特征圖感受野最小,為其分配(10×13),(16×30),(33×23)3種小的先驗框。同樣地,26×26的特征圖有著中等感受野,先驗框為(30×61),(62×45),(59×119);13×13的特征圖有最大的感受野,先驗框為(116×90)、(156×198)、(373×326)。分配好先驗框,在3個尺度的特征圖上進行分類和邊框回歸。特征圖上的每個網(wǎng)格都會預測3個邊界框,每個邊界框包含4個坐標值,1個置信度值,以及屬于k個類別的概率。因此,每個網(wǎng)格會預測輸出3×(4+1+k)維的向量。與預測得到的坐標值、置信度值以及類別概率相對應,YOLOv3采用了多任務損失函數(shù),包括坐標損失Lloss1、置信度損失Lloss2以及分類損失Lloss3,分別如式(1)、式(2)、式(3)所示,總的損失LlossYOLO為3個損失之和,如式(4)所示。為了平衡各項損失的比重,給予坐標損失更大的權重λcoord=5,而對于不含目標的置信度損失給予小的權重λnoobj=0.5。
(1)
(2)
(3)
LlossYOLO=Lloss1+Lloss2+Lloss3
(4)
較深的網(wǎng)絡結構、多尺度特征融合以及錨框機制,使得YOLOv3在保持較高準確率的同時,具有較快的檢測速度,在MS COCO(Microsoft common objects in context)等數(shù)據(jù)集上的表現(xiàn)超過了SSD、RetinaNet等算法。然而,在中小目標的檢測方面,YOLOv3的準確率仍然達不到理想水平,因此提出改進算法DX-YOLO。首先改進YOLOv3的特征提取網(wǎng)絡,使用ResneXt[15]殘差模塊替換原有的殘差模塊,增加卷積網(wǎng)絡的寬度,減少網(wǎng)絡復雜度;然后引入DenseNet[16]密集連接,實現(xiàn)特征重用,提升網(wǎng)絡的特征利用效率和特征提取能力。
圖2 Resnet殘差單元和ResneXt殘差單元Fig.2 Resnet residual unit and ResneXt residual unit
隨著網(wǎng)絡逐漸加深,網(wǎng)絡收斂會變得慢甚至無法收斂,網(wǎng)絡性能也會變差。為了避免上述問題,YOLOv3在特征提取網(wǎng)絡Darknet-53中,使用了23個Resnet殘差單元,具體結構如圖2(a)所示。Resnet殘差單元在輸入和輸出之間增加shortcut短路連接,通過多個有參層學習輸入輸出之間的殘差表示,而不像一般卷積網(wǎng)絡使用有參層直接學習輸入和輸出之間的關系。這種殘差表示更容易優(yōu)化,能夠避免在網(wǎng)絡層數(shù)加深的同時,出現(xiàn)無法收斂和性能下降的問題。實驗表明學習殘差比直接學習輸入和輸出間映射要容易得多,收斂速度也更快。
Resnet殘差單元在一定程度上抑制了網(wǎng)絡加深帶來的收斂變慢等問題,然而當網(wǎng)絡進一步加深時,仍然會出現(xiàn)梯度消失、訓練困難的情況,并且也加大了網(wǎng)絡設計的難度和計算開銷。為了更好地解決網(wǎng)絡加深帶來的問題,進一步提升網(wǎng)絡的特征提取能力,同時要避免網(wǎng)絡過于復雜,就需要設計新的網(wǎng)絡結構。圖2(b)為ResneXt殘差單元,它在Resnet殘差單元的基礎上,增加了多個稱為Cardinality的卷積分支,使得網(wǎng)絡能夠提取出更豐富的特征信息。與Inception[17]結構不同,ResneXt殘差單元中的卷積分支具有相同的拓撲結構,因此減輕了網(wǎng)絡設計負擔,降低了模型的復雜度,提高了網(wǎng)絡的運行效率。Resnet與ResneXt的性能對比如表1所示,在參數(shù)量級相同的情況下,ResneXt的Top 1和Top 5錯誤率均小于Resnet。
隨著卷積網(wǎng)絡的加深,提取出的特征也由淺變深,淺層的特征包含著具體的位置信息,深層的特征則有著抽象的語義信息。為了更加充分利用各個卷積層提取出的特征,確保網(wǎng)絡層之間的最大信息流,將所有層直接彼此連接,每個層從前面的所有層獲得額外的輸入,并且將自己的特征映射傳遞給后面的所有層,構成了DenseNet密集連接網(wǎng)絡,具體結構如圖3所示。
表1 Resnet與ResneXt性能比較
圖3 DenseNet密集連接網(wǎng)絡Fig.3 Densely dense continuous network
DenseNet網(wǎng)絡中,任意兩個層之間直接相連,每層都以前面所有層的輸出作為輸入,而且前面層的輸出不是通過元素級相加的方式,而是通過在Channel維度上拼接(Concatenation)在一起作為下一層的輸入。對于網(wǎng)絡的第L層輸出,傳統(tǒng)網(wǎng)絡的輸出和DenseNet網(wǎng)絡的輸出分別如式(5)和式(6)所示。
xL=HL(xL-1)
(5)
x′L=HL([x0,x1,…,xL-1])
(6)
式中:xL、x′L分別表示傳統(tǒng)網(wǎng)絡和DenseNet網(wǎng)絡第L層的輸出;HL()表示非線性轉化函數(shù)(non-liear transformation),是一個組合操作,包括一系列的卷積,池化等操作。
從式(5)、式(6)可以看出,DenseNet通過引入密集連接,實現(xiàn)了特征重用。相比于傳統(tǒng)的卷積網(wǎng)絡,DenseNet不需要重新學習冗余特征圖,這種密集連接只需要更少的參數(shù),就可以使卷積層學習到更多的特征,提升了特征利用效率。同時,密集連接也改進了網(wǎng)絡的信息流和梯度,使網(wǎng)絡易于訓練,每個層可以直接訪問來自損失函數(shù)和原始輸入信號的梯度,帶來了隱式深度監(jiān)控。
在實際的行人車輛檢測場景中,不僅存在著大中型車輛等大目標,還有許多小型機動車、自行車、行人等中小目標,尤其是行人往往會聚集在一起,產(chǎn)生互相遮擋的問題,給目標檢測增加了很大的難度。作為一階段目標檢測算法的代表,YOLOv3具有檢測速度快、準確率高等優(yōu)點,但對于中小目標的檢測準確率還達不到理想水平,漏檢誤檢的情況時有發(fā)生。為了提升對中小目標的檢測效果,利用ResneXt殘差單元與密集連接改進YOLOv3,構建改進算法DX-YOLO。
首先將Darknet-53網(wǎng)絡中的殘差單元替換為ResneXt殘差單元,可以使網(wǎng)絡提取出更豐富的特征信息,提升特征提取能力。當ResneXt殘差單元的分支數(shù)量增加時,網(wǎng)絡的寬度也相應增加,分支能夠提取出包含不同信息的特征。然而,分支數(shù)量過多時,參數(shù)量也相應增加,會使得網(wǎng)絡運行速度變慢,甚至出現(xiàn)收斂變慢、訓練困難等問題。因此,需要限制ResneXt殘差單元中卷積分支的個數(shù),改進后的ResneXt殘差單元如圖4所示,有4個卷積分支,在幾乎不增加參數(shù)的情況下,可以有效提升卷積網(wǎng)絡的寬度。由于卷積分支的拓撲結構相同,便于模型移植,并且每個分支都采用了三層卷積層構成的Bottleneck結構,可以進一步減少參數(shù)量。具體的,第一層使用1×1卷積核以減少通道數(shù)量,中間層使用3×3卷積核進行特征提取,最后使用1×1卷積核恢復通道數(shù)量。
圖4 改進后的ResneXt殘差單元Fig.4 Improved ResneXt residual unit
為進一步提升網(wǎng)絡的特征提取能力和效率,引入密集連接,將Darknet-53網(wǎng)絡中用于提取52×52、26×26、13×13三種尺度特征圖的殘差塊,改造成密集連接塊。密集連接塊結構如圖5所示,是由多個相同結構的ResneXt殘差單元組成的密集連接網(wǎng)絡。具體的,用于提取13×13特征圖的密集連接塊,內(nèi)部由4個改進后的ResneXt殘差單元以密集連接方式進行連接;用于提取52×52、26×26特征圖的密集連接塊,內(nèi)部由8個改進后的ResneXt殘差單元以密集連接方式進行連接。
綜上,DX-YOLO算法的網(wǎng)絡結構如圖6所示。與原始的YOLOv3相比,DX-YOLO網(wǎng)絡使用了帶有卷積分支的ResneXt殘差單元,能夠提取出更豐富的特征,同時構建了密集連接塊,使得網(wǎng)絡的特征利用效率更高,特征提取能力也更強。
圖5 含有ResneXt殘差單元的密集連接塊Fig.5 Dense connection block with ResneXt unit
Type為類型;Filters為卷積個數(shù);Size為尺寸;Output為輸出;Convolutional為卷積;ResneXt unit為ResneXt殘差單元;Conv為卷積;YOLO Detection為YOLO檢測網(wǎng)絡圖6 DX-YOLO網(wǎng)絡結構Fig.6 DX-YOLO network structure
軟件環(huán)境使用Ubuntu 16.04LTS操作系統(tǒng),Darknet深度學習框架。在硬件配置上CPU使用英特爾酷睿i9-7900X; GPU為英偉達GTX 1080Ti 11G顯存。
實驗選用Udacity數(shù)據(jù)集,該數(shù)據(jù)集采集自真實的道路場景,圖像中包含多種尺度的行人和車輛目標,并且有互相遮擋的目標,適合作為行人車輛檢測用的數(shù)據(jù)集,部分圖像如圖7所示。數(shù)據(jù)集含有24 420張分辨率為1 920×1 200的圖像,標注有pedestrain(行人)、biker(騎車的人)、car(汽車)、truck(卡車)、trafficlight(交通信號燈)共5個類別。為便于統(tǒng)計分析,將其中的pedestrain(行人)、biker(騎車的人)這2類合并為person(行人)類,將car(汽車)、truck(卡車)這2類合并成car(車輛)類。
圖7 Udacity數(shù)據(jù)集Fig.7 Udacity data set
將Udacity數(shù)據(jù)集以7∶1∶2的比例分成訓練集、驗證集和測試集,并且利用平移、旋轉、鏡像、翻轉等方法對訓練數(shù)據(jù)進行擴充。由于算法在錨框的基礎上進行分類和回歸,因此設置的錨框數(shù)量、大小和比例,將會影響檢測效果。根據(jù)Udacity數(shù)據(jù)集的特點,采用K-means算法對數(shù)據(jù)集進行維度聚類,得到大、中、小三種尺度共計9個錨框,大小分別為(320,180),(200,136),(155,81),(103,55),(69,44),(63,140),(46,33),(28,26),(25,63)。將前3個大的錨框分配給大尺度檢測單元,中間3個中等錨框分配給中尺度檢測單元,最后3個小錨框分配給小尺度檢測單元。
分配完錨框,開始對網(wǎng)絡進行訓練。訓練采用Adam優(yōu)化器,使用默認參數(shù),初始學習率設置為0.001,衰減系數(shù)設置為0.000 5,批大小設置為32,當?shù)?5 000步時,將學習率衰減為0.000 1。訓練過程的損失函數(shù)曲線如圖8所示,從圖8可以看出,隨著迭代的進行損失逐漸收斂,在20 000步左右趨于穩(wěn)定。
圖8 DX-YOLO訓練損失曲線Fig.8 DX-YOLO loss curve of training
3.3.1 不同算法實驗對比
為檢驗提出的改進算法DX-YOLO的效果,將其與SSD、Retinanet、YOLOv3算法進行對比,以相同的方法在Udacity數(shù)據(jù)集上訓練和測試。以平均精度(average precision,AP)和(mean average precision,mAP)作為評價指標,AP和mAP的值越高,說明算法對目標的檢測效果越好。實驗結果如表2所示,可以看出,對于person(行人)類別的檢測,DX-YOLO的AP值最高,達到了93.04%,比YOLOv3算法高出4.31%,比Retinanet 和SSD算法分別高出4.79%、6.06%;而對于car(車輛)類別的檢測,DX-YOLO的AP也是最高,達到 92.08%,較YOLOv3算法高出2.53%;綜合person(行人)和car(車輛)兩類目標,DX-YOLO算法有著最高92.56%的mAP,比YOLOv3算法高出3.42%。由此可見,DX-YOLO 算法對行人車輛目標的檢測效果明顯優(yōu)于YOLOv3。
3.3.2 不同尺度目標的檢測效果對比
為檢驗DX-YOLO算法對不同尺度目標的檢測效果,將測試集上的行人車輛目標按照尺度大小進行分類,劃分為large(大)、medium(中)、small(小)三個類別。實驗結果如表3所示,可以看出,對于大目標,DX-YOLO和YOLOv3都能取得很好的檢測效果,AP分別達到95.86%、94.32%。在中等目標上DX-YOLO的AP比YOLOv3高出2.74%,在小目標上比YOLOv3高出5.98%。可以看出,改進算法DX-YOLO對于中小目標的檢測比YOLOv3效果更好。
表2 不同算法的檢測結果
表3 不同尺度目標的檢測結果
圖9為YOLOv3算法和DX-YOLO算法在實際場景中檢測效果對比,可以看出對于被遮擋的行人和車輛目標,YOLOv3存在漏檢的情況;對于遠處較小的行人和車輛目標,YOLOv3也出現(xiàn)了漏檢。DX-YOLO算法則能正確檢測出行人和車輛目標,沒有出現(xiàn)漏檢的情況,檢測效果優(yōu)于YOLOv3算法。
圖9 YOLOv3與DX-YOLO實際場景檢測效果對比Fig.9 Comparison of detection results between YOLOv3 and DX-YOLO
針對YOLOv3對中、小目標檢測效果不理想的問題,提出改進算法DX-YOLO。經(jīng)過理論分析和實驗驗證,得出以下結論。
(1)使用ResneXt殘差模塊替換YOLOv3網(wǎng)絡中原有的殘差模塊,優(yōu)化卷積網(wǎng)絡結構,提升了網(wǎng)絡的特征提取能力。
(2)受到DenseNet的啟發(fā),引入密集連接,實現(xiàn)了特征重用,提高了提取特征的效率,同時密集連接也有利于網(wǎng)絡的訓練和收斂。
(3)在行人車輛數(shù)據(jù)集Udacity上進行實驗,結果表明DX-YOLO與YOLOv3相比,mAP提升了3.42%;在中等目標和小目標上的AP分別提升了2.74%和5.98%??梢姳疚乃惴―X-YOLO相比YOLOv3,具有更好的檢測效果。