代乾龍,孫 偉
中國礦業大學 信息與控制工程學院,江蘇 徐州221008
在全面建設小康社會的奮斗中,國民經濟發展迅速,我國汽車保有量呈現爆炸式增長,使得公路交通安全面臨著巨大的挑戰。車型分類是智能交通系統中的重要組成部分具有廣泛的應用[1-2],包括交通流量統計、智能泊車系統和車型檢測。目前,研究人員在車型識別的問題上做了大量的研究工作。Zhang等人[3]提出了一種方法,使用參數化的三維模型對車輛進行分類。他們與通用車輛尺寸進行了比較,得出了車型分類的結果。但是當車輛不完整或多輛車相互遮擋時,該方法效果較差。文獻[4-5]提取了車輛的外觀特征(例如SIFT[6])以實現車輛類型分類。Zhang等人[7]從車輛正面圖像中提取HOG特征,并將這些特征發送到SVM分類器進行車型分類。
目前,基于車型分類研究工作主要分為手工標注特征和深度學習兩種。Negri 等人[8]提出了一種基于定向輪廓點的投票算法,用于其多類車輛類型識別系統。Psyllos等人[9]使用SIFT功能識別車輛的標志、制造商和型號。Zhang[10]融合了PHOG 特征和Gabor 變換特征來表示車輛,并提出了一種用于識別車輛類型的級聯分類器方案。Peng等人[11]通過車牌顏色、車輛前部寬度和車輛類型分類的類型概率表示車輛。耿慶田等人[12]提出一種新的車型檢測方法,將HOG 特征和LBP 特征進行融合。但是這些方法使用的是手工標注的特征,在復雜場景中可能不具有足夠的辨別力。劉應新等人[13]利用深度學習通過訓練大量的數據來獲得車型分類模型,提出前景提取和深度學習相結合的車型分類方法。石磊等人[14]采用caffe 框架利用深度網絡對車型進行訓練從而識別車型。但是深度學習的訓練需要大量的帶標注的數據集,需要消耗大量的人力物力成本。
針對傳統手工標注和深度學習算法的不足,本文提出一種基于稀疏棧式編碼的車型識別方法。利用稀疏棧式編碼網絡從無標注的數據集上自動學習特征字典,在通過特征字典對圖像進行卷積操作,最后利用少量的帶標簽的數據進行微調。本文算法的網絡結構簡單(只有四層網絡結構),能夠自動提取圖像特征,在保證分類準確率較高的同時不需要大量的制作好的帶標簽的數據集。
自動編碼算法(auto-encoder)是神經網絡中最常見的一種典型算法,主要用于數據降為或者特征的抽取,其屬于無監督學習。對于給定的沒有標注的數據集,自動編碼算法通過無監督學習方式自動的學習數據集的特征。自動編碼算法由三層網絡組成,除去輸入層和輸出層,其內部還有一個隱藏層。自動編碼器的目的是在進行系列的訓練后,輸出值約等于輸入值。自動編碼器結構如圖1所示。

圖1 稀疏自動編碼網絡結構
如果輸入層x={x1,x2,…,xm}共有m 個節點,隱藏層h={h1,h2,…,hk}共有k 個節點,輸出層和輸入層的節點數目相同即,y 是通過隱藏層節點h 對x 的重構。輸入層和隱藏層之間的權重矩陣,偏置,隱藏層和輸出層之間的權重矩陣為偏置,其中表示隱藏層第i 個節點與輸入層第j 個節點之間的權重。是輸出層第j 個節點的偏置值。隱藏層h 的第j 個節點為:

輸出值為aj=f(hj),其中是sigmoid激活函數。
同理輸出層x?的值為:

在訓練過程中,要使得fW,b(x)=x?≈x,就需要不斷地調整權重,使得輸入和輸出之間的誤差J(W,b)最?。?/p>

稀疏自動編碼(sparse autoencoder)就是對隱藏層施加一個稀疏約束,用盡可能少的神經元來表達原始的數據。如果神經元的輸出結果近似于1,則認為它是被激活的,否則認為它被抑制。
在自編碼器中隱藏層神經元j 輸出的平均激活值為:

在加入稀疏性限制后,自動編碼器還需增加額外的稀疏懲罰項,懲罰? 和ρ 偏差明顯過大的結果,始終保證隱藏層神經元的平均激活值一直在0 的附近。稀疏懲罰項可以有很多種,其中一種KL(Kullback-Leibler)散度定義為:

增加稀疏懲罰項后的損失函數為:

其中β 是懲罰項權重因子。
棧式稀疏自動編碼器是深度學習領域中經常用到的一個學習模型。與單層稀疏自動編碼網路相比,棧式稀疏自動編碼網絡含有兩個以上的隱藏層,并且還可以對輸入的圖像特征進行非線性變換,學習到更加復雜的函數關系,具有更加優秀的表征能力。對于輸入的圖像,單隱藏層的稀疏自編碼器學習到的是原輸入圖像的一階特征(比如圖像中的邊緣)。如果繼續增加隱藏層,那么第二個隱藏層會對第一層的特征進行學習,從第一層特征中抽象出更高層次的特征(比如圖像的輪廓或者角點等)。棧式稀疏自編碼器就是在原來稀疏自編碼基礎上繼續加入隱藏層,增加的隱藏層替換掉原來的輸出層。多級別的特征提取使得稀疏棧式自動編碼網絡擁有較高的容錯能力,并且對于圖像的平移、旋轉等變換具有高度不變性,其結構如圖2所示。

圖2 棧式稀疏自動編碼網絡結構
對于如何設置棧式稀疏自編碼網絡的權重初始值,一種主流的方法就是通過逐層貪婪訓練法(greedy layerwise training)來獲得合適的權重初始值。該方法通過使用原始圖像的數據來訓練第一層網絡得到網絡參數的初始值。然后把第一個隱藏層的輸出當作原始輸入數據送入第二個隱藏層進行訓練,如圖3所示。在進行第二個隱藏層訓練的時候,第一個隱藏層的參數保持不變,第二個隱藏層的輸出即為網絡提取的圖像的新特征。相比于隨機初始值而言,逐層貪婪訓練方法會得到更為適合的網絡初始值。

圖3 第二層稀疏自動編碼網絡
在實際應用中,常見的分類器主要時softmax 分類器和SVM分類器。SVM拿到的是類別的得分,softmax得到的是屬于某一類別的概率。結合wolfe[15]等人的研究,softmax分類器更適合本文的車型識別分類。
為了計算每種車型的概率,采用softmax 分類器作為網絡的輸出層。softmax分類器層的輸入是先前經過卷積核池化處理過的特征向量,輸出是類別的概率向量。假設訓練集為{(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))} ,則y(i)∈{1,2,…,k},由于選取的數據集是BIT-Vehicle 數據集,一共有6類車型,所以本文中k=6。給定x(i),假設一個函數來估算每個分類結果出現的概率:


Softmax的損失函數為:

其中,1{?}為示性函數,取值規則為1{值為真的表達式}=1。
本文算法在傳統的稀疏棧式編碼的基礎上,增加了卷積和池化操作。首先通過稀疏棧式編碼提取得到圖像的特征字典,之后把特征字典作為卷積核對圖像進行卷積操作,進一步提取車輛的更高層的語義特征,增強模型的表征能力。由于卷積后的維數較大,還需對卷積后的特征圖進行池化處理,減少計算的成本。改進后的車型識別算法系統流程圖,如圖4所示。
20 世紀60 年代,Hubel 等人研究表明,貓和猴子的大腦視覺皮層含有神經元,它們能夠對局部區域做出反應[16]。受到啟發,Lecun 等人提出了卷積網絡[16](convolutional network),也就是今天所說的卷積神經網絡(Convolutional Neural Network)。卷積神經網絡的一大特長就是其權值共享結構能夠模擬出生物的神經網絡。卷積神經網絡在很多領域表現都很優秀,尤其是圖像處理領域,是現在圖像分類、識別等研究領域不可或缺的工具。

圖4 改進稀疏棧式編碼算法流程圖
本文利用卷積神經網絡參數共享的思想,使每個隱藏層的節點(神經元)只關注一個特性,只與一部分連續的輸入點相連。在上一步通過自編碼器提取特征后,把這些提取的特征作為探測器,對圖像進行卷積操作,從而在原圖像上的不同區域得到不同的特征激活值。假設,圖像I 的大小為n×n,通過棧式稀疏編碼網絡得到k 個特征向量f={f1,f2,…,fk}。特征卷積需要對圖像I中所有的w×w(圖像patch 大?。┑膮^域計算特征映射,使用一個w×w 大小的窗口對I進行滑動掃描,當某個特征fi與I 的某個區域相關時,則fi對該區域產生映射,得到一個維度為(n-w+1)×(n-w+1)的特征圖(feature map)。當對所有的區域進行卷積完成后,得到總維度為k×(n-w+1)×(n-w+1)。對于含有m 幅圖像的圖像庫來說,維度為m×k×(n-w+1)×(n-w+1) 。卷積過程如圖5所示。

圖5 特征字典對圖像進行卷積操作
從理論上講,通過卷積層得到的特征層可以直接送入分類器進行分類訓練,但是這樣往往會帶來巨大計算量的問題。例如,對于一個128×128 的圖像,采用卷積核為8,則經過卷積得到的卷積特征向量長度為400×(128-8+1)×(128-8+1)=5 856 400。計算困難并且容易出現過擬合的現象。為了防止卷積神經網絡的輸出維數太大從而導致過擬合的現象的出現,同時也為了減少計算成本,提升運行速度,還需要對卷積后的特征進行池化操作(pooling)。池化是通過計算圖像局部區域上的某特定特征的平均值或者最大值等來計算概要統計特征。常見的池化方法分為最大池化(max pooling)、均值池化(mean pooling),計算過程如圖6 所示。最大池化可以降低參數誤差導致的估計均值發生的偏移誤差,更多地保留圖像的紋理信息。而均值池化則是減少鄰域大小受限造成的估計值方差增大的誤差,能保留更多的圖像背景信息。由于車型分類更多的參考汽車紋理而不是圖像的背景信息,所以最大池化更適合本文的車型分類。

圖6 兩種池化方法
本文實驗所用的數據集為北京理工大學實驗室公布的BIT-Vehicle 數據集,共有9 850 張車輛的圖像。圖像分別在不同時間和位置由兩臺攝像機拍攝的。圖像包含照明條件,比例,車輛表面顏色和視點的變化。由于拍攝延遲和車輛的尺寸,一些車輛的頂部或底部部分不包括在圖像中。在一個圖像中可能存在一個或兩個車輛,因此每個車輛的位置被預先標注。數據集還可以用于評估車輛檢測的性能。數據集中的所有車輛分為6類:公交車(Bus)558張、微型車(Microbus)883 張、小型貨車(Minivan)476 張、轎車(Sedan)5 922 張、越野車(SUV)1 392張和卡車(Truck)822張,如圖7所示。

圖7 BIT-Vehicle數據集樣本
在進行訓練前,還需要對圖像進行預處理,去除圖像的噪聲,相關性等對特征提取的干擾。常見的圖像處理方式有去均值、歸一化和PCA/ZCA 白化等。本文采用ZCA 白化方法對數據進行預處理,白化的作用主要是降低數據的冗余性,經過ZCA 白化處理后會降低圖像特征之間的相關性,并且所有的特征方差相等,處理后的數據接近原始數據[17]。
本文在BIT-Vehicle數據集測試了算法的性能,在隱藏層神經元節點數設置為400,雙隱藏層,字典訓練稀疏性參數設置為0.05的情況下,白天場景車型識別準確率達到了80.15%,夜間場景車型識別準確率為74.6%。大多數錯誤的分類出現在在“SUV”和“Sedan”之間,因為這兩種車型之間的外觀非常的相似。部分結果如圖8 所示。

圖8 部分車型識別結果
4.2.1 神經元數量對結果的影響
為了研究隱藏層中的神經元的數量對車型識別準確率的影響程度,設置了不同數量隱藏層神經元進行試驗,如圖9示。從曲線圖中,不難發現,當節點的數目小于400 時,車輛識別準確率隨著節點的數目增加而上升。但是當隱藏層節點數目超過400時,車輛識別的準確率并沒有提升,反而迅速下降。因此,本文最終選擇400個隱藏層節點。

圖9 不同數量的隱藏節點對檢索結果的影響
4.2.2 不同隱藏層數對結果的影響
同時本文還研究了隱藏層層數對車型識別準確率的影響,在保持其他條件不變的情況下,分別把隱藏層層數設置為單層、雙層和三層,并對其進行比較,如表1所示。

表1 不同隱藏層設置比較
根據表1 的結果,如果隱藏層的層數增加,車型識別的準確率也跟著增加。這是因為層數設置的越多,網絡結構越深,能提取圖像更高層次的特征,使得特征有更加強大的表征能力。在實驗中,從單層到雙層準確率增長迅速,從雙層到三層準確率增長緩慢,但是消耗的時間和存儲成本卻急劇增加,綜合考慮,把隱藏層設置為兩層比較合理。
4.2.3 與其他算法比較
本文算法還和其他的一些車型識別算法進行了對比。在微調階段,選取1 000張圖像和5 000張圖像作為樣本標簽進行有監督訓練,結果如表2所示。

表2 本文算法與其他算法比較
文獻[14]使用的是深度卷積神經網絡對來訓練車型識別模型,識別準確率比傳統的神經網絡訓練的模型更高,以文獻[14]算法為有監督訓練模型的典型,與本文算法進行對比。在標簽數據集較少的情況小,本文算法表現比較好,當增大標簽的數據集時,文獻[14]算法識別準確率逐步提高,并有超過本文算法的趨勢。但是現實生活中,數據集標簽的制作是困難的,本文算法的優點是能夠在較小的數據集中有較優越的表現。同時在5 000 張訓練集圖片,計算機配置為Intel?Core?i5-3470 的同樣條件下,本文提出的網絡訓練時間用時31 min,遠小于文獻[14]算法的5 h。
本文提出了一種改進的稀疏棧式編碼車型識別的方法,在傳統的稀疏編碼的基礎上,增加了卷積核池化模塊,通過訓練得到的特征字典作為卷積核對數據集中的圖像進行卷積操作,增強了模型的圖像特征的描述能力。同時,本文還對隱藏層的節點個數和隱藏層的層數的選取進行了對比,討論了不同的隱藏層的節點數和層數對于車型識別準確率的影響。最后,與神經網絡進行對比,說明本文算法在少量的有標注數據集上的優越性。