热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《RethinkingEfficientLaneDetectionviaCurveModeling》论文笔记

参考代码:pytorch-auto-drive1.概述介绍:在这篇文章中对车道线建模表示进行了讨论和分析,文中指出现有的车道线检测方法大

参考代码:pytorch-auto-drive

1. 概述

介绍:在这篇文章中对车道线建模表示进行了讨论和分析,文中指出现有的车道线检测方法大体为:segmentation-based、key_points-based、polynomial-based,当然还有一些其它类型的车道线建模表述方法。在此基础上依靠文章对车道线使用曲线描述函数对车道线进行建模,这样就省去了很多特征解码的相关问题,只需要网络去预测对应曲线的参数就行了。但是在polynomial-based方法中其多项式回归对网络来讲是较难,导致的结果就是其性能相比前面提到的两种类型有较大的差距。对此文章借鉴贝塞尔曲线的描述方式,通过预测3阶贝塞尔曲线描述车道线(通过少量的控制点便可实现曲线描述),并且对特征图进行水平折半反转加可变形卷积的方式实现特征融合和表达能力提升(是来源于场景中车道线相对车中轴是对称分布的)。

上述提到的4中对与车道线的描述见下图所示:
在这里插入图片描述
这里文章的车道线是通过预测贝塞尔曲线控制点的方式实现的,然后对应文章的代码实现发现其在对应数据集下车道线的数量是固定的,那么对于自动驾驶场景车道变化复杂的情况,其适应性可能会存在一些问题,这里表示存疑。

PS:关于贝塞尔曲线的相关原理基础可以参考如下资料:
贝塞尔曲线原理(简单阐述)

2. 方法设计

2.1 网络pipeline

文章的整体pipeline见下图所示:
在这里插入图片描述
在上图中可以看到其包含了文章所提出的两个创新点:feature flip特征融合与贝塞尔曲线拟合头。

2.2 Feature Flip

这部分是用于特征图感知能力增广的,其是对特征图进行水平折半翻转,之后通过可变形卷积实现特征的增强表达,其网络结构见下图所示:
在这里插入图片描述
该网络结构的思想是来自于对下图中实际数据的观察,其思想是通过对称原理弥补左右图像区域车道线不明显而导致的检测问题。个人感觉这样的假设先验有一定的道理但是其假设性比较强。
在这里插入图片描述

2.3 贝塞尔曲线拟合

曲线的描述:
贝塞尔曲线是控制点和偏置项决定的,则一条曲线可以被描述为:
B=∑i=0nbi,n(t)Pi,0≤t≤1\mathcal{B}=\sum_{i=0}^nb_{i,n}(t)\mathcal{P}_i,0\le t \le1B=i=0nbi,n(t)Pi,0t1
其中,生成曲线上每一个点的偏移项在阶数nnn(文章中将其设置为3)下的描述为:
bi,n=Cniti(1−t)n−i,i=0,…,nb_{i,n}=C_n^it^i(1-t)^{n-i},i=0,\dots,nbi,n=Cniti(1t)ni,i=0,,n

贝塞尔曲线GT生成:
在原始的标注文件中给出的是描述车道线的点坐标,因而需要将这些数据转换到由贝塞尔曲线控制的参数下表达,对此文章是通过最小二乘法的方式计算白塞尔线的GT。

曲线回归匹配与损失函数:
在之前的一些工作中通过L1损失函数的形式去监督贝塞尔曲线的控制点,如下图的(a)图所示,但是这样的结果是由控制点生成的曲线效果并不与实际曲线贴合效果直接关联。对此文章参考polynomial-based中的策略(图c),通过sample采样(文中取采样点为100)的方式去计算曲线的贴合程度。
在这里插入图片描述
那么对于文章中提到的曲线采样点匹配策略是通过枚举的形式得到的,其描述为:
π^=arg max⁡π∈∏GN∑iGQi,π(i)\hat{\pi}=\argmax_{\pi\in\prod_G^N}\sum_i^GQ_{i,\pi}(i)π^=πGNargmaxiGQi,π(i)
其中,N,GN,GN,G代表的是采样的点集和GT点集,π(i)\pi(i)π(i)代表的是第iii车道线。那么匹配的度量是:
Qi,π(i)=(p^π(i))1−α⋅(1−L1(bi,b^π(i)))αQ_{i,\pi}(i)=(\hat{p}_{\pi(i)})^{1-\alpha}\cdot(1-L_1(b_i,\hat{b}_{\pi(i)}))^\alphaQi,π(i)=(p^π(i))1α(1L1(bi,b^π(i)))α
其中,p^π(i)\hat{p}_{\pi(i)}p^π(i)代表的是第iii车道线的分类概率,且α=0.8\alpha=0.8α=0.8L1(bi,b^π(i))L_1(b_i,\hat{b}_{\pi(i)})L1(bi,b^π(i))代表的是对应采样点的差异,可参考上图b中的关联虚线。

损失函数:
首先,对于贝塞尔曲线的整体约束是使用L1的形式:
Lreg=1n∑t∈T∣∣B(f(t))−B^(f(t))∣∣1L_{reg}=\frac{1}{n}\sum_{t\in T}||\mathcal{B}(f(t))-\hat{\mathcal{B}}(f(t))||_1Lreg=n1tTB(f(t))B^(f(t))1
对于车道线的分类使用的是加权的二值交叉熵的形式,此外还添加车道线二值分割损失,则整体的损失函数描述为:
L=λ1Lreg+λ2Lcls+λ3LsegL=\lambda_1L_{reg}+\lambda_2L_{cls}+\lambda_3L_{seg}L=λ1Lreg+λ2Lcls+λ3Lseg
其中,λ1=1,λ2=0.1,λ3=0.75\lambda_1=1,\lambda_2=0.1,\lambda_3=0.75λ1=1,λ2=0.1,λ3=0.75

2.4 消融实验

上述2.3节中各分量对整体性能的影响:
在这里插入图片描述

3. 实验结果

CULane数据集性能比较:
在这里插入图片描述


推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 本文介绍了协程的概念和意义,以及使用greenlet、yield、asyncio、async/await等技术实现协程编程的方法。同时还介绍了事件循环的作用和使用方法,以及如何使用await关键字和Task对象来实现异步编程。最后还提供了一些快速上手的示例代码。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
author-avatar
maylo1978
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有