参考代码:RCLane
1. 概述
介绍:在这篇文章中介绍了一种新的车道线描述范式(基于点的车道线建模),也就是通过关键点(文章对应称之为relay points)和关键点之间的关系场构建推理出车道线。具体为文章通过segformer实现车道线二值分割得到分割结果 S S S,并同时通过不同的head预测 T T T(transfer map,用于确定临近点位置)和 D D D(distance map,用于确定终止点),之后在 S S S上做point-nms实现车道线上点的确立,以这些点为起点结合 D D D和 T T T推理出整条车道线。按照这样的思想该算法具有较强的车道线结构适应能力,如分离汇入、弯道场景也能很好建模,目前就公开数据集性能已经超过之前的condlanenet了,还是值得期待完整开源的。
2. 方法设计
2.1 整体pipeline
文章的整体结构见下图所示:
这篇文章是以segformer作为benchmark,并在其基础上添加两个head,分别实现 D D D(distance map)和 T T T(transfer map)预测工作,也就是对应图中左边半边部分。需要注意的是 T T T和 D D D预测的都是双向的,这样可以从任意的一个点上进行推理得到整条线。对于推理的起点这里是通过对车道线二值分割结果进行point-nms选择实现的,最后对所有推理出来的线进做IoU-NMS操作得到最终输出结果。因而这篇文章的算法后处理是相对较重的。
2.2 distance map和transfer map的表示
对于这两个map的描述可见下图中的(a)图:
其中 T ˉ f ( p i ) , T ˉ b ( p i ) \bar{T}_f(p_i),\bar{T}_b(p_i) Tˉf(pi),Tˉb(pi)表示的是当前点 p i p_i pi(车道线二值mask上的每一个点)到相邻两个点的affine filed(也就是分别对应的forward和backward方向), D ˉ f ( p i ) , D ˉ b ( p i ) \bar{D}_f(p_i),\bar{D}_b(p_i) Dˉf(pi),Dˉb(pi)表示的是当前点 p i p_i pi分别到端点的距离。
distance map:
该图描述的是车道线上点到两个端点的距离关系,这里依据车道线点的y坐标划分forward还是backward,具体为最小y坐标值(对应坐标点 p e n d f = ( x e n d f , y e n d f ) p_{end}^f=(x_{end}^f,y_{end}^f) pendf=(xendf,yendf))和最大y坐标值(对应坐标点 p e n d b = ( x e n d b , y e n d b ) p_{end}^b=(x_{end}^b,y_{end}^b) pendb=(xendb,yendb))。那么当前点 p i p_i pi对应的distance map标注可以描述为:
D ˉ f ( p i ) = ( x i − x e n d f ) 2 + ( y i − y e n d f ) 2 \bar{D}_f(p_i)=\sqrt{(x_i-x_{end