鄧天民, 王 琳, 楊其芝, 周臻浩
(重慶交通大學(xué)交通運(yùn)輸學(xué)院, 重慶 400074)
車道線檢測是輔助駕駛以及無人駕駛在道路環(huán)境感知模塊的重要技術(shù)之一。目前針對車道線檢測方法,主要包含三類:基于特征的車道線檢測方法[1-4]、基于模型的車道線檢測方法[5]以及基于深度學(xué)習(xí)的車道線檢測方法[6-12]。
對于深度學(xué)習(xí)方法而言,主要是建立一個(gè)具有多層隱藏層的人工神經(jīng)網(wǎng)絡(luò)模型,將大量的數(shù)據(jù)通過網(wǎng)絡(luò)訓(xùn)練提取出目標(biāo)中更本質(zhì)的特征,確保分類準(zhǔn)確性的提升。與前兩類方法相比,深度學(xué)習(xí)檢測方法雖然能在模型訓(xùn)練時(shí)完成自動(dòng)學(xué)習(xí)目標(biāo)特征,以及自動(dòng)修正學(xué)習(xí)參數(shù)。但缺乏公共車道和道路標(biāo)記數(shù)據(jù)集也是另一個(gè)挑戰(zhàn)。文獻(xiàn)[6-7]主要針對數(shù)據(jù)庫的采集標(biāo)注進(jìn)行研究,構(gòu)建了車道線精細(xì)數(shù)據(jù)庫。文獻(xiàn)[8-10]主要基于卷積神經(jīng)網(wǎng)絡(luò)對車道線特征的提取分類,其中Pan等[10]提出了一種空間卷積神經(jīng)網(wǎng)絡(luò),該方法實(shí)現(xiàn)了適用于檢測出細(xì)長連續(xù)形狀(如車道線)的目標(biāo)的卷積網(wǎng)絡(luò)模型。文獻(xiàn)[11-13]主要基于深度學(xué)習(xí)的實(shí)例分割能在提取出車道線的基礎(chǔ)上,實(shí)現(xiàn)不同的車道線的區(qū)分。其中Neven等[11]提出一種實(shí)例分割的方法檢測車道線,該端到端網(wǎng)絡(luò)是由一個(gè)車道分割分支和車道嵌入分支組成的。然而該方法在聚類操作中可能由于聚類錯(cuò)誤導(dǎo)致檢測失效并且聚類的實(shí)時(shí)性較差。隨后,高軼康[14]為了去除由于語義分割模型的不準(zhǔn)確性從而帶來噪聲的干擾,提出了一種基于層次聚類的主車道線特征點(diǎn)集提取算法。綜上所述,由于卷積神經(jīng)網(wǎng)絡(luò)雖然對于目標(biāo)提取有很高的精度,但是對車道線這種線狀區(qū)域提取仍然比較困難,并且實(shí)時(shí)性較差。
針對上述問題,現(xiàn)提出一種改進(jìn)SegNet算法的實(shí)時(shí)車道線檢測方法,在保證不影響檢測精度的前提下,達(dá)到減少模型運(yùn)行時(shí)間。SegNet算法的優(yōu)勢在于可以只將池化索引保存,不用保存整個(gè)解碼部分的特征圖,達(dá)到節(jié)省內(nèi)存空間的目的。首先,將SegNet改為非對稱的編碼與解碼網(wǎng)絡(luò)架構(gòu);其次,將其中的卷積層與BN層合并;最后,通過連通域約束與最小二乘法擬合等圖像后處理技術(shù)對圖像進(jìn)行處理。
首先,對特征提取網(wǎng)絡(luò)SegNet進(jìn)行精簡與改進(jìn),并結(jié)合連通域?yàn)V波與關(guān)聯(lián)對車道特征點(diǎn)進(jìn)行分類,對相同類別的車道特征點(diǎn)使用最小二乘法擬合為直線?;诟倪M(jìn)SegNet算法的實(shí)時(shí)車道線檢測方法的流程圖如圖1所示。
圖1 基于改進(jìn)后的SegNet算法流程圖Fig.1 Based on the improved SegNet algorithm flowchart
SegNet是一種圖像分割方法,其主要包含一個(gè)編碼器,以及其相對應(yīng)的解碼器,最后連接一個(gè)逐像素的分類層。其中四層下采樣構(gòu)成解碼部分,四層上采樣構(gòu)成編碼部分,使得該網(wǎng)絡(luò)呈對稱關(guān)系。
網(wǎng)絡(luò)中的卷積部分包括4個(gè)卷積層(convolutional,Conv)、4個(gè)批量標(biāo)準(zhǔn)化(batch normalization,BN)層加激活函數(shù)(rectified linear unit,ReLU)及4個(gè)池化層(pooling),目標(biāo)圖像輸入卷積層的特征提取部分,得到相應(yīng)的特征圖,再輸入進(jìn)反卷積;反卷積結(jié)構(gòu)由4個(gè)上采樣層(upsampling)和四個(gè)卷積層構(gòu)成,對卷積部分的輸出圖進(jìn)行反卷積,反卷積層得到的特征圖大小將與原始輸入圖像大小一致,緊接著softmax層再將圖像分類處理。其網(wǎng)絡(luò)總體架構(gòu)如圖2所示。
圖2 SegNet算法結(jié)構(gòu)圖Fig.2 SegNet algorithm structure diagram
該網(wǎng)絡(luò)將目標(biāo)圖像中的每一個(gè)像素點(diǎn)分類并識別類別以完成圖像分割的目的。與全卷積網(wǎng)絡(luò)(fully convolutional networks,F(xiàn)CN)的不同點(diǎn)在于兩者的編碼及解碼技術(shù)不同,SegNet特點(diǎn)是訓(xùn)練參數(shù)較少、速度較快、內(nèi)存需求較低。
為提高檢測的實(shí)時(shí)性,對SegNet算法進(jìn)行精簡與改進(jìn),主要從兩方面進(jìn)行改進(jìn),首先是將模型原本的對稱結(jié)構(gòu)改為“多編碼-少解碼”的非對稱網(wǎng)絡(luò)架構(gòu),其次是SegNet算法卷積層與BN層的融合,以上兩點(diǎn)均極大地減少了網(wǎng)絡(luò)運(yùn)行的時(shí)間,提高了實(shí)時(shí)性。
1.2.1 非對稱網(wǎng)絡(luò)結(jié)構(gòu)模型
輸入數(shù)據(jù)集中的圖像,輸出圖像的車道分割掩膜圖,分為對稱的兩個(gè)部分:前半段的卷積部分和后半段的反卷積部分?,F(xiàn)研究目的是對SegNet進(jìn)行精簡與改進(jìn),利用改進(jìn)后的 SegNet來進(jìn)行車道線像素點(diǎn)位置的檢測,得到檢測圖像,再使用連通域約束等后處理步驟來進(jìn)行車道線擬合。改進(jìn)后的SegNet架構(gòu)主要分為編碼部分和解碼部分。但與未改進(jìn)的SegNet相比,將該網(wǎng)絡(luò)改為“多編碼-少解碼”的非對稱網(wǎng)絡(luò)架構(gòu),并且利用1×1卷積核實(shí)現(xiàn)圖像通道數(shù)的降維,減少網(wǎng)絡(luò)參數(shù)。這樣加快了網(wǎng)絡(luò)模型的運(yùn)行速度,提高實(shí)時(shí)性。
為去除圖像視覺信息冗余度高的特點(diǎn),壓縮步驟必不可少。在確保壓縮后圖像上下文信息不會減少且可能更多的情況,需使其感受野更大,將編碼部分的13個(gè)卷積層用以提取不同比例的圖像特征。同時(shí),為了減少解碼過程中邊緣與細(xì)節(jié)信息的丟失,需要針對細(xì)節(jié)信息做出微調(diào),將解碼部分的四個(gè)上卷積層,通過下采樣存儲的索引信息完成上采樣,并且在三個(gè)卷積層加入1×1卷積核用以減少網(wǎng)絡(luò)參數(shù)。最終設(shè)計(jì)的改進(jìn)后的SegNet算法架構(gòu)如圖3所示。
圖3 改進(jìn)后的SegNet算法結(jié)構(gòu)Fig.3 The improved SegNet algorithm structure
將通過改進(jìn)后的SegNet算法得到的結(jié)果選用softmax函數(shù)進(jìn)行分類,判斷各個(gè)像素特征是否屬于車道線。并將實(shí)際的標(biāo)簽值與通過計(jì)算得到的值做交叉熵得到損失函數(shù)值,選取批量訓(xùn)練計(jì)算得到各個(gè)訓(xùn)練圖片的損失函數(shù)值的平均。
1.2.2 SegNet算法卷積層與BN層融合
將SegNet算法中BN層與卷積層兩者相結(jié)合的部分融合,提高模型的推理速度。其中加速網(wǎng)絡(luò)的收斂是BN層的主要任務(wù),由于加入BN層后網(wǎng)絡(luò)推理的過程會消耗大量的內(nèi)存,使得推理速度減慢,所以合并卷積層與 BN層十分必要。合并具體形式如圖4所示。
圖4 BN層合并Fig.4 BN layer merge
由于卷積層與BN層皆為線性變換,為兩者合并提供了充分條件。假設(shè)輸入的mini-batch:{x1,…,xn},BN層變化為
(1)
式(1)中:i∈[0,n],且i為整數(shù);γ與β是訓(xùn)練中得到的參數(shù);ε為趨于0的常數(shù)。在推理階段, 原卷積層權(quán)值為w, 偏置項(xiàng)為b,將BN層與卷積層融合, 得到卷積層新的權(quán)值為wnew=wγ,新的偏置值為bnew=bγ+β,形成新的的網(wǎng)絡(luò)模型。為了減少內(nèi)存占用加快推理速度,卷積層與BN層合并后可共用Blob數(shù)據(jù)。
在SegNet網(wǎng)絡(luò)處理得到的二值圖像中,由于車道模糊、噪聲等因素的存在,一些車道像素可能會偏離車道線形成獨(dú)立的、像素點(diǎn)較小的連通域,選取二掃描法標(biāo)記該類連通域。
1.3.1 第一次掃描
(1)由左往右,再由上至下依次遍歷各個(gè)像素點(diǎn)。
(2)如果該像素點(diǎn)的值不為0,則觀察該像素點(diǎn)的鄰域內(nèi)是否存在標(biāo)記過的點(diǎn)。若臨近像素都未進(jìn)行標(biāo)記,則對該像素點(diǎn)賦予一個(gè)新的標(biāo)記值,否則,將臨近像素點(diǎn)標(biāo)記的最小值賦予該像素,并將所有具有相鄰關(guān)系的點(diǎn)保存進(jìn)一個(gè)集合里。
1.3.2 第二次掃描
(1)從左至右,再從上往下依次遍歷各個(gè)像素點(diǎn)。
(2)如果該像素不是背景像素,在該像素的所屬的集合中,找出標(biāo)記值最小的標(biāo)記賦予該像素得到各個(gè)像素點(diǎn)的標(biāo)記后,默認(rèn)連通域點(diǎn)個(gè)數(shù)小于20的連通域?yàn)檎`檢連通域,將該位置上的點(diǎn)像素值置為0。
在得到不同連通域的標(biāo)記后,由于車道線磨損或車道線為虛線會導(dǎo)致多個(gè)連通域同屬于一條車道線,所以需要對連通域進(jìn)行關(guān)聯(lián)。具體步驟如下:
①將上述每個(gè)連通域標(biāo)記情況保存為{(x1,y1),(x2,y2),…,(xN,yN),label}的格式,式中(xi,yi)表示第i個(gè)點(diǎn)的橫坐標(biāo)與縱坐標(biāo),N表示連通域中像素點(diǎn)的個(gè)數(shù)。對第一個(gè)未擬合直線的連通域中的點(diǎn)進(jìn)行擬合,得到{(x1,y1),(x2,y2),…,(xN,yN),label,k,b},其中k表示擬合直線的極角,b表示擬合直線的極徑。
②計(jì)算未擬合直線的各個(gè)連通域中的點(diǎn)到已擬合直線的連通域的平均距離,計(jì)算公式為
(2)
式(2)中:若該平均距離小于指定閾值0.5,則認(rèn)為兩個(gè)連通域都表示相同的車道線,將未擬合直線的連通域中的點(diǎn)并入到已擬合直線的連通域中,刪除該連通域并重新擬合更新極角k和極徑b。
③重復(fù)上述步驟,直至對所有連通域中的點(diǎn)都進(jìn)行了關(guān)聯(lián)。
車道線擬合是由聚類車道線點(diǎn)得到車道線的過程。針對結(jié)構(gòu)化道路拍照獲得的車道圖像大致為直線,采用最小二乘法對集合中的各個(gè)點(diǎn)進(jìn)行擬合,并直接調(diào)用Python中的應(yīng)用程序接口。對于每一個(gè)標(biāo)注集合,誤差可定義為
(3)
為了使得誤差ρ最小,應(yīng)該使k和b的偏導(dǎo)為 0,公式為
(4)
對式(4)化簡得到
(5)
(6)
代入該標(biāo)注集合中的所有點(diǎn)即可對上述方程進(jìn)行求解得到k和b。
實(shí)驗(yàn)運(yùn)用深度學(xué)習(xí)相關(guān)理論方法與傳統(tǒng)算法優(yōu)化方法完成了算法構(gòu)建,實(shí)驗(yàn)階段,采用opencv庫函數(shù)與tensorflow框架,所用GPU(graphics processing unit)為Intel i7-8750,通過CUDA8.0與CUDNN V5.0采用Python語言實(shí)現(xiàn)了算法內(nèi)容。
2.1.1 訓(xùn)練數(shù)據(jù)集
針對車道線檢測選用圖森未來發(fā)布的TuSimple數(shù)據(jù)集和香港中文大學(xué)發(fā)布的CULane數(shù)據(jù)集進(jìn)行相關(guān)研究和實(shí)驗(yàn),大部分車道線明顯且清晰,車道線彎曲程度小。
TuSimple數(shù)據(jù)集采用的是結(jié)構(gòu)化道路圖像,包含72 520個(gè)訓(xùn)練集和55 640個(gè)測試集。該數(shù)據(jù)集將視頻數(shù)據(jù)通過分幀轉(zhuǎn)換成多張圖片形成,并僅對末位圖片進(jìn)行標(biāo)注。數(shù)據(jù)集標(biāo)注采用中心打點(diǎn)式以json文件存儲,一張道路圖片的標(biāo)注為一個(gè)元組。樣本標(biāo)注示例如圖5(a)所示。
CULane數(shù)據(jù)集用于行車道檢測學(xué)術(shù)研究的大規(guī)模挑戰(zhàn)性數(shù)據(jù)集,一共包含133 235張圖像。其中數(shù)據(jù)集分為88 880個(gè)訓(xùn)練集,9 675個(gè)驗(yàn)證集和34 680個(gè)測試集。道路中的車道線用粗實(shí)線進(jìn)行了標(biāo)注,樣本標(biāo)注示例如圖5(b)所示。
2.1.2 模型訓(xùn)練
模型訓(xùn)練過程中將數(shù)據(jù)集主要分為兩個(gè)部分:訓(xùn)練集和驗(yàn)證集。訓(xùn)練參數(shù)設(shè)置迭代次數(shù)為10,批處量大小為14,基礎(chǔ)學(xué)習(xí)率初始為0.01,其中動(dòng)量和權(quán)重衰減分別配置0.9和0.000 55。訓(xùn)練誤差和驗(yàn)證誤差使用均方誤差,訓(xùn)練結(jié)束時(shí)訓(xùn)練誤差收斂為0.004 4,驗(yàn)證誤差收斂為0.004 5。表1為改進(jìn)后的SegNet網(wǎng)絡(luò)模型在車道線數(shù)據(jù)集下的訓(xùn)練誤差和驗(yàn)證誤差。
圖5 道路標(biāo)注樣圖Fig.5 Road marking sample image
表1 模型訓(xùn)練誤差與驗(yàn)證誤差
準(zhǔn)確率和召回率是評價(jià)目標(biāo)檢測識別算法時(shí)最常使用的兩項(xiàng)評估指標(biāo)。準(zhǔn)確率用來衡量輸出的預(yù)測結(jié)果中為正確檢測為真實(shí)值的比例,而召回率用來衡量輸出的預(yù)測結(jié)果之中所包含的應(yīng)該被正確檢測數(shù)量的比例。
使用的車道線檢測算法是基于深度學(xué)習(xí)分割算法與傳統(tǒng)方法進(jìn)行優(yōu)化的融合算法,因此可以使用圖像分割的評價(jià)指標(biāo)對檢測結(jié)果進(jìn)行像素級的分類評價(jià)。F值(F-measure)又稱為F1分?jǐn)?shù)(F-score),是準(zhǔn)確率(precision,P)和召回率(recall,R)的加權(quán)調(diào)和平均,用于判斷分類模型的優(yōu)劣,表達(dá)式為
(7)
將參數(shù)β設(shè)為1時(shí),即F值函數(shù)設(shè)為常見的F1,它綜合了準(zhǔn)確率和召回率的結(jié)果,F(xiàn)1越高則說明分割模型越優(yōu)秀。
針對所提出的針對SegNet算法的改進(jìn)算法,基于TuSimple數(shù)據(jù)集與CULane數(shù)據(jù)集進(jìn)行了大量實(shí)驗(yàn)。
由于改進(jìn)的SegNet網(wǎng)絡(luò)是對其網(wǎng)絡(luò)架構(gòu)進(jìn)行精簡,只采用SegNet中的二值化車道特征提取部分,如圖6所示。在檢測到車道區(qū)域后,采用連通域約束方法剔除噪聲的影響,同時(shí),依據(jù)連通域中的點(diǎn)到其他連通域所擬合的直線的距離來判定是否可將兩個(gè)連通域并為一類,最后,采用最小二乘法擬合同一類別的點(diǎn)來以確定車道線參數(shù)。
圖6 二值化車道提取Fig.6 Binary lane extraction
實(shí)驗(yàn)分為8個(gè)組別,分別對非對稱網(wǎng)絡(luò)結(jié)構(gòu)模型、卷積層與BN層融合以及摒棄傳統(tǒng)車道線聚類方法采用連通域處理三處改進(jìn)方向進(jìn)行對比實(shí)驗(yàn),結(jié)果如表3所示。實(shí)驗(yàn)1、實(shí)驗(yàn)2、實(shí)驗(yàn)3、實(shí)驗(yàn)5表明,通過采用改進(jìn)后的非對稱網(wǎng)絡(luò)結(jié)構(gòu)模型以及將卷積層與BN層融合,減少了單幀圖像的處理時(shí)間,提高了檢測的實(shí)時(shí)性;實(shí)驗(yàn)1、實(shí)驗(yàn)4表明,通過采用連通域?yàn)V波與關(guān)聯(lián)的方法,避免了使用傳統(tǒng)聚類操作中可能由于聚類錯(cuò)誤導(dǎo)致的檢測錯(cuò)誤或失效,從而使得準(zhǔn)確率與召回率降低;實(shí)驗(yàn)1、實(shí)驗(yàn)6、實(shí)驗(yàn)7、實(shí)驗(yàn)8表明,將三處改進(jìn)方向融合,可以在保證召回率的前提下,提高檢測的準(zhǔn)確率。
綜上所述,與未改進(jìn)的算法的對比,在準(zhǔn)確率與召回率兩項(xiàng)評價(jià)算法檢測性能的指標(biāo)當(dāng)中,改進(jìn)后的SegNet網(wǎng)絡(luò)表現(xiàn)在準(zhǔn)確率的性能上有很大的提高,在保證了一定的有效檢測數(shù)的同時(shí),召回率的性能也有相應(yīng)提升。因此,在F1分?jǐn)?shù)這項(xiàng)模型綜合評價(jià)指標(biāo)上,改進(jìn)后的SegNet網(wǎng)絡(luò)有了一定的提升,并且檢測時(shí)間也有所降低,具體實(shí)驗(yàn)性能變化如圖7所示。
使用改進(jìn)后的SegNet網(wǎng)絡(luò)模型對不同測試集進(jìn)行檢測,如圖8所示為該算法在TuSimple數(shù)據(jù)集和CULane數(shù)據(jù)集下的檢測結(jié)果。
表2 SegNet算法改進(jìn)不同模塊對模型性能影響對比
圖7 不同模塊對模型性能影響變化Fig.7 Changes in the impact of different modules on model performance
圖8 實(shí)驗(yàn)效果圖Fig.8 Experimental effect diagram
改進(jìn)算法與傳統(tǒng)的幾種車道線檢測算法在 CULane 數(shù)據(jù)集上對比效果如表3所示。其中通過CNN(convolutional neural networks)濾波結(jié)合Hough變換、RANSAC(random sample consensus)算法的方法需要針對具體數(shù)據(jù)集的場景特點(diǎn)人工手動(dòng)調(diào)濾波算子,導(dǎo)致魯棒性較差,檢測效果不明顯。Lane Net算法中采用傳統(tǒng)聚類方法會出現(xiàn)聚類錯(cuò)誤,使得檢測精度下降。所改進(jìn)的模塊避免了以上問題造成的檢測時(shí)間及精度不佳的效果。
從表3可知,使用改進(jìn)后的SegNet算法相比于以上三種方法在模型綜合評價(jià)指標(biāo)(F1分?jǐn)?shù))上分別提升了0.113、0.044、0.019,且單幀圖像處理時(shí)間以及檢測精度這兩方面也都有了提升,其中檢測精度分別提升了23.46%、16.7%、3.37%,實(shí)現(xiàn)了檢測實(shí)時(shí)性與準(zhǔn)確性。
為檢測改模型的泛化能力,將改進(jìn)后的網(wǎng)絡(luò)模型在不同數(shù)據(jù)集下進(jìn)行檢測對比,其檢測精度(車道線有效檢測數(shù)/車道線總數(shù))如表4所示。
表3 不同算法在CULane數(shù)據(jù)集上的檢測結(jié)果
表4 不同數(shù)據(jù)集下改進(jìn)算法的車道線檢測結(jié)果
改進(jìn)的SegNet算法模型泛化能力強(qiáng),在TuSimple數(shù)據(jù)集和CULane數(shù)據(jù)集上都有很改的檢測精度,分別達(dá)到了92.30%與96.89%的檢測精度,平均檢測精度為94.60%,每幀檢測耗時(shí)提升 53 ms,魯棒性強(qiáng),對數(shù)據(jù)集特性影響較小??蛇\(yùn)用到實(shí)際應(yīng)用中。
首先介紹了SegNet算法模型的基本架構(gòu),然后對其進(jìn)行精簡與改進(jìn)。其一是將SegNet算法的卷積層與BN層融合,減少算法運(yùn)行時(shí)間;其二是將SegNet中對稱的網(wǎng)絡(luò)結(jié)構(gòu)改為非對稱的“多編碼-少解碼”架構(gòu),同時(shí)加入1×1的卷積核實(shí)現(xiàn)圖像通道數(shù)的降維,提高網(wǎng)絡(luò)的實(shí)時(shí)性;其三是利用改進(jìn)后的SegNet算法進(jìn)行車道線像素點(diǎn)位置的檢測,得到檢測圖像,緊接著采用連通域約束對車道位置的像素點(diǎn)進(jìn)行提取,隨后使用基于距離準(zhǔn)則的連通域關(guān)聯(lián)法將同屬于一條車道的像素點(diǎn)歸為一類,最后通過最小二乘法將其擬合,有效地提高了結(jié)構(gòu)化道路的運(yùn)行速度,結(jié)構(gòu)化道路中平均檢測精度為94.60%,每幀檢測耗時(shí)提升53 ms,達(dá)到了實(shí)時(shí)檢測的目的。