Ultra Fast Deep Lane Detection with HybridAnchor Driven Ordinal Classification【车道线检测论文个人解读】

论文地址:https://arxiv.org/abs/2206.07389

代码:https://github.com/cfzd/Ultra-Fast-Lane-Detection-v2

1.文章要解决的问题:如何处理遮挡和极端光照下的场景是车道线检测任务中的难点。

2.提出方法:

        ·基于anchor-driven算法来表示车道线,可以解决有效性问题

                row anchors:来表示ego lanes【在side laned表现不好】

                column anchors:来表示side lanes【在ego lande表现不好】

                hybird anchors(扩展的基于anchors的方法):混合row anchors和column anchors进行检测--解决放大误差问题

        ·基于分类方法学习车道线坐标,可以获得与输入一样大的感受野,缓解遮挡问题。

        ·两个loss:分类loss,数学期望loss

3.row-anchor:行锚点是预定义的稀疏行位置,可以用row-anchor上的坐标来表示车道线(以基于分类的方式)。


目录

 1 介绍

2 相关工作

2.1采用自下向上的车道线检测模型

2.2采用自顶向下的车道线检测模型

3 超快车道线检测

3.1 采用anchors表示车道线

3.2 anchor-driven 网络设计

3.3 有序分类loss(训练部分)

3.4 网络推理

3.5 分析与讨论


 1 介绍

        车道线检测是自动驾驶与ADAS任务中基本内容,主要就是检测道路中车道线以及位置。虽然基于深度学习方面已经取得了很大的成功,但仍然存在很多问题以及挑战。

        首先第一个问题就是有效性,在实际的基于计算机视觉的车道线检测算法中,大多数的方法是基于图像分割,这样的方法就是检测慢!

        除了效率问题,另一个就是no-visual-clue(非视觉线索),如图1中的车道线检测任务,图中说明了展示了不同的车道线检测任务,车道线的遮挡以及光照等都会是挑战。车道线检测的目的就是无论车道线是否遮挡,都是为了识别车道线的位置【这就是要解决的问题】

        因此如何处理遮挡和极端光照下的场景是车道线检测任务中的一个难点。

        为了解决这一问题,一些额外的线索将被引入,比如路的形状、车头朝向、车道线没有被遮挡的端点等等都是可以被检测的。而为了可以使用上面说到的这样线索(实际就是信息),方法可以是扩大感受野以利用更多信息【因为你感受野越大,那么你能捕捉到的信息也就更多】。

        这也带来了一个问题:我们能否在车道线检测任务中快速找到具有大感受野的全局信息。所以作者提出了稀疏的自上而下(top-down)算法去处理效率以及非视觉线索(no-visual-clue)的问题。

        首先文本提出了一个row-anchor-driven的方法来表示车道线【就是一个基于anchor的方法】。车道线可以由一系列预定义行锚上的坐标表示(predefined row anchors)【注:就和yolo一样采用一些预先设定好的anchors】,如图3,该图展示了row anchor系统,row achors是预先设定的稀疏行位置(row locations),用row anchors坐标来表示车道线。当车道线可以用一些关键点所表示时,有效性问题也就解决了。

        第二,我们提出了基于分类方式学习车道线坐标,该方法可以获得与输入一样大的感受野,并可以缓解no-visual-clue的问题【遮挡问题】。

        另外,本文扩展了车道线检测方法,方法为row-achors扩展到hybird anchor(混合anchor)系统。如图2a,2b,根据观察发现,采用row anchors方法并不能很好的适用于所有种类的车道检测中,side lanes的定位准确率就要比ego langes的低一些【图2的a是在CULane数据集中各车道种类的定义,在row anchor中ego lane种类表现好,而在图c的column anchor中side表现较好】文中将这种现象称为“放大定位误差问题(放大定位误差问题)”。而这种问题会使得row achors难以识别水平车道(side lanes),column anchor难以定位垂直车道(ego lanes)。因此提出hybrid achors【就是将row和column混合】,特别的使用row anchors识别ego lanes,用column anchors识别side lanes

         为了可以应对全局信息的预测,本文提出了基于分类方式的车道线坐标学习。不同类别表示不同的坐标。本文中进一步将原始分类转化为有序分类,相邻分类中,相邻类别之间相近的并且有关系的,这是与原始分类不同的。比如在ImageNet中第7类(黄貂鱼)与第8类公鸡(这两个类就没有关系)。而本文的classes是排序好的,比如第8类车道坐标在空间上总是位于第7类车道坐标的右侧。类的空间是连续的,例如,像第7.5类这样的非整数类是有意义的,并且它可以被视为第7和第8类之间的中间类。为了提出有序分类,本文提出了两个loss函数对类别间的关系进行建模,这两个loss为分类loss数学期望loss。使用有序分类的关系性和空间的连续性,我们可以采用数学期望替换预测结果中连续类别的最大值

        文章贡献:

        1)提出了一种基于anchor的检测车道线的方法,车道线的坐标可以用基于分类的形式学习。

        2)提出hybird achor方法(row 和column),降低最大误差问题。基于车道线顺序关系,使用ordianl classification方法

        3)本文算法在速度和性能上达到sota,本文最快模型可以达到300+ FPS。

2 相关工作

第二章就不在分析,这里无非就是综述一下研究现状

2.1采用自下向上的车道线检测模型

2.2采用自顶向下的车道线检测模型

3 超快车道线检测

        这一部分作者主要是讨论实现的一些细节。首先是证明所提出的混合锚系统(hybrid anchor system)车道的坐标表示,然后是展示了我们所设计的深度网络框架和相应的顺序分类loss。最后,阐述了复杂性分析。

3.1 采用anchors表示车道线

        为了可以表示车道线,在图3中我们介绍了一种row anchor。车道线在row anchor中将用点表示【我这里的理解就是和yolo一样,将特征图划分很多网格,每个网格内设置anchor,只不过这个是采用的行anchor,一行是一个anchor,每个cell内用point表示有车道线】。但row anchor可能会带来放大位置误差问题,可以看图2【这个在第一章内有说到过】,而具体带来这种误差问题的原因可以看图5。因此提出了一种扩展的row anchor系统,叫hybird anchor

【图5说明了扩大位置误差问题。蓝色区域表示没有anchor系统的理想位置误差带,紫色区别表示通过anchor系统产生的扩大误差带。可以看到当车道线与anchors直接的夹角越小的时候,位置误差将会变大,因为夹角接近为0.同理这情况也会发生在column anchors中】 

hybird anchors,针对不同的车道线,使用不同的anchors 系统【row 或者column】来减少放大位置误差。规则如下:

                                一条车道只能分配一种锚点这就像yolo中某个目标分配一种anchor】,并选择该车道更垂直的锚点类型这就也像yolo中anchor和目标匹配的问题,可以匹配上称为ground truth,这里的更垂直是想更接近于图五中的理想位置误差ε】。实际上,像CULane和TuSimple数据集仅仅标注了两个ego lane和两个side lane。用row anchors来表示ego lanes,用column anchors来表示side anchors,放大位置误差用hybrid anchor解决。

        使用混合锚系统,我们可以将车道表示为锚上的一系列坐标,如图4.row anchor表示ego lanes,column anchor表示side lanes,混合anchors则可以由图4右边4个矩阵对应4个车道线。

图4的蓝线、紫线为ego lane,y1~yn是row anchor上对应的y轴坐标,n是row anchor的数量,那么车道线在每行anchor上的坐标也就能表示为右边的矩阵,同理column也是一样(缺少的位置用-1表示,意思就是没有left side lane)

 然后我们计算车道和每个anchor之间的线-线交叉点(这些交叉点就是车道在anchor上的坐标了),车道在图像中可以被固定尺寸的目标T来表示,这个T就是上面说的坐标矩阵(这个矩阵T内的每个元素就是坐标),长度为N_{row}\times N_{r}^{lane}+N_{col}\times N_{c}^{lane}.T又可以被分为两个部分,T^{r}T^{c}分别代表row anchor和column anchor。

3.2 anchor-driven 网络设计

        借助hybird anchor表示车道,我们设计了的网络通过分类去学习固定尺寸目标T^{r}T^{c},为了分类学习T^{r}T^{c},我们将T^{r}T^{c}中的不同坐标映射到不同的类别【也就是每个类分别对应相应的坐标】。假设T^{r}T^{c}是标准的(0~1或为-1),类的数量分别为N_{dim}^{r}N_{dim}^{c}。那么映射关系为:

 式子中的T_{cls}^{r}T_{cls}^{c}表示为坐标类label的映射【我这里的理解是:row anchor中的目标T,i,j表示T_{cls}^{r}中的第i行第j列为什么类以及坐标信息,和yolo中的标签匹配有些类似】。我们可以将混合锚点(hybrid anchor)上的坐标学习(learning of coordinate)转换为两个维度分别为N_{dim}^{r}N_{dim}^{c}分类问题。针对没有车道线的情况,也就是T为-1的时候,我们使用附加的分类来表示:

T_{ext}^{r}是坐标存在时的类标签 【可以看出当Tr不为-1也就是存在lane的时候为1否则为0,这里的i表示行,j表示列数=分配给row anchor车道数N_{lane}^{r}】同理column anchor也是一样的。

 T_{ext}^{r}T_{ext}^{c}有两个分支即位置(localization)和存在(existence)分支。此时假设深层特征为X,那么网络可以写为下式:

        P是localization,E是existence,f是分类器,flatten就是平铺操作【就是我们分类网络最后需要将特征x平铺的操作,然后再进行分类】 。输出的P和E均包含两个部分(P^{r},P^{c};E^{r},E^{c})。P^{r}P^{c}

的size为N_{lane}^{r}\times N_{row}\times N_{dim}^{r}N_{lane}^{c}\times N_{col}\times N_{dim}^{c},其中N_{dim}^{r}N_{dim}^{c}是行和列锚点的映射分类维度【我认为就是说最终分多少个类】 。E^{r}E^{c}的维度均为N_{lane}^{r}\times N_{row}\times 2N_{lane}^{c}\times N_{col}\times 2这里最后的维度是2,我认为就是目标存在或者不存在】。这里作者给出了为什么4式中采用平铺操作进行分类,而不是采用卷积网络中的全局平均池化,这是因为作者发现在基于分类车道线检测网络中空间信息是非常重要的,而如果采用全局平均池化会限制这部分信息,表现不好。

3.3 有序分类loss(训练部分)

        正如我们在等式1中看到的,一个基本性质是上述分类网络中的类具有顺序关系。在我们的分类网络中,相邻类定义为具有紧密的有序关系

        1.基于分类loss定义如下:

         可以看到分类loss有两个部分,均采用的交叉熵(通常分类问题采用交叉熵较多,可以度量两个数据分布的关系或者是距离),第一部分i表示分配给row anchor第i个lane,j表示就表示行(row anchor)的数量,则P_{i,j}^{r}可以表示为row anchor中预测的第i个lane,在第j行的预测值与真实值T的交叉熵,同理后面一部分是column anchor的。

        预测的期望值可以被视为平均投票结果。为了方便起见,我们将期望表示为:

 式中的N_{dim}^{r}是行锚点的映射分类维度,Prob是经过softmax产生的概率值,也就是得出row中每个lane的概率.[·] 是索引操作.

         2.期望loss定义为:

                

        L1为平滑L1,也是分两部分,前面是计算row anchor预测的期望和真实值的距离,后面是column anchor的。图7是期望loss示意图,我们可以看到,期望损失可以将预测分布的数学期望推向ground truth位置,从而有利于车道的定位(最后一个图的红色曲线就是把预测分布推向ground truth,什么叫推向呢,就是平常求loss的时候让预测值更接近真实值,也就是让loss更小,这里的的预测值是概率值,GT是onehot的形式)。

 此外,existence分支L_{ext}被定义为:

总的Loss为:

总的loss=分类loss+期望loss+ext_loss

分类loss:就是解决分类问题,可以获得每个车道位置概率问题

期望loss:预测的数据分布更接近与真实的数据分布,这样可以获得具体车道的位置

existence loss:感觉和前面分类作用有些像,而且应该也是可以加快收敛速度。

        

3.4 网络推理

        这一部分主要是介绍如何在整个推理阶段获取检测结果。以row anchor为例,假设P_{i,j}^{r}(预测值)和E_{i,j}^{r}(有无目标存在)是被第j个anchor预测的第i个车道,前者P的输出长度为N_{dim}^{r}后者E为2(有无目标)。车道每个位置的概率可以写成::

       

然后利用预测分布的数学期望值获得车道的位置。此外,将根据existence分支的预测过滤掉对缺失车道(就是没有该类型车道)的预测:

将最终获得的Loc调整到输入图像上,图6展示了网络结构。

这个有两个分支,上面提到过。首先是通过backbone进行特征提取得到特征X,然后经过分类器f进行分类,此时出现两个分支也就是上面的4式):

                                        分支1(E):以row为例shape为N_{lane}^{r}\times N_{row}\times 2,可以理解为有N_{lane}^{r}个目标,每个目标又有N_{row}行,每行又有两列第一列式表示没有目标,第二列为有目标存在,这就有些像yolo中obj_mask和noobj_mask,这样我们知道预测的哪个类在哪个anchor中有没有目标了

                                        分支2(P):以row为例shape为N_{lane}^{r}\times N_{row}\times N_{dim}^{r},表示位置预测的分支,在N_{dim}^{r}这个维度上可以反映坐标问题。取出每个lane的预测结果先进行softmax获得位置概率,然后用式12求数学期望,在将输出的xi进行缩放到原图(就得到了每个Lane的位置概率),在等式12中过滤掉不存在的车道【应该是和E中的mask相乘就可以】】

3.5 分析与讨论

        在本节中,我们首先分析了我们方法的复杂性,并给出了我们的方法能够实现超快速度的原因。为了分析复杂性,我们使用分割作为基线。我们的公式(以行锚为例)和分割之间的差异如图8所示。在基于anchor的车道线检测中,下面的蓝色正方体就是通过backbone得到的特征X,然后在通道维度C上划分cell,这里的C维度应该就等于类的数量,所以可以得到Lane1,lan2...,而这里特征层的h应该是等于row anchor的行数的,每个cell内如果有目标就可以知道这是哪种lane,也可以知道他具体位置(坐标),特征X的宽度为w+1(最后一个维度应该是表示是否有目标),而图像分割是像素级别上分类,通道维度是C+1(通常含一个背景类).

猜你喜欢

转载自blog.csdn.net/z240626191s/article/details/128562700