参考代码: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=Lbce(M^line,Mline)+Ldice(M^line,Mline)
车道线回归
上述内容得到了车道线的实例表达,接下来就是预测得到车道线的回归值
S
^
=
{
v
^
n
}
n
=
1
N
\hat{S}=\{\hat{v}_n\}_{n=1}^N
S^={v^n}n=1N,而关键点的真值
S
p
=
{
v
n
}
n
=
1
T
S^p=\{v_n\}_{n=1}^T
Sp={vn}n=1T。由于两者的数量是不一致的,需要在预测中寻找与关键点真值最匹配的一组点,也就是下图描述的这样:
自然是不能用暴力枚举的方式了,这里使用了动态规划寻找最小代价的方式,具体实现文章里已经给出了。那么对于监督这块可以具体划分为几个部分:
按照匹配的结果对关键点构建约束:
L
p
p
=
1
T
∑
n
=
1
T
∣
∣
S
^
n
p
−
S
n
p
∣
∣
1
L_{pp}=\frac{1}{T}\sum_{n=1}^T||\hat{S}^p_n-S^p_n||_1
Lpp=T1n=1∑T∣∣S^np−Snp∣∣1
除开关键点之外的其它点则采用插值的方式构建约束,首先由关键点得到其它点:
C
n
,
r
=
(
1
−
θ
n
,
r
)
S
n
p
+
θ
n
,
r
S
n
+
1
p
C_{n,r}=(1-\theta_{n,r})S^p_n+\theta_{n,r}S^p_{n+1}
Cn,r=(1−θn,r)Snp+θn,rSn+1p
则预测的关键点和真实关键点之间差值的结果建立约束:
L
c
p
=
1
N
−
T
∑
n
=
1
T
−
1
∑
r
=
1
R
n
∣
∣
C
^
n
,
r
−
C
n
,
r
∣
∣
1
L_{cp}=\frac{1}{N-T}\sum_{n=1}^{T-1}\sum_{r=1}^{R_n}||\hat{C}_{n,r}-C_{n,r}||_1
Lcp=N−T1n=1∑T−1r=1∑Rn∣∣C^n,r−Cn,r∣∣1
对于每条车道线都会预测出
N
N
N个点,那么那些点才是关键点呢?这里使用BCE方式去约束:
L
c
l
s
=
1
N
∑
n
=
1
N
L
b
c
e
(
p
n
,
f
(
S
^
n
∈
S
^
p
)
)
L_{cls}=\frac{1}{N}\sum_{n=1}^NL_{bce}(p_n,f(\hat{S}_n\in \hat{S}^p))
Lcls=N1n=1∑NLbce(pn,f(S^n∈S^p))
最后车道线回归部分损失就是几个的和:
L
D
V
S
=
α
1
L
p
p
+
α
2
L
c
p
+
α
3
L
c
l
s
L_{DVS}=\alpha_1L_{pp}+\alpha_2L_{cp}+\alpha_3L_{cls}
LDVS=α1Lpp+α2Lcp+α3Lcls
实验结果
与其它一些向量化车道线方法的对比: