共计 3979 个字符,预计需要花费 10 分钟才能阅读完成。
摘要:LaneNet 是一种端到端的车道线检测办法,蕴含 LanNet + H-Net 两个网络模型。
本文分享自华为云社区《【论文解读】LaneNet 基于实体宰割的端到端车道线检测》,作者:一颗小树 x。
前言
这是一种端到端的车道线检测办法,蕴含 LanNet+H-Net 两个网络模型。
LanNet是一种多任务模型,它将实例宰割工作拆解成“语义宰割”和“对像素进行向量示意”,而后将两个分支的后果进行聚类,失去实例宰割的后果。
H-Net是个小网络,负责预测变换矩阵 H,应用转换矩阵 H 对同属一条车道线的所有像素点进行从新建模。即:学习给定输出图像的透视变换参数,该透视变换可能对坡度路线上的车道线进行良好地拟合。
整体的网络结构如下:
论文地址:TowardsEnd-to-EndLaneDetection:anInstanceSegmentationApproach
开源数据集 TuSimple:https://github.com/TuSimple/t…
开源代码:https://github.com/MaybeShewi…
一、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,为了解决样本分布不平衡的问题,应用了boundedinverseclassweight 对 loss 进行加权:
其中,p 为对应类别在总体样本中呈现的概率,c 是超参数。
Loss 的设计参考了:论文 ENet:ADeepNeuralNetworkArchitectureforReal-TimeSemanticSegmentation
1.3 像素映射到嵌入空间
当宰割辨认失去车道后,为了晓得哪些像素归这条车道,哪些归那条车道,须要训练一个车道 instanceembedding 分支网络。它能输入一个车道线像素点间隔,归属同一车道的像素点间隔近,反之远,基于这个策略,可聚类失去各条车道线。
为了辨别车道线上的像素属于哪条车道,为每个像素初始化一个 embedding 向量,并且在设计 loss 时,使属同一条车道线的示意向量间隔尽可能小,属不同车道线的示意向量间隔尽可能大。
这部分的 loss 函数是由三局部组成:方差损失、间隔损失、回归损失:
其中,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:
通过置 0 对转置矩阵进行束缚,即水平线在变换下放弃程度。(即坐标 y 的变换不受坐标 x 的影响)
由上式能够看出,转置矩阵 H 只有 6 个参数,因而 H -Net 的输入是一个 6 维的向量。H-Net 由 6 层一般卷积网络和一层全连贯网络形成,其网络结构如图所示:
三、模型成果
车道线检测成果,与其余模型比照
模型的精度高达 96.4%,这个成果挺不错了。
模型速度:
2018 年:在 NVIDIA1080TI 上测得的 512X256 图像的速度。总的来说,车道检测能够以 52FPS 的速度运行。检测速度比拟快了,实时性较高。
2020 年:增加实时宰割模型 BiseNetV2 作为 Lanenet 骨干,新模型在单幅图像推理过程中能够达到 78fps。能够在此处找到基于 BiseNetV2 训练的新 Lanenet 模型。
模型成果:
四、开源代码
开源代码:https://github.com/MaybeShewi…
该开源代码是应用 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-av2… 提取码:1024
一共 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 减速:
语义宰割和像素嵌入成果:
实体宰割成果:
模型成果:
参考:
https://www.jianshu.com/p/c6d…
https://www.cnblogs.com/xuany…
LaneNet:TowardsEnd-to-EndLaneDetection:anInstanceSegmentationApproach
ENet:ADeepNeuralNetworkArchitectureforReal-TimeSemanticSegmentation
DiscriminativeLoss:SemanticInstanceSegmentationwithaDiscriminativelossfunction
论文地址:TowardsEnd-to-EndLaneDetection:anInstanceSegmentationApproach
开源代码:https://github.com/MaybeShewi…
本文只提供参考学习,谢谢。
点击关注,第一工夫理解华为云陈腐技术~