葉 偉, 朱 明
(中國科學技術大學 信息科學技術學院, 合肥 230026)
近年來, 隨著人工智能技術的蓬勃發展, 自動駕駛成為最受歡迎的研究方向之一, 很多研究學者在此方向做出了突出的貢獻. 車道線檢測作為無人駕駛中是最重要的模塊之一, 它可以為無人駕駛系統提供準確的位置信息, 使得車輛在行駛過程中不會偏移規定的車道標記線, 保證人車的安全. 目前, 在簡單場景中車道線檢測算法的性能是能夠接受的. 但是, 在自然環境下存在許多不利條件, 例如其他車輛對車道線的遮擋、惡劣的天氣條件、長時間被碾壓導致的車道線模糊等等, 使得車道線檢測成為具有挑戰性的工作.
目前的車道線檢測算法主要劃分為兩種: 基于傳統特征提取的方法[1,2]和基于深度學習的方法[3]. 傳統的檢測算法利用車道線本身的結構信息, 借助人為設計的低級特征(顏色特征[4]、線分割特征[5]、霍夫變換特征[6]等)識別車道線. 這種方法可以提取出簡單環境下的車道線, 但是面對復雜的場景魯棒性較差. 而深度學習方法通過多層卷積學習圖像的高級特征, 然后對特征進行分類完成檢測任務. 這種方法由于需要大量的數據集進行學習, 對各種道路環境兼容性較好.
通常情況下, 基于CNN的方法都是把車道線檢測作為語義分割[7]的任務進行逐像素的分類. 但是由于車道線的長且窄的特性, 車道線的像素數量遠小于背景的像素數量, 這種類別不平衡會導致分類的準確率大打折扣. 同時, 普通的語義分割方法并沒有考慮到車道線的空間相關性, 在提取特征階段無法學習車道線的精細特征, 導致檢測的準確性進一步降低. 此外, 車道線容易受到各種環境(如光線變化, 遮擋, 路面損壞等)的影響導致圖像中車道線的缺失, 由于普通的卷積神經網絡只能提取到局部信息, 無法處理這種中斷的情況, 影響實際的檢測效果.
為了解決以上問題, 大量的車道線檢測算法被提出, 其中一個比較經典的網絡結構SCNN[8], 它將傳統的卷積層接層的連接形式的轉為特征圖中片連片(按行或者列切片)卷積的形式, 使得圖中像素相鄰行和列之間能夠傳遞信息. 這特別適用于檢測長距離連續形狀的目標或大型目標, 有著極強的空間關系但是外觀線索較差的目標. 但是其信息順序傳遞的方式十分耗時, 并且行列之間長距離的信息傳遞可能會丟失特征圖中的原有信息.
基于SCNN網絡, 本文提出了特征聚合的模塊來學習特征圖中的空間相關性并且能夠更直接有效地傳遞像素之間的信息. 該方法依然是將特征圖按照行或者列切片, 被切片的特征圖經過一維行卷積(或者列卷積)與非線性激活, 之后特征圖向某個方向(行切片向上或者向下, 列切片向左或者向右)平移固定步長得到一個新的特征圖, 最后兩個特征圖做基于下標方式的相加. 每一次迭代的時候都是將特征圖從4個方向(向上、向下、向左、向右)偏移聚合, 經過多次迭代實現水平以及垂直方向上的特征聚合, 使得特征圖中每個像素都能獲取整個特征圖的空間信息.
深度學習的方法有較強的兼容性, 通過端到端的方法能夠有效學習車道線的特征. Huval等人[9]首次將CNN方法應用于車道線檢測. Lee等人[10]提出了一種利用車道消失點同時檢測車道和路標的多任務CNN.Pizzati等人[11]級聯實例分割網絡和分類網絡, 以檢測帶有類型的車道. Philion[12]采用ResNet50[13]自動回歸車道線的曲線表示, 而不是對車道進行分割, 從而可以檢測道路上任意數量的車道. De Brabandere等人[14]提出了一種通用的實例分割網絡, 通過聚類快速后處理的特征達到檢測車道線的效果. 該網絡通過判別損失函數學習到一個從圖像空間到特征空間的映射, 該映射滿足同一實例的像素在特征空間中距離較近, 否則距離較遠的條件. Neven等人[15]提出了一種復雜的網絡, 包括車道分割子網絡、像文獻[14]那樣的像素嵌入子網絡和透視變換網絡. 采用迭代聚類所預測出的車道掩碼和特征得到車道實例. 最后, 對所學的透視變換中的每個車道實例擬合一個三階多項式, 但是沒有充分利用特征圖的空間信息, 對于一些復雜的車道線檢測效果欠佳.
Pan等人[8]設計了一種稱為空間CNN (SCNN)的特殊層來分割道路車道線. SCNN是一種特殊的3D操作, 有助于信息沿著行/列傳遞, 并將感受野擴大到整個圖像. 這對于車道識別是有用的, 因為有些車道可能會充斥在整個圖像中, 但是SCNN是在同一層相鄰的片之間進行信息傳遞, 這種順序的信息傳遞方法使其計算花費較大, 并且可能隨著傳播距離的延長, 導致信息的丟失.
Hou等人[16]提出了一種新的模塊自注意力蒸餾(SAD), 讓ENet編碼器[17]學習兩個相鄰ENet編碼器之間的自我注意, 并分割出固定的車道線數量. 由于只在訓練的時候使用SAD, 因此推理時間較少, 但是對于特征圖的空間信息利用不足.
為了降低計算量, 加快檢測速度, Yoo等人[18]將車道線檢測問題轉換為逐行的分類任務, 并以一種端到端的方法執行預測. Qin等人[19]提出的基于先驗結構的深度車道線檢測方法, 速度十分快, 其將車道線的檢測問題視為逐行的分類問題, 并提出了結構損失去利用車道線的結構模型. 但是由于沒有有效利用高級特征的全局信息, 對于特殊環境(遮擋、低光照等)下的車道線檢測效果并不是很理想.
由于車道線細長的結構特性, 關于圖像的上下文空間信息的使用是很必要的, 并且許多網絡也嘗試利用空間信息來提升網絡性能. 在文獻[20]中, 長短期記憶網絡被應用于處理車道線結構的長線性檢測. Bell等人[21]探索循環神經元網絡(RNN)的運用. 循環神經元網絡能夠有效收集上下文信息.
首先, 本文基于SCNN模塊, 提出了空間特征聚合模塊. SCNN模塊將特征圖按行或者列切成特征片, 每個特征片依次進行信息的傳遞, 因而比較耗時. 本文的空間特征聚合模塊以并行的方式傳遞信息, 首先將特征圖做卷積操作, 然后向指定方向平移指定距離形成新的特征圖, 再將新的特征圖與原始特征圖相加得到最終結果, 實現了信息傳遞的并行性, 因此相對于SCNN計算代價更低. SCNN模塊只沿4個方向迭代各一次,信息傳遞的步長固定, 且其在某一個方向長距離信息傳遞的過程中, 原有特征圖的信息容易丟失. 本文的空間特征聚合模塊在4個方向各迭代K次, 每一次信息傳遞的步長都可變, 每個方向的運行過程中都會保留原有特征圖的信息. 其次, 在級聯的預測器部分采用文獻[19]的思路, 減少逐像素分割的計算量. 能夠在提升檢測效果的同時滿足檢測的實時性.
本章介紹完整的網絡結構圖以及空間特征聚合模塊.
整體的網絡架構如圖 1所示. 網絡架構主要由3個模塊組成, 分別是: 特征提取器、空間特征聚合模塊、預測器.

圖1 網絡架構圖
(1)特征提取器
本文使用VGG[22]或者ResNet[13]的全連接層之前的網絡作為特征提取器, 原始的VGG和ResNet經過多層卷積后得到的特征圖的尺寸為原圖的1/32, 由于車道線占圖像像素較少, 為避免下采樣造成語義信息的丟失, 本文參考了語義分割方法的操作, 將最后的全連接層去掉, 并將最后兩層的池化層修改為空洞卷積(保證不改變感受野的同時不改變特征圖的尺寸), 因此, 經過特征提取器后的特征圖尺寸為原來的1/8. 最后將特征圖的通道數變為128.
(2)空間特征聚合模塊
經過骨架網絡可以提取到圖像的語義信息, 但是由于CNN本身的局限性, 所提取到的特征僅為局部特征. 對于特征圖上的每個點來說, 既沒有考慮到感受野之外的像素信息, 也沒有考慮到感受野內的點與點之間的相關性. 這種簡單的特征為后續的預測器分類帶來了極大的挑戰. 如圖2所示, 為了解決局部的問題,SCNN網絡先將特征圖進行切片, 然后再按照下、上、右、左的順序進行卷積以獲取各行各列像素間的空間信息. 以SCNN_D為例, 首先將特征圖X在H維度進行切片, 得到H個N×C×1×W的特征向量, 表示H行的特征. 每一行的特征計算方式如式(1):

圖2 SCNN模塊

其中,Xi表示第i行特征向量原有值,Xi′表示第i行特征向量更新之后的結果,f是表示卷積運算, 卷積核為1×w,relu為激活函數. 第0行的特征向量輸入值就是輸出值, 之后只有第i行特征向量收到來自第i-1行特征向量的信息時, 其才會將信息傳遞給第i+1行. 傳遞方式為先對第i行的特征向量使用一個1 ×w的卷積核做卷積運算, 然后將卷積后的結果經過非線性激活層relu進行信息過濾, 再與第i+1行的原有特征向量相加,作為第i+1行特征向量的結果, 該結果同時也作為第i+2行特征向量計算的輸入, 依次計算, 得到整個特征圖的輸出. 而SCNN_U, SCNN_L, SCNN_R的過程也和SCNN_D類似, 其中SCNN_U和SCNN_D恰好方向相反, SCNN_L, SCNN_R則在維度W進行切片.
但是SCNN在長距離的傳播過程中會丟失信息,且由于SCNN網絡速度較慢, 本文使用空間特征聚合模塊增強特征, 這種特征聚合的方式對特征圖進行多次迭代, 更加充分的利用了特征之間的空間信息. 在每一次迭代的時候也是按照從上到下、從下到上、從右到左、從左到右4個方向進行信息的搜集, 經過K次迭代之后, 特征圖中的每一個點都能獲得其他點的信息. 如圖1所示, 我們分別用Dk,Uk,Rk,Lk代表上述的4個過程, 其中k表示迭代次數, 則第k次特征聚合模塊的迭代過程可用式(2)表示.

如圖3所示, 首先將特征圖X在H維度進行切片,得到H個N×C×1×W的特征向量, 表示H行的特征.對于每一個特征向量使用一個1 ×w的卷積核G提取與其相隔sk行的特征信息, 然后將卷積后的結果經過非線性激活層relu進行信息過濾, 再與該特征向量相加, 作為與輸入特征向量相同行的結果. 其中表示步長. 此過程可用式(3)和式(4)表示, 其中G是一個一維的卷積核組,U是輸入特征圖,m的最大值是輸入特征圖的通道數(其值等于特征圖的輸出通道數, 都為C),i和j分別表示特征圖的行和列值,T是中間結果, ρ是一個非線性函數(使用的是relu), 式(4)中的表示經過第k次Uk迭代更新之后的結果. 通過第k次自下而上的信息提取, 每一行的特征向量都可以收集到相隔sk行的特征信息.

圖3 Uk工作流程(s表示第k次迭代的步長)

同樣的,Dk,Lk,Rk的過程也和Uk類似, 其中Dk和Uk恰 好方向相反,Lk,Rk則在維度W進行切片, 再聚合其他列的特征.
(3)預測器
由于進行多次特征融合會消耗減緩網絡的推斷速度, 為了滿足車道線檢測的實時性條件. 因而在預測部分采用了不同于SCNN中逐像素分類的方法, 而是使用文獻[19]中所述的分類部分來針對經由空間特征聚合處理之后的特征圖作預測. 該預測器也由兩個部分組成: 分類分支, 分割分支.
分類分支作為網絡的主分支負責對每個預定義行中車道線的歸屬做判斷. 首先, 根據數據集的先驗知識(車道線大致位置), 挑選出h行. 然后將每一行等分為w+1個單元格, 以單元格為單位進行預測. 輸入圖像經過空間特征聚合模塊處理之后展開成一維向量, 該向量經過全連接層后即得到C×h×(w+1)的特征圖, 表示每行網格存在某條車道線的概率. 最后使用該特征圖在每個預定義行上選擇正確的車道線位置.
分割任務作為輔助分支, 先將經過空間特征聚合模塊處理之后的特征圖通道數變為車道線的數量, 之后直接上采樣與原圖尺寸一致的特征圖作為分割結果;同時將通道數變換之后的特征圖展開成一維向量, 經過全連接層處理得到長度為4的向量作為車道線存在與否的結果. 該分支只在訓練的時候輔助訓練, 測試的時候不參與信息傳播. 所以即使使用了輔助任務, 在推理的時候也不影響網絡的檢測速度.
分類任務中的損失函數與[19]中的一致, 先使用分類器選出每條車道線在每行中的位置, 然后使用交叉熵損失作為分類損失函數, 如下所示:
The frequencies of acupoints,meridians,acupoints distribution on different body parts and acupoints attribute were extracted and analyzed.

其中,X是輸入特征圖, 其維度為C×h×w.fij是第i條車道線關于第j行位置的分類器,Pi,j,:是 一個w+1維的向量, 前w個元素表示第i條車道線在第j行中w個網格中的概率, 最后一個元素表示在第j行是否有第i條車道線,Ti,j,:表示正確位置的one-hot標簽.
分割損失函數與SCNN中的一致采用的是分割的二元交叉熵損失Lseg和存在分類交叉熵損失Lexist, 并進行類別平衡, 車道線的分割損失乘以0.4.
總的損失函數為:

實驗中超參數α 和 β分別設置為1和0.1.
實驗中使用的是兩個車道線的基準數據集:
CULane數據集[8]和Tusimple數據集[23]. 在接下來的實驗設置中, 優化器選擇SGD[24], 動量設置為0.9,權重衰減率設置為1e-4, Tusimple與CULane學習率分別為2.5e-2和1.6e-2, 訓練周期分別為50和10, 批處理大小分別為4和2.
Tusimple數據集的數據采集場景較為單一, 數據都是在穩定光照的高速公路上采集的, 分辨率為1280×720; 數據集總共6408張圖片, 其中訓練集3268張, 驗證集358張, 測試集2782張. 本文中輸入圖片大小設置為 368×640.
Tusimple數據集使用的評價指標是車道線的精度,定義如下:

其中,Sclip是 每個片段中標簽點的數量,Cclip是預測正確的點的數量.
對于Tusimple數據集, 對比了5種方法, 這5種方法主要包括: ResNet18、ResNet34、Res18-SAD[16]、LaneNet[15]、SCNN. 本文使用ResNet18作為骨干網絡, 結果顯示如表1.

表1 Tusimple數據集上各種方法結果對比
實驗結果表明, 相較于SCNN本文的方法檢測精度降低略微降低, 但是速度有較大的提升. 速度提升的原因主要有兩點, 其一是SCNN是在原始特征圖上進行逐行逐列的順序操作, 每一次只傳遞某一行或者某一列的信息, 其他行和列必須等待接收到傳遞過來的信息之后才能將它的信息傳遞出去, 這種方法比較耗時; 而本文提出的方法是首先對原始特征圖使用1×w或w×1的共享卷積核執行卷積操作, 然后將卷積后的結果沿某個方向平移指定步長形成新的特征圖, 最后將新的特征圖與原始特征圖做下標方式的求和運算,這種信息的傳遞是并行的, 不需要逐行逐列的迭代運算, 因此花費時間少, 速度快, 同時在某個方向做卷積操作的時候SCNN不共享卷積核, 而文中所使用的空間特征聚合模塊共享卷積核參數量降低. 其二采用了預定義行的分類方法有效節省了對逐元素分割方法的時間, 逐元素分割需要對整個特征圖的每一個元素進行分類, 但是預定義行只需要針對某一些指定行做分類, 因而節省時間.
CULane數據集較為復雜, 其數據采集自9個不同的場景: 正常、擁擠、曲線、強光、夜晚、沒有線、陰暗、箭頭、交叉路口, 都是在城市和高速公路上采集的圖片, 分辨率為1640×590, 總共133 235張圖片,其中訓練集88 880張, 驗證集9675張, 測試集34 680張. 本文中輸入圖片大小設置為 288×800.
CULane數據集, 其中每一條車道線視為寬30像素的線, 然后如果預測值和真實值的交并比大于0.5則認為其是真陽性, 采用F1-measure作為評價指標, 定義如下:

對于CULane數據集, 幾個受歡迎的方法包括ResNet50、ResNet101、SCNN、RES18-SAD[16]、Res18-Ultra[19]; 本文所使用的方法采用ResNet18作為特征提取的骨干網絡, 結果展示在表2. 相對于其它方法, 本文提出的方法在各個場景下的檢測性能均有提升, 證明了空間特征聚合模塊的有效性.

表2 CULane數據集幾種方法結果對比(對于交叉路口, 只顯示FP)
為了探索超參數對檢測性能的影響, 本小結針對CULane數據集進行了一系列的消融實驗.
考慮到速度的影響, 本文選擇了兩個輕量級的骨架網絡進行對比. 結果如表3所示, 可以看出, 使用ResNet的特征提取器要明顯優于VGG16.

表3 特征提取器替換的影響
在空間特征聚合模塊中, 對于每個特征片進行聚合使用了1維的卷積操作, 因此卷積核的尺寸可調, 改變卷積核的尺寸實驗, 結果在表4中. 因此, 在所有的實驗中, 我們設置固定的核尺寸為9.

表4 核尺寸對模塊的影響
在空間特征聚合模塊中, 針對迭代次數進行了實驗探索. 理論上, 隨著迭代次數的增加, 每個像素位置可以聚合更多來自其他位置的信息, 從而獲得更好的性能. 因此, 我們對不同的迭代次數進行了比較, 如表5所示, 隨著迭代次數的增加, 性能會越來越好. 然而, 更多的迭代會導致更多的計算時間成本. 為了平衡計算時間和性能, 我們在其他實驗中選擇迭代次數為4.

表5 迭代次數的影響
為了驗證我們的模塊的有效性, 統計了與SCNN在不同核尺寸下空間信息聚合模塊運行的時間, 如表6所示, 可以看到在相同的核尺寸下我們模塊的運行時間較SCNN幾乎快6倍. 主要原因是SCNN傳遞信息是一種連續的方式, 只有當某一特征片接收到來自其他特征片的信息它才會將信息傳遞給下一個特征片, 但是我們的空間特征聚合模塊信息的傳遞是并行的, 信息的聚合也是整個特征圖基于下標求和的方式完成.

表6 與SCNN不同核尺寸特征聚合模塊耗時比較
圖4是在CULane數據集上實驗之后的可視化的檢測結果.

圖4 CULane數據上的檢測結果
本文基于SCNN, 設計了一個空間特征聚合模塊.本文利用空間特征聚合模塊, 以較小的計算時間融合特征圖每個點的全局信息, 在預測器部分, 加入了輔助分支提升系統性能. 實驗證明了該網絡結構對信息聚合的有效性與檢測的實時性.