
论文链接:https://arxiv.org/abs/2308.05736
代码链接:https://github.com/hustvl/MapTR
解决了什么问题?
高精地图是为自动驾驶特别设计的高分辨率地图,包括实例级地图元素(人行横道、车道分隔线、路缘、中线等)的矢量化表示。高精地图包含了关于道路拓扑和交通规则的丰富的语义信息,这对自动驾驶车辆导航非常重要。传统的高精地图通过 SLAM 方法离线构建,带来许多的问题:
- 流程复杂、成本高;
- 很难保证地图的鲜度;
- 自车定位不准(纵向 0.4 m 0.4m 0.4m,横向 0.2 m 0.2m 0.2m)。
因为这些限制条件,在线高精地图建图就越来越受到关注,它可以通过车载传感器实时地构建自车周围的地图,能很好地解决了上述问题。
早期的研究(引用文献 [4–6])主要利用线性形状先验(line-shape priors)来检测开放形状的车道线,这些方法仅基于前置摄像头的图像(front-view image)。它们受到单目感知的限制,无法处理任意形状的地图元素。随着 BEV 表征学习的发展,最近的工作通过 BEV 语义分割来栅格化地图。
但是栅格化地图缺乏矢量化的实例信息,比如车道结构,这对下游任务非常重要(运动控制、规划)。为了构建矢量化 HD 地图,HDMapNet 将像素分割结果融合为矢量化的实例,需要复杂且耗时的后处理流程。VectorMapNet 将每个地图元素表示为一个点序列,采用了两阶段的由粗到细的框架,使用自回归解码器有序地预测点,具有推理时间漫长、错误累积的问题。
当前的在线HD建图方法受到效率和精度的制约,尤其在实时场景中。DETR 使用一个简单、高效的 encoder-decoder Transformer 架构,实现了端到端的目标检测。于是,作者通过 MapTR 也仿照 DETR 范式,设计了一个高效的端到端的矢量化 HD 建图方法。
在 MapTR 中,作者提出了排列等变建模地图元素的方法,地图元素不需要固定的顺序,如车道分隔线、路缘和人行横道。这个方法将每个地图元素建模为一个点集合和一组等价排列。这个点集合定义了地图元素的位置,排列组合则包括了所有可能的点的组织顺序,对应了同一个几何形状,因此排除了形状表示的模糊性。基于这个排列等变建模方法,作者设计了基于 Transformer 的 encoder-decoder 框架,叫做 MapTR。该框架的输入数据来自于车端传感器,输出矢量化的 HD 地图。作者将在线建图的过程简化为一个并行回归问题,引入了分层 query embedding,以高效地编码实例级和点级信息。
虽然 MapTR 在在线高精建图领域是 SOTA 的方法,受到了广泛的关注,它仍然是有一些问题的。一开始,MapTR 要解决的是地图元素建模缺乏物理方向的问题。然而,车道中线是下游运动预测和规划中的关键元素,它本身具有实际的方向和连接性,但 MapTR 并未考虑这一点。其次,MapTR 将分层查询嵌入展平为一个非常长的序列,并直接在这个序列上应用普通的自注意力(vanilla self-attention)。这种实现方式导致了巨大的内存和计算成本,限制了 MapTR 在处理更多实例和更多点时的扩展性。
车道中线:指沿着车道中心的虚拟线,它用于描述车道的几何中心路径。
几何上:车道中线是车道的中心线,通常位于车道的几何中心位置,两侧是对称的车道边界。
功能上:车道中线是车辆行驶的参考线,用于指导车辆沿着车道安全行驶。
数据表示上:在高精地图中,车道中线通常以一系列点(或矢量)的形式表示,这些点连接起来形成一条连续的路径。
Transformer 的复杂度是 O ( n 2 ) O(n^2) O(n2),在 MapTR 中,计算量为 O ( ( N × N v ) 2 ) O((N \times N_v)^2) O((N×Nv)2), N N N是 instance query 个数, N v N_v Nv 是 point query 个数。这使得计算量非常大。MapTRv2 通过分离的自注意力,将复杂度降低为 O ( N 2 + N v 2 ) O(N^2 + N_v^2) O(N2+Nv2)。
为了解决上述问题,作者提出了 MapTRv2。MapTRv2 将车道中线视为图(graph)中的路径,采用图遍历算法来处理这些路径。该方法能更好地捕捉车道中心线的方向性和连接性,从而支持下游的运动预测和规划任务。对于具有中心线语义的地图元素,MapTRv2 不再对它们进行排列(permute),而是直接使用给定的顺序作为目标排列,避免了排列歧义,同时保留了车道中心线的方向性。为了降低计算量和内存占用,作者提出了解耦的自注意力机制,用于处理 queries 之间的交互。具体来说,MapTRv2 分别在实例间(inter-instance dimension)和实例内(intra-instance dimension)执行注意力操作,而不是像 MapTR 那样直接对整个序列应用普通的自注意力(vanilla self-attention)。
通过上面的改进,我们能用相同的框架来同时预测无向的地图元素和有向的地图元素,计算复杂度和内存占用更低。为了加速收敛,作者也优化了 MapTR 的训练策略。作者在训练时增加了一个 one-to-many 的匹配分支,增加了正样本的比例。为了进一步利用语义和几何信息,作者在透视视角和 BEV 视角引入了一个辅助的前景分割,利用深度监督来指导主干网络学习 3D 几何信息。
作者在 nuScenes 和 Argoverse2 数据集进行了充分的实验,结果表明 MapTRv2 的效率和准确率明显优于 MapTR 和之前的其它方法。在 nuScenes 数据集,主干为 ResNet18 的 MapTRv2 能够在 3090 显卡上以实时的速度运行( 33.7 33.7 33.7FPS),比基于视觉的 VectorMapNet 快 15 倍,但是 mAP 要高 6.3 6.3 6.3。以 ResNet50 作为主干,MapTRv2 取得了 68.7 68.7 68.7 mAP,速度为 14.1 14.1 14.1 FPS,比 VectorMapNet-ResNet50 快了 6 倍,mAP 高了 22.7 22.7 22.7,甚至超越了多模态的 VectorMapNet。此外,MapTRv2 的收敛速度要比 MapTR-ResNet50 快了 4 倍,mAP 高了 2.8 2.8 2.8。将主干网络换为 VoVNetV2-99 后,MapTRv2 只用相机输入,就取得了 73.4 73.4 73.4 mAP,速度为 9.9 9.9 9.9 FPS。在 Argoverse2 上,关于 3D 建图,MapTRv2 使用相同的主干网络 ResNet50,取得的 mAP 要比 VectorMapNet 高 28.9 28.9 28.9。
本文是 MapTR 的扩展版本。相较于 MapTR, MapTRv2 有以下改进:
- MapTRv2 能建模学习车道的有向中心线,这对下游运动规划非常重要。
- 其次,作者提出了解耦的自注意力,用于分层的查询机制,极大降低了内存占用。
- 对透视视图和 BEV 视图,使用辅助的密集监督,极大地提升了性能。
- 引入了辅助的 one-to-many 集合预测分支,加速收敛。
- 提供了理论分析,探讨了各个模块,展示了该框架的工作原理。
- 将该框架扩展到 3D 建图(MapTR 只学习 2D 地图),并在 Argoverse2 数据集上进行了大量的实验。
提出了什么方法?
Shape Modeling
MapTRv2 以一个统一的方式学习如何建模高精地图。高精地图是一组矢量化静态地图元素的集合,包括人行横道、车道分隔线、路缘、道路中线等。对于结构化建模,MapTRv2 将地图元素抽象为封闭形状(如人行横道)或开放形状(如车道分隔线)。沿着形状的边界,有序地采样点,封闭形状的元素可以离散化为一个多边形,而开放形状的元素可以离散化为多段线。

一开始,多边形和多段线可以用一个有序的点集合表示: V F = [ v 0 , v 1 , . . . , V N v − 1 ] V^F=[v_0, v_1, ..., V_{N_v-1}] VF=[v0,v1,...,VNv−1],如上图 vanilla 所示。 N v N_v Nv 是点的个数。但是,点集合的排列并不是明确且唯一的。例如下图(a),两条反向车道的车道分隔线(多段线),要想定义它的方向就很困难。车道分隔线的两端都可以看作为起点,点集合可以用两个方向的点来组成。如下图(b)所示,对于人行横道(多边形),点集合可以用两个相反的方向的点来组织(顺时针和逆时针)。循环地调整点集合的排列顺序并不会改变多边形的几何形状。使用一个固定的排列顺序来表示点集合,是不合理的。该固定的排列顺序会和其它等价的排列相冲突,阻碍模型的学习。

为了弥补这个 gap,MapTRv2 将每个元素建模为 V = ( V , Γ ) \mathcal{V}=(V,\Gamma) V=(V,Γ)。 V = { v j } j = 0 N v − 1 V=\{v_j\}_{j=0}^{N_v-1} V={vj}j=0Nv−1 表示地图元素的点集合( N v N_v Nv 是点的个数)。 Γ = { γ k } \Gamma=\{\gamma^k\} Γ={γk} 是点集合 V V V的一组等价的排列组合,包含所有的组织顺序。
对于没有特定方向的多段线元素, Γ \Gamma Γ 包括两类等价的排列:
Γ p o l y l i n e = { γ 0 , γ 1 } = { γ 0 ( j ) = j % N v γ 1 ( j ) = ( N v − 1 ) − j % N v \Gamma_{polyline}=\{\gamma^0, \gamma^{1}\}=\left\{ \begin{aligned} \gamma^0(j)&=j \ \% \ N_v \\ \gamma^{1}(j)&=(N_v-1)-j \ \% \ N_v \end{aligned} \right. Γpolyline={γ0,γ1}={γ0(j)γ1(j)=j % Nv=(Nv−1)−j % Nv
对于带有方向的多段线元素,如车道中线, Γ \Gamma Γ 只有一种排列 { γ 0 } \{\gamma^0\} {γ0}。
对于多边形元素, Γ \Gamma Γ 包括 2 × N v 2\times N_v 2×Nv 种等价排列:
Γ p o l y g o n = { γ 0 , . . . , γ 2 × N v − 1 } = { γ 0 ( j ) = j % N v γ 1 ( j ) = ( N v − 1 ) − j % N v . . . γ 2 × N v − 2 ( j ) = ( j + N v − 1 ) % N v γ 2 × N v − 1 ( j ) = ( N v − 1 ) − ( j + N v − 1 ) % N v \Gamma_{polygon}=\{\gamma^0, ..., \gamma^{2\times N_v-1}\}=\left\{ \begin{aligned} &\gamma^0(j)=j \ \% \ N_v \\ &\gamma^{1}(j)=(N_v-1)-j \ \% \ N_v \\ &... \\ &\gamma^{2\times N_v-2}(j)=(j+N_v-1) \ \% \ N_v \\ &\gamma^{2\times N_v-1}(j)=(N_v-1)-(j+N_v-1) \ \% \ N_v \end{aligned} \right. Γpolygon={γ0,...,γ2×Nv−1}=⎩ ⎨ ⎧γ0(j)=j % Nvγ1(j)=(Nv−1)−j % Nv...γ2×Nv−2(j)=(j+Nv−1) % Nvγ2×Nv−1(j)=(Nv−1)−(j+Nv−1) % Nv
为了引入等价排列的概念,MapTRv2 以一个统一的方式来建模地图元素,解决歧义的问题。
架构
MapTRv2 采用了 encoder-decoder 的范式。整体架构如下图所示。
地图编码器
地图编码器从传感器数据中提取特征,将它们变换成统一的表示,即 BEV 表示。MapTRv2 和其它车载传感器兼容。输入是多视图图像 I = { I 1 , . . . , I M } \mathcal{I}=\{I_1,...,I_M\} I={I1,...,IM},利用一个传统的主干网络生成多视图特征图 F = { F 1 , . . . , F M } \mathcal{F}=\{F_1,...,F_M\} F={F1,...,FM}。然后,将透视视角的特征图 F \mathcal{F} F 转换为 BEV 特征 B ∈ R H × W × C \mathcal{B}\in \mathbb{R}^{H\times W\times C} B∈RH×W×C。本方法支持多种 PV2BEV 的变换方法,如 CVT, LSS, Deformable Attention, GKT 和 IPM。为了直接提取深度信息,作者采用了基于 LSS 的 BEVPoolv2 作为默认的变换方法。将 MapTRv2 扩展到多模态的传感器数据也是比较简单、直接的。

地图解码器
地图解码器包括 map queries 和多个解码层。每个解码层利用 self-attention 和 cross-attention 来更新地图 queries。详细的设计如下:
Hierarchical queries
提出了一个分层的 query embedding 机制,直接编码每个地图元素。作者设计了一个实例级的 queries 集合 { q i i n s } i = 0 N − 1 \{q_{i}^{ins}\}_{i=0}^{N-1} {qiins}i=0N−1,以及一个点级 queries 的集合 { q j p t } j = 0 N v − 1 \{q_j^{pt}\}_{j=0}^{N_v-1} {qjpt}j=0Nv−1,这个集合被所有的实例共享。每个地图元素(索引为 i i i)对应一个分层 queries 集合 { q i j h i e } j = 0 N v − 1 \{q_{ij}^{hie}\}_{j=0}^{N_v-1} {qijhie}j=0Nv−1。第 i i i个地图元素的第 j j j个分层 query 表示如下:
q i j h i e = q i i n s + q j p t . q_{ij}^{hie}=q_i^{ins} + q_j^{pt}. qijhie=qiins+qjpt.
Self-attention Variants
MapTR 采用了标准的自注意力,让分层 queries (实例之间、实例内部)交换信息,计算复杂度是 O ( ( N × N v ) 2 ) O((N\times N_v)^2) O((N×Nv)2), N , N v N,N_v N,Nv 是实例 queries 的个数和点 queries 的个数。随着 query 个数增加,计算复杂度和内存占用也会大幅度增加。
在 MapTRv2 中,为了降低计算复杂度和内存占用,采用了解耦的自注意力,即分别沿着实例之间的维度和实例内部的维度来计算注意力,如上图所示。解耦的自注意力极大地降低了内存占用和计算复杂度(从 O ( ( N × N v ) 2 ) O((N\times N_v)^2) O((N×Nv)2)降低到 O ( N 2 + N v 2 ) O(N^2+N_v^2) O(N2+Nv2)),表现要优于标准版的自注意力。
另一个变种就是只对实例之间的自注意力进行计算,即使如此,MapTRv2 也取得了不错的表现。
Cross-attention Variants
解码器中的交叉注意力使地图 queries 和输入特征做交互。作者研究了三种交叉注意力:BEV-based、PV-based 和混合交叉注意力。
对于 BEV-based 交叉注意力,作者采用了 deformable attention,让分层 queries 和 BEV 特征做交互。为了构建 2D 地图,每个 query q i j h i e q_{ij}^{hie} qijhie 预测参考点 p i j p_{ij} pij 的一个两维归一化的 BEV 坐标 ( x i j , y i j ) (x_{ij}, y_{ij}) (xij,yij)。为了构建 3D 地图,每个 query q i j h i e q_{ij}^{hie} qijhie 预测参考点 p i j p_{ij} pij 的三维归一化的 3D 坐标 ( x i j , y i j , z i j ) (x_{ij}, y_{ij}, z_{ij}) (xij,yij,zij)。然后,我们在参考点附近采样 BEV 特征,更新 queries。
地图元素通常有着不规则的形状,需要长距离的上下文信息。每个地图元素都对应着一个集合,该集合包含了参考点 { p i j } j = 0 N v − 1 \{p_{ij}\}_{j=0}^{N_v-1} {pij}j=0Nv−1,该集合有着灵活动态的分布。参考点 { p i j } j = 0 N v − 1 \{p_{ij}\}_{j=0}^{N_v-1} {pij}j=0Nv−1能适应任意形状的地图元素,获取地图元素的上下文信息。
对于 PV-based 交叉注意力,作者将参考点 p i j p_{ij} pij 投影到透视图像上,然后在投影参考点附近采样特征。密集的 BEV 特征接被废弃了。
混合交叉注意力是上述两个交叉注意力的组合。
预测头
预测头非常简单,包括一个分类分支和点回归分支。分类分支预测实例类别分数,点回归分支预测点集合 V ^ \hat V V^ 的位置。对于每个地图元素,它输出一个 2 N v 2N_v 2Nv 或 3 N v 3N_v 3Nv 维度的向量,表示 N v N_v Nv 个点的归一化的 2D 或 3D 坐标。
训练
Hierarchical Bipartite Matching
在单次推理过程中,MapTRv2 并行地推理一个固定大小的集合( N N N个地图元素),遵循了端到端 query-based 目标检测/分割的范式。 N N N 的值要比一般场景中地图元素的个数大一些。将 N N N 个预测的地图元素记作 Y ^ = { y ^ i } i = 0 N − 1 \hat Y=\{\hat y_i\}_{i=0}^{N-1} Y^={y^i}i=0N−1。Ground-truth 地图元素的集合会用 ∅ \varnothing ∅ (没有目标物体)填充,得到一个大小为 N N N 的集合,记作 Y = { y i } i = 0 N − 1 Y=\{y_i\}_{i=0}^{N-1} Y={yi}i=0N−1。 y i = ( c i , V i , Γ i ) y_i=(c_i, V_i, \Gamma_i) yi=(ci,Vi,Γi),其中 c i , V i , Γ i c_i,V_i,\Gamma_i ci,Vi,Γi分别表示 GT 地图元素 y i y_i yi 的目标类别、点集合和排列组合。 y ^ i = ( p ^ i , V ^ i ) \hat y_i=(\hat p_i, \hat V_i) y^i=(p^i,V^i),其中 p ^ i , V ^ i \hat p_i, \hat V_i p^i,V^i 分别是预测分类得分、预测的点集合。为了建模结构化的地图元素,MapTRv2 引入了分层的二分匹配,有序地进行实例级的匹配和点级的匹配,如下图所示。

Instance-level Matching
首先,我们要在预测地图元素 { y ^ i } \{\hat y_i\} {y^i}和 GT 地图元素 { y i } \{y_i\} {yi} 之间,找到最优的实例级标签分配 π ^ \hat\pi π^。 π ^ \hat \pi π^ 是 N N N 个元素的排列组合, ( π ^ ∈ Π N ) (\hat \pi \in \Pi_N) (π^∈ΠN),实例级匹配的损失是最低的:
π ^ = arg min π ∈ Π N ∑ i = 0 N − 1 L i n s _ m a t c h ( y ^ π ( i ) , y i ) \hat \pi = \argmin_{\pi \in \Pi_N}\sum_{i=0}^{N-1} \mathcal{L}_{ins\_match}(\hat y_{\pi(i)}, y_i) π^=π∈ΠNargmini=0∑N−1Lins_match(y^π(i),yi)
L i n s _ m a t c h ( y ^ π ( i ) , y i ) \mathcal{L}_{ins\_match}(\hat y_{\pi(i)}, y_i) Lins_match(y^π(i),yi) 是预测 y ^ π ( i ) \hat y_{\pi(i)} y^π(i) 和 GT y i y_i yi 之间的匹配代价,包括地图元素的类别标签和点集合的位置:
L i n s _ m a t c h ( y ^ π ( i ) , y i ) = L F o c a l ( p ^ π ( i ) , c i ) + L p o s i t i o n ( V ^ π ( i ) , V i ) \mathcal{L}_{ins\_match}(\hat y_{\pi(i)}, y_i)=\mathcal{L}_{Focal}(\hat p_{\pi(i)}, c_i) + \mathcal{L}_{position}(\hat V_{\pi(i)}, V_i) Lins_match(y^π(i),yi)=LFocal(p^π(i),ci)+Lposition(V^π(i),Vi)
L F o c a l ( p ^ π ( i ) , c i ) \mathcal{L}_{Focal}(\hat p_{\pi(i)}, c_i) LFocal(p^π(i),ci) 是类别匹配损失项,定义为预测分类得分 p ^ π ( i ) \hat p_{\pi(i)} p^π(i) 和目标类别标签 c i c_i ci 的 Focal Loss。 L p o s i t i o n ( V ^ π ( i ) , V i ) \mathcal{L}_{position}(\hat V_{\pi(i)}, V_i) Lposition(V^π(i),Vi) 是位置匹配损失项,反映了预测点集合 V ^ π ( i ) \hat V_{\pi(i)} V^π(i) 和 GT 点集合 V i V_i Vi 之间的位置关系。使用匈牙利算法来找到最优的实例级的分配 π ^ \hat \pi π^。
Point-level Matching
做完实例级匹配后,每个预测的地图元素 y ^ π ^ ( i ) \hat y_{\hat \pi(i)} y^π^(i) 都被分配到一个 GT 地图元素 y i y_i yi。然后,对于每个正样本标签( c i ≠ ∅ c_i\neq \varnothing ci=∅)的预测实例,通过点级匹配来找到预测点集合 V ^ π ^ ( i ) \hat V_{\hat \pi(i)} V^π^(i) 和 GT 点集合 V i V_i Vi 之间最优的 point-to-point 分配 γ ^ ∈ Γ \hat \gamma \in \Gamma γ^∈Γ。 γ ^ \hat \gamma γ^ 是从预先定义好的排列组合 Γ \Gamma Γ 中选出的,点级匹配代价最低:
γ ^ = arg min γ ∈ Γ ∑ j = 0 N v − 1 D M h t ( v ^ j , v γ ( j ) ) \hat \gamma = \argmin_{\gamma \in \Gamma}\sum_{j=0}^{N_v-1} D_{Mht}(\hat v_j, v_{\gamma(j)}) γ^=γ∈Γargminj=0∑Nv−1DMht(v^j,vγ(j))
D M h t ( v ^ j , v γ ( j ) ) D_{Mht}(\hat v_j, v_{\gamma(j)}) DMht(v^j,vγ(j)) 是预测点集合 V ^ \hat V V^ 的第 j j j个点和 GT 点集合 V V V 的第 γ ( j ) \gamma(j) γ(j)个点的曼哈顿距离。
One-to-One Set Prediction Loss
MapTRv2 基于最优的实例级和点级分配( π ^ , { γ ^ i } \hat \pi, \{\hat \gamma_i\} π^,{γ^i})训练。基础的损失函数包括三个部分,分类损失、point-to-point 损失和 edge direction loss:
L o n e 2 o n e = L H u n g a r i a n ( Y ^ , Y ) = λ c L c l s + λ p L p 2 p + λ d L d i r \begin{aligned} \mathcal{L}_{one2one}&=\mathcal{L}_{Hungarian}(\hat Y, Y) \\ &=\lambda_c\mathcal{L}_{cls} + \lambda_p\mathcal{L}_{p2p}+\lambda_d\mathcal{L}_{dir} \end{aligned} Lone2one=LHungarian(Y^,Y)=λcLcls+λpLp2p+λdLdir
其中 λ c , λ p , λ d i r \lambda_c, \lambda_p, \lambda_{dir} λc,λp,λdir 是平衡各损失的权重。
分类损失
有了实例级最优匹配结果 π ^ \hat \pi π^,每个预测的地图元素就会得到一个类别标签。分类损失用 Focal Los 表示:
L c l s = ∑ i = 0 N − 1 L F o c a l ( p ^ π ^ ( i ) , c i ) \mathcal{L}_{cls} = \sum_{i=0}^{N-1}\mathcal{L}_{Focal}(\hat p_{\hat \pi(i)}, c_i) Lcls=i=0∑N−1LFocal(p^π^(i),ci)
Point-to-Point Loss
Point-to-Point Loss 监督每个预测点的位置。对于索引为 i i i的GT实例,根据点级最优匹配结果 γ ^ i \hat \gamma_i γ^i,每个预测点 v ^ π ^ ( i ) , j \hat v_{\hat \pi(i),j} v^π^(i),j 被分配到一个 GT 点 v i , γ ^ i ( j ) v_{i,\hat \gamma_i(j)} vi,γ^i(j)。Point-to-Point Loss 就定义为它俩之间的曼哈顿距离,
L p 2 p = ∑ i = 0 N − 1 I { c i ≠ ∅ } ∑ j = 0 N v − 1 D M h t ( v ^ π ^ ( i ) , j , v i , γ ^ i ( j ) ) \mathcal{L}_{p2p}=\sum_{i=0}^{N-1} \mathbb{I}_{\{c_i\neq \varnothing\}} \sum_{j=0}^{N_v-1} D_{Mht}(\hat v_{\hat \pi(i),j}, v_{i,\hat \gamma_i(j)}) Lp2p=i=0∑N−1I{ci=∅}j=0∑Nv−1DMht(v^π^(i),j,vi,γ^i(j))
Edge Direction Loss
Point-to-Point Loss 只监督多段线和多边形的节点,忽略了边(相邻点之间的连线)。为了准确地表示地图元素,边的方向非常重要。因此,作者进一步设计了 Edge Direction Loss,在更高的边的级别监督几何形状。 本方法计算预测边 e ^ π ^ ( i ) , j \hat e_{\hat \pi(i),j} e^π^(i),j 和 GT 边 e i , γ ^ i ( j ) e_{i,\hat \gamma_i(j)} ei,γ^i(j) 之间的余弦相似度:
L d i r = − ∑ i = 0 N − 1 I { c i ≠ ∅ } ∑ j = 0 N v − 1 cos_sim ( e ^ π ^ ( i ) , j e i , γ ^ i ( j ) ) \begin{aligned} \mathcal{L}_{dir}&=-\sum_{i=0}^{N-1} \mathbb{I}_{\{c_i\neq \varnothing\}}\sum_{j=0}^{N_v-1} \text{cos\_sim}(\hat e_{\hat \pi(i),j}e_{i,\hat \gamma_i(j)}) \end{aligned} Ldir=−i=0∑N−1I{ci=∅}j=0∑Nv−1cos_sim(e^π^(i),jei,γ^i(j))
e ^ π ^ ( i ) , j = v ^ π ^ ( i ) , j − v ^ π ^ ( i ) , ( j + 1 ) % N V \hat e_{\hat \pi(i),j}=\hat v_{\hat \pi(i),j} - \hat v_{\hat \pi(i), (j+1)\% N_V} e^π^(i),j=v^π^(i),j−v^π^(i),(j+1)%NV
e ^ i , γ ^ i ( j ) = v i , γ ^ i ( j ) − v i , γ ^ i ( j + 1 ) % N V \hat e_{i,\hat \gamma_i(j)}=v_{i,\hat \gamma_i(j)} - v_{i,\hat \gamma_i(j+1)\% N_V} e^i,γ^i(j)=vi,γ^i(j)−vi,γ^i(j+1)%NV
Auxiliary One-to-Many Set Prediction Loss

为了加速收敛,作者在训练过程中增加了一个辅助的 one-to-many 匹配分支。如下图所示,one-to-many 匹配分支和 one-to-one 分支共享了 point queries 和 Transformer 解码器,但是多一组额外的 instance queries { q i ′ i n s } i = 0 T − 1 \{q_i^{'ins}\}_{i=0}^{T-1} {qi′ins}i=0T−1( T T T 是个数)。该分支预测地图元素 Y ^ ′ = { y ^ i ′ } i = 0 T − 1 \hat Y'=\{\hat y_i'\}_{i=0}^{T-1} Y^′={y^i′}i=0T−1。
将 ground-truth 地图元素重复 K K K 次,用 ∅ \varnothing ∅ 填充,得到一个长度为 T T T 的集合,记作 Y ′ = { y i ′ } i = 0 T − 1 Y'=\{y_i'\}_{i=0}^{T-1} Y′={yi′}i=0T−1。然后,在 Y ~ \widetilde{Y} Y 和 Y ˉ \bar{Y} Yˉ之间进行分层的二分匹配,计算辅助的 one-to-many set prediction loss:
L o n e 2 m a n y = L H u n g a r i a n ( Y ^ ′ , Y ′ ) \mathcal{L}_{one2many}=\mathcal{L}_{Hungarian}(\hat Y', Y') Lone2many=LHungarian(Y^′,Y′)
在 one-to-many 匹配分支,一个 GT 元素会被分配到 K K K 个预测元素。随着正样本比值的增加,地图解码器就会收敛得更快。
Auxiliary Dense Prediction Loss
为了进一步利用语义和几何信息,作者引入了三个辅助的密集预测损失:
L d e n s e = α d L d e p t h + α b L B E V S e g + α p L P V S e g \mathcal{L}_{dense}=\alpha_d \mathcal{L}_{depth} + \alpha_b \mathcal{L}_{BEVSeg} +\alpha_p \mathcal{L}_{PVSeg} Ldense=αdLdepth+αbLBEVSeg+αpLPVSeg
深度预测损失
延续了 BEVDepth,作者使用 LiDAR 点云来渲染每个透视视角的 GT 深度图 { D 1 , . . . , D M } \{D_1, ..., D_M\} {D1,...,DM}。然后在透视(PV)特征图 F = { F 1 , . . . , F M } \mathcal{F}=\{F_1,...,F_M\} F={F1,...,FM}上,增加一个简单的深度预测头 ϕ d e p t h \phi_{depth} ϕdepth。深度预测损失的定义为预测深度图和 GT 深度图交叉熵损失:
L d e p t h = ∑ m = 1 M L C E ( ϕ d e p t h ( F m ) , D m ) \mathcal{L}_{depth}=\sum_{m=1}^M \mathcal{L}_{CE}(\phi_{depth}(F_m), D_m) Ldepth=m=1∑MLCE(ϕdepth(Fm),Dm)
BEV 分割损失
受到 BeMapNet 启发,作者基于 BEV 特征图 F B E V F_{BEV} FBEV,增加了一个辅助的 BEV 分割头 ϕ B E V S e g \phi_{BEVSeg} ϕBEVSeg。在 BEV 画布上,将 GT 地图栅格化,得到 BEV 前景 mask M B E V M_{BEV} MBEV。BEV 分割损失定义为预测 BEV 分割图和二值GT地图 mask 的交叉熵损失:
L B E V S e g = L C E ( ϕ B E V S e g ( F B E V ) , M B E V ) \mathcal{L}_{BEVSeg}=\mathcal{L}_{CE}(\phi_{BEVSeg}(F_{BEV}),M_{BEV}) LBEVSeg=LCE(ϕBEVSeg(FBEV),MBEV)
PV 分割损失
为了充分利用密集监督信号,作者用相机的内外参在透视视图上渲染了 GT 地图,得到透视的前景 masks { M P V 1 , . . . , M P V M } \{M_{PV}^1,...,M_{PV}^M\} {MPV1,...,MPVM}。在 PV 特征图 F = { F 1 , . . . , F M } \mathcal{F}=\{F_1,...,F_M\} F={F1,...,FM} 上增加了一个辅助的 PV 分割头 ϕ P V S e g \phi_{PVSeg} ϕPVSeg。PV 分割损失函数 L P V S e g \mathcal{L}_{PVSeg} LPVSeg定义为:
L P V S e g = ∑ m = 1 M L C E ( ϕ P V S e g ( F m ) , M P V m ) \mathcal{L}_{PVSeg}=\sum_{m=1}^M \mathcal{L}_{CE}(\phi_{PVSeg}(F_{m}),M_{PV}^m) LPVSeg=m=1∑MLCE(ϕPVSeg(Fm),MPVm)
整体损失
整体损失定义如下:
L = β o L o n e 2 o n e + β m L o n e 2 m a n y + β d L d e n s e \mathcal{L}=\beta_o \mathcal{L}_{one2one} + \beta_m \mathcal{L}_{one2many} +\beta_d \mathcal{L}_{dense} L=βoLone2one+βmLone2many+βdLdense
效果

