LaneNet(1):网络结构详解

embedded/2024/10/18 12:21:16/

前言

这是一种端到端的车道线检测方法,包括LanNet+H-Net两种网络模型。

LanNet是一种多任务模型,它将实例分割任务分解为“语义分割”和“像素矢量表示”,然后对这两个分支的结果进行聚类,得到实例分割的结果。

H-Net是一个小型网络,负责预测变换矩阵H,使用变换矩阵H来重构属于同一车道线的所有像素。也就是说,学习给定输入图像的透视变换参数,透视变换可以很好地适应斜坡道路上的车道线。

总体网络结构如下:
在这里插入图片描述

论文:Towards End-to-End Lane Detection: an Instance Segmentation Approach

开源代码:https://github.com/MaybeShewill-CV/lanenet-lane-detection?tab=readme-ov-file

开源数据集:https://github.com/TuSimple/tusimple-benchmark/issues/3

一、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://segmentfault.com/a/1190000040583331/en


http://www.ppmy.cn/embedded/58759.html

相关文章

自动驾驶算法———车道检测(一)

“ 在本章中,我将指导您构建一个简单但有效的车道检测管道,并将其应用于Carla 模拟器中捕获的图像。管道将图像作为输入,并产生车道边界的数学模型作为输出。图像由行车记录仪(固定在车辆挡风玻璃后面的摄像头)捕获。…

3DS-SLAM(3D目标检测,动态视觉slam)

3DS-SLAM: A 3D Object Detection based Semantic SLAM towards Dynamic Indoor Environments 原文 摘要: 环境中可变因素的存在可能会导致相机定位精度下降,因为它违反了同步定位与建图(SLAM)算法中静态环境的基本假设。最近针对…

AJAX是什么?原生语法格式?jQuery提供分装好的AJAX有什么区别?

ajax 的全称 Asynchronous JavaScript and XML (异步 JavaScript 和 XML)。 AJAX是一种创建交互式网页应用的网页开发技术。其中最核心的依赖是浏览器提供的 XMLHttpRequest 对象,是这个对象使得浏览器可以发出 HTTP 请求与接收 HTTP 响应。实现了在页 面不刷新的…

Mongodb索引的删除

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第87篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…

a+=1和a=a+1的区别

文章目录 a1 和a a1的区别一、实例代码二、代码解释三、总结 a1 和a a1的区别 一、实例代码 public class Test {public static void main(String[] args) {byte a 10; // a a 1; // a (byte) (a 1);a 1;System.out.println(a);} }上面的对变量a进行加一操作时&a…

【Git 学习笔记】第三章 分支、合并及配置项(上)

第三章 分支、合并及配置项 相关主题: 本地分支管理远程分支强制版本合并使用 git reuse recorded resolution (rerere) 合并有冲突的 Git 版本计算分支间的差异孤立分支(Orphan branches) 3.1 本地分支管理 假如 git 库就在本地&#xf…

Redis基础教程(十五):Redis GEO地理信息查询与管理

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

最小二乘支持向量机(Least Squares Support Vector Machine,LSSVM)及其Python和MATLAB实现

LSSVM(Least Squares Support Vector Machine)又称最小二乘支持向量机,是支持向量机(SVM)的一种变体,它通过将SVM的优化问题转化为带约束的二次规划问题,利用最小二乘法进行优化求解&#xff0c…