徐 威, 于海濱, 余胤翔, 鞏榮芬
(遼寧科技大學電子與信息工程學院, 遼寧 鞍山 114051)
近些年,智能汽車獲得了迅猛發展,陸續涵蓋了工程控制、信息與通信、模式識別、傳感技術、電氣工程、計算機等多個學科及領域。 研究可知,智能汽車技術在交通運輸、智能駕駛等方面有著廣闊的應用前景與發展空間[1]。 智能汽車的核心部分是賽道元素識別、方向和速度控制,精準的賽道元素識別算法是方向和速度控制的基礎和前提,尤其是面對復雜路況時賽道的識別是系統設計的難點[2]。 智能小車相比于真實汽車有著專屬的特點和用途,智能小車具有機械結構簡單輕便、駕駛模式低速安全、整車易于改造實現等特點,可以用于智能汽車核心控制系統的研發設計[3]。 最近幾年,深度學習方法在賽道識別方面也取得了很好的效果。 這些方法可以自動學習特征,從而更加精確地識別出賽道。 本文就智能小車的賽道識別問題提出了一種基于Keras的UNet 模型的識別方法,可對逐幀圖像進行識別處理,劃出中線集,來判斷道路狀況,以此來實現對賽道元素的精準識別。
賽道識別是從圖像或視頻數據中準確識別出賽道,這是自動駕駛、機器視覺和計算機視覺等領域的基礎。 目前,賽道識別研究已經較為成熟,其中一些傳統的賽道識別方法包括顏色分割、特征提取、邊緣檢測算法。 最近幾年,深度學習的賽道識別方法也取得了很好的效果。 這些方法可以實現自動學習特征,以此更加準確地識別出賽道。 為了更準確、更快速地對賽道進行識別,需要結合深度學習和計算機視覺等技術進行改進。
基于UNet 模型的賽道識別算法主要可以分成2 個部分。 第一部分是對輸入進的圖像根據網絡訓練出的結果進行預測,將圖像分割成背景和賽道兩部分;第二部分是對賽道部分進行細化算法求取中點集。 最后,根據中點集就可以預測智能車未來的行徑。
UNet 是一種用于圖像分割任務的卷積神經網絡模型。 由Ronneberger 等學者在2015 年提出,并廣泛應用在醫學圖像分割領域。 該模型的特點是具有對稱的U 形結構[4],其中包含一個下采樣路徑和一個上采樣路徑,使得在保持空間分辨率的同時,能夠對圖像進行有效的語義分割。 UNet 的訓練過程通常使用交叉熵損失函數,并且可以使用數據增強技術來增加數據的多樣性。 該模型在醫學圖像分割方面的應用,不僅能夠對腫瘤和器官進行有效的分割,而且在其他領域、如自然圖像分割和道路分割等方面也取得了可觀成果。
2.2.1 主干特征提取
采用的主干特征提取網絡為VGG16。 VGG16總共有16 層,包括13 個卷積層和3 個全連接層。第1 次經過64 個卷積核的2 次卷積后,采用1 次pooling,第2 次再經過2 次128 個卷積核卷積后,再采用pooling,再重復2 次3 個512 個卷積核卷積后,再采用pooling,最后經過3 次全連接[5]。

圖1 VGG16 結構圖Fig. 1 Structure diagram of VGG16
利用VGG16 提取后的卷積層和最大池化層,經過圖2 的卷積及池化操作后,獲得5 個初步的有效特征層。

圖2 有效特征層示意圖Fig. 2 Schematic diagram of the effective feature layer
2.2.2 主干特征提取
經過主干特征提取網絡,可以獲得5 個初步的有效特征層,在加強特征提取網絡過程中,會利用這5 個初步的有效特征層進行特征融合[6],特征融合的方式就是對特征層進行上采樣后、再進行堆疊。為了方便網絡的構建與呈現出更好的通用性,在上采樣時直接進行2 倍上采樣再進行特征融合,最終獲得的特征層和輸入圖片的高寬相同。
2.2.3 Loss 解析
Loss 解析是指對一個神經網絡模型的訓練過程中,計算出的誤差損失值進行分析和解釋。 可以幫助了解模型的訓練效果和優化方向,從而更好地調整模型參數,提升模型性能。
本文使用的Loss 由Cross Entropy Loss 和Dice Loss 兩部分組成。 Cross Entropy Loss 就是交叉熵損失,在對像素點進行分類時使用[7]。 Dice Loss 將語義分割的評價指標作為Loss,Dice 系數是一種用于度量2 個樣本相似度的指標,常用于自然語言處理中的文本匹配任務。 是用來測量2 個樣本中共同出現的元素或特征的比例,取值范圍在[0,1]。 其值可用如下公式進行計算:
2.2.4 預測結果
獲得特征層后,就可以利用輸入進來的圖片特征預測結果,使用1×1 的卷積進行通道調整。
細化算法是一種圖像處理算法,現已廣泛應用于數字圖像處理領域。 算法可以將圖像中的線條或輪廓進行細化,以達到消除噪聲、減少數據冗余等目的。 細化算法在很多應用領域都有著重要的作用,例如醫學圖像處理、指紋識別、人臉識別等。
細化算法是一個迭代算法,整個迭代過程分為2 部分,對圖像的像素進行處理。 數學方法公式分別見如下:
其中,N(P1) 表示與P1 相鄰的8 個像素點中,為實景像素點的個數;S(P1)表示像素中出現0~1的累計次數[7],0 為背景,1 為實景。
符合上述全部算法時該格子的算法為1,并且根據這2 個部分進行迭代,直到結果不再變化為止。最后的結果就是細化算法后的骨架。
UNet 的工作實際上就是對圖片的每個像素點進行分類,以此來對各像素點位的每個類別概率進行預測。 UNet 模型訓練用的數據集,采用VOC 的格式,分為2 部分,第一部分是原圖,為RGB 圖像[高,寬,3]; 第二部分是標簽,為灰度圖圖像[高,寬]。 原圖和標簽的數據集圖片如圖3 所示,是239個原圖與標簽圖。

圖3 原圖和標簽的數據集圖片Fig. 3 Dataset image of the original image and labels
為了擴大樣本的數據量,需提高模型在復雜環境下的準確性和泛化能力。 本文對數據集下的圖像進行了改變亮度、銳化處理,模糊處理等操作。 改變亮度、銳化處理、模糊處理后的圖像數據,可以模擬出賽道在不同光照強度下的場景。 對原圖的亮度處理是在(-40,40)的范圍內隨機加減,通過對每個像素點加減值,來達到改變圖像亮度的效果; 對原圖的銳化處理是增強圖像的邊緣對比度,需要先對圖像進行高通濾波處理[8],來突出其特征邊緣,再對特征邊緣在(1.1,1.3)范圍內做隨機倍數加強;對原圖的模糊處理上是隨機添加均值為0、方差為1 的高斯噪聲[9]。 原圖和標簽的數據集圖片如圖4所示。

圖4 數據集增強Fig. 4 Dataset enhancement
在Windows10 系統下, CUDA v10.0, cuDNN 7.5.0,運用Python 3. 6. 4 語言進行編譯,基于Tensorflow 2.6.2 下的Keras 2.6.0 框架下搭建的,在VS Code 2021 下運行。
使用基于UNet 模型的賽道識別算法,對輸入視頻的每一幀進行識別,選取其中一幀,識別效果如圖5 所示。

圖5 識別效果圖Fig. 5 Recognition rendering
本文對算法進行了測試,選取了30 幀的視頻作為檢測對象,記錄每一幀下的頻率,畫出時效性分析圖來體現基于UNet 模型的賽道識別算法的時效性。時效分析結果如圖6 所示。

圖6 時效分析圖Fig. 6 Aging analysis
本文為了驗證基于UNet模型的賽道識別的準確性,與傳統賽道識別算法進行結果比對。 對于傳統賽道識別算法,研究中采用的是顏色分割和邊緣檢測的方法。
實驗時對相同的賽道視頻進行識別,并對其輸出的中點集與正確中點集進行比較。 為了加強準確度分析的嚴密性,研究采取分別對其在不同環境情況下(低光照、正常光照、高光照)的8 張賽道圖片進行識別,對輸出的中點集使用編輯距離算法,計算與實際中點集的誤差,公式具體如下:
其中,a,b是2 個數組,f(i,j) 是a中的前i個字符和b中前j個字符的編輯距離。
研究得到的識別偏差結果對比見表1。

表1 識別偏差結果對比表Tab. 1 Comparison table of identification bias results
本文針對賽道識別問題,提出了一種基于UNet模型的賽道識別方法,使用UNet 模型分割后的掩碼圖像提取賽道的邊緣信息,再用細化算法求取中點集。 本文對UNet 模型的框架和原理進行了簡單闡述,并通過時效性分析,發現了模型存在的初始運行慢問題,通過準確度分析實驗,發現相比于傳統賽道識別方法,本文方法在不同環境下的賽道識別有了很大的提升。 后續需要繼續研究結構和算法的改進,進一步提升新方法的時效性和準確率。