武志斐,李守彪
(太原理工大學機械與運載工程學院,太原 030024)
車道線檢測是高級輔助駕駛系統(tǒng)乃至自動駕駛系統(tǒng)的關(guān)鍵感知技術(shù),基于車道線檢測的車道線偏離預警系統(tǒng)和車道保持輔助系統(tǒng)對于改善汽車的主動安全性及減少交通事故有著至關(guān)重要的作用[1-2]。
傳統(tǒng)的車道線檢測算法大多數(shù)依賴車道線的顏色[3-4]、灰度[5-6]、邊緣[7-8]等手工特征提取,易受車輛遮擋和不良光線等因素的影響,難以適應自動駕駛實際應用的復雜場景。
隨著深度學習的發(fā)展和車載處理器性能的提升,基于深度學習的車道線檢測得到快速發(fā)展。相比傳統(tǒng)的車道線檢測算法,基于深度學習的車道線檢測算法可以自動根據(jù)圖像信息提取車道線特征,擁有更高的準確率和魯棒性,主要分為基于分割的算法[9-11]、基于行分類的算法[12-13]和基于參數(shù)預測的算法[14-15]。
基于分割的車道線檢測算法將車道線看作像素的集合并進行分類,又可以細分為基于語義分割的算法和基于實例分割的算法?;谡Z義分割的車道線檢測將每條車道線和背景看作不同的類別進行多類別分割,將增強對車道線的感知作為研究重點。Pan 等[9]設(shè)計了一種空間卷積網(wǎng)絡(luò)(spatial convolutional neural network,SCNN),通過捕獲圖像中行和列的空間關(guān)系來增強對車道線的檢測效果。Hou 等[10]提出一種自注意力蒸餾(self attention distillation,SAD)模塊,通過模塊間輸出特征的相互學習來有效地提取車道線特征。然而基于語義分割的車道線檢測算法只能檢測預定義且固定數(shù)量的車道線,不能靈活應對駕駛路面上數(shù)量變化的車道線。Neven 等[11]基于實例分割的思想提出了LaneNet 算法,通過對每一個像素分配一組多維嵌入向量來區(qū)分不同的車道線實例,可以在不預定義車道線數(shù)量的前提下進行多車道線檢測,但其檢測精度不高,且利用Meanshift 聚類算法導致后處理耗時長,無法滿足自動駕駛實時性要求。
基于行的車道線檢測利用車道線的形狀先驗,通過行方向上的分類實現(xiàn)對車道線的定位。Qin等[12]提出了一種超快車道線檢測(ultra fast lane detection,UFLD)算法,利用行分類公式顯著降低了計算成本。Yoo 等[13]提出了端到端的行分類車道線檢測網(wǎng)絡(luò)(E2Enet),并設(shè)計了一種水平壓縮模塊提高檢測的性能。雖然利用行分類可以簡化模型的輸出,但其未能有效解決車道線的實例級檢測問題。
基于參數(shù)預測的車道線檢測將車道線用曲線方程表示。Tableini等[14]提出了PolyLaneNet,首次利用深度網(wǎng)絡(luò)直接回歸車道線曲線方程。為更好地預測曲線方程的參數(shù),Liu 等[15]提出基于transformer 的車道線檢測算法(LSTR),利用transformer 的自注意力機制來建模車道線的細長結(jié)構(gòu)。雖然這類算法可以預測數(shù)量變化的車道線,但是抽象的曲線方程參數(shù)難以優(yōu)化,導致其在復雜場景下的性能較差。
綜合上述分析,車道線檢測一方面須增強模型的感知來應對復雜的自動駕駛場景,另一方面須實現(xiàn)實例級車道線檢測來應對道路中數(shù)量變化的車道線。因此本文提出一種基于實例分割的車道線檢測算法,設(shè)計基于擴張卷積的殘差模塊來增強模型的感受野,并提出一種基于車道線位置的實例分割方法來實現(xiàn)車道線的實例級檢測。
針對本文所提出的車道線檢測算法,設(shè)計的車道線檢測網(wǎng)絡(luò)模型整體框架如圖1 所示??傮w結(jié)構(gòu)分為編碼網(wǎng)絡(luò)和解碼網(wǎng)絡(luò)。
圖1 車道線檢測網(wǎng)絡(luò)整體結(jié)構(gòu)
通過分析車道線的顏色和結(jié)構(gòu)可知,車道線與道路邊沿等具有一定的相似性,且被遮擋、磨損后會造成特征提取困難。為準確提取圖像的車道線特征,須采用深度網(wǎng)絡(luò)進行特征提取,然而深層次的網(wǎng)絡(luò)在訓練時會出現(xiàn)退化現(xiàn)象,造成網(wǎng)絡(luò)的性能下降。為解決這一問題,殘差網(wǎng)絡(luò)[16](residual network,ResNet)提出了殘差學習的網(wǎng)絡(luò)結(jié)構(gòu),通過在網(wǎng)絡(luò)的不同層之間增加跳躍連接(skip connection)為訓練時的梯度提供了恒等映射的通道,使淺層網(wǎng)絡(luò)信息可以快速傳遞到深層,在一定程度上解決了深度網(wǎng)絡(luò)訓練出現(xiàn)的性能退化,增強了網(wǎng)絡(luò)提取圖像特征的能力,被廣泛應用于車道線檢測研究。為提高車道線檢測的實時性,本文中采用殘差網(wǎng)絡(luò)系列中最輕量的ResNet18 作為主干網(wǎng)絡(luò)提取圖像的多尺度特征,并在大規(guī)模數(shù)據(jù)集ImageNet[17]上進行預訓練來提高特征提取效果,當輸入網(wǎng)絡(luò)的圖像尺寸為800×320×3時,ResNet18 網(wǎng)絡(luò)結(jié)構(gòu)及輸出特征尺寸如表1所示。
表1 ResNet18網(wǎng)絡(luò)結(jié)構(gòu)
其中殘差模塊結(jié)構(gòu)如圖2 所示。圖中w0為輸入殘差模塊的特征通道數(shù),w為各卷積輸出特征的通道數(shù),并采用ReLU激活函數(shù)進行非線性映射。
圖2 殘差模塊
由于車道線的細長結(jié)構(gòu),使檢測網(wǎng)絡(luò)既需要車道線的高層次語義特征,同時也需要局部的細節(jié)特征,因此采用特征金字塔網(wǎng)絡(luò)[18](feature pyramid network,F(xiàn)PN)來融合多尺度的特征信息,結(jié)構(gòu)如圖3所示。將ResNet18的L3、L4和L5層輸出的特征,首先通過1×1 卷積來匹配通道數(shù),同時采用雙線性插值匹配不同特征層的尺寸,最后輸出尺寸為100×40×128的特征。
圖3 特征金字塔結(jié)構(gòu)
由于本文采用輕量化的主干網(wǎng)絡(luò),模型會存在感受范圍不足的情況,因此采用擴張卷積[19](dilated convolution)來增強模型的感受野。擴張卷積的原理是在卷積中引入擴張率(dilation rate)的新參數(shù),通過擴張率來控制卷積核各點的間距,相較于普通卷積,在卷積核尺寸相同時,參數(shù)量不變,但是擴張卷積的感受野更大,單層擴張卷積的感受野大小遵循公式為
式中:k為原始卷積核的感受野大??;kd為擴張后卷積核的感受野大?。籨為擴張率。
圖4 為不同擴張率的擴張卷積。如圖4(a)所示,當擴張率d為1時,3×3 的擴張卷積相當于標準卷積,單層感受野只有3×3大??;圖4(b)為當擴張率d為3的3×3擴張卷積,單層感受野增大到7×7大小。
圖4 不同擴張率的擴張卷積
利用擴張卷積的原理,本文中提出一種基于擴張卷積的殘差模塊,如圖5 所示。整體上采用殘差結(jié)構(gòu),并采用4層3×3的擴張卷積。雖然擴張卷積可以有效提高模型的感受野,但當采用相同或成倍數(shù)的擴張率時會存在網(wǎng)格效應[20],造成特征圖上卷積中心點的不連續(xù),導致像素信息的缺失,因此疊加卷積的擴張率不應有大于1的公約數(shù),本文將4層卷積的擴張率分別設(shè)置為1、3、7 和11,采用小的擴張率來獲取圖像的局部信息,并利用遞增的大擴張率增強中遠距離車道線信息的聯(lián)系。在編碼網(wǎng)絡(luò)中采用3 個擴張卷積殘差模塊增強模型的感受野,來提高車道線檢測的精度。
圖5 擴張卷積殘差模塊
解碼網(wǎng)絡(luò)負責將提取的車道線特征進行解碼輸出。主要由分割分支、水平偏置分支和垂直偏置分支組成。首先通過一個1×1 卷積核將通道數(shù)縮小一半,然后通過雙線性插值將特征圖的尺寸擴大兩倍,通過3 層殘差模塊后分別連接分割分支、水平偏置分支和垂直偏置分支,3 個分支結(jié)構(gòu)相同,都由3 層3×3 的卷積組成。本文中將各分支輸出特征尺寸固定到輸入圖片尺寸的1/4,而不是像大多數(shù)分割模型輸出高分辨率的特征,這樣一方面可以簡化模型的輸出,提高網(wǎng)絡(luò)的推理速度,另一方面可以提高模型后處理聚類的速度。解碼網(wǎng)絡(luò)是實現(xiàn)實例分割的基礎(chǔ),各分支的具體作用參考2.1節(jié)。
實例分割是計算機視覺領(lǐng)域的一個經(jīng)典任務,其不僅要區(qū)分不同類別的物體,且須區(qū)分同一類別物體的不同實例。具體到車道線檢測任務,實例分割須區(qū)分車道線類別與背景類別,然后將對每條車道線實例進行區(qū)分。
為準確區(qū)分不同的車道線實例,本文中提出一種基于車道線位置的實例分割方法。首先利用模型分割分支來預測二分類的車道線分割圖,通過Argmax 函數(shù)獲取每一個像素的類別,屬于車道線類別的每個像素視為一個車道線點,每張圖片上的所有車道線點可以用一組坐標表示:
式中:P表示車道線點的集合;xi表示第i個車道線點的水平坐標位置;yi表示第i個車道線點的垂直坐標位置;F表示車道線點的最大數(shù)量。
車道線點的預測結(jié)果示意圖如圖6 所示。此時只能區(qū)分車道線點與背景,而不能區(qū)分車道線點的實例。由圖中車道線點的空間位置分布可知,不同實例點的車道線點相互分離,已具備一定的聚類特性,但由于車道線的細長結(jié)構(gòu),使車道線點分散嚴重,且相鄰的車道線在遠處時相互聚集,不能簡單地利用聚類算法對車道線點進行實例區(qū)分。
圖6 車道線點分布示意圖
為更好地區(qū)分不同實例的車道線點,本文算法為每個車道線點預測一個對應的聚類點,讓不同實例但卻相鄰的車道線點對應的聚類點相互分離,并使同一實例車道線點對應的聚類點更加聚集,提高每個實例的點密度,從而更易區(qū)分不同的車道線實例。因此利用模型的水平偏置分支和垂直偏置分支,分別預測一個水平偏置圖和垂直偏置圖,根據(jù)車道線點位置提取出其對應每個點的水平位置偏置和垂直位置偏置,如式(3)和式(4)所示。
利用車道線點的位置和預測的水平偏置與垂直偏置來計算對應的聚類點,其原理如圖7 所示。圖中黑點表示預測的車道線點,紅色點表示第i個車道線點經(jīng)過式(5)和式(6)位置計算后對應的聚類點。聚類點的分布示意圖如圖8所示。
圖7 聚類點位置計算原理
圖8 聚類點分布示意圖
最后采用基于密度的DBSCAN[21](densitybased spatial clustering of application with noise)聚類算法對聚類點進行實例區(qū)分,DBSCAN 有鄰域搜索半徑(Eps)和搜索鄰域內(nèi)包含的最小點數(shù)(Minpts)兩個關(guān)鍵參數(shù),根據(jù)這兩個關(guān)鍵參數(shù)將聚類點區(qū)分為3 類:核心點、邊界點和噪聲點。其中核心點是Eps內(nèi)聚類點的數(shù)量不小于Minpts的聚類點,而不屬于核心點但在某個核心點鄰域內(nèi)的聚類點稱為邊界點,既不屬于核心點也不屬于邊界點的聚類點則為噪聲點。同時定義了點與點之間存在的3 種關(guān)系,對于聚類點集合,如果聚類點q在點p的Eps領(lǐng)域內(nèi),p為核心點,則稱p對q直接密度可達;對于聚類點集合,給定一串聚類點p1,p2,p3,…,pn,p=p1,q=pn,若對象pi從pi-1直接密度可達,則對象q從對象p密度可達;存在聚類點集合中的一點o,若對象o到對象p和對象q都密度可達,則p和q密度相連。
DBSCAN算法的具體流程如下:
(1)從聚類點集合中任意選取一個聚類點p;
(2)如果對于參數(shù)Eps和Minpts,所選取的聚類點p為核心點,則找出所有與p密度可達的聚類點,形成一個簇;
(3)如果選取的聚類點p是邊緣點,則選取另一個聚類點;
(4)重復步驟(2)、(3),直到所有聚類點被處理。
最終形成的每個簇即為聚類點的每個實例集合,然后根據(jù)聚類點來區(qū)分對應車道線點的實例。從以上DNSCAN 的算法原理可知,其不必在聚類前確定聚類簇的個數(shù),因此本文算法可以在不預定義車道線數(shù)量的情況下進行多車道線檢測。本文設(shè)置Eps為10,Minpts為150,實例區(qū)分結(jié)果如圖9(a)所示,對應的車道線點區(qū)分結(jié)果如圖9(b)所示。
圖9 實例區(qū)分結(jié)果
損失函數(shù)主要分為兩部分:分割損失和位置損失。由于車道線在圖像中所占像素相對背景較少,像素分類不平衡,因此選用帶有權(quán)重的交叉熵損失函數(shù)作為分割損失,即
式中:Lseg表示分割損失;N表示像素數(shù)目;M表示類別數(shù)量,因為本文采用二分類分割,因此M=2;wij表示當前類別的權(quán)重,背景類別設(shè)為0.4,車道線類別設(shè)為1;yij為樣本的真實值,當樣本i的類別等于j時取1,否則取0;pij為觀測樣本i類別屬于j的預測值。
為使車道線點對應的聚類點可以自適應地得到聚類中心,位置損失參考LaneNet中基于距離的度量學習方法,并引入車道線的位置信息,主要由方差損失和距離損失兩部分組成,即
式中:Lloc表示位置損失;Lvar表示方差損失;Ldist表示距離損失。
方差損失是為減小屬于同一車道線聚類點之間的距離,如式(9)所示;距離損失是為增大不同車道線聚類點之間的距離,如式(10)所示。為方便模型訓練擬合,對車道點的水平位置和垂直位置均進行開方來減小尺度,因此在預測時,車道線點對應的聚類點位計算公式如式(11)和式(12)所示。
式中:C為車道線的數(shù)目;Nc為每條車道線中車道線點的數(shù)目;uxc為同一車道線點的水平位置平均值;uyc為同一車道線點的垂直位置平均值;δv為方差閾值;δd為距離閾值。
綜上所述,本文算法的總損失為
式中:L為總損失;α為分割損失的權(quán)重系數(shù),設(shè)為1.0;β為位置損失的權(quán)重系數(shù),設(shè)為0.5。
實驗所用處理器為Intel(R)Xeon(R)Gold 5218 CPU @ 2.30 GHz,運行內(nèi)存為64 GB,GPU 為NVIDIA RTX3090,采用PyTorch深度學習框架,均通過Python代碼實現(xiàn)。
為評價本文提出的車道線檢測算法,使用車道線檢測最通用的CULane 數(shù)據(jù)集和TuSimple 數(shù)據(jù)集對模型進行訓練與測試,兩個數(shù)據(jù)集的圖像分辨率、總幀數(shù)以及對應的訓練集、驗證集和測試集劃分如表2 所示。其中CULane 數(shù)據(jù)集是一個包含城區(qū)、郊區(qū)和高速公路等多種道路類型的大規(guī)模車道線數(shù)據(jù)集,除正常場景外,還包含擁擠、夜晚、無線、陰影、箭頭、眩光、彎道和路口這8個復雜場景,最多標注4條車道線,可以用于測試算法在面對復雜場景時的車道線檢測情況。TuSimple 只包含高速公路類型的車道線,最多標注5 條車道線,是最廣泛使用的車道線檢測數(shù)據(jù)集之一。
表2 車道線數(shù)據(jù)集
為便于與其他的車道線檢測算法進行對比,所有實驗均采用數(shù)據(jù)集的官方評價標準。
CULane 數(shù)據(jù)集將車道線看做30 像素寬的細長曲線,通過計算預測車道線與真實車道線之間的交并比(intersection over union,IOU)來判斷是否預測正確。交并比大于0.5 的車道線表明預測正確,視為真正例(true positive,TP);小于0.5 則認為預測錯誤,視為假正例(false positive,F(xiàn)P);因漏檢而未被檢測出的車道線作為假負例(false negative,F(xiàn)N)。因為路口場景不含車道線,所以采用FP 的數(shù)量作為評價標準,F(xiàn)P 數(shù)量越小,表明檢測效果越好,其余場景采用調(diào)和平均值(F1)作為最終評價標準,精確率、召回率和F1的計算公式分別為
式中:Pprecision表示精確率;Precall表示召回率;PF1表示調(diào)和平均值F1;NTP表示真正例的數(shù)量;NFP表示假正例的數(shù)量;NFN表示假負例的數(shù)量。
TuSimple 數(shù)據(jù)集有3 個評價指標分別是假陽率(false positive rate,F(xiàn)PR)、假陰率(false negative rate,F(xiàn)NR)和準確率(accuracy)3個評價指標,分別為
式中:PFPR表示假陽率;PFNR表示假陰率;Paccuracy表示準確率;Npred為所有預測的車道線數(shù);Ngt為真實的車道線數(shù);Ci為第i張圖片正確預測的車道線點數(shù)量;Si表示第i張圖片真實的車道線點數(shù)量。
同時本文將F1 作為TuSimple 的最終評價標準,如果超過85%的預測車道點在真實車道線點的20像素以內(nèi),則預測車道線為TP,否則為FP,漏檢的車道線視為FN。
在模型訓練時需要對數(shù)據(jù)進行預處理,對CULane 和Tusimple 數(shù)據(jù)集中的每張圖像分別裁減掉其上部240 和160 行像素,然后縮放到800×320 的分辨率,并進行隨機旋轉(zhuǎn)、隨機水平移動和隨機垂直移動等數(shù)據(jù)增強。
使用自適應矩陣估計(adaptive moment estimation,Adam)算法作為優(yōu)化器,批處理數(shù)據(jù)量(batch size)設(shè)為16,初始學習率設(shè)為1×10-4,使用polylr 學習率[22]下降策略,在CULane 和Tusimple 訓練集上分別訓練20和40個迭代輪次(epoch)。
在CULane 數(shù)據(jù)集上對比SCNN、SAD、UFLD和E2Enet的結(jié)果如表3所示。其中SAD、UFLD 和E2Enet分別采用Enet、ResNet34和ERFNet作為主干網(wǎng)絡(luò)。本文算法在正常場景和夜晚、無線、陰影等多個復雜場景取得了最高的檢測性能,綜合F1 達到75.2%,對比SCNN、SAD、UFLD 和E2Enet 算法分別高出3.6、4.4、2.9和1.2個百分點,證明了本文算法在復雜場景下具有更高的檢測精度和魯棒性。
表3 CULane數(shù)據(jù)集結(jié)果
圖10 列舉了本文算法在不同場景下的車道線檢測效果。可以看出,本文網(wǎng)絡(luò)可以有效地應對車輛遮擋和不良光線等復雜場景,且可以檢測數(shù)量變化的車道線。
圖10 多場景下的車道線檢測
在TuSimple 數(shù)據(jù)集上增加了與LaneNet、PolyLaneNet 和LSTR 算法的對比,結(jié)果如表4 所示。由于TuSimple 數(shù)據(jù)集都是高度規(guī)則化的高速場景,且大多光線良好,因此不同車道線檢測算法性能差距較小,本文算法取得了最高的F1 指標,假陽率顯著降低,說明不易錯誤預測車道線,對于汽車安全意義重大。
表4 TuSimple數(shù)據(jù)集結(jié)果
由于車道線檢測算法須滿足駕駛的實時性需求,因此對本文算法的模型推理速度和DBSCAN 聚類速度進行測試,通過500 張圖像測試平均時間,結(jié)果如表5 所示。其中車道線檢測網(wǎng)絡(luò)模型利用GPU推理加速,聚類算法在CPU 運行。本文模型的推理時間為7.91 ms,DBSCAN 算法進行聚類所用時間為7.23 ms,即使包括聚類,本文算法的FPS(frames per second)仍然可以達到66.05,可以實時檢測車道線。
表5 網(wǎng)絡(luò)推理與聚類時間
為驗證本文設(shè)計的擴張卷積殘差模塊對車道線檢測的提升效果,將模型中的擴張卷積殘差模塊去掉后,采用相同的訓練參數(shù)在CULane數(shù)據(jù)集進行訓練,對比結(jié)果見表6。加入擴張卷積殘差模塊后取得了更好的檢測結(jié)果,精確率提高0.3 個百分點,召回率提高1.2 個百分點,F(xiàn)1 提高0.8 個百分點,證明了本文提出的擴張卷積殘差模塊可以有效提高車道線檢測的精度。
表6 網(wǎng)絡(luò)性能對比結(jié)果 %
為驗證本文所提的實例分割方法的有效性,將實例分割方法與只使用DBSCAN 對分割圖像進行聚類的方法進行對比。由于分割圖像中車道線點的分布密度低,因此直接進行聚類的DBSCAN 算法中Eps和Minpts參數(shù)分別設(shè)為2 和10,在CULane 數(shù)據(jù)集檢測結(jié)果如表7 所示。通過數(shù)據(jù)對比可知,直接對二分類車道線分割運用DBSCAN 算法檢測結(jié)果并不理想,F(xiàn)1 指標只有40.9%,而本文實例分割方法可以達到75.2%,相比提高34.3個百分點。
表7 實例分割方法對比 %
如圖11所示,當二分類分割出的車道線遠處不連接時,直接采用DBCSAN對二分類圖像進行聚類,也可以取得與本文實例分割方法同樣的實例區(qū)分效果。
圖11 分割車道線遠處不連接
當分割得到的左側(cè)兩條車道線遠處密集連接時,由于DBSCAN 會將連通的點看作同一實例,導致不能有效地對車道線進行實例區(qū)分,從而導致模型精確率和召回率大幅降低,而本文實例方法得到的聚類點無論車道線遠處是否聚集,屬于同一車道線的聚類點相互聚集,密度更高,不同車道線的聚類點相互分離,更易被區(qū)分實例,且預測的車道線聚類點聚集在對應的車道線附近,說明預測的聚類點充分利用了對應車道線的位置信息,檢測結(jié)果更加準確,如圖12所示。
圖12 分割車道線遠處連接
為測試模型在實際道路的有效性,利用如圖13所示的智能車在校園內(nèi)采集實際道路圖像,并利用在CULane數(shù)據(jù)集上訓練的模型進行車道線檢測。
圖13 實際道路測試車
實際道路的車道線檢測結(jié)果如圖14 所示??梢钥闯?,本文算法可以在擁擠、箭頭、陰影和眩光的實際道路準確地檢測車道線,表明該算法魯棒性強,具有良好的泛化性和實用性。
圖14 實際道路檢測結(jié)果
提出一種基于實例分割的車道線檢測算法,可以在不預定義車道線數(shù)量的情況下進行復雜場景的多車道線檢測。算法采用輕量殘差網(wǎng)絡(luò)作為主干網(wǎng)絡(luò),利用特征金字塔進行特征融合,并設(shè)計基于擴張卷積的殘差模塊來提高車道線檢測的精度,提出一種基于車道線位置的實例分割方法,充分利用了車道線的位置信息,通過計算車道線點對應的聚類點實現(xiàn)更好的實例分割。在CULane數(shù)據(jù)集和TuSimple數(shù)據(jù)集上的F1 指標分別達到75.2%和97.0%,在復雜場景表現(xiàn)出優(yōu)秀的檢測性能。所提出的實例分割方法對比只采用DBSCAN 聚類的方法,在CULane數(shù)據(jù)集上可以提高34.3 個百分點,且即使包括聚類,本文算法的檢測速度仍能達到66.05幀/s,可以實現(xiàn)實時車道線檢測。最后通過實際道路測試,驗證了該算法在復雜道路的適用性。