車道線檢測論文閱讀:LaneNet

車道線檢測論文閱讀:LaneNet

來自專欄從目標檢測開始的挖坑日記11 人贊了文章

?Towards End-to-End Lane Detection: an Instance Segmentation Approach

論文鏈接:arxiv.org/abs/1802.0559

代碼鏈接:github.com/MaybeShewill (tf實現,並不完整,部分功能未實現)

因為最近的項目了解到的論文,查了一下是2018 IEEE IV上的論文,本身比較偏嚮應用層面,理論上的創新不是太多。嚴格上講,我更願意把它看作分割問題……

主要貢獻是兩點,一個是利用Semantic Instance Segmentation with a Discriminative Loss Function的思路來實現對任意數量車道線的檢測;另一個是車道線檢測往往要通過變換矩陣來進行角度變換來使車道線平行從而擬合出可靠的車道線數學模型,但是固定的變換矩陣參數難以適應不同圖片或者圖片中的地平線變化,作者通過CNN學習矩陣參數解決了這個問題。面臨類似問題的同學不妨一讀。

1. Introduction

車道線檢測實際上屬於自動駕駛演算法範疇的一部分,可以用來輔助進行車輛定位和進行決策等等。由於車道線本身狹長和彎曲的特性,實際上這個問題更合適看作分割問題而不是檢測問題。

如果只是檢測固定數量的車道線,可以將不同車道線看作不同的類別,比如左車道線類、右車道線類和背景類等等……但是,如果車道線數量是不固定的呢?無論是常見的對pixel進行softmax分類或者decouple的多個二分類,似乎都沒辦法解決這個問題了。這個問題其實更像是semantic instance segmentation,不僅要分類,還要精確描述每個個體。

在這裡,作者應用了Semantic Instance Segmentation with a Discriminative Loss Function中的思路;同時利用CNN網路來預測車道線的mask,並對所有屬於車道線的像素點進行聚類,得到不同的車道線,示意圖如下……

最後,再來擬合每條車道線的數學模型。

2. Method

LaneNet

首先是主體網路部分,兩條分支,一條分支預測mask,另一條分支給每個lane pixel分配所屬lane的id。binary segmentation 和常規的分割問題一樣,沒有太多特別的。值得一提的是,無論是車道線還是虛線或者車道線被遮擋的情況,作者在生成ground truth的時候都把它們標註了出來,這樣就算對車道線沒有完全露出來的情況,網路也可以比較好的學習。

重點是instance segmentation 分支,這個就是利用了上面提到的那篇文章的設計思路,分支的設計思想和傳統統計學習的很多演算法都類似,不同的lane看作不同的類,而預測的結果力求類內最小化和類間最大化。本著這個原則設計了loss函數。

第一項的主要作用就是把屬於同一條lane的像素點往一起推,如果像素點和中心點距離超過一定閾值,就會產生loss;第二項的作用是把不同類中心點往距離加大的方向拉,如果中心點之間的距離小於一定閾值,就會產生loss(+號的意思代表若大於等於0不變,否則看作0),關於這兩個閾值怎麼選具體可以看論文,作者的設置和原文有一定的差別。

有了這個loss函數,就可以根據lane的mask和不同lane的像素點集合進行訓練了。inference的時候思路如下:隨機選取一個lane pixel視作當前lane的點集,然後將周圍和它距離小於類內點閾值的所有點視作同一類,然後再遍歷其它點,如果有某個點和點集內任意點距離小於類內閾值,則將該點加入點集,重複該過程直到點集不再發生變化,給這些點集分配一個lane的id;然後再選取沒有被分配id的任意一個pixel,重複該過程。

關於network architecture,作者用的是 encoder-decoder ENet,這個網路共有三個階段,這兩個分支共享前兩個階段,而第三個階段的encoder和整個網路的decoder部分則是獨立

curve fitting

車道線檢測一般是給y軸坐標,求車道線上對應的點的x軸的值。僅僅求出所有lane pixel是不夠的,還要進行直線擬合,求出對應的數學模型。一般來說,現在在擬合曲線時候都會把圖像轉化到bird』s-eye view角度,就是讓車道線都平行,這些便於擬合、可靠性更高,然後求出相應的點後,再映射回來。

轉化到bird』s-eye view是利用矩陣來求的,問題來了,這個矩陣一般是計算一次後就對所有圖像都使用的,一個問題就是,如果地平線發生變化,比如汽車行駛在山巒的公路上,很容易產生誤差,因此作者就利用一個CNN網路,作者稱之為H-Net來學習相關參數。

變換矩陣有6個自由度:

這部分的數學表述參考這裡(原諒我偷懶不想打兩遍latex公式):

將所有點集構成矩陣,可以寫作P』=HP『,作者擬合的是三次曲線,實驗表明三次的效果較好:

擬合曲線的參數求法如下:

最後,通過標註的點的y坐標求出其x坐標,然後根據求出坐標和實際值之間的差來計算這部分網路的loss,從而對H-Net進行參數更新,以更好地學習變換矩陣:

3. 實驗結果

由於該論文是圖森某個比賽的方案,因此關於指標和指標結果就不做介紹了,簡單地展示一下結果吧:

單純從理論角度來說,筆者認為那篇提出聚類loss的論文其實更有意思,不過在解決實際問題上,這篇文章還是有可取之處,有興趣的不妨了解學習一下。


推薦閱讀:

經典CNN模型+經典圖像語義分割模型總結
醫學影像分割常用評價標準
ExFuse: Enhancing Feature Fusion for Semantic Segmentation
3d segmentation

TAG:圖像分割 | 深度學習DeepLearning | 圖像處理 |