李福進,孟路達
(華北理工大學 電氣工程學院,河北 唐山 063210)
汽車在給人們帶來出行便利的同時,不僅帶來了交通擁堵問題,也帶來嚴峻的安全問題。全球每年有120萬人死于交通事故中,平均每25 s就有一人死于車禍。此外,無人駕駛技術逐漸走入人們的生活中,已經成為目前最受關注的人工智能研究方向之一。無論從何種角度,無人駕駛技術都是一項充滿挑戰(zhàn)性的研究工作。在無人駕駛技術中,對行人檢測是尤其重要的板塊,與無人駕駛技術的安全性緊密相連[1]。由于現實生活中環(huán)境背景復雜多樣,場景光照強弱不一,行人之間相互遮擋等問題都是影響行人檢測的因素。在無人駕駛技術環(huán)境下,怎樣使得行人處于安全的環(huán)境下,是一項具有挑戰(zhàn)性的工作。目標檢測是計算機視覺領域的一個重要發(fā)展方向,目標檢測算法主要分為2類:一種是傳統(tǒng)的目標檢測算法,對圖像中的每個區(qū)域進行特征提取,然后使用分類器對圖像進行分類的方法;另一種是不需人工提取設計特征的基于深度學習的目標檢測算法[2]。
自深度學習方法,尤其是卷積神經網絡學習算法的興起,使得目標檢測技術快速精準。基于深度學習的目標檢測算法可以分為2類;一類是基于候選區(qū)域的兩階段算法,以SPP-NET,FASTER-RCNN為代表,首先提取候選區(qū)域,再進行分類和定位,這種算法檢測精度高,但是檢測速度較慢;另一類是基于回歸的一階段目標檢測算法,以YOLO[3],SSD[4]為代表,該算法直接輸出邊界框的位置及其類別,這種算法檢測速度快,可以達到實時檢測的目的,但精度略低。
為了調高SSD算法在無人駕駛行人檢測中的精度與速度,使用MobileNet[5]代替VGG-16網絡作為特征提取網絡,減小模型體積,顯著降低了計算量,提高檢測速度。該研究加入特征金字塔結構[6],使各個特征層之間信息流動,增強語義信息,從而提高檢測精度。
SSD目標檢測算法是一種典型的直接通過回歸的單階段目標檢測算法,識別網絡為VGG-16網絡,將VGG-16網絡中的全連接層改為卷積層,并添加4層具有不同感受野的卷積特征圖,在這些特征層中獲取不同大小和長寬比例的先驗框(default box),類似于Faster R-CNN的anchors機制,然后預測先驗框中目標的種類與位置。
SSD算法采用難樣本挖掘方式(hard negative mining)過濾多余的負樣本框,使正負樣本比例接近3:1,保持樣本平衡,然后利用卷積層提取特征后直接進行分類和回歸,最后使用非極大值抑制法對冗余的檢測框進行剔除。
由于卷積神經網絡不同層有著不同的感受野,也就是每個特征圖上每一個單元對應輸入圖像的尺寸大小不同。假設用m個特征圖做預測,每個特征圖會設置6個大小不同的錨框,如圖1所示,則每個特征圖中錨框大小計算公式如下:
圖1 錨框設置原理圖
(1)
其中,Smin取為0.2,Smax取為0.9,表示最小尺度為0.2,最大尺度為0.9。錨框的高度與寬度計算公式為:
(2)
其中,ar∈{1,2,3,1/2,1/3},是錨框的寬高比。當ar=1時,額外添加了一個默認框,其尺寸為:
(3)
匹配原則如下:
(1)每個真值框和初始框的交并比(IOU)最大的先驗框進行匹配。與真值框匹配的先驗框,稱為正樣本,反之稱為負樣本。通常一幅圖片中的目標非常少,所以真值框很少,但是先驗框又很多,負樣本相對正樣本會很多,極其不平衡。
(2)未匹配的先驗框,真值框與某個先驗框的IOU大于某個閾值,則匹配。為了正負樣本比例接近1∶3,采用難樣本挖掘方式濾掉多余負樣本。
SSD網絡中利用多尺度特征圖預測目標檢測,但如果想要保障檢測的性能,需要使每一層特征圖都必須足夠復雜,才能檢測和精準定位行人。為此,可以通過引入特征金字塔方式,使各特征層信息流動,豐富語義信息,從而更精準地檢測行人。
如圖2所示改進的SSD網絡使用MobileNet作為主干網絡,圖3是分解過程示意圖。
圖2 改進的SSD網絡結構圖
圖3 深度可分離卷積示意圖
圖2中改進的SSD網絡使用MobileNet作為主干網絡。MobileNet模型是基于深度可分解的卷積,將標準卷積分解成一個深度卷積和一個點卷積(1×1卷積核)。圖3中標準卷積輸入P的維度是(DP,DP,M),標準卷積核K(DK,DK,M,N)則得到輸出G的維度(DG,DG,N),則計算量為DK·DK·M·DP·DP·N?,F在將卷積核進行分解,首先對各個通道進行卷積操作,對得到的輸出再進行1×1的卷積。計算量為DK·DK·M·DF·DF + M·N·DP·DP,計算量大大減少,為原來的1/D2K+1/N。
在SSD網絡特征層中進行預測時,淺層特征層的目標空間位置更豐富,深層特征層的語義信息更豐富。為更精準地檢測行人,因此引入特征金子塔結構。如圖4所示,左側是從圖2中選取的6種尺寸(1,1)、(3,3)、(5,5)、(10,10)、(19,19)和(38,38)的特征層組成自上向下金子塔結構。將語義信息更豐富的高層特征圖上采樣,保證與下一特征圖大小相同,再經過1×1的卷積核,將通道數升為512,提高檢測結果,然后將相鄰特征圖融合,從而生成新的特征圖,使信息更加充分,便于檢測,最后送入softmax層進行預測分類與回歸。
圖4 特征金字塔結構
訓練過程中總的目標損失函數是由用于分類的損失Lconf用于回歸的損失Lloc加權和??傮w損失函數公式:
(4)
位置損失函數如下:
(5)
(6)
(7)
置信度損失函數公式如下:
(8)
數據增強是指通過平移、反轉等手段從現有數據中產生新數據的方法。具體進行以下操作:
(1)輸入原視圖像;
(2)采用一個圖像塊,使其與目標有不同的重疊比;
(3)隨機抽取一個圖像塊;
(4)每個抽取的圖像塊設置為固定大小314×314,并以0.5的概率隨機水平翻轉。
實驗配置為:intel i7-8700CPU,64位Ubuntu16.04 LTS操作系統(tǒng),Nvidia GeforceGTX1060GPU,實驗框架為Tensorflow深度學習框架。為檢測算法的性能,該項研究使用PASCAL VOC2007和MSCOCO數據集進行訓練和測試,其中VOC數據集包括4個大類,20種小類別的目標。MSCOCO數據集包括80種類的目標。
該項研究將已經訓練好的SSD模型作為預訓練模型,使用隨機梯度下降算法更新參數,在訓練集上迭代8萬步,設置初始學習率為0.001,權值衰減項為0.000 5,動量項為0.9。
圖5為訓練過程中的損失函數值,通過曲線可以看到在起始階段,網絡損失值偏高,隨著迭代次數的增加,經改進的SSD網絡在迭代次數為4萬次時趨于收斂,改進的SSD網絡保持收斂性能,魯棒性能較強,未發(fā)生過擬合現象。
圖5 訓練過程中損失函數值
使用VOC2007訓練集訓練提出的模型。設置bachisize為16,再前50K次迭代中,學習率為0.001,接著以0.000 1和0.000 01的學習速率各訓練30K次。
訓練結束后,在PASCAL VOC2007測試集(4 950張圖片)上進行測試(IOU=0.5),行人檢測的P-R曲線如圖6所示,由圖6中可以看出,隨著召回率的升高,精確度整體上要高于傳統(tǒng)SSD算法。
圖6 行人的P-R曲線對比
VOC2007數據集上測試結果如表1所示,傳統(tǒng)的SSD網絡在不同層的特征圖進行預測,特征沒有融合,信息語義缺乏,檢測精度低。該項研究加入特征金字塔,高底層間信息流動,檢測精度比傳統(tǒng)SSD提高了8.3%。并且使用70 000張圖片測試實驗實時性,計算fps。將MobileNet作為SSD主干網絡,減少模型體積,在提高檢測精度的同時,加快了檢測速度。
表1 PASCAL VOC 2007檢測結果(顯卡:GTX1060)
為進一步驗證該項研究方法的可行性,在COCO數據集上進行訓練,并從驗證集隨機抽取5 000張行人圖像作為測試集對模型進行評估。不同IOU閾值下檢測進度如表2所示。
表2 COCO數據集檢測結果
從表2中可以看出,該實驗方法要比SSD在各個閾值下的精度都要有所提高,閾值為0.5時,平均精度提升5.2%;閾值為0.7時,平均精度提升4.2%;閾值為0.9時,平均精度提升2.5%。閾值為0.5~0.9時平均精度提升4.4%。
使用基于深度可分解卷積的MobileNet代替?zhèn)鹘y(tǒng)的VGG-16網絡作為SSD的主干網絡提取特征,減小模型體積,顯著降低了計算量,引入特征金字塔結構,增加特征層的復雜程度,豐富特征層信息,在PASCAL VOC2007和MS COCOD的實驗表明,實驗方法比SSD檢測算法檢測更加精準、快速,在無人駕駛技術環(huán)境下,為行人的安全性提供了更好的保障。