天天看點

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

摘要:LaneNet是一種端到端的車道線檢測方法,包含 LanNet + H-Net 兩個網絡模型。

本文分享自華為雲社群《【論文解讀】LaneNet基于實體分割的端到端車道線檢測》,作者:一顆小樹x。

前言

這是一種端到端的車道線檢測方法,包含LanNet+H-Net兩個網絡模型。

LanNet是一種多任務模型,它将執行個體分割任務拆解成“語義分割”和“對像素進行向量表示”,然後将兩個分支的結果進行聚類,得到執行個體分割的結果。

H-Net是個小網絡,負責預測變換矩陣H,使用轉換矩陣H對同屬一條車道線的所有像素點進行重建立模。即:學習給定輸入圖像的透視變換參數,該透視變換能夠對坡度道路上的車道線進行良好地拟合。

整體的網絡結構如下:

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

論文位址:TowardsEnd-to-EndLaneDetection:anInstanceSegmentationApproach

開源資料集TuSimple:https://github.com/TuSimple/tusimple-benchmark/issues/3

開源代碼:https://github.com/MaybeShewill-CV/lanenet-lane-detection

一、LanNet

LanNet對輸入圖像進行執行個體分割,其中網絡結構分為兩個方向,一個是語義分割,另一個是對像素進行向量表示,最後将兩個分支的結果進行聚類,得到執行個體分割的結果。LaneNet輸出執行個體分割的結果,為每個車道線像素配置設定一個車道線ID。

1.1網絡結構

先看看網絡結構:

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

分支1:語義分割,Segmentation,對像素進行二分類,判斷像素屬于車道線還是背景;

分支2:對像素進行向量,Embedding,對像素進行嵌入式表示,把圖像特征表示為嵌入空間中,特征之間的關系映射在嵌入空間。

聚類,基于Mean-Shift算法實作的,把将兩個分支的結果進行聚類,得到執行個體分割的結果。

LaneNet是基于ENet的encoder-decoder模型,如下圖所示,ENet由5個stage組成,其中stage2和stage3基本相同,stage1,2,3屬于encoder,stage4,5屬于decoder。

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

1.2語義分割

這部分是對像素進行二分類,判斷像素屬于車道線還是背景;并且高度不平衡,是以參考了ENet,損失函數使用的是标準的交叉熵損失函數。

設計語義分割模型時,為了處理遮擋問題,論文對被車輛遮擋的車道線和虛線進行了還原(估計);

Loss使用softmax_cross_entropy,為了解決樣本分布不均衡的問題,使用了boundedinverseclassweight對loss進行權重:

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

其中,p為對應類别在總體樣本中出現的機率,c是超參數。

Loss的設計參考了:論文ENet:ADeepNeuralNetworkArchitectureforReal-TimeSemanticSegmentation

1.3像素映射到嵌入空間

當分割識别得到車道後,為了知道哪些像素歸這條車道,哪些歸那條車道,需要訓練一個車道instanceembedding分支網絡。它能輸出一個車道線像素點距離,歸屬同一車道的像素點距離近,反之遠,基于這個政策,可聚類得到各條車道線。

為了區分車道線上的像素屬于哪條車道,為每個像素初始化一個embedding向量,并且在設計loss時,使屬同一條車道線的表示向量距離盡可能小,屬不同車道線的表示向量距離盡可能大。

這部分的loss函數是由三部分組成:方差損失、距離損失、回歸損失:

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

其中,C是車道線數量,Nc是屬同一條車道線的像素點數量,μc是車道線的均值向量,xi是像素向量(pixelembedding)。

該loss函數源自于論文《SemanticInstanceSegmentationwithaDiscriminativelossfunction》

方差loss(Lvar):當像素向量(pixelembedding)xi與對應車道線均值向量μc的距離大于δv時,模型會進行更新,使得xi靠近μc;

距離loss(Ldist):當不同車道線均值向量μca和μcb之間的距離小于δd時,模型會進行更新,使得μca與μcb遠離彼此;

方差loss(Lvar)使得像素向量向車道線的均值向量μc靠近,距離loss(Ldist)則會推動聚類中心遠離彼此。

1.4聚類

embedding(像素映射到嵌入空間)已經為聚類提供好的特征向量了,利用這些特征向量我們可以利用任意聚類算法來完成執行個體分割的目标。

聚類是基于Mean-Shift算法實作的,把将兩個分支的結果進行聚類,得到執行個體分割的結果。

首先使用meanshift聚類,使得簇中心沿着密度上升的方向移動,防止将離群點選入相同的簇中;之後對像素向量進行劃分,直到将所有的車道線像素配置設定給對應的車道。

二、H-Net

LaneNet的輸出是每條車道線的像素集合,還需要根據這些像素點回歸出一條車道線。傳統的做法是将圖檔投影到俯視圖(鳥瞰圖)中,然後使用2階或者3階多項式進行拟合。在這種方法中,變換矩陣H隻被計算一次,所有的圖檔使用的是相同的變換矩陣,這會導緻地平面(山地,丘陵)變化下的誤差。

為了解決這個問題,論文訓練了一個可以預測變換矩陣H的神經網絡H-Net,網絡的輸入是圖檔,輸出是變換矩陣H:

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

通過置0對轉置矩陣進行限制,即水準線在變換下保持水準。(即坐标y的變換不受坐标x的影響)

由上式可以看出,轉置矩陣H隻有6個參數,是以H-Net的輸出是一個6維的向量。H-Net由6層普通卷積網絡和一層全連接配接網絡構成,其網絡結構如圖所示:

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

三、模型效果

車道線檢測效果,與其他模型對比

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

​模型的精度高達96.4%,這個效果挺不錯了。

模型速度:

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

2018年:在NVIDIA1080TI上測得的512X256圖像的速度。總的來說,車道檢測可以以52FPS的速度運作。檢測速度比較快了,實時性較高。

2020年:添加實時分割模型BiseNetV2作為Lanenet主幹,新模型在單幅圖像推理過程中可以達到78fps。可以在此處找到基于BiseNetV2訓練的新Lanenet模型。

模型效果:

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

四、開源代碼

該開源代碼是使用LaneNet深度神經網絡模型,進行實時車道檢測(非官方版)

該模型由編碼器-解碼器階段、二進制語義分割階段和使用判别損失函數進行實時車道檢測任務的執行個體語義分割組成。

代碼的運作環境:(以下是親測的)

系統:ubuntu16.04(x64)

語言:Python3.6

深度架構:TensorFlow1.15.0(GPU版本)

其他依賴庫:cv2、matplotlib、scikit_learn、numpy等。

實踐過程:

1)建立conda環境

condacreate-nLineNetpython=3.6           

2)進入剛才建立的環境

condaactivateLineNet           

3)根據requirements.txt要求去安裝相關的依賴庫(這裡我也阿裡雲加速安裝了)

pip3install-rrequirements.txt-ihttps://mirrors.aliyun.com/pypi/simple/           

看了一下這個的檔案,發現有點問題。

tensoflow重複了:tensorflow_gpu==1.15.0、tensorflow==1.15.0,根據使用情況删除一個,我是準确使用GPU加速的,于是删掉tensorflow==1.15.0。

4)安裝英偉達的cudatoolkit10.0版本

condainstallcudatoolkit=10.0           

5)安裝英偉達深度學習軟體包7.6版本

condainstallcudnn=7.6.5           

6)設定lanenet_model環境變量

exportPYTHONPATH="${PYTHONPATH}:your_path/lanenet-lane-detection/lanenet_model"           

your_path是lanenet-lane-detection檔案夾所在的絕對路徑。

7)下載下傳模型

連結:https://pan.baidu.com/s/1-av2fK7BQ05HXjKMzraBSA提取碼:1024

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

一共4個檔案,30M左右。

然後在lanenet-lane-detection目錄下,建立一個子目錄,名為model_weights,存在這個4個模型檔案,待會用到。

8)測試模型

pythontools/test_lanenet.py--weights_pathmodel_weights/tusimple_lanenet.ckpt--image_path./data/tusimple_test_image/3.jpg           

成功使用GPU加速:

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

語義分割和像素嵌入效果:

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

實體分割效果:

帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測
帶你讀AI論文丨LaneNet基于實體分割的端到端車道線檢測

參考:https://www.jianshu.com/p/c6d38d648509

https://www.cnblogs.com/xuanyuyt/p/11523192.html

LaneNet:TowardsEnd-to-EndLaneDetection:anInstanceSegmentationApproach

ENet:ADeepNeuralNetworkArchitectureforReal-TimeSemanticSegmentation

DiscriminativeLoss:SemanticInstanceSegmentationwithaDiscriminativelossfunction

本文隻提供參考學習,謝謝。

點選關注,第一時間了解華為雲新鮮技術~

繼續閱讀