鄧天民,蒲龍忠,萬 橋
(重慶交通大學 交通運輸學院,重慶 400074)
近年來,隨著無人駕駛技術的不斷發展,車道線檢測作為無人駕駛領域關鍵的一環也得到了更多學者的關注研究。在實際駕駛場景中,路況復雜多變,車道線線型也多種多樣,以至于車道線檢測任務難度較大,適用于無人駕駛的車道線檢測技術還不夠完善。
傳統的基于模型的方法利用三次均勻B樣條曲線模型結合霍夫變換擬合車道線[1]和使用NMPC的方法實現車道線的跟蹤檢測[2];基于特征的方法主要通過環境顏色[3]、車道線紋理[4]和車道線幾何形狀[5]等搭配霍夫變換[6]或濾波[7]的方法來識別、檢測車道線,但傳統方法因計算量大,在車輛遮擋和地面污損等復雜道路場景下泛化性差,精度低等原因已不適用于自動駕駛,因此,基于深度學習的方法應運而生。He等[8]提出利用前視圖區分行駛車道和車輛,利用俯視圖區分車道線和箭頭等的CNN(convolutional neural networks)模型,效果較好但實時性較差。編解碼器體系結構(visual geometry group,VGG)[9]、殘差網絡(residual network,ResNet)[10]以及全卷積網絡(fully convolutional network,FCN)[11]等的提出解決了車道線檢測中卷積神經網絡會造成空間信息的部分丟失問題;Enet(efficient neural network)[12]通過設置主分支和擴展更快、更有效進行大規模計算以提升車道線檢測速度。但大部分基于深度學習的方法檢測結果不夠準確、檢測速度慢,達不到安全性和實時性的要求。
針對以上問題,本文提出將車道線檢測問題轉換為實例分割問題以識別車道線的方法。首先基于改進FCN神經網絡提高車道線信息特征提取能力,得到車道線的像素點圖和二值化語義分割圖;然后通過聚類算法對車道線像素點進行聚類并形成不同實例;最后通過逆透視變換和最小二乘法對車道線進行擬合,得到擬合后的車道線檢測模型。
全卷積網絡(FCN)是一種在不帶有全連接層的情況下能進行密集預測的網絡[13],它不同于CNN網絡通過全連接層得到的特征向量以進行目標分類,FCN在VGG16網絡架構基礎上將全連接層改變為卷積層,使用上采樣操作對末端特征圖進行處理,最后得到與輸入圖像尺寸一致的特征圖,從而充分保留原圖的空間信息,同時也能提取特征讓每個像素得到一個預測值,從而解決了語義級別的圖像分割問題。基于FCN網絡結構,本文通過網絡卷積優化改進和網絡分支設計等操作,提出一種基于改進FCN的車道線實例分割檢測方法。
本文采用FCN-VGG16作為車道線檢測的網絡主體結構,該網絡包含多個編碼器層和解碼器層,編碼器層和解碼器層為一一對應關系。
VGG16總共有16層,其中包含13個卷積層和3個全連接層,在輸入任意大小圖片尺寸后,首先通過兩個64卷積核卷積,進行一次池化(max pooling),然后再次經過兩次128個卷積核卷積后進行池化操作,再重復兩次3個512個卷積核卷積后,再次池化,最后經過三次全連接。其中,VGG16使用了3×3的小型卷積核,是最小的能夠捕獲上下左右和中心概念的尺寸,足以捕捉到橫、豎以及斜對角像素的變化。每層卷積的滑動步長stride=1,padding=1。VGG16的池化核為2×2,stride=2。在編碼過程中,通過多個卷積層提取圖像特征,增加通道;通過多次池化操作來縮減輸入數據的空間維度,增大感受野。部分網絡使用大尺寸卷積核來提升感受野,這樣對模型來說確實有提升,但增加了模型的參數量,訓練時間更久,檢測時間也隨之加長,而VGG16使用小尺寸卷積核的模型訓練時間更短,實時處理能力更強。
FCN在VGG16網絡基礎上對最后一個卷積層的熱點圖進行上采樣層(up sampling)來還原圖像尺寸,進行輸出圖逐元素疊加作為解碼器輸出,在逐像素的訓練后,對每個像素都產生預測,最后逐像素分類預測顯示在上采樣后的特征圖上,得到語義分割圖。基于FCN的圖像語義分割算法流程如圖1所示。
FCN網絡能夠進行目標分類和語義分割,因此可以對其改進以解決車道線檢測問題。本文設計的基于FCN的改進網絡為雙分支結構網絡,用分割的方法解決車道線檢測問題。網絡直接輸出車道線像素以及每個車道線像素對應的ID(類別),進行顏色區分,進而實現車道線檢測。網絡主要從以下4個方面進行改進:
(1)多分支網絡設計。通過疊加嵌入分支和分割分支,可得到兩個分支分別輸出的預測圖,實現端到端訓練;
(2)網絡壓縮。通過對網絡結構的壓縮,減少不必要的卷積層,加快訓練和檢測的速度,提高網絡的實時性;
(3)卷積核替換。將網絡編碼結構中最后一層卷積的常規正方形卷積核替換為非對稱卷積核,非對稱卷積能保證與常規方形卷積的結果等價的同時降低運算量;
(4)激活函數設計。使用FReLU激活函數,更好適用于當前的實例分割檢測項目。
改進的FCN網絡結構如圖2所示。
1.2.1 多分支網絡設計
如圖2所示,編碼階段第四次最大池化層的輸出分別被輸入到兩個卷積塊,進行多任務分支分別用于二值分割(binary segment)和實例分割(instance segment)卷積操作。相對應的,兩個編碼過后開始兩個解碼操作,對每一個卷積塊的輸出進行相應的上采樣(使用反卷積上采樣),并層層進行輸出圖逐元素疊加,然后采用DBSCAND聚類方法,將嵌入分支的單個車道線像素點以二值化分割圖為基礎進行聚類,兩分支結合訓練和預測,大幅提升模型的預測精度,保證預測結果的準確性。本文將改進后的FCN網絡命名為MB-FCN(multitasking branch fully convolutional networks)。
(1)車道線語義分割(segmentation branch)
主要用于獲取車道像素的分割結果,即篩選出車道線像素和非車道線像素,將圖像像素點分為車道線和背景,并輸出一個二值化圖像。
由于圖像中車道線和背景的像素點分布不均衡問題會出現在訓練集的構建中,尤其是在圖像中出現車道線被車輛遮擋或者沒有清晰車道線時,為提高車道線檢測的準確率,訓練集會補充被遮擋或不清晰的車道線,采用可較快更新網絡參數數值的交叉熵損失函數訓練二值化分割模型效果較好,計算交叉熵損失的函數為
(1)

(2)車道線嵌入分割(embedding branch)
車道線嵌入分割部分主要進行實例分割操作,將圖像中的車道線像素點劃分為不同的車道線實例。該網絡解碼得到的輸出圖中每一個像素對應一個N維的向量,在該N維嵌入空間中同一車道線的像素點距離更接近,而不同車道線的像素點的向量距離較大。根據該特點,聚類同屬于一車道的特征點,聚類損失函數L由L1和L2組成,其中,L1負責拉近嵌入的同屬一車道線的像素點,L2負責分離并推散嵌入的相異車道線的像素點。損失函數L設計如下
(2)
(3)
L=L1+L2
(4)
其中,C代表車道線數量;Nc表示某一車道線的聚類像素點數。μc代表某一車道線像素點的嵌入均值向量值;xi表示某一像素點的嵌入向量;μCA與μCB表示兩不同車道線所含的不同像素點 (CA,CB) 的均值向量;δ1、δ2分別為聚類半徑和集群聚類距離閾值,均為人為設定; [x]+=max(0,x)。
實驗時,為了將像素進行聚類,在上述的實例分割損失函數中設置δ2>6δ1。 本文采用基于密度的空間的聚類算法DBSCAN,將相鄰車道區分開來,從而得到獨立的單個車道線像素圖。DBSCAN可以在具有噪聲的數據庫中發現任意形狀的簇,能夠連接密度足夠大的相連區域,通過空間數據分布的緊密程度決定聚類情況,直到將所有的車道線像素分配給對應的車道。
1.2.2 網絡壓縮
卷積網絡結構一般比較復雜,多層卷積可以更好的提取特征,但是過多的卷積結構會造成信息冗余且不會較好提升精度。因此本文在不影響訓練和測試精度的情況下對VGG16網絡第二次池化后的第三次卷積和第四次池化后的第三次卷積進行相應的剪除,以加快運算速度,滿足智能駕駛的實時性需求。壓縮后的網絡編碼結構見表1。
1.2.3 卷積核替換
本文使用3×1和1×3的非對稱卷積核替代原VGG模型中的3×3卷積核。
普通卷積核大小通常為3×3或5×5,用以對圖像進行特征的提取,VGG模型卷積操作中使用的為3×3的卷積核,本文在網絡編碼結構中最后一層卷積中利用3×1和1×3的非對稱卷積核替代3×3卷積核(圖3),因為高層次的卷積中圖片大小較小,較為適用非對稱卷積操作[14],使用非對稱卷積操作不僅可以降低大量的參數,加快訓練和檢測速度,而且可以保證與常規3×3卷積相同的效果。

表1 網絡編碼結構
1.2.4 激活函數的選擇
本文采用一種能用于圖像識別任務的簡單但有效的激活函數,FReLU激活函數[15](圖4),通過增加一個空間條件來擴展ReLU/PReLU函數,通過非常小的運算開銷,將對空間不敏感的激活函數擴展為擁有視覺擴展并自動建立模型的激活函數。相較于傳統的Sigmoid、TanH等激活函數可能出現的梯度消失、函數值輸出為常數、網絡收斂困難等問題;FReLU激活函數不僅可以提高單個任務的性能,也不存在梯度消失問題,且運算速度較快,還可以進行稀疏表達,也使模型的收斂速度維持在一個穩定狀態,可以很好地遷移到其它視覺任務。激活函數表示為n=max(m,T(m)), 其中T(m) 表示擴展運算的特征提取法。
為了實現空間條件,使用參數化池化窗口(parametric pooling window)來創建空間依賴性(使用高度優化的深度可分離卷積算符和BN層來實現)
f(mc,i,j)=max(mc,i,j,T(mc,i,j))
(5)
(6)
FReLU函數的設計可以讓每個像素點在激活操作中產生空間視野,在對空間的響應中進行非線性變換并提升對視野的依賴性。函數max(·) 給每個像素提供了一個看空間背景或不看空間背景的選擇。考慮一個有n個FReLU層的網絡 {F1,F2,…,Fn}, 每個FReLU層Fi有h×h個參數窗口。為了簡潔起見,只分析FReLU層,而不考慮卷積層。由于最大選擇在1×1和h×h之間,所以F1之后的每個像素都有一個激活函數集 {1,1+x}(x=h-1)。 在Fn層之后,集合就變成了 {1,1+x,1+2x,…,1+nx}, 這給每個像素提供了更多的選擇,如果n足夠大,可以近似于任何布局,如圖5所示。
圖5中不同大小的正方形代表了頂部激活層中每個像素的不同激活場。 max(·) 允許每個像素選擇在每層中尋找或不尋找,在足夠多的層數后,形成大量大小不一的方塊。因此,不同大小的方塊可以近似于圖5(a)斜線的形狀,圖5(b)弧線的形狀,這些都是比較常見的自然物體布局,弧線也適用于彎曲的車道線檢測。
為了方便擬合車道線像素點,本文采用逆透視變換,將運動圖像轉換成俯視圖。其中將現實世界中的點P′(XW,YW,ZW) 從世界坐標系到相機坐標系的關系如圖6所示,轉換公式如下
(7)
式中:H為旋轉矩陣,T表示偏移向量,即坐標的平移。P(XC,YC,ZC) 為對應的相機坐標系中的點。
在得到相機坐標后,要將屬于透視投影關系的三維相機坐標系轉化為平面坐標系,再通過平面坐標系轉化為圖像坐標系,其中,相機坐標和平面坐標轉換的公式為
(8)
(9)
其中,k為相機焦距,為相機坐標原點與圖像坐標原點的距離,點 (x,y) 為在圖像坐標系的成點。
從平面坐標得到圖像坐標系, (u,v), (x,y) 分別表示以像素為單位的圖像坐標系的坐標和以毫米為單位的圖像坐標系的坐標,如圖7所示。
像素坐標系和圖像坐標系都在成像平面上,圖像坐標轉換為像素坐標的公式如下
(10)
最終通過上面坐標系的轉換就可以將一個點從世界坐標系轉換到像素坐標系。圖8為根據相機采集的原圖進行逆透視變換后的鳥瞰效果圖。
通過逆透視變換的方法,得知每個像素點屬于哪個車道后,將像素點集合轉換為鳥瞰圖,并對不同車道分配不同ID,將每一個車道實例進行參數曲線擬合并用不同顏色線條表示不同車道線。常用的擬合模型有霍夫變換、最小二乘法、三次曲線和貝塞爾曲線擬合[16-18]。本文采用最小二乘法對車道線像素點進行擬合,為了得到真實的預測情況,最后還要將擬合后的曲線回歸原始圖片中,得到更好的車道線檢測效果。
本實驗使用的是Tusimple數據集,Tusimple數據集是自動駕駛領域權威公司圖森未來專為研究自動駕駛關鍵算法和解決方法所創立的數據集。Tusimple數據集總共包含128 160張圖片,圖片來源于中等天氣條件下,車輛白天在高速公路多條車道情景下行駛的視頻,取每秒視頻分為連續的20幀,包含不同的交通狀況,取最后一幀進行車道線標注。數據集共分為兩部分,訓練集和測試集,訓練集包含72 520張圖片,其中標注圖片3626張,測試集包含55 640張圖片,數據集圖片尺寸統一為1280*720。
本實驗在Windows10環境下,依賴于Tensorflow_gpu-1.14.0,Python-3.7.6,另調用Numpy-1.18.1,Tqdm-4.42.1,Glog-0.3.1,Easydict-1.9,Matplotlib-3.1.3,Opencv-4.4.0,Scikit_learn-0.22.1等函數庫完成程序支持;硬件平臺為處理器:Intel(R)Core(TM)i7-6700K CPU@3.6GHz×8,顯卡:GeForce GTX 1070Ti/PCIe。
為了實現車道線的精確檢測,需要進行模型訓練和參數優化調整,達到訓練次數或要求的收斂條件為止。針對深度學習網絡訓練數據量大、超參數優化耗時長的問題,本文采用Hyperopt方法選取和優化超參數,通過對經驗和實驗的總結,選擇將標注的3626各樣本總共訓練42 000次停止,根據超參數的設置,最終以損失值和準確率等來評價網絡結構效果,得到最終權重文件。通過選取和優化,網絡結構最優超參數見表2。

表2 網絡超參數設置
網絡的訓練損失變化曲線如圖9所示。
由圖9能夠發現訓練損失值下降平穩,隨著學習率和迭代次數不斷變化,最后在迭代42 000次左右趨于穩定,表明訓練結果良好。
2.3.1 車道線檢測準確率分析
因為自動駕駛行車安全要求較高,所以對車道線檢測的要求也很嚴格。因此采用兩個標準來評價檢測效果:準確率 (acc) 和漏檢率 (FN)。 其中每幅圖像的平均正確點數作為準確率判斷指標,即模型判斷正確的數據占總數據的比例
(11)
其中,Cim為正確分割的像素點數目,Sim表示標注的真實的車道線像素點數。同時設定一個閾值,當標注點與檢測點匹配率大于閾值時則這個點檢測正確。
漏檢率的計算方法如式(12)所示
(12)
其中,Mpred代表沒有檢測到的車道線數量,Ngt代表真實存在的車道線數量。
訓練準確率曲線如圖10所示。
為了驗證改進后模型的良好效果,對不同改進方面分別進行了訓練實驗。實驗結果如表3和圖11所示。

表3 不同改進方案對模型性能影響分析
由表3和圖11可知,文本設計的第7個模型算法在檢測準確率和檢測速度方面較未設計前均有較大改進,綜合效果最好,說明了設計模型算法的合理性和有效性,為最優方案。
為了測試算法在復雜場景下車道線檢測的準確率和漏檢率,對測試集55 640張圖片進行了測試,部分結果如圖12所示,并且為了表明算法的泛化性,選取常規、車輛遮擋、地面污損、陰影、強曝光等5個場景圖片用本文所提算法進行測試結果展示,檢測結果如圖13所示,可以看出在多種場景下,基于本文所提算法不僅在常規道路結構上有較好的效果,在有車輛遮擋、車道線污損、強光環境、地面陰影等情況下也有良好檢測效果。
對不同場景進行車道線總數和正確檢測數統計,正確檢測數與車道線總數比值記為匹配準確率,結果見表4。

表4 不同道路場景下的匹配準確率
在車輛遮擋情況下,由本文提出的MB-FCN優化算法檢測,測試結果表明,本文提出的模型結構和算法具有較高的檢測精度和較好的魯棒性,在識別效果和抗干擾能力方面也有較大提升。在挑選的測試圖片中取得了良好的測試效果,其中在常規道路上的準確率最高,在強曝光和陰影環境下的準確率最低,還可以看出車道線檢測準確率受外部因素影響較大,原因可能是因為強光和陰影下道路特征信息難以提取。
為了進一步驗證本文方法的性能效果,使用幾種典型車道線檢測方法進行測試,表5展示了本文方法與幾種典型方法在圖森測試集上的結果比較。本文在Tusimple數據集的平均準確率為97.2817%,由實驗結果可以看出本文方法平均漏檢率相比于文獻[19]降低了0.53%,而準確率相比文獻[19]和文獻[20]分別提高了和0.88%和0.75%。文獻[20]采用行列卷積的形式,訓練時需要使用固定順序的車道線標簽數據集,而本文方法只需要訓練圖片與標簽一一對應的關系,標注操作簡單,減少了大量工作量,更貼合實際。

表5 幾種典型車道線檢測方法準確率、漏檢率對比
圖14是在圖森數據集下直線和彎曲道路檢測結果,可看出在有污損的曲線車道線情況下該方法檢測準確性良好,測試結果表明在改進后的算法中,直線車道和曲線車道的車道線檢測準確率都有較大提高;且隨著駕駛場景的變化,車道線檢測也有較強的魯棒性。
2.3.2 車道線檢測時間測試
由于輔助駕駛對系統實時性要求較高,檢測速度是一個很重要的評價指標。表6為車道線檢測在現有主流模型和MB-FCN模型上單張檢測時間和檢測速度比較。

表6 本文方法與典型方法檢測速度比較
測試結果表明,MB-FCN網絡檢測速度接近于輕量化網絡Enet,優于復雜網絡SCNN,綜合檢測準確率與檢測速度來看,MB-FCN網絡表現出了最優檢測效果。
本文所提出的基于改進FCN的車道線實例分割檢測方法,采用改進的FCN網絡進行車道線的特征提取和分割,利用DBSCAN聚類算法進行聚類并分配ID,通過逆透視變換和二次擬合得到更加精準的車道線,最后對ID分配顏色區分不同車道線并還原到原圖輸出,得到更加直觀的檢測結果,方法可以滿足車道線檢測任務中關鍵指標準確率與實時性的要求。未來將注重在深度學習中運用遷移學習和車道線類型區分方面的研究,以增加檢測的多樣性和泛化性并提升模型效率,提高無人駕駛技術水平,進一步保證無人車遵守交通規則,保證駕駛安全。