前言
這是一種端到端的車道線檢測方法,包含 LanNet + H-Net 兩個網路模型,
LanNet 是一種多任務模型,它將 實體分割 任務拆解成“語意分割”和“對像素進行向量表示”,然后將兩個分支的結果進行聚類,得到實體分割的結果,
H-Net 是個小網路,負責預測變換矩陣 H,使用轉換矩陣 H 對同屬一條車道線的所有像素點進行重新建模,即:學習給定輸入影像的透視變換引數,該透視變換能夠對坡度道路上的車道線進行良好地擬合,
整體的網路結構如下:

論文地址:Towards End-to-End Lane Detection: an Instance Segmentation Approach
開源資料集TuSimple:https://github.com/TuSimple/tusimple-benchmark/issues/3
開源代碼:https://github.com/MaybeShewill-CV/lanenet-lane-detection
目錄
前言
一、LanNet
1.1 網路結構
1.2 語意分割
1.3 像素映射到嵌入空間
1.4 聚類
二、H-Net
三、模型效果
四、開源代碼
一、LanNet
LanNet 對輸入影像進行實體分割,其中網路結構分為兩個方向,一個是語意分割,另一個是對像素進行向量表示,最后將兩個分支的結果進行聚類,得到實體分割的結果,LaneNet輸出實體分割的結果,為每個車道線像素分配一個車道線ID,
1.1 網路結構
先看看網路結構:

分支1 語意分割,Segmentation,對像素進行二分類,判斷像素屬于車道線還是背景;
分支2 對像素進行向量,Embedding,對像素進行嵌入式表示,把影像特征表示為嵌入空間中,特征之間的關系映射在嵌入空間,
聚類,基于Mean-Shift 演算法實作的,把將兩個分支的結果進行聚類,得到實體分割的結果,
LaneNet是基于ENet的encoder-decoder模型,如下圖所示,ENet由5個stage組成,其中stage2和stage3基本相同,stage1,2,3屬于encoder,stage4,5屬于decoder,

1.2 語意分割
這部分是對像素進行二分類,判斷像素屬于車道線還是背景;并且高度不平衡,因此參考了ENet,損失函式使用的是標準的交叉熵損失函式,
設計語意分割模型時,為了處理遮擋問題,論文對被車輛遮擋的車道線和虛線進行了還原(估計);
Loss 使用 softmax_cross_entropy,為了解決樣本分布不均衡的問題,使用了 bounded inverse class weight 對 loss 進行加權:

其中,p 為對應類別在總體樣本中出現的概率,c 是超引數,
Loss的設計參考了:論文ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation
1.3 像素映射到嵌入空間
當分割識別得到車道后,為了知道哪些像素歸這條車道,哪些歸那條車道,需要訓練一個車道instance embedding分支網路,它能輸出一個車道線像素點距離,歸屬同一車道的像素點距離近,反之遠,基于這個策略,可聚類得到各條車道線,
為了區分車道線上的像素屬于哪條車道, 為每個像素初始化一個 embedding 向量,并且在設計 loss 時,使屬同一條車道線的表示向量距離盡可能小,屬不同車道線的表示向量距離盡可能大,
這部分的 loss 函式是由三部分組成:方差損失、距離損失、回歸損失:

其中,C 是車道線數量,Nc是屬同一條車道線的像素點數量,μc是車道線的均值向量,xi是像素向量(pixel embedding),
該 loss 函式源自于論文 《Semantic Instance Segmentation with a Discriminative loss function》
方差loss(Lvar) :當像素向量(pixel embedding)xi與對應車道線均值向量μc的距離大于δv時,模型會進行更新,使得xi 靠近μc ;
距離loss(Ldist) :當不同車道線均值向量 μca和μcb之間的距離小于δd 時,模型會進行更新,使得μca與μcb遠離彼此;
方差loss(Lvar)使得像素向量向車道線的均值向量 μc 靠近,距離loss(Ldist)則會推動聚類中心遠離彼此,
1.4 聚類
embedding(像素映射到嵌入空間)已經為聚類提供好的特征向量了,利用這些特征向量我們可以利用任意聚類演算法來完成實體分割的目標,
聚類是基于Mean-Shift 演算法實作的,把將兩個分支的結果進行聚類,得到實體分割的結果,
首先使用 mean shift 聚類,使得簇中心沿著密度上升的方向移動,防止將離群點選入相同的簇中;之后對像素向量進行劃分,直到將所有的車道線像素分配給對應的車道,
二、H-Net
LaneNet的輸出是每條車道線的像素集合,還需要根據這些像素點回歸出一條車道線,傳統的做法是將圖片投影到俯視圖(鳥瞰圖)中,然后使用 2 階或者 3 階多項式進行擬合,在這種方法中,變換矩陣 H 只被計算一次,所有的圖片使用的是相同的變換矩陣,這會導致地平面(山地,丘陵)變化下的誤差,
為了解決這個問題,論文訓練了一個可以預測變換矩陣 H 的神經網路 H-Net,網路的輸入是圖片,輸出是變換矩陣 H:

通過置 0 對轉置矩陣進行約束,即水平線在變換下保持水平,(即坐標 y 的變換不受坐標 x 的影響)
由上式可以看出,轉置矩陣 H 只有6個引數,因此H-Net的輸出是一個 6 維的向量,H-Net 由 6 層普通卷積網路和一層全連接網路構成,其網路結構如圖所示:

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

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

2018年:在 NVIDIA 1080 TI 上測得的 512X256 影像的速度,總的來說,車道檢測可以以 52 FPS 的速度運行,檢測速度比較快了,實時性較高,
2020年:添加實時分割模型 BiseNetV2 作為 Lanenet 主干,新模型在單幅影像推理程序中可以達到 78 fps,可以在此處找到基于 BiseNetV2 訓練的新 Lanenet 模型,
模型效果:

四、開源代碼
開源代碼:https://github.com/MaybeShewill-CV/lanenet-lane-detection
該開源代碼是使用LaneNet深度神經網路模型,進行實時車道檢測(非官方版)
該模型由編碼器-解碼器階段、二進制語意分割階段和使用判別損失函式進行實時車道檢測任務的實體語意分割組成,
代碼的運行環境:(以下是親測的)
系統:ubuntu 16.04(x64)
語言:Python3.6
深度框架:TensorFlow1.15.0(GPU 版本)
其他依賴庫:cv2、matplotlib、scikit_learn、numpy等,
實踐程序:
1)創建conda環境
conda create -n LineNet python=3.6
2)進入剛才創建的環境
conda activate LineNet
3)根據 requirements.txt 要求去安裝相關的依賴庫(這里我也阿里云加速安裝了)
pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
看了一下這個的檔案,發現有點問題,
tensoflow重復了:tensorflow_gpu==1.15.0、tensorflow==1.15.0,根據使用情況洗掉一個,我是準確使用GPU加速的,于是刪掉tensorflow==1.15.0,
4)安裝英偉達的cudatoolkit 10.0版本
conda install cudatoolkit=10.0
5)安裝英偉達深度學習軟體包7.6版本
conda install cudnn=7.6.5
6)設定lanenet_model 環境變數
export PYTHONPATH="${PYTHONPATH}:your_path/lanenet-lane-detection/lanenet_model"
your_path 是 lanenet-lane-detection檔案夾 所在的絕對路徑,
7)下載模型
鏈接:https://pan.baidu.com/s/1-av2fK7BQ05HXjKMzraBSA 提取碼:1024

一共4個檔案,30M左右,
然后在 lanenet-lane-detection目錄下,新建一個子目錄,名為model_weights,存在這個4個模型檔案,待會用到,
8)測驗模型
python tools/test_lanenet.py --weights_path model_weights/tusimple_lanenet.ckpt --image_path ./data/tusimple_test_image/3.jpg
成功使用GPU加速:

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

物體分割效果:

模型效果:

參考:https://www.jianshu.com/p/c6d38d648509
https://www.cnblogs.com/xuanyuyt/p/11523192.html
LaneNet: Towards End-to-End Lane Detection: an Instance Segmentation Approach
ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation
Discriminative Loss: Semantic Instance Segmentation with a Discriminative loss function

論文地址:Towards End-to-End Lane Detection: an Instance Segmentation Approach
開源代碼:https://github.com/MaybeShewill-CV/lanenet-lane-detection
本文只提供參考學習,謝謝,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290783.html
標籤:AI
上一篇:2021年深圳杯數學建模
