收錄:AAAI2018 (AAAI Conference on Artificial Intelligence)git
原文地址:SCNNgithub
論文提出了一個新穎網絡Spatial CNN,在圖片的行和列上作信息傳遞。能夠有效的識別強先驗結構的目標。論文提出了一個大型的車道檢測數據集,用於進一步推進自動駕駛發展。算法
代碼:網絡
現今的CNN模型一般是由卷積塊堆疊構建,雖然CNN有強大的特徵提取能力,但現存CNN架構沒有足夠充分探索圖像行和列上的空間關係能力。這些關係對於學習強先驗形狀的對象很重要,尤爲是外觀(圖像像素)連貫性很弱。例如交通線,車道常常會被遮擋,或者壓根就沒在路上畫車道線。以下圖所示:架構
本文提出了Spatial CNN(CNN),它將傳統的卷積層接層(layer-by-layer)的鏈接形式的轉爲feature map中片連片卷積(slice-by-slice)的形式,使得圖中像素行和列之間可以傳遞信息。這特別適用於檢測長距離連續形狀的目標或大型目標,有着極強的空間關係可是外觀線索較差的目標,例如交通線,電線杆和牆。論文在車道檢測挑戰和CityScapes上評估了SCNN的表現,同時SCNN在TuSimple Benchmark lane Detection challenge得到了第一名,準確率爲96.53%。函數
自動駕駛中最具挑戰的任務之一是交通場景理解,包括計算機視覺任務下的車道檢測和語義分割。車道檢測幫助指導車輛,語義分割提供更多關於周圍環境目標的細節位置。但在實際狀況下,由於有許多惡劣條件,這些任務可能很是具備挑戰性。對於交通場景理解的另外一個挑戰是,在許多狀況下須要在有強結構先驗知識下處理外形線索很少的目標,例如交通線,桿狀物等,這些具備長距離連續的形狀,經常有很大部分被遮擋。性能
得益於強大的學習表示能力,CNN將視覺理解推向了一個新的高度。可是這依然不能很好地處理外形線索很少的有強結構先驗的目標,而人類能夠推斷它們的位置並填充遮擋的部分。學習
爲了解決這個問題,論文提出了SCNN,將深度卷積神經網絡推廣到豐富空間層次。測試
傳統的CNN,任意層接收上層的數據做輸入,再做卷積並加激活傳給下一層,這個過程是順序執行的。與之相似的是,SCNN將feature map的行或列也當作layer,也使用卷積加非線性激活,從而實現空間上的深度神經網絡。這使得空間信息可以在同層的神經元上傳播,加強空間信息進而對於識別結構化對象特別有效。優化
相關工做:
對於車道檢測任務,大多數現有的算法都是依賴於低級手工特徵,這讓模型難以在惡劣條件下工做。2015年有工做嘗試使用深度學習方案用於車道檢測,但苦於沒有大的普遍的數據集(說這個的緣由是論文創建了一個大的數據集~)。對於語義分割,基於CNN的方案的已經成爲主流並取得了巨大的成功。
對於在深度神經網絡中使用空間信息:有工做使用RNN按每列和行傳遞信息,但每一個像素只能接收同一行或列的信息。也有工做使用LSTM變體探索語義分割的上下文信息,但計算消耗較大。也有工做嘗試結合CNN和圖模型(例如MRF或CRF),經過大卷積核傳遞信息。
與上述方案相比,SCNN有以下幾個優點:
本文提出了一個關於交通車道檢測的大規模數據集。之前的車道檢測數據集(KITTI,CamVid)要不就是太簡單,要不就是數據過小。最近的(Caltech,TuSimple)數據集是在交通受限狀態下創建的,這樣的數據車流量少且路標較爲清晰。這些數據集沒有包括一些車道線模糊,條件惡劣的狀況,而這些狀況人類能夠推斷出來,且這具備很高的實用價值。
論文提出的數據集是由六輛車在北京不一樣時間錄製的,超過55個小時共收集了133,235 張圖片,這超過TuSimple 數據集20倍了。論文分紅88880張做爲訓練集, 9675做爲驗證集,34680作測試集。圖像的大小爲1640×590。下圖是示例和簡介:
數據集內包括城市、農村和高速公路等場景,北京做爲世界上最大和最擁擠的城市之一,對應的車道檢測數據提供了不少具備挑戰性的交通場景。論文將測試集分爲正常和8個具備挑戰性的類別,這對應上圖 (a)的9個示例狀況。圖(b)顯示的是挑戰性的場景站數據集的比例(共72.3%)。
對於每一張圖片,使用三條線註釋車道,如前面所述,許多狀況下車道是被遮擋的或看不見的。而這在實際狀況下是很重要的,車道檢測算法須要可以在這種狀況下工做。對此,標註工做根據上下文也作了標註,如圖(2)(4)所示。對於圖(1)的狀況咱們不對障礙的另外一邊作標註,將精力集中於最受關注的部分。
傳統的關於空間關係的建模方法是基於機率圖模型的,例如馬爾科夫隨機場(MRF)或條件隨機場(CRF)。最近有工做將機率圖與CNN相結合,如圖 3(a)所示:
CRF可化爲平均場,算法能夠用神經網絡來實現,具體來講,過程分爲:
能夠看到傳統方法在傳遞信息時,每一個像素點接受來自全圖其餘像素的信息,這在計算上是很是昂貴的,難以應用於實時系統。且對於MRF的大卷積核權重很難學。這些方法是應用在CNN的輸出上的,論文認爲CNN的隱藏層,包含了豐富的空間關係,可更好的用於處理空間關係。
論文提出了Spatial CNN,這裏的Spatial不是指Spatial Convolution,而是CNN經過特徵的設計架構傳遞空間信息。SCNN更有效的學習空間關係,能平滑的找出連續的有強先驗的結構目標。SCNN的總體架構以下:
(圖中SCNN的下標有D,U,R,L
,這在結構上是相似的,方向上分別表示爲向下,向上,向右,向左)
先以SCNN_D
分析:
考慮到SCNN應用在三維張量C×H×W上,C,H,W分別表明通道數,長和寬。爲了實現空間信息傳遞,將張量切分紅H片(slice),先將第一片送到尺寸爲C×w的卷積層(w爲卷積核的寬度)。傳統的CNN是將這層的輸出傳遞給下一層,而這裏是將這片輸出相加到下一片做爲新的一片。接着下一片繼續應用卷積(這裏卷積核共享),直處處理完全部片。
具體來說,假設咱們有一個三維的張量K,其中Ki,j,k記爲最後一片中通道i的元素和當前片中通道j的元素之間的權重,這兩個元素之間偏移爲k列。一樣的將Xi,j,k記錄爲張量X的元素,其中i,j,k分別指代通道,行,列.
則SCNN的前向計算爲:
其中f是非線性激活函數ReLU。X加′′表示更新後的值,注意全部的片共享一組卷積核,SCNN是一種RNN。
SCNN相比於傳統方法,有三個優點:
SCNN與傳統的Dense MRF/CRF相比,在信息傳遞方向不一樣,示意圖以下所示:
假設張量有H行W列,對於密集的MRF/CRF來說,在每兩個HW像素之間都存在信息傳遞,對於niter次迭代,傳遞了niterW2H2次信息。在SCNN中,每一個像素只接受來自w個像素的信息,共傳遞了nderWH次,其中der指代傳遞信息的方向的數量,w爲卷積核寬度。
niter範圍在10到100之間,在本文中ndir設置爲4,對應着四個方向。w設置一般不超過10(圖中設置爲3)。對於一張有上千行和列的圖片來講,SCNN可大幅度減小計算量,而每一個像素點依舊可以接收來全部其餘像素傳遞的信息(4個方向的信息傳遞)。
密集的MRF/CRF內是經過全部加權像素相加,這樣的計算花費很大。而RNN是經過梯度來優化的, 考慮到這麼多層和列,依據殘差網絡的經驗,論文也採用殘差的方式來學習(計算公式描述的殘差學習)。這種殘差可認爲是對原始神經元的修正。實驗證實這樣的消息傳遞比基於LSTM的要好。
歸功於SCNN的計算效率,它能夠很方便的集成到CNN的任何部分。一般 top hidden layer 包含了豐富的語義信息,這是應用SCNN的理想位置。在完整的SCNN模型中咱們在頂層的 feature map上用了四個方向的SCNN引入空間信息傳遞。
論文在自發布的lane detection dataset 和 CityScapes數據集作了評估。
採用標準的SGD訓練器,學習率採用」poly」策略,初始學習率爲0.01,power爲0.9。batchsize設置爲12,動量爲0.9,權重衰減爲0.0001。迭代次數爲60K。模型架構在LargeFOV(DeepLabv2)基礎上修改,初始的13層採用的是在ImageNet上預訓練的VGG16層。全部的實驗使用的工做是Torch7.
普通的目標識別只要劃分邊界,而車道檢測須要精準的預測曲線,一個天然的想法是模型輸出曲線的機率圖,以像素級目標來訓練網絡,這相似於語義分割任務。咱們但願網絡可以直接區分不一樣車道標記,這樣魯棒性更好。共有4中類型的車道線。輸出的機率圖通過一個小網絡預測車道標記是否存在。
在測試期間,一樣須要從機率圖轉爲曲線,模型大體示意以下圖(b)所示:
對於存在值大於0.5的車道標記,在對應的機率圖每20行搜索以得到最高的響應位置,而後經過三次樣條函數鏈接這些點(cubic splines)。這就是最終的預測。
上圖(a)顯示了baseline和LargeFOV之間的差別:
fc7
輸出通道爲128fc6
擴張卷積的擴張率爲4訓練時,輸入和輸出的圖片分辨率設置爲800×288(約爲原圖的二分之一)。目標線的寬度設置爲16.考慮背景和車道標記之間的不平衡標籤,背景損失乘以0.4。
爲了判斷車道標記是否正確的檢測到,論文將車道標記視爲寬度爲30像素的線,計算ground truth和預測值之間的IoU.若是預測的IoU大於某個閾值,則認爲是true positives (TP). 以下圖6所示,這裏設置了0.3和0.5做爲閾值,分別對應鬆散和嚴格的評估。
而後使用
最爲最終評價指標,其中Precision=TPTP+FP,Recall=TPTP+FN。設置β=1表示調和平均值。
首先探究了SCNN裏信息傳遞方向的有效性。對比實驗以下表:
SCNN的核寬度w=5,能夠看到隨着方向的增長,性能也逐漸增長。 爲了證實性能是來源於多方向,而不是參數的增長,在baseline的基礎上添加了一個額外的5×5的卷積層,能夠看到性能只有微弱的提高。
論文在SCNN_DURL
的基礎上測試了不一樣核寬度對性能的影響,核寬度表示像素能夠接收其餘像素的信息數量,結果以下:
能夠看到較大的w表現出的性能較好(計算量也一直上升)
SCNN能夠添加到模型的任何地方,在圖3中,將SCNN_DURL
應用於output上或top hidden layer:
能夠看到放置在top hidden layer後效果要出色,這是由於top hidden layer包含更豐富的信息。
在SCNN中,信息時連續方式傳遞的,SCNN的一片不會傳遞信息給下一片,知道它接收到別的片傳來的信息。與此作對比的時,使用平行策略(parallel),即每一個片在更新前將信息傳遞給一下片,一塊兒更新,結果以下:
能夠看到順序傳遞的優點較大,這代表在SCNN中,像素不只受到鄰近像素的影響,也受到更遠距離的像素影響。
論文將SCNN與幾個先進模型對比結果以下:
能夠看到SCNN的效果很出色~
可視化結果以下:
能夠看到SCNN要比大型的ResNet101要好,雖然ResNet101參數多,可是在這種具備挑戰性的狀況下會產生雜亂或不連續的輸出,SCNN相比可以保持平滑性。這代表SCNN相比於傳統CNN可以更好的捕捉強先驗結構的目標。
同時論文給出了與其餘模型時間效率上的對比。注意計算時間沒有包括網絡主幹。都是在CPU上跑的。
能夠看到SCNN比CRF要快不少,這是由於傳遞信息策略的改變。
論文同時也在CityScapes上作了測試,使用DeepLabv2的LargeFOV和ResNet101做爲baseline,在LargeFOV上添加BN層,對於兩個模型,top hidden layer的通道數改成128.
配置SCNN的是SCNN_DURL在w=9w=9,結果以下:
能夠看到配置了SCNN的模型,在牆、杆等類別有着顯著的提高,這是由於SCNN可以捕捉這些長距離連續物體。
可視化結果以下:
有一個有意思的地方,汽車的底部在訓練期間是不作標記的,在LargeFOV上是缺失的,由於SCNN的信息傳遞,被分類成道路。
論文也將SCNN方法與其餘方法作了對比,也使用了VGG16爲網絡主幹,結果以下:
能夠看到SCNN效果仍是能夠的
論文提出了Spatial CNN,在空間層上實現信息的有效傳遞。SCNN易於融入到其餘深度神經網絡中作end-2-end訓練。論文在車道檢測和語義分割上測試了SCNN,結果表現SCNN能夠有效的保持長距離連續結構,在語義分割其擴散效應對識別大型物體有利。
此外,論文提出了一個車道檢測的數據集,但願可以推進自動駕駛進一步發展。