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

liuxuhui發表於2021-09-11
摘要:LaneNet是一種端到端的車道線檢測方法,包含 LanNet + H-Net 兩個網路模型。

本文分享自華為雲社群《》,作者:一顆小樹x。

前言

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

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

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

整體的網路結構如下:

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

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

開源資料集TuSimple:

開原始碼:

一、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-i

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

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)下載模型

連結:提取碼: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基於實體分割的端到端車道線檢測

參考:

LaneNet:TowardsEnd-to-EndLaneDetection:anInstanceSegmentationApproach

ENet:ADeepNeuralNetworkArchitectureforReal-TimeSemanticSegmentation

DiscriminativeLoss:SemanticInstanceSegmentationwithaDiscriminativelossfunction

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

開原始碼:

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

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756/viewspace-2795903/,如需轉載,請註明出處,否則將追究法律責任。

相關文章