何梓林
(200093 上海 上海理工大學(xué))
隨著社會(huì)交通事業(yè)的蓬勃發(fā)展,省、市際公路網(wǎng)、高速、橋梁及其收費(fèi)網(wǎng)點(diǎn)迅猛增加,車(chē)輛智能分類(lèi)越來(lái)越受到重視,直接促使車(chē)型分類(lèi)辨認(rèn)系統(tǒng)成為“智能交通”的一個(gè)重要組成部分。隨著計(jì)算機(jī)和數(shù)字圖像以及信號(hào)信息處理檢測(cè)技術(shù)的發(fā)展,機(jī)器視覺(jué)檢測(cè)器取代傳統(tǒng)檢測(cè)器進(jìn)行車(chē)輛檢測(cè)已經(jīng)成為一種具有巨大發(fā)展?jié)摿Φ臋z測(cè)方法[1]。
車(chē)型智能識(shí)別是指以數(shù)字圖像或視頻信號(hào)流作為研究對(duì)象,通過(guò)圖像處理與自動(dòng)識(shí)別獲取機(jī)動(dòng)車(chē)輛有關(guān)型號(hào)信息的技術(shù)。隨著計(jì)算機(jī)技術(shù)、軟件技術(shù)、模式識(shí)別技術(shù)等的快速發(fā)展,車(chē)型識(shí)別產(chǎn)品在智能交通系統(tǒng)中得到了廣泛應(yīng)用。
文獻(xiàn)[2]將目前常見(jiàn)車(chē)型分為3 大類(lèi):客車(chē)、卡車(chē)和轎車(chē)。本文采集了1 650 余張圖片,將車(chē)輛分為6 種常見(jiàn)車(chē)型:公共汽車(chē)、轎車(chē)、消防車(chē)、卡車(chē)、中巴車(chē)和SUV。采用基于Tensorflow 框架、應(yīng)用卷積神經(jīng)網(wǎng)絡(luò)對(duì)6 種類(lèi)型的汽車(chē)圖片進(jìn)行處理、數(shù)據(jù)增強(qiáng)、建模、訓(xùn)練、測(cè)試等,通過(guò)多次訓(xùn)練校正神經(jīng)網(wǎng)絡(luò)超參數(shù),最終得到準(zhǔn)確率約為92%的汽車(chē)類(lèi)型識(shí)別神經(jīng)網(wǎng)絡(luò)模型。
TensorFlow 是谷歌基于DistBelief 研發(fā)的人工智能學(xué)習(xí)系統(tǒng),它將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)傳輸至人工智能神經(jīng)網(wǎng)進(jìn)行分析和處理。TensorFlow 完全開(kāi)源,具有可移植性、可延伸性、高效性、靈活性等特點(diǎn)。目前,TensorFlow 機(jī)器學(xué)習(xí)逐漸成為一個(gè)重要的研究熱點(diǎn)[3],它提供了豐富的構(gòu)建和訓(xùn)練機(jī)器學(xué)習(xí)模型的 API 庫(kù),支持卷積神經(jīng)網(wǎng)絡(luò)(CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)、長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTMN)等深度神經(jīng)網(wǎng)絡(luò)模型。
卷積神經(jīng)網(wǎng)絡(luò)是近年發(fā)展起來(lái)并引起廣泛重視的高效識(shí)別方法。20 世紀(jì)中期,HUBEL 和WIESEL 在研究貓腦皮層中用于局部敏感和方向選擇的神經(jīng)元時(shí),發(fā)現(xiàn)其獨(dú)特的網(wǎng)絡(luò)結(jié)構(gòu)可有效降低反饋神經(jīng)網(wǎng)絡(luò)的復(fù)雜性,繼而提出了卷積神經(jīng)網(wǎng)絡(luò)(CNN)[4]。現(xiàn)在,CNN 已經(jīng)成為眾多學(xué)科領(lǐng)域的研究熱點(diǎn)之一,特別是在圖片分類(lèi)領(lǐng)域,由于該網(wǎng)絡(luò)無(wú)需對(duì)圖像進(jìn)行復(fù)雜的前期預(yù)處理,甚至一張?jiān)紙D像不經(jīng)處理即可作為其網(wǎng)絡(luò)的輸入對(duì)象,因而CNN 得到了廣泛的應(yīng)用。
當(dāng)電腦看到一個(gè)圖像(以圖像作為輸入)時(shí),它看到的其實(shí)是一個(gè)像素值的數(shù)組。假設(shè)有一個(gè)JPG 格式的彩色圖像,它的大小是64×64,代表性的數(shù)組將是64×64×3,3 指的是RGB 值。這些數(shù)字中的每一個(gè)都有一個(gè)從0 到255 的值,它描述該點(diǎn)的像素強(qiáng)度。這些數(shù)字對(duì)于人類(lèi)肉眼進(jìn)行圖像分類(lèi)時(shí)雖然毫無(wú)意義,卻是計(jì)算機(jī)唯一可利用的輸入信息。圖1 所示為一個(gè)完整的卷積神經(jīng)網(wǎng)絡(luò)框架,由卷積層conv1、池化層p1、卷積層conv2、池化層p2 和全連接層構(gòu)成[5]。
圖1 卷積神經(jīng)網(wǎng)絡(luò)模型Fig.1 Convolutional neural network model
卷積神經(jīng)網(wǎng)路中每層卷積層由若干個(gè)卷積單元組成,每個(gè)卷積單元的參數(shù)通過(guò)反向傳播算法優(yōu)化得到。卷積運(yùn)算的目的是提取輸入的不同特征,第1 層卷積層可能只提取一些低級(jí)的特征如邊緣、線條和角等層級(jí),更多層的網(wǎng)絡(luò)就能從低級(jí)特征中迭代提取出更復(fù)雜的特征[6]。
如圖2 所示,經(jīng)過(guò)一個(gè)3×3 的卷積核處理后,輸入圖像已經(jīng)顯得棱角分明、畫(huà)面清晰。該卷積利用圖像的邊緣信息比周?chē)袼赜懈叩膶?duì)比度,經(jīng)過(guò)卷積之后進(jìn)一步增強(qiáng)了這種對(duì)比,從而達(dá)到銳化圖像的效果。
圖2 卷積Fig.2 Convolution
池化層實(shí)際上是一種形式的降采樣,它具有多種不同形式的非線性池化函數(shù),而其中“最大池化(Max pooling)”是最為常用的。最大池化是指將輸入的圖像劃分為若干個(gè)矩形區(qū)域,對(duì)其中每個(gè)子區(qū)域都輸出最大值。池化能夠有效的原因主要是發(fā)現(xiàn)一個(gè)特征之后,它的精確位置遠(yuǎn)不及它和其他特征的相對(duì)位置的關(guān)系重要。池化層會(huì)不斷地減小數(shù)據(jù)的空間大小,因此會(huì)導(dǎo)致參數(shù)的數(shù)量和計(jì)算量下降,這在某種程度上也可以控制過(guò)擬合。常見(jiàn)的池化層除最大池化還有平均池化、全局平均池化、全局最大池化和重疊池化[7]。
對(duì)輸入圖像的卷積過(guò)程中,只存在少量的有用信息,大多數(shù)信息屬于冗余信息,采用最大池化能避免較多冗余信息的介入。
本文原始圖片數(shù)據(jù)主要是從湖南大學(xué)2018-2019 秋季學(xué)期《機(jī)器學(xué)習(xí)》課程項(xiàng)目提供的2 000余張標(biāo)注了的車(chē)輛場(chǎng)景分類(lèi)信息的高分辨率圖片和BIT-Vehicle 數(shù)據(jù)集中人工篩選出的。
BIT-Vehicle 數(shù)據(jù)集是北京理工大學(xué)實(shí)驗(yàn)室公布的一批數(shù)據(jù),包含9 850 張車(chē)輛圖像,這些圖像包含照明條件、尺度、車(chē)輛表面顏色和視點(diǎn)的變化,數(shù)據(jù)集中的所有車(chē)輛分為6 類(lèi):公共汽車(chē)、微型汽車(chē)、小型貨車(chē)、轎車(chē)、SUV 和卡車(chē)[8]。本文將汽車(chē)分為6 種車(chē)型:公共汽車(chē)、轎車(chē)、消防車(chē)、卡車(chē)、中巴車(chē)和SUV,不同類(lèi)型目標(biāo)的圖片數(shù)目分別為156,258,155,302,145,289。
3.2.1 數(shù)據(jù)增強(qiáng)
一般而言,比較成功的卷積神經(jīng)網(wǎng)絡(luò)往往需要大量的訓(xùn)練數(shù)據(jù),而實(shí)際情況中數(shù)據(jù)并沒(méi)有想象的那么多,為了進(jìn)行更多訓(xùn)練和獲取數(shù)據(jù),一般采用2 種方法:一是獲取新數(shù)據(jù),這往往需要在技術(shù)上投入大量成本;二是對(duì)已有訓(xùn)練數(shù)據(jù)進(jìn)行強(qiáng)化,比如對(duì)現(xiàn)有訓(xùn)練數(shù)據(jù)進(jìn)行翻轉(zhuǎn)、平移或旋轉(zhuǎn)以創(chuàng)建更多數(shù)據(jù)。通過(guò)數(shù)據(jù)增強(qiáng),可以極大增加訓(xùn)練的數(shù)據(jù)容量,提高模型的泛化性能,同時(shí)還增加了噪聲和數(shù)據(jù),提升了模型的魯棒性,避免過(guò)擬合。
Keras 作為前端,在keras.preprocessing.image模塊中有專(zhuān)門(mén)用于做數(shù)據(jù)增強(qiáng)的圖片生成器ImageDataGenerator,每一次給模型一個(gè)“batch_size”大小的樣本數(shù)據(jù),同時(shí)也可以在每一批次中對(duì)“batch_size”個(gè)樣本數(shù)據(jù)進(jìn)行數(shù)量增強(qiáng),擴(kuò)充數(shù)據(jù)集大小以增強(qiáng)神經(jīng)網(wǎng)絡(luò)模型的泛化能力。常見(jiàn)的增強(qiáng)手段有旋轉(zhuǎn)、變形、歸一化等等。如圖3 所示,9 張圖中第1 張為原圖,后8 張都是通過(guò)一定程度的翻轉(zhuǎn)變換、縮放變換、尺度變換、錯(cuò)切變換、對(duì)比度變換等數(shù)據(jù)增強(qiáng)手段得到的圖片[9]。通過(guò)數(shù)據(jù)增強(qiáng)后的數(shù)據(jù)集各車(chē)型數(shù)目如表1 所示。
圖3 數(shù)據(jù)增強(qiáng)Fig.3 Data enhancement
表1 數(shù)據(jù)增強(qiáng)后各車(chē)型數(shù)目Tab.1 The number of models after data enhancement
3.2.2 數(shù)據(jù)預(yù)處理
由于神經(jīng)網(wǎng)絡(luò)在接收輸入圖片時(shí),只能接收一個(gè)或幾個(gè)固定的尺寸,原始圖片數(shù)據(jù)集的尺寸又各式各樣,所以將圖片輸入到卷積神經(jīng)網(wǎng)絡(luò)之前,需對(duì)圖片進(jìn)行預(yù)處理及優(yōu)化。考慮到每張圖片具有不同的形狀和大小,所以對(duì)圖片數(shù)據(jù)集的第1 步處理是使圖像大小相同,本文中將數(shù)據(jù)集圖片統(tǒng)一處理成64×64 像素大小的圖片。
除圖像尺寸需要統(tǒng)一外,還要對(duì)圖像色彩進(jìn)行調(diào)整。色彩調(diào)整包括對(duì)圖像的亮度、對(duì)比度、飽和度和色相方面的調(diào)整,訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型時(shí)將隨機(jī)調(diào)整這些屬性,目的是使經(jīng)過(guò)訓(xùn)練的模型盡可能少地受這些與圖像識(shí)別無(wú)關(guān)因素的影響,使CNN 模型更加穩(wěn)定。
如前文所述,卷積神經(jīng)網(wǎng)絡(luò)主要由輸入層、卷積層、池化層、全連接層和輸出層組成。ALEX Krizhevsky 在2012 年提出的Alexnet 深度學(xué)習(xí)模型引爆了神經(jīng)網(wǎng)絡(luò)的應(yīng)用熱潮,使得CNN 成為在圖像分類(lèi)上的核心算法模型。首先,Alexnet 模型使用RelU 函數(shù)作為CNN 的激活函數(shù),解決了梯度彌散問(wèn)題;其次,在訓(xùn)練時(shí)使用Dropout 隨機(jī)忽略一部分神經(jīng)元,以避免模型過(guò)擬合;同時(shí),在CNN 中使用重疊的最大池化,避免了平均池化的模糊化效果。本文搭建的卷積神經(jīng)網(wǎng)絡(luò)模型即是在AlexNet 模型的基礎(chǔ)上,改變?cè)W(wǎng)絡(luò)的卷積層,采用2 個(gè)3×3 的卷積層堆疊,同時(shí)對(duì)全連接層參數(shù)進(jìn)行調(diào)整。
本文以Tensorflow 為后端,keras 作為前端進(jìn)行建模,分別對(duì)每層進(jìn)行介紹:
(1)Input 層:為輸入層,卷積神經(jīng)網(wǎng)絡(luò)的輸入數(shù)據(jù)是維度為64×64×3 的圖像,即輸入圖像的高度為64,寬度為64,色彩,通道數(shù)為3。
(2)Conv1 層:為卷積神經(jīng)網(wǎng)絡(luò)的第1 個(gè)卷積層,使用的卷積核為(3*3*1)*64(卷積核大小為3*3,輸入通道為1,輸出通道為64),步長(zhǎng)為1,Padding 為same 方式,保證輸入圖片大小和輸入圖片大小一致。
(3)Conv2 層 :為卷積神經(jīng)網(wǎng)絡(luò)的第 2 個(gè)卷積層,使用的卷積核為(3*3*64)*64,步長(zhǎng)為1,Padding 為same 方式。
(4)MaxPool1 層 :為卷積神經(jīng)網(wǎng)絡(luò)的第1個(gè)最大池化層,池化核大小為3×3,步長(zhǎng)為2,Padding 為valid 方式,即對(duì)邊界數(shù)據(jù)不處理。
(5)Dropout1 層:在訓(xùn)練的時(shí)候以1/2 概率使得隱藏層的某些神經(jīng)元的輸出為0,這樣就丟掉了一半節(jié)點(diǎn)的輸出,反向傳播的時(shí)候也不更新這些節(jié)點(diǎn)。
(6)batch_normalization 層:批量歸一化層,使數(shù)值更穩(wěn)定,使深層神經(jīng)網(wǎng)絡(luò)更容易收斂而且降低過(guò)擬合風(fēng)險(xiǎn)。
(7)Conv3 層 :為卷積神經(jīng)網(wǎng)絡(luò)的第3 個(gè)卷積層,使用的卷積核為(3*3*64)*128,步長(zhǎng)為1,Padding 同為same 方式。
(8)Conv4 層 :為卷積神經(jīng)網(wǎng)絡(luò)的第4 個(gè)卷積層,使用的卷積核(3*3*64)*128,步長(zhǎng)為1,Padding 為same 方式。
(9)MaxPool2 層 :為卷積神經(jīng)網(wǎng)絡(luò)的第2個(gè)最大池化層,池化核大小為為3×3,步長(zhǎng)為2,Padding 為valid 方式。
(10)Dropout2 層:同樣在訓(xùn)練的時(shí)候以1/2概率使得隱藏層的某些神經(jīng)元的輸出為0。
(11)batch_normalization 層:批量歸一化層。
(12)FC5 層:為卷積神經(jīng)網(wǎng)絡(luò)的第1 個(gè)全連接層,首先要對(duì)輸入的特征圖進(jìn)行扁平化處理,將其變成維度為1×28 800 的輸入特征圖,本層要求輸出數(shù)據(jù)的維度是1×2 304。
(13)Dropout3 層:在訓(xùn)練的時(shí)候以1/2 概率使得隱藏層的某些神經(jīng)元的輸出為0。
(14)FC6 層:為卷積神經(jīng)網(wǎng)絡(luò)的第2 個(gè)全連接層,輸入數(shù)據(jù)的維度為1×2 304,輸出數(shù)據(jù)的維度是1×1 000。
(15)Dropout4 層:在訓(xùn)練的時(shí)候以1/2 概率使得隱藏層的某些神經(jīng)元的輸出為0。
(16)FC7 層:為卷積神經(jīng)網(wǎng)絡(luò)的分類(lèi)層,采取softmax 多分類(lèi)函數(shù),輸入數(shù)據(jù)的維度為1×1 000,輸出數(shù)據(jù)的維度要求是1×6,表示6種車(chē)型,最后得到輸出數(shù)據(jù)的維度為1×6。
如表2 和圖4 所示,在學(xué)習(xí)率為0.01,激活函數(shù)選擇ReLU,優(yōu)化算法選擇SGD,訓(xùn)練2 h 后迭代150 次時(shí),模型已經(jīng)開(kāi)始收斂且準(zhǔn)確率曲線波動(dòng)不超過(guò)2%,訓(xùn)練集準(zhǔn)確率接近1,損失函數(shù)值在0.06 左右,驗(yàn)證集綜合準(zhǔn)確率能達(dá)到92%;損失函數(shù)值在0.36 左右,各車(chē)型驗(yàn)證集上的準(zhǔn)確率都能達(dá)到85%以上。模型依然存在過(guò)擬合現(xiàn)象,原因是數(shù)據(jù)特征過(guò)多,而數(shù)據(jù)量不足,可以繼續(xù)增加圖片數(shù)據(jù)集數(shù)量或者進(jìn)一步使用數(shù)據(jù)增強(qiáng)手段以降低過(guò)擬合。
表2 CNN 模型驗(yàn)證結(jié)果Tab.2 CNN model validation results
圖4 訓(xùn)練結(jié)果Fig.4 Training results
保存訓(xùn)練好的模型最后進(jìn)行預(yù)測(cè),從數(shù)據(jù)集庫(kù)中選擇新鮮的圖片輸入,輸出結(jié)果如圖5 所示,可以成功預(yù)測(cè)出輸入圖片的正確車(chē)型。
圖5 預(yù)測(cè)結(jié)果Fig.5 Predicted results
本文說(shuō)明了車(chē)型識(shí)別在智能交通領(lǐng)域的重要意義,介紹了Tensorflow 機(jī)器學(xué)習(xí)架構(gòu)和卷積神經(jīng)網(wǎng)絡(luò)的基本原理。
通過(guò)多種數(shù)據(jù)增強(qiáng)手段對(duì)原有數(shù)據(jù)集進(jìn)行擴(kuò)充,提高了模型在驗(yàn)證集上的準(zhǔn)確率,降低了CNN 模型的過(guò)擬合;基于Alexnet 神經(jīng)網(wǎng)絡(luò)模型,采用Dropout 以降低過(guò)擬合,同時(shí)使用堆疊的最大池化層,有效避免平均池化的模糊化效果,采用兩層3×3 的卷積層堆疊,一方面減少了參數(shù)量,加快了模型的訓(xùn)練速度,另一方面每層可以使用兩次ReLU 激活函數(shù),使得CNN 對(duì)特征的學(xué)習(xí)能力更強(qiáng);通過(guò)對(duì)模型的多次訓(xùn)練調(diào)整,最終得到準(zhǔn)確率達(dá)92%的車(chē)型識(shí)別CNN 模型,并能準(zhǔn)確預(yù)測(cè)出新的圖片數(shù)據(jù)。