车道线检测算法Ultra Fast Structure aware Deep Lane Detection论文学习

1. 介绍

论文“Ultra Fast Structure aware Deep Lane Detection”发表于2020年8月,该论文提出了一种新颖、高效的车道线检测算法,旨在极大地提高检测效率(320 FPS with 1080 TI)以及克服极端场景(遮挡和过曝等因素导致的no visual clue)。
简单来说,作者将输入图片划分为若干行(利用神经网络提取全局特征,并不是粗暴切割),并在每一行定位车道线,最终得到整幅图的车道线位置。另外,该算法还根据车道线连续、多为直线的特点设计了一个结构化的损失函数。以上两点是该算法的主要创新。
在这里插入图片描述

2. 设计思想

作者用一句话概括该算法的设计:“row-based selecting method based on global image features”。如下图所示:图b是一般语义分割的设计模式。简单来说,对输入图像做一系列卷积后输出一个尺寸为W × H × C+1(图片宽、高、分类数)的特征矩阵,然后逐像素分类。
在这里插入图片描述
在这里插入图片描述
图a是该算法的设计模式:利用神经网络输出一个w+1 × h × C的特征图,可以简单的理解为:将原图划分为h行,每行再划分为w+1个网格,然后在每一行中选择一个格子作为车道线的一个点,将所有行累积起来就可以得到一条车道线,每层C预测一条车道线。
如上图橙色部分所示:Pi,j,:是一个(w+1)维的向量,代表第i条车道线在第j行的预测结果:哪个数值最大,其索引即为车道线位置,若最后一个最大,则该车道线在此行不存在。假设Ti,j,:为one-hot编码的真值,那么分类的损失函数可以表示为:
在这里插入图片描述

2.1 为什么快?

如上图所示,h << H 、w << W ,自然计算量要小很多。根据作者推算,该算法和一般的语义分割相比,计算量分别为1.7 × 104、1.15 × 106.

2.2 如何处理遮挡(no-visual-clue)

遮挡的地方没有车道线信息,所以必须利用其它区域信息进行预测,作者通过全局特征和结构化的损失函数来达到目的。全局特征包括车道形状、其它车道线甚至车头朝向,但是作者并没有说是怎么提取到这些信息的,个人认为这是作者想当然(神经网络解释性差的问题)。不过作者对结构化损失函数给出了比较合理的解释,简单来说在损失函数中体现出车道线的一些特点,后面会详细介绍。

3. 结构化损失函数

除了上面讲的分类函数,作者还应用了两个结构化损失函数,这里的结构指的就是车道线的特有结构:continuous and straight。

3.1 continuous

由于车道线甚至道路是连续的,所以Pi,j,:和Pi,j+1,:应该是相似的,所以有了如下损失函数:
在这里插入图片描述

3.2 straight

车道线多为直线,哪怕有一定的弯曲,在一个较小的范围以内(例如1米)也可以算作是直线。
首先我们要找到车道线在每一行的位置,最简单的办法是对Pi,j,:取最大值,但是这个函数是不可导的,作者用了一个很巧妙的方式:先用sofamax函数求出(1-w)每个点的概率,然后求索引的期望,把这个期望看做车道线的位置:
在这里插入图片描述在这里插入图片描述

注意,现在利用的是车道线的特点,没必要考虑没有车道线的情况,所以每行的索引范围在(1-w)。
这样我们就得到了车道线在每行的位置(一个1-w的值),如何将其表示为一条直线?作者的做法是使其二阶差分为0:
在这里插入图片描述

结构化损失如下:
在这里插入图片描述

最后,作者在训练阶段还加入了分割分支,所以还有分割部分的损失。这个思路也有点新奇,作为辅助分支,在预测阶段弃用,更能节省侠侣。完整的损失函数如下,α 和 β应该是作为超参数根据实际情况调整。
在这里插入图片描述

4. 网络结构

在这里插入图片描述

作者就给了一张图,几乎没有讲网络结构,从代码来看,该网络确实和上图展示的一样比较简单,没有很特殊的结构:

  • Res blocks部分为torch官方的resnet模型。
  • 在下方的Main branch中resnet的输出直接碾平(view),然后做两次全连接,最后再reshape(view)到预设的尺寸(代码中是201×18×4,对应w+1×h×C),最后在这张特征图上预测上文提到的P。
  • 在训练阶段增加了上方的Auxiliary branch,三个尺度的Res blocks叠加,然后卷积输出原图尺寸做像素级分割

总的来说,该算法并没有很复杂的网络结构,直观上看参数确实很少,resnet-18对应的模型仅173MB,在1080 TI上能达到320FPS。之所以能够取得这样的效果,要归功于逐行检测结合结构化损失的设计。
附:符号说明CuLane和Tusimple数据集对比
在这里插入图片描述

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要复现"ultra fast structure-aware deep lane detection"代码,首先需要了解该算法的原理和网络结构。该算法是一种深度学习方法,用于车道线检测。其核心思想是结合结构感知机制和快速推理策略,以实现高效、准确的车道线检测。 为了复现该算法,需要完成以下步骤: 1. 数据集准备:收集车道线数据集并进行相应的标注。可以使用公开数据集,如CULane或TuSimple等,或者自己采集数据集。数据集应包含车道线图像以及对应的标注信息。 2. 网络结构构建:根据论文中提到的网络结构,构建模型。根据论文中的说明,可以选择使用FCN、UNet等结构。确保灵活地调整网络的深度和宽度,以适应不同的数据集和性能要求。 3. 损失函数定义:根据论文中的介绍,选择适当的损失函数,如二分类交叉熵损失函数等,以最小化预测标注和真实标注之间的差异。 4. 数据预处理:对输入图像进行预处理,如图像归一化、resize等,以适应网络的输入要求。 5. 模型训练:使用准备好的数据集和网络结构,进行模型的训练。设置合适的超参数,如学习率、批大小等。通过迭代优化网络参数,使模型逐渐学习到车道线的特征。 6. 模型评估:使用测试集对模型进行评估,计算准确率、召回率、F1得分等指标,以评估模型的性能。 7. 代码测试:使用测试集对复现的代码进行测试,观察模型的预测结果。可进行可视化展示,比较模型的预测结果与真实标注的差距。 8. 优化和改进:根据测试结果和需要,对网络结构、超参数等进行调整和优化,进一步提升模型性能。 通过以上步骤,就可以较为全面地复现"ultra fast structure-aware deep lane detection"代码,从而实现高效、准确的车道线检测算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值