馬浩良 謝林柏
(江南大學物聯網工程學院 無錫 214122)
隨著國家經濟的快速發展與人民生活質量的不斷提高,近年來城市道路的車輛逐年增多,導致交通擁擠、事故頻發。面對上述問題,智能交通系統(Intelligent Transportation System,ITS)應運而生,而其中車輛檢測與識別在指導交通疏導、規避交通事故、卡口收費等方面有了越來越廣泛的應用,因此逐漸成為圖像視覺領域的一個研究熱點[1]。
傳統的機動車檢測算法[2~3]通常人工設計算法來提取圖像特征。文獻[4]基于Vibe 算法實現了機動車檢測并結合自適應閾值與雙特征有效地抑制了機動車檢測中常見的鬼影和空洞現象。文獻[5]針對夜間車輛檢測精度相對不高的問題,提出通過構建車頭燈對空間幾何關系的高斯混合模型(GMM)和采用逆投影車輛樣本的AdaBoost 分類器準確檢測夜間車輛的方法。上述機動車檢測方法都是基于傳統的目標檢測算法來實現的,其特點是計算效率高、算法的設計復雜度低,然而在實際的應用場景中,傳統的機動車檢測算法需要針對特定的場景設計有針對性的特征,難以適應環境惡劣、復雜多變的場景,泛化能力較差,越來越難以勝任日趨復雜的交通環境。
近年來深度學習迅速發展,機動車檢測進入一個新的階段。其中卷積神經網絡作為一種多層神經網絡,在圖像處理方面得到了廣泛的應用,它在大量訓練數據的驅動下,通過卷積、池化、權值共享、全連接等操作,對圖像數據進行降維的同時又能保留有效信息,極大降低了對圖像平移、場景變化等的敏感性[6]。目前基于深度學習的目標檢測算法主要分為兩種,一是有基于區域的檢測算法(two-stage detector),如:Fast R-CNN[7],Faster R-CNN[8];二 是 基 于 回 歸 的 物 體 檢 測 算 法(one-stage detector)如:SSD[9],YOLO[10],YOLO2[11]。針對機動車檢測,文獻[12]提出一種基于區域卷積神經網絡(R-CNN)模型改進的機動車檢測方法,該方法以Faster R-CNN 模型為基礎,通過多尺度訓練及挖掘難負樣本,相比Faster R-CNN 算法在KITTI數據集上檢測精確度提高了8%。文獻[13]以Faster R-CNN模型為基礎,通過嵌入輕量級的建議網絡及不同特征的融合技術,相比Faster R-CNN算法在DE-TRAC 數據集上檢測精確度提高了9.5%。在文獻[14]中,以SSD作為機動車檢測的框架,通過分析類間的特征提高模型的檢測效果。
本文基于SSD搭建了機動車檢測的框架。SSD算法應用了大量的先驗包圍框來覆蓋整個特征圖,然而很多先驗包圍框的尺寸并不符合機動車的尺寸,同時在機動車數據集中,機動車通常在一幅圖像中占比很小,導致在訓練過程中出現大量的負樣本數據,存在正負數據不均的現象。針對以上問題,本文在SSD 的基礎上,應用聚類方法對車輛數據集進行數據挖掘以得到更符合車輛尺寸的先驗包圍框,利用級聯SSD在訓練過程中挖掘正負樣本來剔除部分負樣本數據,從而提升機動車的檢測精度。
如圖1 所示,SSD 算法是基于回歸的目標檢測算法,主要分為四部分:基礎網絡部分,附加特征提取層部分,先驗包圍框生成部分,卷積預測部分。SSD 網絡以尺寸為300*300 的圖像作為輸入,首先基于基礎網絡VGG16 模型和附加特征提取層來提取圖像特征,然后從中選取了6個不同尺度的特征層作為目標檢測的依據,經過mbox_pribox 網絡,mbox_loc 網絡和mbox_conf_flattern 網絡,最終輸出目標的坐標值、所屬類別及其置信度,在訓練過程中,SSD 算法將輸出結果和真值通過loss 層計算損失,再通過反向傳播算法來更新模型的參數。
SSD 網絡開始部分基于VGG16 模型來提取圖像特征,為了獲取不同尺度的特征信息,SSD 網絡分別從其中選取了六個特征層,其中VGG16 模型中尺度分別為38*38 的conv4_3_norm 層、19*19 的fc7 層可以獲取較大尺度的特征信息,SSD 附加網絡中尺度分別為10*10 的conv6_2 層、5*5 的conv7_2層、3*3的conv8_2層和1*1的conv9_2層。SSD 將這六個傳遞到卷積預測層,作為目標檢測的特征依據。

圖1 SSD的網絡框架圖
2.2.1 先驗包圍框尺寸問題
在SSD 檢測算法中借鑒了Faster R-CNN 中的anchor boxes 機制,而anchor boxes 的個數和寬高比例是根據先驗知識手動精選的,然后通過網絡學習,適當調整anchor boxes 來預測目標位置。如果在初始階段能夠選擇更具有代表性的anchor box?es,那么網絡將更加容易學習到準確預測機動車位置的參數。
對UA-DETRAC[15]數據集中機動車的尺寸分布進行分析,如圖2 所示,分布在直線上的點代表原始區域候選框的尺寸,分布在圖中的灰色代表數據集中機動車的實際尺寸。通過比較機動車的尺寸和原始區域候選框的尺寸可以發現,原始區域候選框的尺寸為了盡可能地覆蓋不同尺度的目標,因此分布線性,而在機動車數據集中,機動車的實際尺寸分布分散而且可多的分布在中小尺度之間,原始區域候選框的尺寸分布在最小尺寸(30,30)和最大尺寸(264,264)之間,而機動車實際尺寸集中分布在(0,0)和(150,300)之間,兩者的尺寸分布相差較大。因此需要選取更加符合車輛實際尺寸的原始區域候選框。

圖2 車輛類型尺寸分布圖
2.2.2 正負樣本不平衡問題
SSD 算法借鑒了Faster RCNN 的思想,在選取的六個特征層的每個單元上設置不同尺度的先驗包圍框,假設特征圖的大小為m*m,每個單元設置k 個先驗包圍框,對于機動車檢測來說是二分類問題,則檢測類別為2,因此所有的單元輸出2km2個預測值,對于SSD 來說六個特征層conv4_3_norm層、fc7 層、conv6_2 層、conv7_2 層、conv8_2 層 和conv9_2 層的每個單元分別設置4、6、6、6、4、4 個尺度的先驗包圍框,因此共輸出8732 個先驗包圍框,然而在密集采樣的先驗包圍框中,絕大部分內容為背景,在經過匹配步驟后標記為負樣本,當大量的負樣本參與到訓練過程時,導致正負樣本的數量存在巨大的差距,不利于車輛檢測模型的優化。
針對以上問題,本文在SSD 算法的基礎上提出了改進的機動車檢測算法。改進的SSD 方法應用聚類方法對車輛數據集進行數據挖掘以得到更符合機動車尺寸的先驗包圍框。為了優化機動車正負樣本不平衡的問題,本文借鑒two-stage 檢測器的在區域提取階段過濾負樣本的思想[16],引入了級聯SSD,先在第一階SSD中用二分類檢測出目標和背景,然后用這種粗略的操作指導第二階SSD調整an?chor的位置和大小過濾掉部分負樣本,再進一步檢測機動車。改進的SSD方法的整體結構如圖3所示。
在機動車數樣本中,機動車的尺寸及長寬比例往往存在一定的規律,比如機動車的尺寸通常不會超過圖像尺寸的1/3,轎車、卡車等車型有比較固定的車身比例。為了選擇更加適用于機動車檢測的原始區域候選框,替代手動選擇的先驗包圍框,本文引入統計學習中的k-means 方法。通過對機動車數據集中的ground truth box 進行聚類,找到ground truth box 的分布規律,將先驗包圍框的數量作為聚類數量k,將先驗包圍框的尺度作為聚類中心,通過k-means 統計機車數據集的車輛尺寸規律可以獲得優于手動選擇的先驗包圍框。

圖3 改進的SSD的整體結構圖
標準的k-means 方法采用的是歐氏距離,這樣會導致在機車數據集中大尺寸的ground truth box會計算出更大的誤差。然而,我們真正想要的是產生高IOU得分的先驗包圍框,與其大小無關。因此采用了如式(1)的距離度量。

其中,box 為ground truth box,centro 為聚類中心,areabox為ground truth box 的面積,areacentro聚類中心的面積。

表1 k-means聚類結果
聚類中心的個數越多,其與ground truth box 的IOU越高,然而先驗包圍框的個數越多,SSD算法的計算量越大。為了兼顧SSD 算法的計算性能和IOU,本文將聚類中心的個數設置為5,表1 所示是k-means 方法聚類后的結果,表2 是SSD 原始模型長寬比設置,可以看出,原始SSD 中先驗包圍框的尺寸與機動車的尺寸并不符合,機動車聚類中心高寬比限制在0.7~1 之間,尺度限制在(12.48,17.21)至(87.35,124.86)之間。如圖4 所示,為了使得SSD 網絡的先驗候選框與機動車尺寸更加匹配,機動車尺寸大部分與conv4_3層、fc7層中的先驗包圍框的尺度較為匹配,因此將SSD 中的附加預測層conv8_2,conv9_2 刪除,然后按照聚類結果的指導,把conv4_3 層1/2 長寬比更改為0.7,0.95,基于聚類指導的SSD模型長寬比設置如表3所示。

表2 SSD模型先驗包圍框長寬比

表3 基于聚類指導的SSD模型長寬比設置
SSD算法在訓練過程中,由于生成的8732個先驗包圍框大部分會被匹配為負樣本,為了避免網絡由于過多負樣本參與訓練而導致loss 不穩定,SSD采用了Hard negative mining 的方法,按照先驗包圍框的置信度進行排序,選取置信度較高的先驗包圍框進行訓練,將正負樣本控制在3∶1,然而針對機動車檢測,要取得最優的比值,需要重復進行大量的調參實驗,而且針對不同的機動車數據集,最優的比值往往不同,難以訓練出更高精度的模型。為了更好地抑制正負樣本不平衡現象,本文引入了級聯SSD 的網絡結構,如圖(4)所示,級聯SSD 將兩個SSD 網絡進行串聯,在第一級SSD 中挖掘正負樣本并微調先驗包圍框的坐標及尺寸,同時將第一級SSD 的特征層通過特征融合作為輸入連接至第二級SSD,第二級SSD 以第一級SSD 的正負樣本的分類結果及微調后的先驗包圍框作為指導知識,抑制大量負樣本引入的loss,同時進一步調整先驗包圍框,獲取精確度更高的目標位置。第二級SSD的損失函數是在第一級SSD 輸出結果的指導下進行計算的,這樣做會優化模型的訓練結果,其定義如式(2)所示。

為了提高機動車的檢測精度,級聯SSD 在兩級SSD 的連接部分引入了特征融合,特征層通過反卷積操作與上一層特征層進行融合,增加了上下文信息,增強了模型特征提取能力。如圖4 所示,特征融合部分將第一級SSD 中的深層特征和淺層特征融合形成融合特征層,作為第二級SSD中級動車檢測的特征層,深層特征通過反卷積操作增加維度,與淺層特征通過Concat操作進行融合,得到的融合特征層一半來自深層特征,一半來自淺層特征,當通道數不符合時可以通過1*1 的卷積核來改變通道數。

圖4 特征融合框架圖
本文在UA-DETRAC 機動車數據集上驗證改進SSD 的性能,DETRAC 數據集是一個具有挑戰性的真實世界多目標檢測和多目標跟蹤基準。該數據集中包括在中國北京和天津的24 個不同地點使用Cannon EOS 550D 相機拍攝的10 小時視頻。UA-DETRAC 數據集在不同的場景中捕獲,包括晴天、多云、雨天和夜晚,因此變化很大,極具挑戰性,平均每個視頻幀包含8.6個車輛,遮擋頻繁發生,因此對機動車定位也帶來了極大的阻礙。
本文的實驗環境如下:操作系統為64 位的ubuntu16.04,CPU:Intel Xeon E5-1650@3.20GHz×12,GPU:NVIDIA GeForce GTX 1070/PClE/SSE2,網絡模型基于Caffe[17]框架進行搭建。
為了評估本文算法在機動車檢測的有效性,本文采用準確率(precision)和召回率(recall)來衡量模型的性能。圖5 為改進SSD 與其他經檢測方法的P-R 曲線。圖6 為改進SSD 在UA-DETRAC 數據集下的部分檢測結果。表5 為UA-DETRAC 測試集下改進SSD 與DPM[2]、ACF[3]、YOLO2[11]、Fast?er R-CNN[8]、SSD[9]的檢測準確度對比情況,測試結果表明,在UA-DETRAC 數據集下改進SSD 比其他方法取得了更好的檢測精度。相比于原始SSD,改進SSD 具有更高的平均準確率,整體提升了13.07%。改進SSD 在兩個SSD 之間加入特征融合,能夠兼顧機動車的深層特征與淺層特征,另外改進SSD 應用聚類方法初始化先驗包圍框的尺寸,級聯SSD 的網絡結構更好地抑制了負樣本的干擾,使得改進SSD 在Hard、Rainy、Night 這些機動車遮擋頻繁,環境惡劣復雜的情況下分別提升了8.46%、2.51%、10.08%。

表5 UA-DETRAC測試集檢測準確度對比情況(mAP)%

圖5 UA-DETRAC測試集下不同方法的P-R曲線

圖6 UA-DETRAC測試集部分檢測結果
為測試改進SSD 的計算性能,本文與其他方法進行對比試驗。結果如表6 所示,改進SSD 比SSD增加了網絡結構,計算速度稍慢,但是在取得更高檢測精度的同時,計算速度仍可以達到20 frame/s,明顯快于其他方法,基本可以達到機動車檢測的實時性要求。

表6 不同檢測方法的檢測速度frame/s
針對機動車檢測任務,本文結合聚類算法和基于區域的檢測算法的思想對SSD 做出了改進,在UA-DETRAC 數據集下相比原始SSD 方法提升明顯,對復雜場景具有很好的魯棒性。改進SSD方法針對機動車檢測具有較快的速度,但在嵌入式系統中的檢測速度仍然很慢,下一步將精簡和壓縮模型結構,增強其嵌入式系統部署能力。