石 鑫,趙池航,林盛梅,李彥偉,薛善光,錢子晨
(1.河北交通職業(yè)技術學院 土木工程系,河北 石家莊 050011; 2.東南大學 交通學院,江蘇 南京 211189; 3.河北省交通規(guī)劃設計院 公路建設與養(yǎng)護技術、材料及裝備交通運輸行業(yè)研發(fā)中心,河北 石家莊 050011)
車輛類型信息已成為公共交通服務、交通運行監(jiān)管和安全防護等行業(yè)中數(shù)據(jù)處理與分析的基礎,因此,研究基于圖像的車輛類型識別方法已經(jīng)成為智慧交通系統(tǒng)車輛管理和維護工作中亟待解決的問題。Geoffrey Hinton教授提出模型訓練的改進方法打破了神經(jīng)網(wǎng)絡層數(shù)不能過多的瓶頸。他提出兩個觀點:一是多層神經(jīng)網(wǎng)絡有更強的特征學習能力,能得到更有利于分類的深層特征;二是深層神經(jīng)網(wǎng)絡的訓練難題可以通過逐層訓練解決。歷經(jīng)單層感知機、多層感知機、BP神經(jīng)網(wǎng)絡和深層神經(jīng)網(wǎng)絡的發(fā)展,深度學習孕育而生。深度學習現(xiàn)已成為人工智能的一大熱點,在圖像檢測、圖像分類及自然語言處理等領域均取得了舉世矚目的成績。2015年,Rong等提出利用自動稀疏編碼器生成卷積核[1],利用該卷積核生成卷積特征,之后進行池化操作,重復該步驟得到深層網(wǎng)絡框架,達到車型分類的目的。Dong等基于車輛正面圖像提出一種半監(jiān)督卷積神經(jīng)網(wǎng)絡模型[2],引入稀疏拉普拉斯過濾器對無標簽數(shù)據(jù)進行學習,僅將一小部分數(shù)據(jù)用于分類層Softmax函數(shù)訓練。2017年,Wang等使用深度遷移學習對車輛圖像進行車型分類[3],建立一個既可用于網(wǎng)絡圖像又可用于監(jiān)控圖像的卷積神經(jīng)網(wǎng)絡模型。2018年,Chen等基于車尾圖像提出卷積神經(jīng)網(wǎng)絡行分類模型[4],將車輛尾部圖像歸一化為32×32送入神經(jīng)網(wǎng)絡中進行車型分類。為了有效提高車輛類型的識別精度,本文基于遷移學習理論,構造了用于車輛類型分類的深度學習網(wǎng)絡模型。
卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,簡稱CNN)是專門用來處理形如網(wǎng)格結構數(shù)據(jù)的神經(jīng)網(wǎng)絡,對于圖像數(shù)據(jù)、時間序列數(shù)據(jù)等典型網(wǎng)絡結構數(shù)據(jù)的處理表現(xiàn)優(yōu)異。典型的卷積神經(jīng)網(wǎng)絡包括卷積層、池化層和全連接層。卷積層顧名思義就是對該層網(wǎng)絡進行卷積運算。在卷積網(wǎng)絡的術語定義中,卷積的第1個參數(shù)通常稱為輸入,第2個參數(shù)通常稱為核函數(shù),輸出也稱作為特征映射。由卷積層的定義可以看出,卷積層的運算過程是一個自動提取特征的過程,因此卷積神經(jīng)網(wǎng)絡相對于傳統(tǒng)的全連接神經(jīng)網(wǎng)絡而言,既是一個特征提取器,又是一個分類器,能夠自主學習特征,而不需要人工預先提取特征。卷積神經(jīng)網(wǎng)絡運用了2個重要思想來改進傳統(tǒng)神經(jīng)網(wǎng)絡算法:稀疏交互和參數(shù)共享。
傳統(tǒng)神經(jīng)網(wǎng)絡中每層的神經(jīng)元通過矩陣乘法進行交互運算,并且每層的所有神經(jīng)元都與下一層的所有神經(jīng)元進行交互。對于卷積網(wǎng)絡而言,卷積運算具有稀疏性,即具有稀疏權重的特征,這是由于卷積核尺寸遠遠小于輸入的尺寸。當處理圖像時,圖像可能有成千上萬個像素點,但是對于分類任務或者識別任務而言,只需要對其中的幾百個或者幾十個特征進行表征,因此采用稀疏權重計算圖像特征可以在表示圖像的同時減少模型存儲空間,提高模型效率。參數(shù)共享是卷積網(wǎng)絡的又一個重要特征,是指在一個模型中有多個函數(shù)使用同樣的參數(shù)。在傳統(tǒng)神經(jīng)網(wǎng)絡中,在計算層參數(shù)時,權重矩陣元素都僅僅使用1次,每2個神經(jīng)元之間的參數(shù)都是獨立不共享的。而在卷積網(wǎng)絡中,卷積核的每個元素都用在每個輸入單元中,并不需要針對不同的位置學習獨立參數(shù)。這種共享權重的方式將模型存儲需求空間降低,并在統(tǒng)計效率方面遠優(yōu)于稠密算法。一個典型的卷積網(wǎng)絡層通常包括3級:第1級,并行地計算多個卷積產(chǎn)生一組線性激活響應;第2級中,使用激活函數(shù)將線性激活響應進行整流;第3級中使用池化函數(shù)來調(diào)整輸出。所謂池化計算,就是使用某位置相鄰的總體統(tǒng)計特征作為該位置的輸出。常用的池化函數(shù)有:最大池化(Max Pooling)、平均池化(Mean Pooling)、L2范數(shù)和加權平均函數(shù)等。
對于深度學習而言,幾十層甚至幾百層網(wǎng)絡往往涉及億萬個參數(shù)訓練,所需訓練集的數(shù)據(jù)量十分龐大。例如,典型的深度學習網(wǎng)絡VGGNet具有16~19層,參數(shù)數(shù)量達到上億個,基于數(shù)據(jù)量達120萬張的ILSVRC-2012數(shù)據(jù)集,該網(wǎng)絡在裝有4個NVIDIA Titan Black GPU的電腦上訓練時間長達2~3周。而對于數(shù)據(jù)量較小的分類問題,例如本文中的車型分類問題,數(shù)據(jù)量遠遠不足以從零開始訓練一個深層神經(jīng)網(wǎng)絡,因此需要借助遷移學習技術,基于已訓練好的成熟網(wǎng)絡進行再訓練。遷移學習(Transfer Learning)就是將一個場景中學習到的模型、參數(shù)運用到另一個場景中,這兩個場景應該屬于相似的領域,并且具有相似的任務。由于直接對新場景進行學習成本較高,因此采用遷移學習找到新場景與老場景的相似點,這也是遷移學習的核心。將已有的知識叫做源域,待學習的新知識叫做目標域,遷移學習就是將源域的知識遷移到目標域中,源域與目標域通常有一定的關聯(lián)。在數(shù)據(jù)分布、特征維度以及模型輸出變化的條件下,基于源域中的知識對目標域更好地建模,并不需要從零開始建模。這種學習方式在有標定數(shù)據(jù)缺乏的情況下,可以很好地利用相關領域有標定的數(shù)據(jù)完成數(shù)據(jù)的標定,在數(shù)據(jù)樣本比較少時,可以以相關領域模型為基準進行再訓練。
圖1 經(jīng)典網(wǎng)絡與Dropout網(wǎng)絡
經(jīng)典的卷積神經(jīng)網(wǎng)絡通常是在低層采用卷積運算,之后采用全連接層進行分類,可以簡單地理解為卷積層是在提取圖像特征,全連接層是傳統(tǒng)的神經(jīng)網(wǎng)絡分類器。但是全連接層參數(shù)數(shù)量龐大,參數(shù)數(shù)量太大會導致2個瓶頸:一是訓練的機器配置壓力較大,且耗時長,降低訓練效率;二是容易導致過擬合,網(wǎng)絡的泛化能力不盡人意。因此,本文在遷移學習已有成熟網(wǎng)絡的同時采用參數(shù)優(yōu)化策略,用以降低參數(shù)數(shù)量,并防止過擬合。本文采用Dropout和全局平均池化2種策略。Dropout是指在深度神經(jīng)網(wǎng)絡訓練中,按照一定概率隨機地將網(wǎng)絡中的隱藏節(jié)點暫時丟棄,丟棄的節(jié)點可以認為暫時不屬于網(wǎng)絡結構。從理論上來說,可以將Dropout看作是模型平均的一種。如圖1所示,Dropout后的網(wǎng)絡與經(jīng)典網(wǎng)絡相比更“瘦”,在圖示網(wǎng)絡中,經(jīng)典網(wǎng)絡中有55個參數(shù),在Dropout一半節(jié)點后,參數(shù)變成15個。Lin等提出了用全局平均池化層代替全連接層的方法,試驗結果表明全局平均池化層代替全連接層具有可行性,并在性能上略優(yōu)[5]。如圖2所示,對于采用全連接層的卷積神經(jīng)網(wǎng)絡而言,每組卷積核對應的特征圖輸出后將之串聯(lián)成全連接層的輸入后使用Softmax進行多分類,得到輸出。對于全局平均池化而言,對每張?zhí)卣鲌D取平均值,將平均值直接作為Softmax分類的輸入與輸出節(jié)點對應。采用平均池化后特征圖只輸出1個特征,在保留特征的同時大大減少參數(shù),可以很好地避免過擬合。
圖2 全連接層與全局平均池化
圖3 Inception單元結構
Inception網(wǎng)絡與傳統(tǒng)卷積神經(jīng)網(wǎng)絡最大的不同之處在于:傳統(tǒng)卷積神經(jīng)網(wǎng)絡如VGG結構將卷積網(wǎng)絡層層堆疊,是典型的縱向結構,而Inception網(wǎng)絡除了縱向堆疊卷積層,還提出Inception層,而Inception單元是由不同尺寸卷積核疊加而成,這個疊加過程增加了網(wǎng)絡的“寬度”,也增加了網(wǎng)絡對于尺度的適應性[6]。典型的Inception單元如圖3所示,以Inception A為例,該單元結構使用1×1卷積核、3×3卷積核、5×5卷積核和pool核為基礎,縱向橫向疊加,直接使用1×1卷積核得到當前尺度特征,使用1×1卷積核后進行5×5卷積計算可以得到淺層卷積特征,使用1×1卷積核后進行2次3×3卷積計算可以得到深層次卷積細節(jié)特征,池化后進行1×1卷積計算得到下采樣后的特征??傊?jīng)過Inception單元計算后,可輸出不同尺度特征圖。Inception V3網(wǎng)絡的低層結構還是經(jīng)典的卷積層堆疊,采用卷積層-卷積層-卷積層-池化層-卷積層-卷積層-池化層的結構,池化之后加入3個Inception A單元,連接1個Inception B單元,連接4個Inception C單元,連接1個Inception D單元,連接2個Inception E單元,之后采用平均池化處理和Dropout處理,再采用全連接層后進行Softmax分類。
本文提出的基于Inception V3的車型分類模型是在Inception V3的基礎上去除最后的全連接層,并加入?yún)?shù)優(yōu)化層,采用Dropout和全局平均池化層,具體結構見表1。整個網(wǎng)絡模型輸入為299×299 RGB三通道圖像,每個block代表1組計算,前2組為卷積計算,1組卷積計算中包含若干卷積層和1個池化層,卷積核為3×3,完成2個Block卷積計算后,與Inception單元相連,Block 3中使用3個Inception A單元,Block 4中使用1個Inception B單元,Block 5中使用4個Inception C單元,Block 6中使用1個Inception D單元,Block 7中使用2個Inception E單元,之后與全局平均池化層相連,再使用丟棄率為0.5的Dropout層,最后用Softmax函數(shù)與輸出節(jié)點相連。
VGGNet網(wǎng)絡結構有A、A-LRN、B、C、D和E等6種不同結構,層數(shù)和參數(shù)配置基本一樣,常用的網(wǎng)絡層數(shù)通常有11層、13層、16層和19層,11層和13層VGGNet大約有133百萬個參數(shù),16層C類結構有134百萬個參數(shù),16層D類結構有138百萬個參數(shù),19層E類結構有144百萬個參數(shù)。綜合考量性能和參數(shù),本文將D類的VGGNet網(wǎng)絡結構(VGG-16)用于車型分類。VGG-16結構整個網(wǎng)絡分成5個Block,每個Block內(nèi)有多組卷積,卷積核均為3×3,Block間通過最大池化層連接。3個全連接層,采用ReLU激活函數(shù),最后使用Softmax進行多分類。本文在VGG-16模型的基礎上去除最后3個全連接層,并在卷積層之后加入?yún)?shù)優(yōu)化層,采用Dropout和全局平均池化層。整個網(wǎng)絡模型輸入為224×224 RGB三通道圖像,每個Block代表1組卷積計算,1組卷積計算中包含若干卷積層和1個池化層,卷積核為3×3,完成5個Block卷積計算后,與全局平均池化層相連,之后使用丟棄率為0.5的Dropout層,最后用Softmax函數(shù)與輸出節(jié)點相連。
表1 基于Inception V3的車型分類模型結構
圖4 東南大學車輛類型圖像樣例
Xception網(wǎng)絡結構的最大特點在于引入深度可分卷積(Depthwise Separable Convolution)計算。該計算過程的核心在于深層卷積計算,Xception網(wǎng)絡結構分為輸入模塊、中間模塊和輸出模塊。本文在Xception的車型分類模型的基礎上去除最后的全連接層,并加入?yún)?shù)優(yōu)化層,采用Dropout和全局平均池化層。整個網(wǎng)絡包括輸入模塊、中間模塊和輸出模塊,模型輸入為299×299 RGB三通道圖像。輸入模塊進行2次卷積核為3×3的卷積運算,并經(jīng)過激活函數(shù)提高非線性,之后連接深度可分卷積運算單元,每個運算單元都包含2次帶ReLU激活函數(shù)的3×3深度可分卷積運算和最大池化,輸入模塊得到19×19×728的特征圖。中間模塊是8個一樣的深度可分卷積運算單元相連,每個運算單元都包含3次帶ReLU激活函數(shù)的3×3深度可分卷積運算。輸出模塊是1個深度可分卷積運算單元,運算單元包含2次帶ReLU激活函數(shù)的3×3深度可分卷積運算和最大池化,之后進行2次帶ReLU激活函數(shù)的3×3深度可分卷積運算。最后與全局平均池化層相連,再使用丟棄率為0.5的Dropout層,最后用Softmax函數(shù)與輸出節(jié)點相連。
Resnet網(wǎng)絡結構的核心是殘差學習(Residual Learning)。在常規(guī)網(wǎng)絡中,每層求解參數(shù)時目標函數(shù)都是最優(yōu)解的映射H(X),對于Resnet網(wǎng)絡而言,并不直接匹配最優(yōu)解映射H(X),而是去匹配1個殘差映射F(X)=H(X)-X。本文在Resnet50模型的基礎上去除最后的全連接層,并加入?yún)?shù)優(yōu)化層,采用Dropout和全局平均池化層。Resnet50第1層為7×7的卷積層,之后進行3×3池化,之后連接3個Conv2_x單元、4個Conv3_x單元、6個Conv4_x單元和3個Conv5_x單元,其中Conv2_x單元、Conv3_x單元、Conv4_x單元和Conv5_x單元均包括3個卷積層,卷積算子分別為1×1,3×3和1×1。最后與全局平均池化層相連,再使用丟棄率為0.5的Dropout層,最后用Softmax函數(shù)與輸出節(jié)點相連。
本文試驗基于構建的東南大學車輛類型圖像庫,包括9 850幅車輛圖像,車輛圖像分為客車、小客車、小貨車、轎車、SUV和卡車6種類型,像樣例如圖4所示。本文試驗中所用算法模型均在Jupyter Notebook (Ipython)環(huán)境中基于Python3.6和Keras深度學習框架(TensorFlow作為后端),計算機CPU配置為Intel Core i7-6700HQ 2.6 GHz,RAM為8 GB,ROM為1 TB;顯卡配置為NVIDIA GeForce GTX960M,顯存為4 G。試驗中采用東南大學車輛類型圖像庫的60%作為訓練圖像,20%作為驗證圖像,剩余20%作為測試圖像。
圖5為Resnet50-VCM 使用Adam優(yōu)化器的訓練過程,圖6為Resnet50-VCM 使用RMSprop優(yōu)化器的訓練過程,圖中左上角train-loss圖代表訓練損失隨著迭代次數(shù)的變化,左下角validation-loss圖代表驗證損失隨著迭代次數(shù)的變化。圖中右上角train-accuracy圖代表訓練精度隨著迭代次數(shù)的變化,右下角validation-accuracy圖代表驗證精度隨著迭代次數(shù)的變化??梢钥闯觯瑹o論是Adam優(yōu)化器還是RMSprop優(yōu)化器,在迭代8次epoch之后模型趨于收斂,模型收斂時的訓練精度和驗證精度都基本持平,但RMSprop優(yōu)化器隨著迭代次數(shù)增加精度變化較為緩慢,驗證損失明顯呈下降趨勢。反觀Adam優(yōu)化器訓練損失和驗證損失在經(jīng)過2次epoch后下降緩慢,無論驗證精度還是訓練精度均呈上升態(tài)勢。模型訓練損失和驗證損失對比如圖7所示,VGG16-VCM的訓練損失和驗證損失較大,模型沒有得到很好的收斂效果,從損失便可以看出此模型精度可能比較低。除了VGG16-VCM之外,其余3個模型的損失均較小于0.6,并且驗證損失都大于訓練損失,符合訓練規(guī)律,說明Resnet50-VCM、Inception-VCM和Xception-VCM都是擬合較好的模型,模型結構與車型分類問題比較適配。模型訓練耗時對比如圖8所示,Resnet50-VCM、Inception-VCM和Xception-VCM計算1個epoch需要近1 min的時間,由于VGG16-VCM只有十幾層結構,所以耗時僅需28 s,而Resnet50-VCM、Inception-VCM和Xception-VCM結構都比較復雜,層數(shù)達到幾十層甚至100多層,耗時都將近1 min,訓練效率較低。
從表2可得,VGG16-VCM模型在使用RMSprop優(yōu)化器時訓練精度和驗證精度都比使用Adam優(yōu)化器更高。Resnet50-VCM、Inception-VCM和Xception-VCM使用不同優(yōu)化器對精度的影響較小,屬于正常誤差范圍,可以看出,優(yōu)化器的選取對于模型精度的影響并不大。從圖9可知,VGG16-VCM精度在4個模型中最低,測試精度小于0.7,這說明VGG16-VCM并不能很好地擬合車型分類問題,這與之前l(fā)oss分析得到的結論一致。除VGG16-VCM外,Resnet50-VCM、Inception-VCM和Xception-VCM都得到比較好的訓練精度,4個模型中精度表現(xiàn)最好的為Inception-VCM,測試精度達83.85%。經(jīng)過訓練得到5個車型分類模型后,對測試集進行測試試驗。為測試模型的穩(wěn)定性及魯棒性,用測試集與驗證集作為測試樣本庫,進行100次交叉驗證測試試驗,每次試驗從測試樣本庫中隨機抽取1 800張圖像,并統(tǒng)計模型精度。模型精度箱型圖分布如圖9(b)所示。從圖中可以看出,Inception V3-VCM模型精度較高,Inception V3-VCM和Resnet50-VCM精度相差無幾,Inception V3-VCM和Xception-VCM模型精度分布在一個比較小的范圍內(nèi),說明模型有比較好的穩(wěn)定性。VGG16-VCM和Resnet50-VCM有幾個異常點,說明模型穩(wěn)定性不好。綜合對比可知,Inception V3-VCM優(yōu)于其余3種模型。
圖5 Resnet50-VCM Optimizer=Adam 訓練過程
圖6 Resnet50-VCM Optimizer=RMSprop 訓練過程
圖7 模型訓練和驗證損失對比
圖8 模型訓練耗時對比
表2 不同優(yōu)化器模型精度對比
圖9 模型精度對比
表3為Inception V3-VCM模型的混淆矩陣。混淆矩陣每行表示預測類,每列表示真實類。例如,第1行第1列表示真實類別為Bus、識別為Bus的樣本數(shù)為110,第2行第1列表示真實類別為Microbus、識別為Bus的樣本數(shù)為9,其他行列以此類推。對角線上表示樣本正確分類的數(shù)目,每種類型車輛被正確識別的樣本數(shù)分別為:110、165、87、1 022、228和111。由此可以看出,Bus和Microbus正確分類率較高,這可能是因為這兩類車與其他類型車輛的卷積特征差距較大,對于樣本數(shù)量占比較大的Sedan和SUV正確分類率略差,并且由于SUV和Sedan車輛信息一致性較高,出現(xiàn)部分SUV和Sedan誤分類的情況。
表3 Inception V3-VCM模型混淆矩陣
為了有效識別車輛類型用于智慧交通系統(tǒng),本文在分析Inception V3模型的基礎上,提出了一種基于遷移學習理論的車型分類深度學習模型,并與基于VGG-16、Xception和Resnet50的車型分類模型進行了對比分析;基于東南大學車輛類型圖像庫進行了試驗研究,理論分析和試驗結果表明,基于遷移學習理論的車型分類深度學習模型的性能優(yōu)于基于VGG-16、Xception和Resnet50的車型分類模型。