参考代码:StreamMapNet
动机与主要贡献
之前的局部地图感知方案所预测的距离都比较近,远了之后性能会下降比较多。这篇文章从如下两个角度进行改进:
- 1)原本的地面元素做deformable attention是基于1个query中心,这下为了让query适应地面元素,每个instance中会将所有的多个query点都会去做deformable attention,毕竟地面元素由多个点组成
- 2)在query和BEV featrue两个维度中引入时序,增强对环境变化的感知能力,这样就可以增加感知的范围,从原来的 60 ∗ 30 → 100 ∗ 50 60*30\rightarrow 100*50 60∗30→100∗50
整体上文章的方法是基于MapTR的(参考了它的车道线回归和匹配机制),主要的工作是使用多个query-point去做deformable attention,以及增加时序上的信息融合,BEV特征部分的融合没有太多新意,但是query部分的融合可以再研究下。在base基础上算是一些trick的叠加,当作一些trick效果的验证就好。
结构框图
文章算法的结构框图见下图所示:
可以看到文章方法在BEV feature和bev obj query(参考Sparse4D系列)上均做了时序信息融合,使用memory buffer去存储对应信息。
多点query参与attention
在原本的deformable attention中只有一个中心,但是这样的信息抓取方式是不适合那些空间跨度比较大的情况的,如车道线,则应该对于每个query point去做deformable信息抓取,也就是下图中的这样
BEV feature和instance query的时序融合
BEV空间的特征融合参考GRU的形式实现(前一帧和当前帧也是需要依据位姿空间对齐的),见下图:
instance query上在第一层transformer layer中使用可学习的query作为输入,transformer layer的下一层会对当前层输出的query按照置信度排序,选择那些高质量的query。此外还会通过时序方式引入前一帧的query(参考Sparse4D V2)
具体来讲前一帧的query会与ego-motion矩阵(
T
∈
R
4
∗
4
T\in R^{4*4}
T∈R4∗4)进行融合得到时空对齐的query:
Q
^
t
=
ϕ
(
c
o
n
c
a
t
(
Q
t
−
1
,
f
l
a
t
t
e
n
(
T
)
)
)
+
Q
t
−
1
\hat{Q}_t=\phi(concat(Q_{t-1},flatten(T)))+Q_{t-1}
Q^t=ϕ(concat(Qt−1,flatten(T)))+Qt−1
那么之前帧的预测结果(向量点)也可以根据转移矩阵进行变换:
P
^
t
=
T
⋅
h
o
m
o
g
e
n
e
o
u
s
(
P
t
−
1
)
:
;
0
:
2
\hat{P}_t=T\cdot homogeneous(P_{t-1})_{:;0:2}
P^t=T⋅homogeneous(Pt−1):;0:2
那么,借助回归分支可以得到空间对齐之后的query预测结果
P
^
t
′
=
R
e
g
(
Q
t
^
)
\hat{P}_t^{'}=Reg(\hat{Q_t})
P^t′=Reg(Qt^),按照道理其应该与同样进行过空间转换的向量点的结果近似,那么以此为依据就可以约束这个query迁移对齐的过程。
L
t
r
a
n
s
=
∑
j
=
1
N
p
L
S
m
o
o
t
h
L
1
(
P
^
t
′
j
,
P
^
t
j
)
L_{trans}=\sum_{j=1}^{N_p}L_{SmoothL1}(\hat{P}_t^{'j},\hat{P}_t^j)
Ltrans=j=1∑NpLSmoothL1(P^t′j,P^tj)
上面是文章给出在query维度实现时序融合的过程,其实这个过程的优化改进优化还是值得探究一下的。在上面的融合过程中有在ego-motion辅助下对齐query,之后通过使得回归结果接近的辅助函数来对齐,其实回归结果本身的位置也是一个很重要的信息。下面是来自CurveFormer++的对齐融合方案:
(a)上一帧anchor points使用ego-motion在帧间传递
(b)上一帧的query作为当前帧的key和val,去做cross attn且没做top-k
(c)上一帧的query取top-k之后合并起来作为当前帧的query
(d)上一帧的query取top-k并且加上对齐之后的anchor points组合起来,再合并当前帧的query
对应的结果见下表:
上面的4种传递融合方式与实际的性能指标进行分析得到:上一帧的query取top-k之后传递,再加上对应query的回归结果(也就是位置信息)这个效果是最好的。
ref:CurveFormer++: 3D Lane Detection by Curve Propagation with Temporal Curve Queries and Attention
实验结果对比
Argoverse2数据集:
NuScenes数据集: