LaneNet 论文阅读

论文链接

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


0. Abstract

  • 在本文中,将车道检测问题转化为实例分割问题——其中每个车道形成自己的实例——可以进行端到端训练
  • 为了在拟合车道之前对分段车道实例进行参数化,应用基于图像的学习透视变换,而不是固定的“鸟瞰图”变换
  • 提出了一种快速车道检测算法,以 50 fps 运行,可以处理可变数量的车道并应对车道变化

1. Intro

传统方法很容易出现鲁棒性问题,因为道路场景变化无法通过基于模型的系统轻松建模

车道分割分支有两个输出类:背景或车道,而车道嵌入分支进一步将分割的车道像素分解为不同的车道实例

Fig. 1 系统总览。给定输入图像,LaneNet 通过用车道 ID 标记每个车道像素来输出车道实例图。接下来,使用 H-Net 输出的变换矩阵对车道像素进行变换,H-Net 学习以输入图像为条件的透视变换。对于每个车道,拟合三阶多项式并将车道重新投影到图像上

本文贡献

  • 一个分支的多任务架构,将车道检测问题转化为实例分割任务,处理车道变化并允许推断任意数量的车道。特别是,车道分割分支输出密集的每像素车道段,而车道嵌入分支进一步将分割的车道像素分解为不同的车道实例
  • 给定输入图像的网络估计透视变换的参数,该变换允许车道拟合对道路平面变化具有鲁棒性,例如,上/下坡

2. Method

端到端地训练神经网络进行车道检测,以解决上述车道切换问题以及车道数量限制。这是通过将车道检测视为实例分割问题来实现的。该网络我们将称为 LaneNet(参见图 2)。它将二元车道分割的优点与专为一次性实例分割设计的聚类损失函数相结合

Fig. 2 LaneNet 架构。它由两个分支组成。分割分支(底部)经过训练以生成二进制通道掩码。嵌入分支(顶部)为每个通道像素生成一个 N 维嵌入,以便来自同一通道的嵌入靠近,而来自不同通道的嵌入在流形中远离。为了简单起见,我们展示了每个像素的二维嵌入,它既可视化为彩色图(所有像素),也可视化为 xy 网格中的点(仅车道像素)。使用分割分支中的二进制分割图屏蔽背景像素后,车道嵌入(蓝点)聚集在一起并分配给它们的聚类中心(红点)

由于 LaneNet 输出每个车道的像素集合,因此我们仍然需要通过这些像素拟合一条曲线来获得车道参数化。通常,首先使用固定的变换矩阵将车道像素投影为“鸟瞰图”表示形式。然而,由于所有图像的变换参数都是固定的,因此当遇到非平坦的地平面时会引发问题。在斜坡上。为了缓解这个问题,我们训练了一个称为 H-Net 的网络,该网络以输入图像为条件来估计“理想”透视变换的参数

2.1 LaneNet

LaneNet 通过将车道检测视为实例分割问题来进行车道检测的端到端训练。这样,网络就不受其可以检测到的车道数量的限制,并且能够应对车道变化

实例分割任务由两部分组成,分割部分和聚类部分。为了提高速度和准确性方面的性能,这两部分在多任务网络中联合训练

二元分割

Fig. 2-1 二元分割分支

经过训练可输出二进制分割图,指示哪些像素属于车道,哪些像素不属于车道

为了构建真实的分割图,我们将所有真实的车道点连接在一起,形成每条车道的连接线。请注意,这里甚至可以通过遮挡汽车等物体,或者在没有明确的视觉车道段(如虚线或褪色车道)的情况下绘制这些真实车道。即使车道被遮挡或处于不利情况下,网络也将学会预测车道位置。分割网络使用标准交叉熵损失函数进行训练。由于两个类(车道/背景)高度不平衡,我们应用有界逆类权重

实例分割

Fig. 2-2 实例嵌入分支

为了解开分割分支识别的车道像素,训练 LaneNet 的第二个分支用于车道实例嵌入。用 De Brabandere 等人提出的基于距离度量学习的一次性方法。可以轻松地与标准前馈网络集成,并且专为实时应用而设计

通过使用它们的聚类损失函数,训练实例嵌入分支来输出每个车道像素的嵌入,使得属于同一车道的像素嵌入之间的距离很小,而属于不同车道的像素嵌入之间的距离最大化。这是通过引入两项来实现的:方差项 ( L v a r ) (L_{var}) (Lvar),它对每个嵌入施加拉力,以达到车道的平均嵌入;距离项 ( L d i s t ) (L_{dist}) (Ldist),将聚类中心推离彼此。这两项是相互关联的:

  • 只有当嵌入距离其聚类中心超过 δ v δ_v δv 时,拉力才会起作用,而中心之间的推力只有在它们彼此之间的距离比 δ d δ_d δd 更近时才会起作用

  • 其中 C C C 表示簇(车道)的数量, N c N_c Nc 表示簇 c c c 中的元素数量, x i x_i xi 表示像素嵌入, μ c μ_c μc 表示簇 c c c 的平均嵌入, ‖ ⋅ ‖ ‖·‖ 表示 L2 距离, [ x ] + = max ⁡ ( 0 , x ) [x]_+ = \max(0, x) [x]+=max(0,x) 铰链,总损耗 L L L 等于 L v a r + L d i s t L_{var} + L_{dist} Lvar+Ldist
    { L v a r = 1 C ∑ c = 1 C 1 N c Σ i = 1 N c [ ‖ μ c − x i ‖ − δ v ] + 2 L d i s t = 1 C ( C − 1 ) ∑ c A = 1 C ∑ c B = 1 , c A ≠ c B C [ δ d − ‖ µ c A − µ c B ‖ ] + 2 (1) \begin{cases} L_{var} = \frac{1}{C} \sum^C_{c=1} \frac{1}{N_c} Σ^{N_c}_{i=1}[‖μ_c − x_i‖ − δ_v]^2_+ \\ L_{dist} = \frac{1}{C(C −1)} ∑^C_{c_A =1} ∑^C_{c_B =1,c_A\neq c_B} [δ_d − ‖µ_{c_A} − µ_{c_B}‖]^2_+ \tag{1} \end{cases} {Lvar=C1c=1CNc1Σi=1Nc[μcxiδv]+2Ldist=C(C1)1cA=1CcB=1,cA=cBC[δdµcAµcB]+2(1)
    一旦网络收敛,车道像素的嵌入将聚集在一起(见图 2),因此每个簇之间的距离将大于 δ d δ_d δd,并且每个簇的半径小于 δ v δ_v δv

聚类

聚类是通过迭代过程完成的。通过在上述损失中设置 δ d > 6 δ v δ_d > 6δ_v δd>6δv,可以采用随机车道嵌入和其周围半径为 2 δ v 2δ_v 2δv 的阈值来选择属于同一车道的所有嵌入。重复此操作,直到所有车道嵌入都分配给相应的车道

网络架构

LaneNet 的架构基于编码器-解码器网络 ENet,因此被修改为两分支网络。虽然原始 ENet 的编码器由三个阶段组成(阶段 1、2、3),但 LaneNet 仅在两个分支之间共享前两个阶段(1 和 2),留下 ENet 编码器的阶段 3 和完整的 ENet 解码器作为每个单独分支的骨干。分割分支的最后一层输出单通道图像(二值分割),而嵌入分支的最后一层输出 N 通道图像,其中 N 为嵌入维度

2.2 使用 H-NET 进行曲线拟合

LaneNet 的输出是每个通道的像素集合。通过原始图像空间中的这些像素拟合多项式并不理想,因为必须求助于更高阶多项式才能应对弯曲车道。解决此问题的常用解决方案是将图像投影为“鸟瞰图”表示,其中车道彼此平行,因此,弯曲车道可以用二阶到三阶多项式拟合。然而,在这些情况下,变换矩阵 H 只计算一次,并且对于所有图像保持固定。通常,这会导致地平面变化时产生误差,其中投影到无穷远的消失点向上或向下移动

为了解决这个问题,我们训练一个具有自定义损失函数的神经网络 H-Net:该网络经过端到端优化以预测透视变换 H 的参数,其中变换后的车道点可以与第二个或三阶多项式。预测以输入图像为条件,允许网络在地平面变化下调整投影参数,以便车道拟合仍然正确
H = [ a b c 0 d e 0 f 1 ] H= \begin{bmatrix} a &b &c \\ 0 &d &e \\ 0 &f &1 \end{bmatrix} H= a00bdfce1
放置零点是为了强制约束水平线在变换下保持水平

曲线拟合

在通过车道像素 P \mathbf{P} P 拟合曲线之前,使用 H-Net 输出的变换矩阵对后者进行变换。给定车道像素 p i = [ x i , y i , 1 ] T ∈ P p_i = [x_i, y_i, 1]^T ∈ \mathbf{P} pi=[xi,yi,1]TP,变换后的像素 p i ′ = [ x i ′ , y i ′ , 1 ] T ∈ P ′ p^′_i = [x^′_i, y^′_i, 1]^T ∈ \mathbf{P}^′ pi=[xi,yi,1]TP 等于 H p i H_{p_i} Hpi。接下来,使用最小二乘算法通过变换后的像素 P ′ \mathbf{P}^\prime P 拟合 n 次多项式 f ( y ′ ) f (y^\prime) f(y)

为了获得给定 y y y 位置 y i y_i yi 处车道的 x x x 位置 x i ∗ x^*_i xi,点 p i = [ − , y i , 1 ] T p_i = [−, y_i, 1]^T pi=[,yi,1]T 转换为 p i ′ = H p i = [ − , y i ′ , 1 ] T p^′_i = H_{p_i} = [−, y^′_i, 1 ]^T pi=Hpi=[,yi,1]T 并计算为: x i ′ ∗ = f ( y i ′ ) x^{′*}_i = f (y^′_ i) xi=f(yi)

Fig. 3 曲线拟合。左:使用 H-Net 生成的矩阵 H 变换车道点。中:通过变换点拟合一条线,并在不同高度(红点)评估曲线。右:评估的点被变换回原始图像空间

Fig. 4 用于车道拟合的固定单应性和条件单应性(使用 H-Net)之间的比较。由于地平面的变化,绿点无法使用固定单应性正确拟合,这可以通过使用 H-Net 的条件单应性来解决(最后一行)

损失函数

为了训练 H-Net 输出最适合通过车道像素拟合多项式的变换矩阵,我们构建了以下损失函数。给定 N 个真实车道点 p i = [ x i , y i , 1 ] T ∈ P p_i = [x_i, y_i, 1]^T ∈ \mathbf{P} pi=[xi,yi,1]TP,我们首先使用 H-Net 的输出来变换这些点
P ′ = H P \mathbf{P}^\prime=\mathrm{H}\mathbf{P} P=HP
使用最小二乘封闭式解拟合多项式 f ( y ′ ) = α y ′ 2 + β y ′ + γ f (y^′) = αy^{′2} + βy^′ + γ f(y)=αy′2+βy+γ
w = ( Y T Y ) − 1 Y T x ′ \mathbf{w} = (\mathbf{Y}^T \mathbf{Y})^{−1}\mathbf{Y}^T\mathbf{x}^′ w=(YTY)1YTx
其中 w = [ α , β , γ ] T \mathbf{w} = [α, β, γ]^T w=[α,β,γ]T , x ′ = [ x 1 ′ , x 2 ′ , . . . , x N ′ ] T \mathbf{x}^′ = [x^′_1, x^′_2, ..., x^′_N ]^T x=[x1,x2,...,xN]T
Y = [ y 1 ′ 2 y 1 ′ 1 ⋮ ⋮ ⋮ y N ′ 2 y N ′ 1 ] \mathbf{Y}= \begin{bmatrix} y^{\prime 2}_1 &y^\prime_1 &1\\ \vdots &\vdots &\vdots \\ y^{\prime 2}_N &y^\prime_N &1 \end{bmatrix} Y= y1′2yN′2y1yN11
在每个 y i ′ y^\prime_i yi 位置评估拟合多项式,给出 x i ′ ∗ x^{′*}_i xi 预测

这些预测被投影回来: p i ∗ = H − 1 p i ′ ∗ p^*_i = \mathrm{H}^{−1}p^{′*}_i pi=H1pi 其中 p i ∗ = [ x i ∗ , y i , 1 ] T p^*_i = [x^*_i , y_i, 1]^T pi=[xi,yi,1]T p i ′ ∗ = [ x i ′ ∗ , y i ′ , 1 ] T p^{\prime *}_i = [x^{\prime *}_i , y^\prime_i, 1]^T pi=[xi,yi,1]T 。损失是
L o s s = 1 N ∑ i = 1 , N ( x i ∗ − x i ) 2 Loss = \frac{1}{N} \sum\limits_{i=1,N} (x^∗_i − x_i)^2 Loss=N1i=1,N(xixi)2
由于车道拟合是通过使用最小二乘算法的封闭式解来完成的,因此损失是可微的。我们使用自动微分来计算梯度

网络架构

H-Net 的网络架构有意保持较小,并由连续的 3x3 卷积块、batchnorm 和 ReLU 构成。使用最大池化层减少维度,最后添加 2 个全连接层

Tab. 1 H-Net 网络架构


3. Results

3.1 数据集

tuSimple 车道数据集是用于在车道检测任务上测试深度学习方法的大规模数据集。它由 3626 张训练图像和 2782 张测试图像组成。它们是在不同白天的 2 车道/3 车道/4 车道或更多车道的高速公路上记录的

准确度计算为每幅图像的平均正确点数:
a c c = ∑ i m C i m S i m acc=\sum\limits_{im}\frac{C_{im}}{S_{im}} acc=imSimCim
其中 C i m C_{im} Cim 为正确点的数量, S i m S_{im} Sim 为真实点的数量。当真实点与预测点之间的差异小于某个阈值时,该点是正确的

除了准确性之外,它们还提供假阳性和假阴性分数
F P = F p r e d N p r e d F N = M p r e d N g t FP=\frac{F_{pred}}{N_{pred}} \\ FN=\frac{M_{pred}}{N_{gt}} FP=NpredFpredFN=NgtMpred
其中 F p r e d F_{pred} Fpred 为错误预测车道的数量, N p r e d N_{pred} Npred 为预测车道的数量, M p r e d M_{pred} Mpred 为错过的地面实况车道的数量, N g t N_{gt} Ngt 为所有地面实况车道的数量

3.2 设置

LaneNet

使用嵌入维度为 4、 δ v = 0.5 δ_v = 0.5 δv=0.5 δ d = 3 δ_d = 3 δd=3 进行训练。将图像重新缩放为 512x256,并使用 Adam 训练网络,批量大小为 8,学习率为 5e-4,直至收敛

H-Net

使用尺寸为 128x64 的输入图像的缩放版本进行三阶多项式拟合训练。使用 Adam 训练网络,批量大小为 10,学习率为 5e-5,直到收敛

Speed

给定 512x256 的输入分辨率、每像素 4 维嵌入并使用三阶多项式拟合,我们的车道检测算法可以每秒运行高达 50 帧

3.3 实验

插值法

在表III中,我们计算了基于HNet的无变换、固定变换和条件变换的车道拟合精度。我们还测量二阶或三阶多项式拟合之间的差异

当直接在原始图像空间中拟合曲线而不进行变换时,这会导致较差的结果;这是预料之中的,因为使用低阶多项式很难拟合弯曲的车道。使用 H-Net 生成的变换矩阵(针对车道拟合进行了优化),结果优于具有固定变换的车道拟合。我们不仅获得了更好的 MSE 分数,而且使用这种方法可以让我们拟合所有点,无论地平面的斜率是否发生变化

tuSimple结果

Tab. 2 tuSimple 测试集上的车道检测性能

Tab. 3 使用不同变换下的二阶和三阶多项式验证集上拟合车道点和 GT 点之间的 MSE(以像素为单位)。无法拟合的点不会添加到 MSE,但会被视为未命中并影响平均未命中/车道

Tab. 4 在 NVIDIA 1080 TI 上测量的 512X256 图像大小的不同组件的速度。总的来说,车道检测可以以 52 FPS 的速度运行


4. Conclusion

  • 提出了一种 50 fps 的端到端车道检测方法。受最近的实例分割技术的启发,与其他相关的深度学习方法相比,我们的方法可以检测可变数量的车道,并且可以应对车道变换操作。
  • 为了使用低阶多项式对分段车道进行参数化,我们训练了一个网络来生成透视变换的参数,以图像为条件,其中车道拟合是最佳的
  • 网络使用用于车道拟合的自定义损失函数进行训练。与流行的“鸟瞰图”方法不同,我们的方法通过相应地调整变换参数,对地平面的坡度变化具有鲁棒性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Seata源码流程图

1.第一阶段分支事务的注册 流程图地址:https://www.processon.com/view/link/6108de4be401fd6714ba761d 2.第一阶段开启全局事务 流程图地址:https://www.processon.com/view/link/6108de13e0b34d3e35b8e4ef 3.第二阶段全局事务的提交 流程图地址…

Kafka生产消费实战-JAVA

Kafka生产消费实战-JAVA 文章目录 Kafka生产消费实战-JAVA生产者代码消费者代码消费者代码扩展Consumer消费offset查询Consumer消费顺序Kafka的三种语义 生产者代码 public static void main(String[] args) {Properties prop new Properties();// 指定broker地址prop.put(&q…

Qt教程 — 1.1 Linux下安装Qt

目录 1 下载Qt 1.1 官方下载 1.2 百度网盘下载 1.3 Linux虚拟机终端下载 2 Qt安装 3 安装相关依赖 4 测试安装 1 下载Qt 1.1 官方下载 通过官网下载对应版本,本文选择的版本为qt-opensource-linux-x64-5.12.12,Qt官方下载链接:htt…

微信小程序(一)

WebView app.是全局配置&#xff0c;app.json是全局配置文件&#xff0c;在页面的.json配置文件中的配置会覆盖我们全局的配置 快捷键&#xff1a; .box 敲回车 ----- <view class"box"></view> .row*8 敲回车&#xff1a; .row{$}*8 敲回车 案例1&…

自然语言处理(NLP)—— 语义关系提取

语义关系是指名词或名词短语之间的联系。这些关系可以是表面形式&#xff08;名词性实体&#xff09;之间的联系&#xff0c;也可以是知识工程中概念之间的联系。在自然语言处理&#xff08;NLP&#xff09;和文本挖掘领域&#xff0c;识别和理解这些语义关系对于信息提取、知识…

力扣每日一题 在受污染的二叉树中查找元素 哈希 DFS 二进制

Problem: 1261. 在受污染的二叉树中查找元素 思路 &#x1f468;‍&#x1f3eb; 灵神题解 &#x1f496; 二进制 时间复杂度&#xff1a;初始化为 O ( 1 ) O(1) O(1)&#xff1b;find 为 O ( m i n ( h , l o g 2 t a r g e t ) O(min(h,log_2target) O(min(h,log2​targ…

数字孪生与智慧城市:实现城市治理现代化的新路径

随着信息技术的迅猛发展&#xff0c;智慧城市已成为城市发展的必然趋势。数字孪生技术作为智慧城市建设的重要支撑&#xff0c;以其独特的优势为城市治理现代化提供了新的路径。本文将探讨数字孪生技术在智慧城市中的应用&#xff0c;以及如何实现城市治理的现代化。 一、数字…

Python 导入Excel三维坐标数据 生成三维曲面地形图(体) 5-3、线条平滑曲面且可通过面观察柱体变化(三)

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…

C#,红黑树(Red-Black Tree)的构造,插入、删除及修复、查找的算法与源代码

1 红黑树(Red-Black Tree) 如果二叉搜索树满足以下红黑属性,则它是红黑树: 每个节点不是红色就是黑色。根是黑色的。每片叶子(无)都是黑色的。如果一个节点是红色的,那么它的两个子节点都是黑色的。对于每个节点,从节点到后代叶的所有路径都包含相同数量的黑色节点。红…

机密计算:为云数据提供强大的安全性

在人工智能应用中&#xff0c;数据隐私是一个重要关注问题。在AI模型训练过程中&#xff0c;特别是在联邦学习等分布式学习场景中&#xff0c;云数据可能分布在不同的地方&#xff0c;包括用户设备、边缘服务器和云服务。机密计算是为人工智能开发中的安全和隐私保护提供基础的…

使用endnote插入引用文献导致word英文和数字变成符号的解决方案

使用endnote插入引用文献导致word英文和数字变成符号的解决方案 如图使用endnote插入引用文献导致word英文和数字变成符号字体Wingdings Wingdings 是一个符号字体系列&#xff0c;它将许多字母渲染成各式各样的符号&#xff0c;用途十分广泛。 **解决方法&#xff1a;**直接通…

Linux基础学习:常用命令

目录结构及其常用命令 处理目录的常用命令&#xff1a; ls &#xff1a;列出目录及文件名cd&#xff1a;切换目录pwd&#xff1a;显示目前的目录mkdir&#xff1a;创建一个新的目录rmdir&#xff1a;删除一个空的目录cp&#xff1a;复制文件或目录rm&#xff1a;删除文件或目录…

【3GPP】【核心网】【5G】NG接口介绍(超详细)

目录 1. NG接口定义 2. 接口原则和功能 3. NG 接口控制面 5. NG接口主要信令流程 6. NG SETUP过程 1. NG接口定义 NG接口指无线接入网与5G核心网之间的接口。在5G SA网络中&#xff0c;gNB之间通过Xn接口进行连接,gNB与5GC之间通过NG接口进行连接。NG接口分为NG-C接口和NG…

CVE-2023-38836 BoidCMSv.2.0.0 后台文件上传漏洞

漏洞简介 BoidCMS是一个免费的开源平面文件 CMS&#xff0c;用于构建简单的网站和博客&#xff0c;使用 PHP 开发并使用 JSON 作为数据库。它的安装无需配置或安装任何关系数据库&#xff08;如 MySQL&#xff09;。您只需要一个支持PHP 的Web服务器。在 BoidCMS v.2.0.0 中存…

【LLM知识】笔记

为什么现在的LLM以decoder-only为主 为什么现在的LLM都是Decoder only的架构&#xff1f; 回答一 回答二 encoder-decoder 常用于处理需要对输入和输出建立精确的映射关系的任务&#xff08;机器翻译、文本摘要等&#xff09;&#xff0c;更具有专业性优势 输入的语义理解会…

c#简易学生管理系统

https://pan.baidu.com/s/1kCPvWg8P5hvlf26nGf2vxg?pwdya45 ya45

Linux运维:磁盘分区与挂载详解

Linux运维&#xff1a;磁盘分区与挂载详解 1、磁盘分区的原理2、查看系统中所有的磁盘设备及其分区信息3、进行磁盘分区&#xff08;对于sdb新磁盘&#xff09;4、格式化分区5、挂载分区&#xff08;临时挂载、永久挂载&#xff09;6、取消挂载分区7、删除分区 &#x1f496;Th…

立式学习灯有什么讲究?大路灯原来要这样选,五大台灯分享!

立式学习灯作为近年来最适合照明的护眼家电&#xff0c;为用户提供了良好的光线环境&#xff0c;并且还能够减少光线带来的视觉疲劳感。然而&#xff0c;随着其销量的节节攀升商家为了谋取利润&#xff0c;市面上也涌现了很多劣质产品&#xff0c;这些产品普遍没有经过技术调教…

【AnaConda/MiniConda/Linux】使用sudo python或切换root管理员conda环境被绕过解决方案

写在前面 部分机型修改环境变量存在风险&#xff0c;可能用于被覆盖而出现大量命令无法找到的情况 可以输入这个解决 export PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin往期相关内容 探索Miniconda3&#xff1a;简单、灵活的Python环境和…

刷题日记——16进制不进位加法(厦门大学机试)

例题 分析 输入 本题解题关键在于输入的两个数位数不同时候需要尾数对齐&#xff0c;由于是16进制输入&#xff0c;含有字母&#xff0c;需要当作字符串输入&#xff0c;当然输出也要字母&#xff0c;那么就需要我们的两个老伙计了&#xff0c;一个是map&#xff0c;另一个是…