参考代码:BeMapNet。PS:代码暂未放出,关注该仓库动态
动机和主要贡献
在MapTR系列的算法中将单个车道线建模为固定数量的有序点集(对应下图Evenly-based),这样的方式对于普通道路场景具备一定适应性。但是却存在对复杂道路建模能力不足,对简单道路建模冗余的问题,针对这样的问题解决思路便是网络依据车道线具体情况预测关键点(对应下图Pivot-based),也就是像下图这样使用关键点描述车道线元素:
为了使得网络能够依据具体场景动态输出车道线关键点数量,文章做了以下几个方面的工作:
- 1)对laneline的query做了修改,使用对每个关键点(point-query)采用学习的方式,这样可以使的点与点之间表达可以独立,这样更有利于这样动态点的表示
- 2)将lane-query和bev下的车道线分割建立关联,使得网络对车道线拓扑结构感知更清晰,同时收敛速度变快
- 3)对于关键点匹配提出一种代价最小化动态规划算法,加快匹配速度
方案流程与框图
从上图的框图可以看到算法分为如下几个部分:
- 1)BEV query构建BEV特征
- 2)按照点建模的方式构建车道线表达,并通过mlp获得车道线实例表征,之后通过矩阵乘法得到车道线分割结果,这样车道线具有了对位置和车道结构感知能力
- 3)使用提出的动态匹配算法建立预测和真值之间的关联,实现车道线预测
车道数据预处理
在数据预处理中,需要对车道线中的关键点进行抽取,如下图所示:
对这样的问题可以采用距离阈值类的方法实现,如Douglas-Peuker。
车道线实例化表达
在初始的时候使用一堆点的方式构建车道线query,它的维度是 Q m , n ∈ R M ∗ N ∗ C Q_{m,n}\in R^{M*N*C} Qm,n∈RM∗N∗C,其中 M , N M,N M,N分别代表车道实例数和车道线线上最大点数。注意由于每条车道线中关键点的位置是不一致的,则使用share方式构建的point-query会存在一定歧义(也就是文中说的Hierarchical Query),这种share方式构建的index-dependent,而对于动态预测车道线关键点则需要index-independent。它们两者的对车道线的建模方式对比见下图:
自然在文章算法所需要的场景下这两种建模方式的性能比较:
query确定之后,其经过几层全联接得到车道线的表达 I m ∈ R C I_m\in R^C Im∈RC,再与BEV特征 F b ∈ R C ∗ H ∗ W F_b\in R^{C*H*W} Fb∈RC∗H∗W做矩阵乘法得到分割结果 M m ∈ R H ∗ W \mathcal{M}_m\in R^{H*W} Mm∈RH∗W,也就是下图表述的过程:
这里涉及到分割损失:
L L A = L b c e ( M ^ l i n e , M l i n e ) + L d i c e ( M ^ l i n e , M l i n e ) \mathcal{L}_{LA}=L_{bce}(\hat{M}_{line}, M_{line})+L_{dice}(\hat{M}_{line}, M_{line}) LLA=L