参考代码:None
动机与出发点
训练场景中的车道线千变万化会导致query方式预测方式变得较难收敛或者性能较低,之前的一些工作有将mask信息引入到pipeline中为query提供instance-level的语义信息,但是对于point-level信息就需要自己去学习了。在这篇文章中提出从数据集中去聚类(使用k-Means)车道元素和可学习车道元素一并作为query计算中ref-points(因为用了deformable attention)中的一部分,以此来将point-level的先验信息引入到网络。
下面这幅图是random初始化query的MapTR与文章方案的对比,有了先验信息的加入整个匹配和训练收敛的过程更加快速
方法设计
文章的整体pipeline如下图所示:
从上图可以看到文章的方法在结构上并没有与其它一些方法太多差异,主要的差异是在PF-Encoder和PPS-Decoder这块,后面的这个在后面细说。对于PF-Encoder从目前文章提供的信息上是看类似于triple-loss的东西,在feature map上去pull和push不同车道线元素内部和之间的特征表达,那么这个跟之间在feature上加一个类似segment-loss这样的trick会有多大的性能差异呢?这个可以做下实验探究一下。
在transformer的网络结构中对于bev-query的初始化也是可以探究的问题,有初始化的情况下是能带来性能提升的:
PPS-Decoder
对于车道线元素query使用的是inst-query+point-query组合的方式,只不过在deformable-attn过程中ref-point发生了变化,是使用prior-points去生成的。对于prior-points它是由训练集统计+可学习参数组合构成的
R
=
{
R
p
r
i
,
R
l
r
n
}
R=\{R_{pri},R_{lrn}\}
R={Rpri,Rlrn},首先对于训练的数据集是可以通过类似k-Means这样的算法去提取高频率车道线元素的,记为
R
p
r
i
∈
R
N
p
r
i
∗
N
P
∗
2
R_{pri}\in R^{N_{pri}*N_P*2}
Rpri∈RNpri∗NP∗2。统计只是按照出现的频率对车道线做了提取,对于那些不怎么常见的车道线采用可学习emb的方式去表达,记为
R
l
r
n
∈
R
N
l
r
n
∗
N
P
∗
2
R_{lrn}\in R^{N_{lrn}*N_P*2}
Rlrn∈RNlrn∗NP∗2。这些ref-points会在self-attn(作为类似pos-emb)和cross-attn(作为ref_points)的过程中参与到计算中,参考下面右下的这幅图:
上面提到的两种结构上的优化对于性能的提升贡献见下表: