ECCV2020 | 300+FPS!超快的结构感知车道检测新网络

2024-06-21 08:32

本文主要是介绍ECCV2020 | 300+FPS!超快的结构感知车道检测新网络,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方蓝字,获得更多精彩内容

精彩内容

浙大提出:超快速结构感知的车道线检测网络 ,在速度和准确性方面综合表现出色!
轻量级版本速度高达300+ FPS!
论文链接:
https://arxiv.org/abs/2004.11757
代码刚开源:
https://github.com/cfzd/Ultra-Fast-Lane-Detection
作者团队:浙江大学(李玺团队)

1

摘要


从上图可以看出,车道线检测要面临很多的难题,比如车辆的遮挡、各种复杂光线的影响,甚至有时候根本看不到车道线。

车道线检测方法通常被视为像素分割的问题。受人类感知的启发,在严重遮挡和极端光照条件下对车道线的识别主要基于上下文和全局信息。基于这种观察,本文提出了一种新颖,简单而有效的方法,我们将车道线检测过程视为使用全局特征的基于行(row-based)的选择问题,使用全局特征在图像的预定义行中选择车道的位置,而不是基于局部接受域分割车道的每个像素,这大大降低了计算成本。在全局特征上使用较大的感受野,还可以处理具有挑战性的场景。

此外,基于该公式,还提出了结构损失,以对通道结构进行显式建模。在两个车道线检测基准数据集上的大量实验表明,这种方法可以在速度和准确性方面达到最先进的性能。轻量级版本甚至可以以相同的分辨率每秒获得300+帧,这至少比以前的最新方法快4倍。

2

创新及贡献


本文的主要贡献是提出一个车道线识别的新公式,根据该公式有了以下几方面的贡献:

  • 提出了一种新颖、简单、有效的车道检测算法,该算法主要针对快速行驶和无视觉线索的问题。与深度分割方法相比,本文方法是选择车道的位置,而不是分割每个像素,并在不同的维度上工作,速度飞快。此外,使用全局特征进行预测,比分割公式具有更大的接受域。通过这种方式,没有视觉线索的问题也可以被广告掩盖。(参下图)

  • 在此基础上,提出了一种利用车道先验信息的结构损失。据知,这是首次尝试在深车道检测方法中明确优化这类信息。

  • 所提出的方法在具有挑战性的CU Lane数据集上,在准确性和速度方面都达到了最先进的性能。我们的方法的轻量级版本甚至可以达到300+ FPS,在相同的分辨率下,性能也相当,这至少比以前最先进的方法快4倍。

在右边的部分,详细显示了一行的选择。行锚是预定义的行位置,我们的公式定义为水平地选择每个行锚。在图像的右侧,引入了一个背景网格单元来表示该行中没有车道。

3

具体思路

3.1 车道检测新公式

本文提出将车道检测问题转化为基于全局图像特征的行选择方法。换句话说,是使用全局特性在每个预定义行上选择车道的正确位置。在本文构建的公式中,车道被描述为一系列位于预先定义的行上的水平位置,即,行锚。

为了表示位置,第一步是网格化。在每个行锚上,位置被划分为许多单元格。通过这种方式,车道的检测可以描述为在预定义的行锚上选择特定的单元格,如图3(a)所示。

假设最大车道数为C,行锚数为h,网格单元数为w,假设X为全局图像特征,fij为用于选择第i车道上车道位置的分类器,第j行锚。则车道预测可表示为:

假设Ti,j是正确位置的一个独热标签。则我们的公式优化为:

由式(1)可以看出,我们的方法是根据全局特征来预测每个行锚上所有位置的概率分布,然后根据概率分布来选择正确的位置。

  • 如何解决高速度的问题

通过图3可以看出,本文的公式比传统的分割要简单。

假设图像大小为H×W。一般来说,预定义的行锚和网格大小的数量远少于一个图像的大小,也就是说,h《h和w《w。这样,原始的分割需要进行h×w、 是C+1维的分类,而我们公式只需要解决C×h分类,是(w+1)维。通过这种方式,可以减少很大的计算规模,例如,使用的常见设置CULanedataset,理想的计算成本的方法是1.7×10^4的flops,一个用于分割的是9.2×10^5flops。计算成本大大降低,因此可以达到非常快的速度。

  • 如何解决无视觉线索的问题

从感受野的角度来看,本文公式具有整个图像的感受野,远远大于分割方法。背景信息和来自图像其他位置的信息可以用来解决无视觉线索的问题。从学习的角度来看,基于我们的公式,利用结构损失也可以学习到车道形状、方向等先验信息,参考3.2节。这样,无视觉线索的问题就可以在我们的公式中得到解决。

另一个显著的优点是,这种公式以基于行的方式对车道位置进行建模,使得有机会明确地建立不同行的关系。原有的由低水平的像素级建模和高水平的车道长线结构造成的语义鸿沟可以得到缓解。

3.2 车道线结构损失 structural-loss

第一个是由车道是连续的事实推导出来的,也就是说,相邻行锚的车道点应该相互靠近。在本文的公式中,车道的位置由一个分类向量表示。通过约束分类向量在相邻行锚上的分布来实现连续特性。这样,相似度损失函数可以为:

另一个结构损失函数关注车道的形状。为了考虑形状,需要计算每排锚上的车道位置。直观的想法是通过寻找最大响应峰,从分类预测中获得位置。在这项工作中,使用二阶差分方程来约束车道的形状,可以写成:

其中:

最终,整体结构损失可以表示为:

3.3 特征聚合 Feature aggregation

损失设计主要关注车道之间的相互关系。在本节中,我们提出了一种辅助的特征聚合方法,该方法主要关注全局上下文和局部特征的聚合。提出了一种利用多尺度特征对局部特征进行建模的辅助分割任务。这里使用交叉熵作为辅助分割损失。这样,我们方法的整体损失可以写成:

整个结构可以参考下图:

辅助分支显示在上半部分,只有在训练时才有效。特征提取器显示在蓝色框中。基于分类的预测和辅助分割任务分别显示在绿色和橙色框中。对每个行锚进行分组分类。

4

实验及结果

4.1 数据集

4.2 消融实验

分别使用25、50、100和200个单元格来分割图像,结果如下所示:

定位方法的有效性:

本文模型的有效性:

TUSimple数据集:

CULane数据集:

可视化效果:

请长按或扫描二维码关注本公众号

喜欢的话,请给我个在看吧

这篇关于ECCV2020 | 300+FPS!超快的结构感知车道检测新网络的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080716

相关文章

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon