許小偉,余雪靖,嚴運兵,陳乾坤,李浩東
(武漢科技大學 汽車與交通工程學院,湖北 武漢 430065)
隨著汽車保有量的不斷增加,交通擁擠,事故頻發(fā),尤其是車輛追尾事故造成了巨大的交通隱患。因此,車輛識別與距離估計對于智能駕駛安全性具有重要意義[1]。機器視覺是一種利用攝像機對物體進行檢測和識別[2-5]的方法,其中,單目視覺經(jīng)濟性較好,算法柔性大、適應性強,完全可以滿足測距精度要求[6],因此,本文選用單目視覺進行測距研究。
機器視覺中,包括基于傳統(tǒng)特征和基于深度學習的目標識別方法。傳統(tǒng)的目標識別與檢測方法容易受到光照、姿態(tài)等的影響,識別率較低[7]。基于深度學習的目標檢測與識別方法分為單步法和兩步法。兩步法中的第一步需要生成候選目標區(qū)域,第二步采用卷積神經(jīng)網(wǎng)絡確定目標的類別和位置[8-11],兩步法實現(xiàn)了較高的目標檢測與識別精度,但是實時性較差。單步法既考慮目標檢測精度,又考慮實時性的問題,因此在實時檢測方面得到了更廣泛的應用。YOLO系列[12-14]把目標檢測作為在整張圖像上的回歸問題,但是較難檢測相鄰較近的目標。目標檢測(single shot multibox detector,SSD)算法[15]是利用卷積對不同尺度特征圖中的目標進行預測,再將預測結果結合起來做目標檢測與識別,該方法既有較好的實時性,又滿足了目標檢測精度要求,但是對小目標的檢測效果不太好,需要對SSD算法進行改進。因此,本文提出了一種基于改進SSD的單目視覺測距算法。
SSD算法是一種單步法,即直接預測目標類別和邊界框的多目標檢測算法。與兩步法中的Faster R-CNN相比,SSD算法沒有生成目標區(qū)域的過程,極大地提升了運行速度。SSD算法的主網(wǎng)絡采用VGG16[16],并且將最后兩個全連接層改成卷積層,增加4個卷積層構造網(wǎng)絡結構。針對不同大小的目標檢測,SSD算法利用不同卷積層的特征圖進行綜合,對不同大小的目標進行預測。SSD算法的網(wǎng)絡結構如圖1所示。
圖1 SSD算法的網(wǎng)絡結構圖
由上述分析可知:SSD算法中用作目標檢測的特征圖分辨率過小,會導致不能準確且魯棒地檢測較小的目標;但是特征圖分辨率也不能過大,因為特征圖分辨率過大,會導致在同一特征圖上的默認邊界框數(shù)量過多,實時性較差。因此,在SSD算法原有6個特征層的基礎上,其中第3層卷積層由3次卷積操作組成,本文添加第3個卷積層完成第3次卷積操作后的特征圖,即第3_3特征層作為第1個目標檢測的特征層。則作為目標檢測的特征層及其分辨率分別為:第3_3特征層75 pixels×75 pixels,第4_3特征層38 pixels×38 pixels,第7特征層19 pixels×19 pixels,第8_2特征層10 pixels×10 pixels,第9_2特征層5 pixels×5 pixels,第10_2特征層3 pixels×3 pixels,第11_2特征層1 pixels×1 pixels。原SSD算法在不同的特征層上默認邊界框尺寸和高寬比都不同,第4_3特征層、第10_2特征層和第11_4特征層使用了4個高寬比,在其他特征層上都使用了6個高寬比,一共產(chǎn)生了8 732個默認邊界框。而本文對每一層的默認邊界框的尺寸和高寬比進行調整以達到較好的車輛檢測效果,改進的默認邊界框在7個目標檢測的特征層上的總量為9 505個。其默認邊界框尺寸和高寬比如表1所示。
表1 默認邊界框尺寸及高寬比
默認邊界框在同一個特征層有不同的高寬比,在不同的特征層有不同的大小,因此基本可以覆蓋輸入圖像中的各種形狀和大小的車輛目標。
采用兩個不同的3 pixels×3 pixels的卷積核對從第7卷積層到第11卷積層中5種不同的輸出特征圖進行卷積,一個輸出分類用的置信度,每個默認邊界框生成2個類別的置信度(車輛和背景);一個輸出回歸用的位置損失,每個默認框生成4個坐標值(x,y,w,h)。最后,將前面3個計算結果分別合并然后傳給損失層。其損失函數(shù)為:
(1)
其中:Lconf為相應的預測框與目標類別的置信度損失;Lloc為相應的位置回歸損失;N為匹配到默認框的預測框的數(shù)量;α為用于調整置信度損失和位置損失之間的比例;g為真實框;l為模型輸出的預測框;x為預測框是否匹配到某個類別的真實框,分別用0和1表示。采用SSD算法對圖像中的車輛進行目標識別,返回默認框生成的4個坐標值(x,y,w,h)。則檢測框4個頂點坐標為:
(2)
利用改進SSD算法檢測車輛位置,并取檢測框下邊緣的中點作為車輛的像素坐標,利用該像素坐標測量車輛的距離。
圖2為單目測距示意圖。如圖2所示,電荷耦合器件(charge coupled device,CCD)攝像機的有效焦距為f;CCD攝像機的俯仰角為α;CCD攝像機的鏡頭中心到路面的高度為h;光軸與像平面的交點為(x0,y0);像平面坐標系的原點一般取(0,0);路面上一點P在像平面上的投影坐標為(x,y)。點P是檢測出的前方車輛下部邊框的中心點,根據(jù)幾何關系得到點P與鏡頭中心的水平距離d的計算公式為:
d=h/tan{α+arctan[(y0-y)/f]},
(3)
其中:h和α可直接測量得到,而f和y需要攝像機標定得到。y是目標點在CCD像平面上的投影坐標在y軸方向上的分量,稱為像平面坐標,mm。通過圖像處理只能獲得目標點在計算機內存中的坐標,稱為幀存坐標(u,v),單位是像素(pixels)。幀存坐標和投影坐標變換見圖3。因此,要將計算機內存中的幀存坐標轉換到像平面坐標系統(tǒng)中。
圖2 單目測距示意圖
圖3 幀存坐標和投影坐標變換
O(u0,v0)是CCD攝像機光軸與像平面交點(x0,y0)的幀存坐標,該點一般位于幀存圖像的中心處,但由于攝像機制作的原因,也會有些偏離,因此需要對其進行標定。設幀存中的一個像素對應像平面在x軸與y軸方向上的物理尺寸分別為dx、dy,則有變換關系:
(4)
v可由圖像處理獲得,計算y需要預先確定v0和dy的值。因此,為計算式(2),攝像機參數(shù)f、v0、dy必不可少,這就需要進行攝像機參數(shù)的標定。
由式(4)可得:
y=(v-v0)×dy,
(5)
其中:v可以由圖像處理得到。
x0=y0=0。
(6)
將式(5)和式(6)代入式(3),可得:
d=h/tan(α+arctan[-(v-v0)/ay])。
(7)
因此,求內部參數(shù)時只需求出有效焦距f和像素對應的物理尺寸dy的比值ay。
攝像機標定的目的是實現(xiàn)圖像坐標系與世界坐標系之間的轉化,其轉化方式可以以內參矩陣和外參矩陣來表示。為了方便、快捷且安全地進行測距實驗,本文采用仿真軟件PreScan搭建測試場景,采用攝像頭暗箱和PreScan搭建的硬件在環(huán)平臺實現(xiàn)測距工作,其攝像頭的安裝方式如圖4所示。
圖4 攝像頭的安裝方式
在PreScan軟件中設置主車攝像頭與水平面夾角為10°,即α= 10°,安裝高度為1.5 m。將場景圖像投影到攝像頭暗箱顯示器上,其圖像分辨率為2 048 pixels×1 536 pixels,將攝像頭水平放置,并且調整攝像頭高度和左右位置,使攝像頭光心對準屏幕中心,并調整攝像頭到顯示器的距離,使得攝像頭采集的圖像剛好完全包括顯示器中的畫面,PreScan軟件中相機設置如圖5所示。
圖5 PreScan軟件中相機設置
在車輛運動過程中,攝像頭外參會發(fā)生變化,但是本文采用的測距方法只需要知道攝像頭內參,因此在車輛運動過程中不需要考慮攝像頭位置變化導致需要重復標定的問題[17]。采用MATLAB軟件的工具箱標定,其中:ay=2 467.10,v0=749.57,h=1 500,α=10,其距離d可由式(7)計算。
本實驗主要在PC端完成,PC主要配置:CPU為Intel i7-8750h,主頻為2.20 GHz,顯卡為NVIDIA GeForce GTX,操作系統(tǒng)為Windows10。采用CCD攝像機,算法實現(xiàn)軟件環(huán)境為pycharm1.7。為了檢驗算法效果,本文目標檢測選取VOC 2007數(shù)據(jù)集中汽車和非汽車的圖像數(shù)據(jù)進行模型的訓練、驗證以及測試。使用VOC 2007數(shù)據(jù)集分別訓練SSD算法和改進的SSD算法,分別迭代120 000輪。將SSD算法和本文改進的SSD算法做對比,結果通過平均精度均值(檢測出的目標中正確的目標所占的比率)和圖片傳輸速率(每秒鐘所處理的圖像幀數(shù))來判斷算法的改進效果。
由于本文主要關注對中小目標的檢測,因此在同樣的訓練集、驗證集和測試集的條件下對上述模型的檢測結果進行比較,使用評價標準中的平均精度均值來衡量檢測的效果。當網(wǎng)絡閾值(即預測框與真實框的交并比)設置為0.5時,對比不同模型中等車輛目標的檢測精度,結果如表2所示。當網(wǎng)絡閾值設置為0.9時, 對比不同模型小車輛目標的檢測精度,結果如表3所示。
表2 中等車輛目標檢測精度對比
表3 小車輛目標檢測精度對比
由表2和表3可知:當網(wǎng)絡閾值設置為0.5時,對中等車輛目標進行檢測,改進的SSD算法檢測精度比SSD算法的檢測精度高0.6%;而當網(wǎng)絡閾值設置為0.9時,改進的SSD算法對小車輛目標的檢測精度比SSD算法的檢測精度高6.6%,說明本文算法對小目標的檢測精度有較為明顯的提升,雖然檢測速度有所下降,但仍然滿足實時性要求。
為了進一步檢測改進算法效果,采集較為復雜環(huán)境下的圖像,分別采用SSD算法與改進的SSD算法進行車輛目標檢測,結果如圖6所示。
(a) SSD算法車輛檢測效果
(b) 改進的SSD算法車輛檢測效果
圖6 SSD算法和改進的SSD算法車輛檢測對比
從圖6a可以看出:SSD算法對于近處的目標檢測效果較好,對于遠處較小的車輛目標檢測效果較差。從圖6b可以看出:改進后的SSD算法對于近處和遠處的車輛檢測效果均較好,改進后的SSD算法對于SSD算法有一定的改進。
為了檢測改進的SSD算法能夠檢測到的車輛目標的距離,本文采用PreScan場景仿真軟件搭建測試場景,分別將前方車輛放置在距離本車10~80 m距離,經(jīng)檢測得出:改進的SSD算法可以準確地檢測出在0~70 m距離的車輛目標。采用改進SSD算法的部分目標檢測圖如圖7所示。
(a) 距離本車20 m
(b) 距離本車40 m
(c) 距離本車60 m
(d) 距離本車80 m
圖7 改進SSD算法的部分目標檢測圖
表4 測距計算結果
采用式(7)對前方車輛目標測距,計算結果如表4所示。
由表4可知:目標與攝像機距離在70 m以內時,本文提出的算法對目標的定位誤差率在2%以內。
本文提出一種基于改進SSD算法的虛擬場景的車輛檢測與測距算法,并且借助仿真軟件PreScan驗證了該測距算法的效果。當網(wǎng)絡閾值設置為0.9時,改進的SSD算法對小車輛目標的檢測精度提升了6.6%,且可以檢測到距離主車70 m以內的目標;通過PreScan硬件在環(huán)平臺測試前方車輛距離為70 m以內時,可以達到2%的定位精度,滿足實際要求。