關(guān)曉斌 李戰(zhàn)明
(蘭州理工大學(xué)電氣工程與信息工程學(xué)院 蘭州 730050)
靜態(tài)技術(shù)下的車輛檢測算法相對成熟,但是考慮到實用性,視頻技術(shù)下對車輛檢測[1]的正確性和快速性能夠更加廣泛應(yīng)用到實際領(lǐng)域,在科研方面也具有更加重要的意義。近年來,視頻技術(shù)下車輛檢測得到廣泛研究,研究方法主要分為特征提取和特征分類兩部分[2]。文獻(xiàn)[3]中使用HOG作為特征提取,結(jié)合SVM來檢測車輛,訓(xùn)練樣本檢測效率很高,但實際使用中仍會受到誤差影響。為了解決特征的單一性,隨后的研究人員多提取不同特征來滿足復(fù)雜的實際應(yīng)用。如文獻(xiàn)[4]中使用HOG+Haar-like作為特征提取,結(jié)合AdaBoost來檢測車輛。文獻(xiàn)[5]使用HOG+LBP作為特征提取,結(jié)合SVM來檢測車輛。
本文選擇HOG特征和SIFT特征相結(jié)合的方法做特征提?。?]。HOG特征主要提取物體輪廓信息,應(yīng)用到車輛檢測上效果良好,缺點是對光照遮擋等容忍性較差。而SIFT特征主要提取關(guān)鍵點的局部信息,對光線、噪聲等容忍度較強(qiáng),二者結(jié)合可以產(chǎn)生更加良好的檢測效果。在檢測驗證階段,考慮到是二分類問題,而SVM處理二分類問題相當(dāng)出色,所以使用SVM作為本文的車輛檢測分類器。
首先需對訓(xùn)練集樣本圖片預(yù)處理,因為顏色信息在HOG特征提?。?]中用處不大,所以將訓(xùn)練樣本灰度化處理。具體轉(zhuǎn)化公式為
然后利用Gamma校正的方法提升圖片的整體亮度,以此來降低圖片陰影或光照變化產(chǎn)生的誤差。具體使用了像素值平方根的方法,公式為
其中,I(x,y)是圖像中某點的像素值,γ是變換系數(shù)。
HOG特征主要用于檢測物體的輪廓信息,它可以通過目標(biāo)的形狀等特征[8]以梯度或邊緣的方向密度分布描述,因此在圖像處理領(lǐng)域和機(jī)器視覺領(lǐng)域都有很好的研究價值。
2.2.1 各像素梯度計算
對圖像預(yù)處理之后,需要計算圖像的梯度、梯度方向及幅值,以此來捕獲圖像的輪廓信息。以水平方向[-1,0,1]及垂直方向[-1,0,1]T上分別完成對圖像梯度的計算。計算公式為
其中,Gx(x,y)與Gy(x,y)分別是點(x,y)位于水平方向和垂直方向上的梯度,I(x,y)是圖像中點(x,y)的像素值,θ(x,y)為梯度方向,G(x,y)為梯度幅值。
2.2.2 單元內(nèi)梯度方向直方圖
實際處理中將以單元格作為基本單位,因此構(gòu)造8×8像素大小的單元格,并且單元格之間不能出現(xiàn)重疊。以9個BIN的直方圖對單元格內(nèi)的梯度信息作出統(tǒng)計,將像素的梯度作為權(quán)重,對各個梯度方向在直方圖中加權(quán)投影,便可形成每個單元的描述子[9]。
2.2.3 直方圖歸一
實際應(yīng)用中光照或者背景的變化可能會引起梯度值發(fā)生變化,所以通過構(gòu)建2×2的單元塊做歸一化操作,以此弱化局部變化對梯度值產(chǎn)生的影響。最終,將所有的塊組合起來,生成的信息即為圖像的HOG特征[10]。圖1為HOG特征處理車輛圖片的效果圖。
圖1 HOG特征處理車輛圖片的效果圖
SIFT特征主要用于處理圖像的局部特征,其優(yōu)勢是處理過程中可以減少圖像的尺度縮放、旋轉(zhuǎn)、亮度以及噪聲等問題的干擾。同時,SIFT具有很好的擴(kuò)展性[11],導(dǎo)致它和其他特征提取方法結(jié)合使用時具有很好的親和度。
2.3.1 構(gòu)造DOG尺度空間
由于計算機(jī)視覺并不能提供圖像中物體的尺寸大小,所以要通過建立尺度空間[12],將不同尺度下的圖像提供給計算機(jī),使計算機(jī)做出認(rèn)知。
首先建立圖像金字塔(如圖2)。即先對樣本圖片進(jìn)行平滑處理,再進(jìn)行降采樣,由于采樣率的差異,得到一系列像素點和尺寸不斷變小的圖像,一般每一層圖像的長和高都是上一層的一半。然后使用高斯卷積處理圖像金字塔每層的圖像得到LOG圖像,本來的圖像金字塔每層的圖像在卷積之后又增加了多張模糊圖像[13]。卷積公式為
L(x,y,σ)為圖像的高斯尺度空間,G(x,y,σ)為高斯核函數(shù)。由于卷積產(chǎn)生的圖像過多,將相鄰的圖像減法處理,重新構(gòu)建得到圖像金字塔,即DOG尺度空間[14]。
圖2 圖像金字塔
2.3.2 關(guān)鍵點搜索和精確定位
接下進(jìn)行極值點的檢測和定位,當(dāng)某個點的像素值大于或者小于周圍所有點的像素值時,該點極有可能是尋找的極值點,通過曲線擬合剔除掉兩類極值點:降低對比度的極值點和不穩(wěn)定的邊緣響應(yīng)點,得到真正的極值點,即特征點[15]。
2.3.3 生成特征方向及描述子
確定特征點之后,通過對這些特征點的方向進(jìn)行賦值以此來實現(xiàn)圖像的旋轉(zhuǎn)不變性。以梯度分布確定最終的方向參數(shù),獲取穩(wěn)定的特征點方向[16]。將這些特征點作為中心,選取16×16的窗口采樣,以8個方向的直方圖來統(tǒng)計每個塊,以此形成一個128維的特征向量。圖3為SIFT特征處理車輛圖片的效果圖。
圖3 SIFT特征處理車輛圖片的效果圖
常用的分類器有SVM(支持向量機(jī))、adaboost分類器、貝葉斯分類器等[17]??紤]到是二分類問題,本文選擇以SVM作為分類器。SVM在學(xué)習(xí)過程中會提供監(jiān)督模型,把訓(xùn)練樣本劃分為訓(xùn)練集與驗證集,圖片訓(xùn)練完成后驗證集去檢測訓(xùn)練效果。
SVM線性分類器主要實現(xiàn)二分類問題,即把需要分類的樣本分為正類和負(fù)類[18](如圖4)。同時尋找出最佳分類的超平面,如圖中g(shù)所示,能夠正確地區(qū)分正負(fù)樣本,并且使得正負(fù)樣本之間的距離最大[19]。其中超平面:
w為超平面的法向量,b為截距,分類決策函數(shù)[20]為
圖4 SVM二分類
處理非線性可分問題時,使用核函數(shù)把非線性問題當(dāng)做是線性問題[21],再以線性可分的方法去解決。常見的SVM核函數(shù)如表1。
表1 SVM核函數(shù)
本文實驗部分通過臺式計算機(jī)完成,操作系統(tǒng)為Window10,CPU為i3-4160,編程語言使用py?thon3.7,編程軟件pycharm,同時結(jié)合使用了opencv庫、scikit-image庫、sklearn庫等配合完成。組合使用部分GTI數(shù)據(jù)集和KITTI數(shù)據(jù)集作為機(jī)器學(xué)習(xí)階段的訓(xùn)練庫,圖片訓(xùn)練使用了8797張車輛圖片和8970張非車輛圖片。其中正樣本包括不同顏色的不同車型,包括越野車、轎車、卡車等,如圖5所示。負(fù)樣本包括路邊樹木、高速公路、防護(hù)欄等不同圖片,如圖6所示。使用SVM時設(shè)置訓(xùn)練集與驗證集8:2,訓(xùn)練完成之后驗證集自動驗證,得到具體的訓(xùn)練檢測率。
圖5 車輛圖片
圖6 非車輛圖片
由于圖片訓(xùn)練一共使用了8797張車輛圖片和8970張非車輛圖片,驗證集占據(jù)了20%,即使用了1759張正樣本和1794張負(fù)樣本作為驗證集。假設(shè)正樣本為PS(Positive sample),負(fù)樣本為NS(Nega?tive sample),正樣本檢測正確的為CP,所有錯檢與漏檢為FA,則檢測率為CP/PS,誤檢測率為FA/PS+NS。
核函數(shù)的選擇是SVM分類器最關(guān)鍵的部分,由于實際數(shù)據(jù)類型十分復(fù)雜,本文對線性分類器和不同的核函數(shù)分類器做出實驗,確定最為有效的方法。由確定的核函數(shù)和訓(xùn)練樣本的特征向量,構(gòu)造決策函數(shù),利用決策函數(shù)對驗證集做出判斷。
本實驗最先選取了LinearSVC的線性SVM分類器,沒有kernel參數(shù)。需要設(shè)置參數(shù)max_iter:即需要運行的最大迭代次數(shù),默認(rèn)設(shè)置為1000,在實際使用中程序報錯顯示需要增加迭代次數(shù),本實驗設(shè)計max_iter為10000。
使用SVC來處理非線性核函數(shù)的實驗。具體使用參數(shù)如下。
1)kernel:首先是核函數(shù)的確定,核函數(shù)可以將非線性問題轉(zhuǎn)化成為線性問題,本實驗驗證了RBF(高斯核)、Sigmoid核及Poly(多項式核)的檢測效率。
2)C:該參數(shù)為懲罰系數(shù),用來控制損失函數(shù)。當(dāng)參數(shù)值設(shè)置越高,則越對誤差難以容忍,而且會出現(xiàn)過擬合。參數(shù)設(shè)置越低時,也容易造成欠擬合。其一般設(shè)置區(qū)間為[0.1,100],本實驗使用懲罰系數(shù)為32。
3)gamma:核函數(shù)系數(shù),該參數(shù)作用于RBF,Poly和sigmoid。gamma值設(shè)置較大,會導(dǎo)致高斯分布又高又瘦,而且相應(yīng)的模型會依賴在支持向量周圍;gamma值設(shè)置越小,會導(dǎo)致高斯分布過于平滑,實際訓(xùn)練中效果會大打折扣。本實驗設(shè)置gamma為5。
4)max_iter:最大迭代次數(shù),在SVC中默認(rèn)是-1,即沒有限制。但是當(dāng)訓(xùn)練次數(shù)飽和,不論訓(xùn)練的標(biāo)準(zhǔn)和精度有沒有達(dá)到要求,訓(xùn)練都會停止(與LinearSVC中的max_iter默認(rèn)值不同,在SVC訓(xùn)練中使用默認(rèn)參數(shù))。
表2 核函數(shù)對比
多項式核函數(shù)是將低維的輸入空間映射到高維的特征空間,雖然默認(rèn)映射到三維空間,但是該過程依然大大提高了訓(xùn)練的時長,檢測效率雖有提高,但訓(xùn)練時長大大增加導(dǎo)致本文拋棄使用多項式核函數(shù)。比較之下,高斯核函數(shù)訓(xùn)練時間較短,而且檢測效率高,因此選擇高斯核作為本文的SVM核函數(shù)。
本文算法與其他傳統(tǒng)算法的訓(xùn)練效率做對比如表3所示。
表3 算法對比
圖片的訓(xùn)練結(jié)束之后,使用SVM處理需要檢測的視頻。本實驗使用的檢測視頻是行車記錄儀高速公路的視頻圖像以及城市道路中的視頻圖像。視頻處理結(jié)果可以看到,完成了對單獨車輛和多車輛的檢測,但是在夜視情況下車輛檢測仍然受到干擾,較遠(yuǎn)行駛的車輛未檢測出來,而且會出現(xiàn)延遲,實際效果仍有待提高。視頻截圖如圖7所示。
圖7 處理后視頻截圖
本文結(jié)合使用了HOG特征與SIFT特征,以此減少特征單一導(dǎo)致的檢測率差的問題。然后結(jié)合SVM分類器利用不同核函數(shù)對同一樣本集作訓(xùn)練對比,得到高斯核函數(shù)情況下車輛檢測率更高,同時訓(xùn)練時長也最短。實驗數(shù)據(jù)表明,車輛檢測率較傳統(tǒng)算法有所提高。最后,以高斯核函數(shù)的訓(xùn)練模型處理視頻文件對實際訓(xùn)練結(jié)果做出驗證,視頻文件反映出夜視情況下車輛檢測仍有問題存在,有些車輛不能被檢測,本文認(rèn)為主要原因在于車輛訓(xùn)練樣本仍然較少,希望后續(xù)可以增加訓(xùn)練樣本并繼續(xù)改進(jìn)算法,將該算法更有效地應(yīng)用到實際中。