MapTRv2 论文学习

devtools/2025/2/25 6:53:16/

论文链接: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,...,VNv1],如上图 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=0Nv1 表示地图元素的点集合( 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=(Nv1)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×Nv1}= γ0(j)=j % Nvγ1(j)=(Nv1)j % Nv...γ2×Nv2(j)=(j+Nv1) % Nvγ2×Nv1(j)=(Nv1)(j+Nv1) % 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} BRH×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=0N1,以及一个点级 queries 的集合 { q j p t } j = 0 N v − 1 \{q_j^{pt}\}_{j=0}^{N_v-1} {qjpt}j=0Nv1,这个集合被所有的实例共享。每个地图元素(索引为 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=0Nv1。第 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=0Nv1,该集合有着灵活动态的分布。参考点 { p i j } j = 0 N v − 1 \{p_{ij}\}_{j=0}^{N_v-1} {pij}j=0Nv1能适应任意形状的地图元素,获取地图元素的上下文信息。

对于 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=0N1。Ground-truth 地图元素的集合会用 ∅ \varnothing (没有目标物体)填充,得到一个大小为 N N N 的集合,记作 Y = { y i } i = 0 N − 1 Y=\{y_i\}_{i=0}^{N-1} Y={yi}i=0N1 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=0N1Lins_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=0Nv1DMht(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=0N1LFocal(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=0N1I{ci=}j=0Nv1DMht(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=0N1I{ci=}j=0Nv1cos_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),jv^π^(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} {qiins}i=0T1( T T T 是个数)。该分支预测地图元素 Y ^ ′ = { y ^ i ′ } i = 0 T − 1 \hat Y'=\{\hat y_i'\}_{i=0}^{T-1} Y^={y^i}i=0T1

将 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=0T1。然后,在 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=1MLCE(ϕ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=1MLCE(ϕ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

效果


http://www.ppmy.cn/devtools/161517.html

相关文章

Redis 基本数据类型及其适用场景与案例

Redis 基本数据类型及其适用场景与案例 Redis 提供了多种数据类型,每种数据类型都有其特定的使用场景。以下是对每种数据类型的详细解释、适用场景以及使用 Spring Boot 实现的案例。 1. String(字符串) 特点:最基本的数据类型…

国产超强开源大语言模型 DeepSeek-R1-70B 一键部署教程

DeepSeek-R1-Distill-Llama-70B 是深度求索 (DeepSeek) 公司于 2025 年推出的开源大语言模型,参数规模高达 700 亿。它是基于 Llama3.3-70B-Instruct 进行训练的,采用强化学习和蒸馏技术提升推理表现,不仅继承了 Llama 系列模型的优势&#x…

【1】VS Code 新建上位机项目---C#基础语法

VS Code 新建上位机项目---C#基础语法 1 基本概念1.1 准备工具1.2 新建项目2 C#编程基础2.1 命名空间和类2.2 数据类型2.3 控制台输入输出2.3.1 输入输出: write 与 read2.3.2 格式化 : string.Foramt() 与 $2.3.3 赋值与运算2.4 类型转换2.4.1 数值类型之间的转换:(int)2.4…

MATLAB实现四阶龙格库塔法求解常微分方程组

MATLAB实现四阶龙格库塔法求解常微分方程组 MATLAB实现四阶龙格库塔法求解常微分方程组/f.m , 107 MATLAB实现四阶龙格库塔法求解常微分方程组/RungeKutta.m , 844 MATLAB实现四阶龙格库塔法求解常微分方程组/四阶龙格库塔法求解常微分方程组.pdf , 93258

自注意力机制和CNN的区别

CNN:一种只能在固定感受野范围内进行关注的自注意力机制。​CNN是自注意力的简化版本。自注意力:具有可学习感受野的CNN。自注意力是CNN的复杂形态,是更灵活的CNN,经过某些设计就可以变为CNN。 越灵活、越大的模型,需要…

鸿蒙5.0实战案例:基于原生能力的深色模式适配

往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录) ✏️ 鸿蒙(HarmonyOS)北向开发知识点记录~ ✏️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…

HTML之JavaScript DOM编程获取元素的方式

HTML之JavaScript DOM编程获取元素的方式 1.获得document DOM树window.document(是window的属性)2.从document中获取要操作的元素1.直接获取var aaa document.getElementById("username") // 根据元素的id值获取页面上的唯一一个元素,有同名的则返回找到的第一个var…

java23种设计模式-原型模式

原型模式(Prototype Pattern)学习笔记 🌟 定义 原型模式属于创建型设计模式,通过复制现有对象(原型)来创建新对象,避免重复进行初始化操作。该模式的核心是实现对象的克隆能力。 &#x1f3af…