1. 解决了什么问题?
过去,一般使用基于单目视觉进行 3D 目标检测。现在进行 3D 任务的方法大致分两类。一类是基于 BEV,将多视角图像映射为 BEV 表征,然后使用 3D 目标检测方法。另一类是基于 DETR,如 DETR3D 和 PETR,定义了 3D 空间的 object queries,在 transformer decoder 中 object queries 与多视角的图像互相作用。像 BEVFormer 和 BEVDet4D 都使用了时域建模,在 BEV 空间对齐连续帧的特征,改进速度预测。因此,本文的 PETRv2 也尝试在 PETR 中加入时域建模,在时域里对齐 3D position embedding。
2. 提出了什么方法?
基于 PETR,PETRv2 尝试对时域建模,使用之前帧的时域信息来优化 3D 目标检测和 BEV 分割。PETRv2 拓展了 PETR 的 3D position embedding,用于时间建模。在不同帧之间,3D PE 在时域内对齐目标位位置。
如下图,PETRv2 使用主干网络从多视角图像中提取 2D 特征,从相机视锥空间生成世界坐标系的 3D 坐标。考虑到车自身的运动,为了实现时域对齐,首先通过姿态变换,将第 t − 1 t-1 t−1帧的 3D 坐标转换为第 t t t帧的坐标系。然后将相邻帧的 2D 特征和 3D 坐标 concat 起来,输入 feature-guided position encoder,生成 transformer decoder 所需的 keys 和 values。Det queries 和 seg queries 分别用 learnable 3D anchor points 和 fixed BEV points 初始化,然后在 transformer decoder 中与多相机视角的图像特征(keys 和 values)发生作用。更新完成的 queries 用于预测 3D 边框和 BEV 分割。 A ◯ \textcircled{\text{A}} A◯是将第 t − 1 t-1 t−1帧到第 t t t帧的 3D 坐标对齐操作。 C ◯ \textcircled{\text{C}} C◯是 batch 维度的 concat 操作。
2.1 Temporal Modeling
通过 3D coordinate alignment(CA) 和 feature-guided position encoder(FPE) 实现时域建模,让定位和速度预测更加准确。
2.1.1 3D Coordinate Alignment
如下图 (a) 所示,时域对齐操作将第 t − 1 t-1 t−1帧的 3D 坐标变换到第 t t t帧的坐标系。在第 t t t帧,我们共有 4 个坐标系:相机坐标系 c ( t ) c(t) c(t),激光雷达坐标系 l ( t ) l(t) l(t),车辆自身(ego)坐标系 e ( t ) e(t) e(t),世界坐标系 g g g。 T s r c d s t T_{src}^{dst} Tsrcdst是从 src 坐标系到 dst 坐标系的变换矩阵。
我们将 l ( t ) l(t) l(t)作为默认的 3D 空间,生成多相机带有 3D 位置的特征。第 i i i个相机投影的 3D 点 P i l ( t ) ( t ) P_i^{l(t)}(t) Pil(t)(t)可以表示为:
P i l ( t ) ( t ) = T c i ( t ) l ( t ) ∗ K i − 1 ∗ P m ( t ) P_i^{l(t)}(t)=T_{c_i(t)}^{l(t)}\ast K_i^{-1}\ast P^m(t) Pil(t)(t)=Tci(t)l(t)∗Ki−1∗Pm(t)
P m ( t ) P^m(t) Pm(t)是一个点集合,代表第 t t t帧相机视锥空间 meshgrid。 K i ∈ R 4 × 4 K_i\in \mathcal{R}^{4\times 4} Ki∈R4×4是第 i i i个相机的内参矩阵。将第 t − 1 t-1 t−1帧的 3D 点坐标对齐到第 t t t帧中:
P i l ( t ) ( t − 1 ) = T l ( t − 1 ) l ( t ) ∗ P i l ( t − 1 ) ( t − 1 ) P_i^{l(t)}(t-1)=T_{l(t-1)}^{l(t)}\ast P_i^{l(t-1)}(t-1) Pil(t)(t−1)=Tl(t−1)l(t)∗Pil(t−1)(t−1)
T l ( t − 1 ) l ( t ) T_{l(t-1)}^{l(t)} Tl(t−1)l(t)的计算如下,世界坐标系 (global) 将第 t t t帧和第 t − 1 t-1 t−1帧关联起来:
T l ( t − 1 ) l ( t ) = T e ( t ) l ( t ) ∗ T g e ( t ) ∗ T g e ( t − 1 ) − 1 ∗ T e ( t − 1 ) l ( t − 1 ) − 1 T_{l(t-1)}^{l(t)}=T_{e(t)}^{l(t)} \ast T_g^{e(t)}\ast {T_g^{e(t-1)}}^{-1}\ast {T_{e(t-1)}^{l(t-1)}}^{-1} Tl(t−1)l(t)=Te(t)l(t)∗Tge(t)∗Tge(t−1)−1∗Te(t−1)l(t−1)−1
对齐后的点 [ P i l ( t ) ( t − 1 ) , P i l ( t ) ( t ) ] \left[P_i^{l(t)}(t-1), P_i^{l(t)}(t)\right] [Pil(t)(t−1),Pil(t)(t)]将用于生成 3D position embedding。
2.1.2 Feature-guided Position Encoder
在 PETR 中,3D PE 的生成过程如下:
P E i 3 d ( t ) = ψ ( P i l ( t ) ( t ) ) PE_i^{3d}(t)=\psi(P_i^{l(t)}(t)) PEi3d(t)=ψ(Pil(t)(t))
其中 ψ ( ⋅ ) \psi(\cdot) ψ(⋅)是 MLP。3D PE 是独立于输入图像特征的。但是,作者认为图像特征能提供一些有用的信息,如深度值。于是提出了 feature-guided position encoder,引入视觉先验知识。
P E i 3 d ( t ) = ξ ( F i ( t ) ) ∗ ψ ( P i l ( t ) ( t ) ) PE_i^{3d}(t)=\xi(F_i(t))\ast \psi(P_i^{l(t)}(t)) PEi3d(t)=ξ(Fi(t))∗ψ(Pil(t)(t))
ξ \xi ξ也是一个 MLP。 F i ( t ) F_i(t) Fi(t)是第 i i i个相机的 2D 图像特征。如上图 (b),先用 1 × 1 1\times 1 1×1卷积映射 2D 特征,然后输入 ξ \xi ξ和 sigmoid 函数,得到注意力权重。用 ψ \psi ψ对 3D 坐标进行变换,与注意力权重相乘得到 3D PE。将 3D PE 和 2D 特征相加,即 transformer decoder 的 key。 1 × 1 1\times 1 1×1卷积映射的 2D 特征作为 transformer decoder 的 value 使用。
2.2 BEV Segmentation
本文提出用 seg queries 实现高质量的 BEV 分割。一个高分辨率的 BEV map 可以划分为若干个小 patches。每个 seg query 对应着 BEV map 上的一个 patch( 16 × 16 16\times 16 16×16像素)。如上图,用 BEV 空间中固定的 anchor points 初始化 seg queries。然后通过 MLP 将 anchor points 映射为 seg queries。随后,seg queries 输入进 transformer decoder,与图像特征相互作用。更新后的 seg queries 输入进 segmentation head (MLP + sigmoid) 预测 BEV embeddings。将每个 BEV embedding 变形为 BEV patch ( 16 × 16 16\times 16 16×16大小), R ◯ \textcircled{\text{R}} R◯是 reshape 操作。最后将所有的 BEV patches 连接起来,产生分割预测结果 ( 256 × 256 256\times 256 256×256大小)。分割分支使用交叉熵损失:
l s e g = 1 N ∑ j = 0 C ∑ i = 0 N [ ω y ^ i log ( y i ) + ( 1 − y ^ i ) log ( 1 − y i ) ] \mathcal{l}_{seg}=\frac{1}{N}\sum_{j=0}^C \sum_{i=0}^N \left[\omega \hat{y}_i \log(y_i) + (1-\hat{y}_i)\log(1-y_i)\right] lseg=N1j=0∑Ci=0∑N[ωy^ilog(yi)+(1−y^i)log(1−yi)]
其中 N N N是 ground-truth 像素个数, C C C是目标类别数。 y ^ \hat{y} y^是分割标签, y y y是预测 BEV map。 ω \omega ω是正样本权重,计算 ground-truth 中正负样本比例得到。
2.3 实验
2.3.1 Datasets and Metrics
使用 nuScenes 基准,本文只关注 3D 目标检测和 BEV 分割。
对于 3D 检测,每个场景包含 20 秒视频帧,每 0.5 秒标注一帧画面的 3D 边框。与官方评测标准一样,报告了 NDS, mAP, mATE, mASE, mAOE, mAVE 指标。
对于 BEV 分割,使用 IoU 得分作为度量。Ground-truth 包括 3 个不同的类别:可行驶区域、车道线和 vehicle。车道线类别由 2 个 map layers 组成:Lane-Divider 和 Road-Divider。对于 vehicle 分割,将 3D ground-truth 边框投影到 BEV 平面,得到 BEV ground truth。Vehicle ground-truth 分割包括所有 Vehicle 类别的边框:自行车、巴士、汽车、建筑卡车、摩托车、导轨电车、一般卡车。
2.3.2 实现细节
主干网络是 ResNet 和 VoVNetV2。P4 特征(将 C4 和 C5 特征融合起来,分辨率为输入图像的 1 / 16 1/16 1/16)作为 2D 特征使用。3D 坐标的生成保持和 PETR 一致。使用了 AdamW 训练模型,weight decay 是 0.01 0.01 0.01。初始学习率为 2.0 × 1 0 − 4 2.0\times 10^{-4} 2.0×10−4,使用余弦退火策略。所有试验在 8 张 Tesla A100 上训练了 24 个 epochs,batch size 为 8。
对于 3D 检测,在 nuScenes 测试集上使用了 1500 个 det queries 进行试验。在 3D 世界坐标系初始化一组 learnable anchor points,通过一个 MLP 生成 det queries。分类损失使用 focal loss,3D 边框回归使用 L1 损失。使用 Hungarian 算法匹配 ground-truths 和预测框。
对于 BEV 分割,用 nuScenes 数据集提供的 map layers 生成 256 × 256 256\times 256 256×256 ground-truth BEV map。Patch size 为 16 × 16 16\times 16 16×16,共有 256 个 seg queries 来预测最终的 BEV 分割结果。
为了模拟外参噪声,作者对相机外参随机应用 3D 旋转,3D 旋转在真实场景中很常见。随机选择一个相机进行 3D 旋转。 α , β , γ \alpha,\beta,\gamma α,β,γ 分别是 X , Y , Z X,Y,Z X,Y,Z轴的角度,研究了多种旋转设定,最大的幅度是 α m a x , β m a x , γ m a x ∈ { 2 , 4 , 6 , 8 } \alpha_{max},\beta_{max},\gamma_{max}\in\lbrace 2,4,6,8 \rbrace αmax,βmax,γmax∈{2,4,6,8}, α m a x = 2 \alpha_{max}=2 αmax=2表示 α \alpha α是从 [ − 2 , 2 ] \left[-2,2\right] [−2,2]之间均匀采样。
2.4 Ablation
使用 VoVNet-99 为主干网络。主干网络在 DDAM15M 数据集和 nuScenes 上预训练。输入尺寸是 800 × 320 800\times 320 800×320,训练 24 个 epochs。Det queries 设为 900。
2.4.1 时域建模
研究了 3D coordinate alignment 和 feature-guided position encoder 的作用。如下表所示,没有 CA,PETRv2 只会提升 2.7 % 2.7\% 2.7%NDS, 0.5 % 0.5\% 0.5%mAP;加入了 CA,会进一步提升 2.1 % 2.1\% 2.1%NDS 和 0.9 % 0.9\% 0.9%mAP。对于 FPE,作者将 PETR 中的 3D PE 替换为 FPE,NDS 提升了 1.5 % 1.5\% 1.5%,mAP 却只提升 0.2 % 0.2\% 0.2%,而将 FPE 应用在 PETRv2 中,mAP 提升了 0.8 % 0.8\% 0.8%,说明 FPE 对时域建模有帮助。
2.4.2 Seg Query
研究了 seg query 的作用,以及每个 query 分配的 patch size 的影响。分割分支的损失权重为 1。如下面左边表格,当 patch size × 2 \times 2 ×2 时,queries 的个数就会相应地 × 1 / 4 \times 1/4 ×1/4。实验表明,当 query 个数为 256,patch size 为 32 × 32 32\times 32 32×32时表现最好。
2.4.3 多任务学习
作者也研究了多任务学习的影响。可以发现,3D 检测和 BEV 分割任务不能相互提升。当检测和分割分支的权重都是 1.0 1.0 1.0,BEV 分割在 IoU-lane 的表现会比只有分割分支时下降 3.1 % 3.1\% 3.1%。当分割分支的权重为 2 时,表现还算不错。
3. 有什么优点?
PETRv2 为 3D 感知任务提供了一个强大而统一的基线方案。