王靜,黃振杰,王濤
(廣東工業大學自動化學院,廣州510006)
智能交通卡口是城市的出入動脈的控制手段,加強對卡口的管理可以有效協助公安機關偵破案件,加強平安城市的建設,而車輛的檢測與識別是智能交通系統的核心任務。因此,精準快速地識別細粒度車型在智能交通和公共安全發揮著越來越重要的作用。
經過科技的發展,有大量的基于計算機視覺的算法應用于車型識別。傳統車型算法主要由以下兩個步驟:①采用人工設計的特征提取方法(如SIFT、LBP、HOG 等)將輸入的車輛圖片轉換為一組特征向量;②再基于該特征向量和機器學習中的分類算法(如SVM、AdaBoost、隨機森林等)來訓練模型。Ng 等人[1]對提取到的車輛SIFT 特征進行聚類,構造了一個二級分類器先挑選一級品牌,再利用二級分類器對車輛類型進行識別。文獻[2-3]采用Hu 的七種不變矩作為車輛特征進行車型識別。Zhang 等人[4]使用Gabor 小波變換和HOG 金字塔來描述車輛特征并且構造了一個級聯分類器。傳統方法基于人工設計的特征提取方法比較單一,通用性較差。近年來,計算機視覺技術再深度學習理論[5-7]的促進下取得巨大進步。Deng 等人[8]針對高速公路場景下,引入CNN 理論可以識別出小車、客車和貨車三種粗粒度車型。Wang 等人[9]基于深度神經網絡對在各個角度下拍攝的具有復雜背景的汽車圖像進行網絡訓練,可以識別出SUV、卡車、面包車以及小轎車四類。如文獻[9]建立了一個大規模的車輛數據庫CompCars,并在此數據集上使用AlexNet、GoogleNet 等卷積神經網絡進行訓練。也有一系列文獻[10-12]提出基于圖像的三維信息重構法來提高識別性能,但這些方法加大了整體模型的復雜度,計算耗時也更大。
雖然已經有很多學者對車型識別做了深入研究,但是目前很多研究和方案仍然不夠健全。一是對于車型識別的屬性不夠精細,沒有包含更豐富更細粒度的信息,僅是粗粒度層次的車型識別越來越無法滿足實際應用需求;二是車型識別作為細粒度圖像分類問題的子問題,具有分類精細,種類過多的特點。不同車型類別之間外觀辨別難度大。依靠人工標記的精細化標簽來實現細粒度的目標識別代價十分昂貴,造成細粒度車型識別的訓練數據集往往偏小。本文在智能卡口小樣本數據下,提出一種基于多任務學習的雙通道表示細粒度車型識別算法,主要從數據增強和遷移學習策略以及設計模型的角度解決智能卡口數據樣本少,車型特征差別小導致過擬合的問題。實驗證明,在數據擴充策略和模型結構一致的情況下,通過遷移學習利用已有的模型在小樣本數據集中微調以及設計雙通道模型學習樣本標簽信息和樣本標簽之間的局部信息,提高車型識別的識別精度。對比已有的文獻算法,能取得較好的效果。
深度學習模型的飛速發展離不開海量的數據體系,數據增強為研究人員提供一種增加數據多樣性的可能。針對卡口車型樣本不足的特點,本文在現有數據樣本的基礎上,通過對訓練圖片進行預處理減少過擬合發生的概率。具體為使用平移變換、縮放變換、亮度變換、水平翻轉變換、加入高斯和椒鹽噪聲生成可信數據樣本,增加訓練樣本的多樣性,提高模型魯棒性。
針對小型圖片數據集,很少有人會從零開始去訓練出一個神經網絡模型。有一種普遍的做法是利用遷移學習方法去微調預訓練模型,該方法主要解決規模不大,樣本數量有限的特定領域數據。本文首先使用通過配置不同的通道數和模塊里的殘差塊數可以得到不同的ResNet 模型;然后通過遷移學習的方法,在公開的自然攝像機環境下收集的車型識別數據集上CompCars 對深度網絡進行預訓練,以學習圖像的底層通用視覺特征;最后利用目標數據集對網絡參數進行微調,使小規模圖像數據集使用深度學習的方法成為可能,以達到準確率和運行速率上的優化。
從車輛紋理信息復雜度來說,車型系列、車型年款屬于細粒度屬性,而車輛顏色、車輛類型則屬于粗粒度屬性。通常情況下,粗粒度特征提取相對容易,而細粒度特征提取是尋找一些細微差別的局部區域,并利用這些局部區域的特性進行分類。但是,細粒度屬性每個類別包含的訓練樣本有限,并且難以用底層特征來表示。本文基于多任務學習的思想,從數量極少的訓練樣本中學習樣本分類信息和樣本標簽之間的局部信息,提出一個雙通道的神經網絡架構。
如圖1 所示,雙通道模型具有兩個獨立的分支,每個分支具有相同的網絡結構和權重。訓練與測試時每個分支針對輸入隨機的一對樣本進行處理并且輸出兩個分類結果。雙通道模型則是直接將圖像塊相似度計算問題轉換成二分類問題。通過標簽信息的分類學習和標簽局部分布信息的度量學習來同時訓練一個雙通道的神經網絡,這兩個任務之間相互促進,利用標簽局部分布信息的度量學習構建帶約束的目標函數,能夠很好防止過擬合,使網絡更具泛化性。

圖1 基于分類學習和度量學習的雙通道模型框架圖
基于分類學習和度量學習的雙通道模型由兩種損失函數組成,因此,總目標函數是兩種損失函數的加權和。
雙通道模型的兩個分支都使用分類損失函數Softmax,用來學習車型數據樣本和真實標簽信息之間的誤差。車型數據集包含M 個不同類別的N 個不同樣本,分類損失函數Softmax 表達式如公式(1)所示:

其中,xi是樣本xi在各分支上的分結果的輸出。表示預測的概率。W 是模型權重參數,Wt是第t 類的輸出權重,即t=1,…,M。yi是樣本xi的真實值。
雙通道模型具有兩個權重共享的獨立的分支,能夠輸入隨機的一對樣本同時輸出兩個分類結果。對于車型識別的分類問題,雙通道模型則是直接將輸出標簽之前的相似度計算問題轉換成二分類問題,用于判斷兩個樣本相似或者不相似。把雙通道模型全連接層的前一層的輸出向量作為對應輸入樣本的特征向量,用歐氏距離定義兩個特征向量之間的距離,公式如(2)所示:

其中,Si(xi|θ)代表輸入樣本xi的時候,參數為θ 模型的輸出特征向量,Sj(xj|θ)代表輸入樣本xj的時候,參數為θ 模型的輸出特征向量。把距離結果S2作為一個判斷相似性的更高級特征向量,后面接一個只有兩類的全連接層來表示輸入的樣本xi和樣本xj是否屬于同一類,度量損失函數表達式如(3)所示:

其中,S 是樣本對xi和xj在模型中的輸出特征向量之間的距離向量S2表示預測的概率,Wt是第t類的輸出權重,即t=1,2。Yij是樣本對的真實值為相似或不相似。
將分類損失函數和度量損失函數加權和,雙通道車型識別模型的總目標函數如公式(4)所示:

其中,α>0 是權重超參數,根據樣本對的輸入策略來調節。由于雙通道模型的兩個輸出是共享權重的,所以讓兩個分類損失函數Softmax 的權重比例為1:1。
(1)CompCars 數據集
CompCars 數據集是用于細粒度分類的大規模車輛數據集,它包括互聯網場景性質和監控場景性質下的車輛圖片。監控場景下的車輛圖像與卡口車型識別數據非常相似,因此我們只選用監控場景下的車輛圖片。該場景下的數據集一共有44481 張圖片,分辨率約是800×800,按車型系列分類,一共有281 類,例如:數據庫里的一汽轎車如圖2 所示。

圖2 CompCars數據集中部分一汽轎車樣本
(2)卡口場景下自建的車型識別數據集
針對智能卡口場景,選取了卡口常見的50 類車型系列來驗證算法的有效性,包括大眾-寶來、大眾-高爾夫、奧迪-A3、日產-軒逸、日產-天籟等車型系列,記為CarSeries。如圖3 所示,每個車型系列大約有200 個樣本,樣本的分辨率約為600×600,樣本主要是在白天不同光照條件下和黑夜環境下采集的。

圖3 CarSeries中部分車型系列樣本
實驗一:為了確定一個適合公開車型識別數據集CompCars 的模型容量,分別對ResNet10、ResNet14、ResNet18、ResNet34 和ResNet50 模型進行訓練,從模型復雜程度、預測推斷時間和準確率三個方面來選擇合適層數的ResNet 模型作為實驗的骨架網絡。

表1 ResNet10、ResNet14、ResNet18、ResNet34 和ResNet50的結構細節
在ResNet18、ResNet34、ResNet50 的基礎上設計了ResNet10 和ResNet14,ResNet10 是在ResNet18 的基礎上把卷積層的層數縮減了一半,ResNet14 是在ResNet50 的基礎上把每層的block 的重復次數都改為1。 ResNet10、ResNet14、ResNet18、ResNet34 和ResNet50 的結構細節如表1 所示。ResNet10、ResNet18、ResNet34 采 用 的 是 Basicblock 結 構。ResNet14 和ResNet50 采用的是Bottleneck 結構,主要區別是引入1×1 卷積,作用是:①對通道數進行升維和降維(跨通道信息整合),實現了多個特征圖的線性組合,同時保持了原有的特征圖大小;②相比于其他尺寸的卷積核,可以極大地降低運算復雜度。
實驗基本設置如下:數據集與驗證集的劃分比例是4:1;圖片全部resize 到150×150,然后像素值縮放到0 到1 也就是除以255;權重隨機初始化;batch 大小設置為32;使用Adam 優化器;epochs 設置為30,保存模型和繪制準確率和損失曲線圖。
實驗二:為了驗證所提出的基于分類學習和度量學習的多任務學習算法的有效性,將設置如下的實驗組作為比對:①標準的單通道分類網絡,使用分類損失函數Softmax,權重隨機初始化,記為OneNet_Random。②標準的單通道分類網絡,使用分類損失函數Softmax,加載在數據集CompCars 訓練好的模型權重,記為OneNet_PreTrain;③雙通道分類網絡,結合分類損失函數和度量損失函數,加載在數據集CompCars 訓練好的模型權重,記為DoubleNet。
實驗基本設置如下:數據集與驗證集的劃分比例是4:1;圖片全部resize 到150×150,然后像素值縮放到0 到1 間,也就是除以255;batch 大小設置為64;模型收斂的判斷標準是:當2 個epochs 內驗證損失函數不再下降,學習率降低為原來的1/10,當3 個epochs 內,驗證損失函數不再下降,提前終止訓練,保存模型和繪制準確率和損失曲線圖。
訓練過程:首先,選擇實驗一的ResNet 作為骨架網絡,使用實驗一中的設置在數據集CompCars 訓練,直到收斂,保存模型作為下面實驗的預訓練模型。
(1)OneNet_Random 單通道模型:
權重隨機初始化,使用Adam 優化器,在數據集CarSeries 上訓練,直到收斂。
(2)OneNet_PreTrain 單通道模型:
①加載ResNet 預訓練模型,然后修改全連接層fc的輸出類別,這時fc 層是隨機初始化的,所以,凍結除全連接層fc 外的所有層,使用Adam 優化器,在卡口車型數據集CarSeries 上訓練,收斂則停止訓練。
②解凍ResNet 模型的最后兩個block,進行微調,使用SGD 優化器,學習率設置為0.001,動量設置為0.9,繼續訓練,直到收斂。
(3)DoubleNet 雙通道模型:
①加載ResNet 預訓練模型,把一個全連接層改為兩個全連接層fc1、fc2 輸出,這時fc1、fc2 層是隨機初始化的。凍結所有層,損失函數權重設置為1:1:0.5,也就是使用分類損失函數和度量損失函數的加權和,訓練多分類和二分類模型,使用Adam 優化器,在卡口車型數據集CarSeries 上訓練,收斂則停止訓練。
②解凍ResNet 模型的最后兩個block,進行微調,使用SGD 優化器,學習率設置為0.001,動量設置為0.9,損失函數權重設置為1:1:0.5,繼續訓練,直到收斂。
實驗三:為了驗證所提出算法的有效性,與已有文獻算法進行比較。文獻[13]改進模型結構,結合Inception 模塊和ResNet 結構作為基本模塊,使用全局平均代替全連接層,同時引入中心損失函數來進行車型識別,記為BRSC。文獻[10]基于多任務學習進行多屬性識別,通改進AlexNet 模型,修改全連接層,實現車輛多屬性(車型系列、車輛類型和車輛顏色)識別,記為Multi-BestNet。
實驗基本設置與實驗二一致,訓練過程如下所示。
(1)BRSC 的訓練過程:
①首先,在數據集CompCars 訓練直到收斂。
②然后修改全連接層fc 的輸出類別,凍結除全連接層fc 外的所有層,使用Adam 優化器,在卡口車型數據集CarSeries 上訓練,收斂則停止訓練。
③解凍模型的最后兩個Inception block,進行微調,使用SGD 優化器,學習率設置為0.001,動量設置為0.9,繼續訓練,直到收斂。
(2)Multi-BestNet 的訓練過程:
①首先,在數據集CompCars 訓練直到收斂。
②然后把一個全連接層改為三個全連接層fc1、fc2、fc3 輸出,這時fc1、fc2、fc3 層是隨機初始化的,因此,除fc1、fc2、fc3 外,凍結所有層,損失函數權重設置為1:1 訓練,收斂則停止訓練。
③解凍模型最后3 個卷積層,進行微調,使用SGD優化器,學習率設置為0.001,動量設置為0.9,損失函數權重設置為1:1:1,繼續訓練直到收斂。
(1)評價指標:使用準確率來評估模型的性能,定義為:對于給定的測試數據集,分類正確的樣本個數占總樣本個數的比例。公式如(5)所示:

其中,ncorrect為被正確分類的樣本個數,ntotal為測試數據集中的總樣本個數。
(2)實 驗 一:ResNet10、ResNet14、ResNet18、ResNet34 和ResNet50 在數據集CompCars 上的準確率曲線圖和識別性能分別如圖4 和表1 所示。

表2 不同層數的ResNet 模型在CompCars 上的識別和性能結果
分析表2 和圖4 可知,得益于殘差模塊的特點,不同層數ResNet 模型都有較高的識別準確率,但是ResNet14、ResNet34 和ResNet50 在小數據集上準確率有小幅度的下降,說明模型的可學習參數過多,學習到額外的噪聲,模型的泛化能力下降。ResNet10 和ResNet18 的模型擬合能力都很好,在保持準確率的前提下,為了節省存儲空間和加快預測推斷速度,選擇ResNet10 作為實驗二的骨干網絡。
(3)實驗二:OneNet_Random、OneNet_PreTrain 和DoubleNet 的識別精度和準確率曲線圖分別如圖5 和表2 所示。

表3 不同網絡設計在CarSeries 上的識別精度
分 析 表 3 可 知,對 比 OneNet_Random 和OneNet_PreTrain 可知,使用相似數據集上預訓練的模型,通過微調,可將其中可用的知識遷移出來,從而在卡口車型數據集較小的時候,能大幅度提高車型識別的準確率,提升了近8%。對比OneNet_PreTrain 和DoubleNet 的可知,顯然度量損失函數可以幫助提高Softmax 分類的效果,特別是在樣本數據比較少的時候,提升了近2%。分析圖5 的圖可知,由于OneNet_Random 的權重是隨機初始化的,訓練準確率隨著時間線性增加,而驗證準確率在第15 個epoch 時就開始達到最大值,開始上下波動,這也就意味數量小非常容易產生過擬合現象。對比OneNet_PreTrain 和DoubleNet 的準確率曲線可知,DoubleNet 的曲線波動比較平緩,而且準確率提升更高,說明度量損失函數可以幫助模型學習到更加泛化的特征。

圖5 不同網絡設計在CarSeries上的準確率曲線圖
(4)實驗三:BRSC、Multi-BestNet 和DoubleNet 的識別精度如表4 所示。

表4 BRSC、Multi-BestNet 和DoubleNet 在CarSeries 上的識別精度
對比BRSC 和DoubleNet 可知,Inception 模塊和ResNet 模塊都是非常優良的子模塊,車型識別的準確率都非常高,但BRSC 的網絡層數較深,網絡推斷速度較慢。對比Multi-BestNet 和DoubleNet 可知,基于多任務學習進行多屬性識別的算法能有效提高車型識別的準確率,但是Multi-BestNet 需要額外的標注信息,在現實應用中,往往很難平衡不同子任務之間的樣本數量,導致出現樣本不均衡的情況,另外,骨干網絡使用的是AlexNet,過多的全連接層導致模型較大,推斷速度較慢,而且訓練時比較難收斂到最優。從表4 中可以看出,DoubleNet 的車型識別準確率最高,并且在模型推斷速度上優于BRSC 和Multi-BestNet。
本文提出在小數據集下設計車型識別算法的思路和具體的方法。從數據擴充、遷移學習策略緩和了數據量少的問題,同時,基于多任務學習的思想,結合分類學習和度量學習充分挖掘標簽和標簽之間的監督信息,進一步約束參數的學習。實驗證明,在數據擴充策略和模型結構一致的情況下,對比有的文獻算法,提高車型識別的識別精度,能取得較好的效果。