宋巖貝,魏 維,何冰倩
(成都信息工程大學 計算機學院,四川 成都 610255)
隨著我國經濟發展水平的不斷提高,汽車數量不斷增加,在給人民帶來極大便利的同時也為社會的管理治理提出了更高的要求。以智能停車場系統為例,該類系統拍攝的照片大都以車輛正面圖片為主,因此本文以車輛的正面圖片作為研究的出發點。目前基于視頻圖像的車型識別方法主要分為3個方向:①基于模型;②基于淺層特征;③基于深層特征。
基于模型的車型識別方法核心思想是對車輛的二維圖片進行重新建模,然后使用模型進行車型匹配,如3D模型[1,2]、線框模型、示意圖模型等。但由于這些模型只能反映出不同車型之間的形狀差異,因此大多只能用于粗粒度車型分類[3],如貨車、轎車、摩托車等。
對于細粒度車型識別[4,5],以SIFT[6]、SURF[7,8]等特征描述子為代表的淺層特征[9,10]和以卷積神經網絡為基礎的深層特征是細粒度分類主要用到的兩種方法。淺層特征的缺點是其表示性不好,使得識別準確率不高,而深層特征的提取往往需要借助額外的語義標注才能取得較好的效果。因此本文提出了一種基于中層特征的細粒度車型識別算法,所提取的中層特征表示性好于淺層特征,同時又不需要高層特征所需的額外的標注,能夠有效地提高細粒度車型識別的準確率,非常適合計算資源較為緊張的情景。
本文采用基于Adaboost的車臉定位算法。Adaboost算法最早由Viola等運用在人臉識別檢測[11]領域,并取得了很好的效果。近年來也有許多學者將其用于車臉定位。該算法的核心是訓練多個弱分類器,然后將多個弱分類器組合成一個強分類器。
首先初始化訓練樣本的權重,設總共有N個樣本,第i個樣本的權重Wi如式(1)
(1)
弱分類器hk定義如式(2)下,p表示閾值
(2)
某分類器在訓練集上的誤差ek如式(3)所示
(3)
根據誤差計算該分類器的權重ak,式(4)
(4)
更新權重分布如式(5)所示,Zk為歸一化常數
(5)
最后按權重組合弱分類器,如式(6)所示。車臉定位的效果如圖1所示
(6)

圖1 車臉定位效果
圖像的特征按層次可分為低層特征,中層特征和高層特征[12]。低層特征像如SIFT,SURF等一些特征描述子。雖然這些算子在絕大多數的分類場景中可以取得很高的準確率,但其也有明顯的不足。這些算子只能描述當前這個像素點周圍很小范圍內的變化情況,無法描述該區域在全局中的重要性情況,無法在車輛型號的精細劃分的任務中取得令人滿意的效果。而高層特征與低層的紋理、顏色等特征是沒有直接關系的,若要使用則需要對圖像進行語義等相關特殊標記,需要數據集的支持,由于我們所用的數據集為自己采集的各個品牌車輛的正面照,并不包含相關的標記,所以這里我們將低層特征進行了一些組合使其成為更具全局性的中層特征-patch。
圖2列舉了5類車型經過本文算法提取到的patch組合,每組取了5個作為展示。

圖2 重要性patch
首先為每一幅經過車臉定位的圖片建立其圖像下采樣金字塔,提取每個樣本的多尺度patch,這樣就形成了patch候選集。接下來的主要工作將是如何從候選集中選取有價值的patch。
要解決這個問題,首先要定義何為重要。對于車輛的前臉圖片而言,雖然車型不同,但有許多外觀特征是共有的,例如會有較大面積的純色色塊,這些特征會極大影響分類的準確性,應當去除。相反,對于那些每個系列車型獨有的特征應當充分重視,所以我們尋找patch的原則有兩點:①同類型中頻繁出現;②不同類型中幾乎不出現。在實現過程中這兩點必須是同時滿足的。換言之,重要性patch的定義:①簇內高頻性;②簇間差異性。
根據patch的定義,首先要滿足簇內高頻性,最常用也是最直接的方法就是Kmeans聚類,將每一類樣本的所有patch放到一起單獨進行聚類,找出K個具有代表性的patch簇,很容易就可以滿足patch高頻性的要求。對于簇間差異性的要求,我們的方法是使用分類解決,將上一步聚類聚成的K個簇使用支持向量機訓練出K個特征檢測器。訓練的正樣本為該簇的簇內成員,負樣本為除本類樣本外的其它類樣本patch。假設目前的K個監測器是最理想的K個,那么就可以使用這K個檢測器提取本類最具代表性和鑒別意義的特征。
一次聚類后會有多個無效簇,因此需要對其進行一定的篩選。由于進行聚類的樣本是來自同類車型的樣本,所以理想狀況下每個簇內的patch應當只來自本類的圖片且囊括本類型的所有樣本。因此可以從以下兩個方面對簇進行優化:①去除來自同一幅圖片的成員;②去除成員類別過于雜亂的簇。
patch的提取流程如圖3所示。本文使用簡單閾值法和交叉驗證相結合的方法進行patch篩選。首先把原始數據集分為D1、D2兩部分。在D1使用一次kmeans將所有patch聚成K個簇,對聚成的K個簇進行個數檢測,去除個數小于4的簇,該方法可以去除60%的無效簇。然后將過濾后的簇使用SVM訓練成檢測器。將D1中訓練出的檢測器放到D2中運行,在D2中生成新的簇成員。使用新的簇訓練新的檢測器。再送入D1中運行,如此迭代運行直至收斂。每一次迭代需要更新該簇的鑒別分數,鑒別分數的定義為
(7)
Nneg為該簇在其它類patch中的響應次數,Nall為該簇在所有樣本中的響應次數。該分數越高說明當前簇的鑒別意義越大。最后根據每個簇的分數,對所有檢測器進行排序,選擇每類中鑒別分數高的N個檢測器作為特征。算法流程見表1。

圖3 patch提取過程

表1 算法詳解
現有比較典型的特征編碼方式有BOW詞包算法,SPM空間金字塔匹配等。詞包算法(Bag of words)[13]最初應用于文本檢索領域,后被引入計算機視覺領域。其核心思想是在全局范圍內找出K個具有代表性的視覺詞組成視覺詞典,然后分區域統計響應直方圖,用1*K的一維向量表示一幅圖片。但是這種方法有很明顯的缺陷,對于整幅圖片來說,所有的位置信息都被丟棄了,所以在BOW的基礎上,S-Lazebnik等提出了一種新的方法空間金字塔匹配[14](spatial pyramid matching),這種方法將圖片分為大小不同的金字塔狀的塊,然后分別統計每個子塊的特征,最后再將所有子塊的特征拼接成一個一維向量。因此我們前面在patch篩選的時候結合了這兩種算法的思想,既考慮到代表性同樣兼顧位置信息。那么在學習到有效的patch之后,如何利用這些patch呢?
假設總共有C類車系,每類車系各有k的檢測器,設特征向量為:Vi(1,2,3,…,C*k),默認值為0。每一列的數值對應一個檢測器。向量Vi可以理解為某個樣本對于C*k個檢測器的響應程度,若某個檢測器產生響應,則將向量Vi對應位置上的值置為1,否則為0。這樣統計每個樣本的對C*k個檢測器的相應程度,所有訓練樣本的矩陣可表示為V=[V1,V2,…,VC*M]。最后使用Linear-SVM分類。
本文所用的數據集為從各大汽車論壇搜集到的各類品牌車型的正面照,主要涉及大眾和奧迪兩個品牌,其中,大眾包括桑塔納、捷達、速騰、polo、高爾夫、朗逸、寶來、帕薩特8種車型,奧迪包括A3、A4、A6這3種車型,如圖4所示。之所以只選擇這兩個品牌是因為奧迪和大眾兩個品牌的家族化設計語言相比于其它品牌要強烈的多,兩個品牌旗下各個系列車型間的外觀差距也較其它車型之間小的多,更具代表性,可以更好檢測我們算法的有效性。數據集中共有11種車型共1100張圖片。每類車型取60%用于訓練,40%進行測試。

圖4 訓練數據
車臉定位選取5000張僅含有不同品牌車臉的圖片作為正樣本,負樣本為5000張不包含汽車的任意自然圖片,將所有樣本歸一化為100*200。在windows環境下,CPU為i3-8100,內存16 G,使用opencv自帶的訓練器,使用Haar特征,訓練17個周期。
將經過車臉定位的圖片的大小統一設置為200*500*3,對于圖像的金字塔特征,設置patch的大小最小為80*80,最大不得超過圖像的大小,步長為8,提取每個patch的HOG特征。
在使用K-means進行聚類時。遇到的第一個問題是中心個數的設置,所以本文首先測試不同個數的中心對系統系能的影響,選取了中心個數分別為20、70、120、170、220這5組進行測試,實驗效果如圖5所示,橫坐標1-5分別代表5組不同個數的實例,由圖可知不同個數的中心和預測準確性影響不大,原因是因為特征向量是由C*k個檢測器拼接而成,檢測器的區分性才是影響準確率的重要因素之一。而且隨著中心數量的增多,處理每張圖片的耗時從0.22 s增長到1.79 s,時間復雜度大幅增加。但對準確率的變化影響不大,因此從時間效率的角度考慮,本文在實驗中將中心個數設為20。
在提取圖像的金字塔特征時,首先規定patch的大小,最小為60*60,最大為200*500。其次是金字塔的層數,不同層數的金字塔下系統的準確性和時間效率的表現如圖6所示。x軸表示的是金字塔的層數。在3層時準確性達到95%,僅耗時0.4 s。在增加到6層后,準確率提升了1%,編碼耗時增加到了0.6 s。在多于6層后準確性不斷下滑,原因是特征維數隨金字塔層數的增加而不斷增加,導致了模型的過擬合。綜合考慮金字塔的層數設為6。

圖5 中心個數對系統效率影響

圖6 金字塔層數對系統效率影響
為了進一步驗證本文算法的有效性,引入了6組對比實驗,分別是:詞包算法(BOW)、空間金字塔匹配(SPM)、改進的SPM算法、基于稀疏編碼的空間金字塔(ScSpm)、局部約束線性編碼(LLC)和CNN。
詳細的實驗數據見表2,ScSpm算法主要是使用稀疏編碼替代K-means并引用Max pooling替代SPM的Ave-rage pooling。LLC則認為局部性比稀疏性更重要。因此引入了局部約束的概念。
CNN模型使用的是Jie等提出的模型,由一個包含5個卷積層,3個池化層和3個全連接層的CN模型結合SVM進行分類。為了滿足CNN模型大數據集的要求,對現有數據集進行增強,分別使用隨機對比度變化、隨機飽和度變化、隨機色域變化和增加高斯噪聲4種方法。將數據集擴充為35 200張。
原始的BOW和SPM算法準確率極低,改進后的SPM在加大了車燈和散熱柵格區域的權重后表現有所提高。引入稀疏編碼[15,16]后,ScSpm的準確率比改進后的SPM算法提高了3%,與原始SPM相比提高了13%。與Jie等[17]提出的CNN模型相比,本文提出的算法在識別準確率更高。
表2的實驗數據主要是基于兩個品牌不同的子的系列車型進行識別,除此之外,還進行了不同品牌間車型識別的實驗見表3。可見Jie等的算法在對不同品牌間的車輛識別時有較高的準確率,但在同一品牌子系列車型的識別準確率比本文算法低了7%。
相比于前6種算法,本文算法的識別準確率有巨大的提升,平均準確率達到了95.65,同時本算法的時間復雜度并沒有過大,平均每個樣本的編碼時間為0.82 s,識別耗時0.0032 s。

表2 實驗表1/%

表3 實驗表2
本文以車輛的前臉圖片為出發點,以智能停車場等作為應用場景,主要針對同一品牌不同車系的車型分類進行了研究,對于不同車系之間差距小、特征選擇難的問題,提出了一種基于中層特征的特征自動篩選(KSI)算法,該算法能自適應選取各類車系的最具標識性的特征,在細粒度車型分類的任務中取得了高于主流深度學習方法的準確率,尤其在智能停車場、智能交通監控等計算資源不足的情況下,本文的方法更具可實施性。