王 霞
(福建船政交通職業(yè)學(xué)院 信息工程系,福建 福州 350007)
隨著以“人”“車”“路”三者協(xié)調(diào)發(fā)展為內(nèi)涵的智能交通系統(tǒng)(ITS)迅速發(fā)展,采用圖像智能縮放技術(shù)、高速視頻流采集技術(shù)、多傳感器融合技術(shù)等來進(jìn)行“人”“車”“路”三者的重新智能化洗牌成為當(dāng)下政府相關(guān)部門的共識[1],大量案例表明,新技術(shù)的引入對于提高交通運輸資源一體化共享、優(yōu)化道路利用效率、緩解道路擁擠、顯著提高車輛出行安全等方面發(fā)揮了巨大的作用。車標(biāo)識別作為智能交通系統(tǒng)核心技術(shù)之一,具有廣泛的應(yīng)用領(lǐng)域,特別是在車輛號牌發(fā)生人為污染時,車標(biāo)作為車輛的另一個核心特征對于準(zhǔn)確識別目標(biāo)車輛并進(jìn)行必要的唯一性標(biāo)識具有重要意義[2]。Petrovic等人[3]利用梯度過濾器對車輛標(biāo)識等部位進(jìn)行定位;但當(dāng)車標(biāo)發(fā)生旋轉(zhuǎn)時,該方法的準(zhǔn)確性會有所下降。部分學(xué)者利用低層次特征,即尺度不變特征變換(SIFT)和梯度直方圖(HOG)來識別車標(biāo)[4-5];但大多數(shù)方法仍然嚴(yán)重依賴于低級特性和手工特性(例如SIFT),因此這些算法在處理具有不同成像條件的圖像時仍然受到限制。由CNNs進(jìn)行自動特征提取比手工提取更有效,CNNs算法已經(jīng)成功應(yīng)用在ImageNet[6]上,并被廣泛應(yīng)用于解決車標(biāo)識別問題[7-8]。但研究表明,CNNs在某些條件下會失敗,如像素值的變化[9]。傳統(tǒng)的車標(biāo)識別大多基于模板匹配或者支持向量機(SVM)求解最佳評測函數(shù),進(jìn)而調(diào)用模板庫和分類庫得出結(jié)果,上述方法對環(huán)境敏感性較強,可擴展性較差,識別準(zhǔn)確率較低,已經(jīng)不適應(yīng)日益復(fù)雜的交通現(xiàn)狀?;谏鲜霰尘?,提出了一種基于Seam Carving和深度學(xué)習(xí)的車標(biāo)識別算法,通過車輛圖像預(yù)處理、圖像智能縮放處理、車標(biāo)識別網(wǎng)絡(luò)構(gòu)建等步驟,可以準(zhǔn)確定位并識別車標(biāo)[10],具有較好的可擴展性和穩(wěn)定性,對環(huán)境干擾敏感度較低,可以廣泛應(yīng)用于車標(biāo)識別領(lǐng)域。
通過道路圖像采集器獲得的圖像一般為帶有大量噪聲和信息冗余的真彩色圖像,這種圖像一般含有明顯的干擾區(qū)域,不利于車標(biāo)的定位和識別,為了節(jié)約圖像后期處理資源,提高處理效率,需要對車輛圖像進(jìn)行物理預(yù)處理。為了縮小車輛圖像的顏色取值范圍,節(jié)約內(nèi)存空間,需要對圖像進(jìn)行灰度化處理,處理方法采用常用的三原色加權(quán)法,處理效果如圖1所示;為了降低噪聲對車標(biāo)識別的影響[11],凸顯車標(biāo)有益特征,需要對圖像進(jìn)行平滑處理,處理方法采用常用的中值濾波法,處理效果如圖2所示;為了進(jìn)一步抑制灰度化圖像中的邊緣點信息,在車標(biāo)定位的同時去除圖像中不相干的信息,需要對圖像進(jìn)行邊緣檢測,處理方法采用常用的Sobel算子檢測法,處理效果如下頁圖3所示。
圖2 車輛圖像中值濾波處理效果圖
圖3 車輛圖像邊緣檢測處理效果圖
Seam Carving是一種可以實現(xiàn)圖像低失真條件下的圖像智能縮放技術(shù),可以在改變圖像自身大小的同時保留圖像的重要特征不失真,其核心點是能量梯度函數(shù)的選取,根據(jù)能量梯度函數(shù)來插入或者刪除水平或者垂直的裁切線,進(jìn)一步根據(jù)上述裁切線獲取圖像重要特征能量的最小通道,確保圖像的重要特征不失真[12]。Seam Carving技術(shù)完整的處理流程一般包括能量分布圖計算、能量累加圖預(yù)測、獲取最小低失真裁切線等,其中,能量累加圖預(yù)測和獲取最小低失真裁切線的主要依據(jù)是能量梯度函數(shù)與圖像的亮度變化幅度、紋理豐富度等呈正相關(guān)[13]。
基于內(nèi)容感知的圖像縮放關(guān)鍵在于如何選擇要刪除的像素。直覺上,我們的目標(biāo)是移除與周圍環(huán)境相融合的不明顯的像素。本文使用的能量函數(shù)如下所示:
(1)
給定一個能量函數(shù),假設(shè)我們需要減少圖像寬度。我們可以考慮幾種策略來實現(xiàn)這一點。例如,保存能量的最佳策略,即保持像素具有較高的能量值,刪除能量最低的像素。為了防止圖像被破壞,可以從每一行刪除等量的低能量像素。同時為了保持圖像的形狀和視覺一致性,可以使用自動裁剪,即尋找包含最高能量的子窗口。另一種可能的策略是刪除能量最低的整個列。這導(dǎo)致了我們的縫刻策略(圖2(d))和內(nèi)部縫的定義。假設(shè)I是一個n×m的圖像,垂直縫的定義為:
(2)
其中,x是映射x:[1,...,n]→[1,...,m]。若y是映射y:[1,...,m]→[1,...,n],則水平縫的定義為:
(3)
(4)
對于問題(4),我們可以采用動態(tài)規(guī)劃求解,動態(tài)規(guī)劃的貝爾曼方程如下所示:
M(i,j)=e(i,j)+min(M(i-1,j-1),M(i-1,j),M(i-1,j+1))
(5)
動態(tài)規(guī)劃的過程結(jié)束后,矩陣M中最后一行的最小值將表示最小連接垂直接縫的結(jié)束。因此,在第二步中,我們從M上的最小值開始回溯,就能找到最優(yōu)接縫的路徑。
經(jīng)過Seam Carving技術(shù)處理的車輛圖像效果如圖4所示。為了提高編程效率,快捷的尋找最佳有效的能量梯度函數(shù),采用動態(tài)規(guī)劃的方法實現(xiàn),核心代碼如下:
%求解能量最小路徑
lastCol=find(Energy(m,:)==min(Energy(m,:)));
col=lastCol(1);
%描畫出裁切線
Line=Im;
for i=m:-1:1
Line(i,col,:)=[0,255,0];
col=col+Path(i,col);%連續(xù)動態(tài)迭代
end
%得出有效的能量值圖
Energy=zeros(m,n);
%得出有效路徑圖
Path=zeros(m,n);
tmp=0;
for i=1:m
for j=1:n
if(i==1)
Energy(i,j)=Gradient(i,j);
Path(i,j)=0;
圖4 經(jīng)過Seam Carving技術(shù)處理的車輛圖像效果圖
由于車輛圖像獲取的環(huán)境較為復(fù)雜,獲取的圖像由于道路上的不確定因素、車輛自身的裝飾物等造成車輛本身是一個形狀不規(guī)則目標(biāo)體,此外,由于車標(biāo)形狀各異、底色、凹凸性差異明顯,為車標(biāo)的精確識別帶來較大干擾[14],基于此,設(shè)計了車標(biāo)粗定位算法,可以粗略識別出類車標(biāo)區(qū)域,如圖5所示,算法主要流程如下:S1:根據(jù)整合的車標(biāo)核心特征點檢測信息,進(jìn)行分時特征點標(biāo)定操作;S2:根據(jù)先驗?zāi)0鍘熘杏嬎丬嚇?biāo)核心特征點的主輪廓并進(jìn)行輪廓標(biāo)定操作;S3:整合特征點標(biāo)定信息,為車標(biāo)粗定位做準(zhǔn)備。根據(jù)上述流程,在Matlab環(huán)境下編程實現(xiàn),效果如下頁圖6所示。
圖5 車標(biāo)粗定位算法流程圖
圖6 Matlab環(huán)境下的車標(biāo)粗定位效果圖
基于深度學(xué)習(xí)的車標(biāo)識別算法主要包括含多隱層的多層感知神經(jīng)網(wǎng)絡(luò)訓(xùn)練子算法、基于人眼視覺紋理的車標(biāo)精定位與識別子算法兩部分,如圖7所示,其中,含多隱層的多層感知神經(jīng)網(wǎng)絡(luò)訓(xùn)練子算法用來實現(xiàn)車標(biāo)識別網(wǎng)絡(luò)的初始化與車標(biāo)樣本的訓(xùn)練、擬合、反饋、層級遞進(jìn)等,形成包含多層感知器的種深度學(xué)習(xí)網(wǎng)絡(luò);基于人眼視覺紋理的車標(biāo)精定位與識別子算法用來實現(xiàn)車標(biāo)的精確定位與識別,車標(biāo)在粗略定位的基礎(chǔ)上基于人眼視覺紋理進(jìn)行精確定位并把定位信息反饋給深度學(xué)習(xí)網(wǎng)絡(luò),進(jìn)而得出車標(biāo)分類與識別結(jié)果。為了保證樣本訓(xùn)練效率,樣本的訓(xùn)練采用有監(jiān)督的訓(xùn)練模式,不斷增加模型結(jié)構(gòu)的深度,最終形成具有6層隱層節(jié)點的深度學(xué)習(xí)網(wǎng)絡(luò)結(jié)構(gòu),使算法整體向著最優(yōu)解方向迭代。
圖7 基于深度學(xué)習(xí)的車標(biāo)識別算法總體示意圖
含多隱層的多層感知神經(jīng)網(wǎng)絡(luò)訓(xùn)練子算法通過獲取并重新組合底層車標(biāo)特征抽象出更加簡潔的高層共同特征,可以實現(xiàn)不同車標(biāo)特征的分布式表達(dá)。含多隱層的多層感知神經(jīng)網(wǎng)絡(luò)訓(xùn)練子算法包含輸入層、輸出層、隱藏層,其中,輸入層的源數(shù)據(jù)是經(jīng)過預(yù)處理過的車輛圖像信息,在輸入層進(jìn)行二維矩陣格式化處理后附加期望輸出值傳遞給隱藏層;如圖8所示,隱藏層在數(shù)目上與輸入層節(jié)點一致,從包含單個節(jié)點的獨立隱藏層開始,將內(nèi)含節(jié)點添加到隱藏層接口,依次遞推,同時計算泛化誤差,訓(xùn)練誤差,偏差和方差。當(dāng)泛化誤差已經(jīng)下降并且在其再次開始增加之前[15],在這一點上的節(jié)點數(shù)量是最終的隱藏層目標(biāo)值;輸出層的類型由期望模型決定,可以是回歸或者分類結(jié)果。與上述過程相對應(yīng),核心代碼如下:
with tf.Session()as sess:
sess.run(tf.global_variables_initializer())
for epoch in range(6):# 隱藏層迭代次數(shù)
for batch_xs,batch_ys in generatebatch(X,Y,Y.shape[0],batch_size):# 每個周期進(jìn)行MBGD算法
sess.run(train_step,feed_dict={tf_X:batch_xs,tf_Y:batch_ys})
if(epoch%100==0):
res = sess.run(accuracy,feed_dict={tf_X:X,tf_Y:Y})
print(epoch,res)
res_ypred = y_pred.eval(feed_dict={tf_X:X,tf_Y:Y}).flatten()# 只能預(yù)測一批樣本,不能預(yù)測一個樣本
print res_ypred
圖8 隱藏層迭代示意圖示意圖
通過廣泛調(diào)研和查閱相關(guān)文獻(xiàn)得知,車標(biāo)一般處于車身兩端,這里僅考慮前端車標(biāo),前端車標(biāo)大多處于車輛前端發(fā)動機散熱網(wǎng)所覆蓋的區(qū)域,發(fā)動機散熱網(wǎng)考慮到散熱效率,一般設(shè)計成規(guī)則起伏的紋理狀,這些紋理狀與車標(biāo)性狀形成顯著差異?;谶@一特性,提出了一種基于人眼視覺紋理的車標(biāo)精定位與識別算法,如圖9所示,算法主要流程如下:S1:獲取原始車輛圖像并進(jìn)行預(yù)處理;S2:進(jìn)行車標(biāo)粗定位并根據(jù)發(fā)動機散熱網(wǎng)的紋理特性唯一定位車標(biāo);S3:根據(jù)精確定位結(jié)果采用含多隱層的多層感知神經(jīng)網(wǎng)絡(luò)訓(xùn)練子算法進(jìn)行車標(biāo)識別并把識別結(jié)果反饋給深度學(xué)習(xí)網(wǎng)絡(luò);S4:深度學(xué)習(xí)網(wǎng)絡(luò)根據(jù)反饋結(jié)果適當(dāng)調(diào)整隱藏層的目標(biāo)數(shù)目。與上述過程相對應(yīng),核心代碼如下:
accuracy = tf.reduce_mean(tf.cast(bool_pred,tf.float32))%設(shè)定人眼視覺紋理閾值
from collections import Counter%唯一定位車標(biāo)
singerDict = {} %車標(biāo)信息統(tǒng)計
for songKey in bigSongDict.keys():
theArtist = bigSongDict[songKey][artist_id]
if(theArtist in singerSDict):%調(diào)用深度學(xué)習(xí)網(wǎng)絡(luò)
圖9 基于人眼視覺紋理的車標(biāo)精定位與識別子算法流程圖
為了實際驗證上文所提算法的有效性和實用性,本文在vs2012環(huán)境下調(diào)用OpenCV通用計算機視覺庫開發(fā)了一款通用車標(biāo)自動識別系統(tǒng),該系統(tǒng)可以實現(xiàn)通用車標(biāo)二維輪廓的準(zhǔn)確定位、車標(biāo)內(nèi)容的快速識別、車標(biāo)核心特征點檢測與標(biāo)定、一般車標(biāo)特征點提取、車輛號牌污染情況下的車輛輔助追蹤、車標(biāo)后期真實感渲染等功能,系統(tǒng)實際運行界面如下頁圖10所示。
圖10 通用車標(biāo)識別系統(tǒng)界面示意圖
為了進(jìn)一步驗證系統(tǒng)在非正常環(huán)境下的性能,選取對車輛圖像采集影響較大的因素(本文選取環(huán)境亮度和環(huán)境噪聲)進(jìn)行控制變量驗證,具體做法為:S1:控制圖像采集噪聲不變,人為調(diào)整圖像采集環(huán)境亮度,觀察車標(biāo)識別準(zhǔn)確率;S2:控制圖像采集亮度不變,人為調(diào)整圖像采集環(huán)境噪聲,觀察車標(biāo)識別準(zhǔn)確率。基于上述做法,則實驗結(jié)果如圖11所示(綠色曲線為固定時間段內(nèi)的預(yù)測識別準(zhǔn)確率、藍(lán)色曲線為實驗曲線)。
圖11 控制變量法下的系統(tǒng)性能示意圖
由于篇幅所限,僅展示部分車標(biāo)的識別結(jié)果,如下頁圖12所示。
圖12 車標(biāo)識別結(jié)果示例
本文研究了基于Seam Carving和深度學(xué)習(xí)的車標(biāo)識別方法并開發(fā)了對應(yīng)的系統(tǒng),依次設(shè)計了車輛圖像預(yù)處理算法、基于Seam Carving的車輛圖像縮放算法、車標(biāo)粗定位算法、基于深度學(xué)習(xí)的車標(biāo)識別算法等,在此基礎(chǔ)上,本文在vs2012環(huán)境下采用OpenCV通用計算機視覺庫開發(fā)了一款通用車標(biāo)自動識別系統(tǒng)并對系統(tǒng)的性能進(jìn)行了實際測試。實際測試表明,本文所提基于Seam Carving和深度學(xué)習(xí)的車標(biāo)識別方法速度快、信息需求量較小、識別精度較高,重構(gòu)出的車標(biāo)具有較強的真實感和紋理性,可以較好地滿足肇事車輛信息確認(rèn)、復(fù)雜路況下的車輛布控、車輛監(jiān)管等領(lǐng)域的應(yīng)用需求,具有一定的實際推廣價值。