PETR系列(PETR,PETRv2,StreamPETR)

paper 发表地方 代码链接 Nusnenes_test(NDS) Nuscenes_val(NDS)
PETR ECCV2022 pytorch代码 0.504 0.442
PETRv2 ICCV2023 pytorch代码 0.591 0.524
StreamPETR ICCV2023 pytorch代码 0.676 0.592

一、PETR: Position Embedding Transformation for Multi-View 3D Object Detection
PETR系列(PETR,PETRv2,StreamPETR)_第1张图片
出发点(DETR3D方法中存在的问题):

  • DETR3D中通过预测的3D点投影到图像平面后获取图像特征,那么如果所预测的3D点不准确的话,获取到图像特征有可能不包含物体
  • 只是考虑了图像投影点周围的特征,没有考虑全局特征。
    考虑到上述两个问题,作者想去设计一种不包含繁琐的2D-3D之间相互转换的检测框架。这其中需要解决的一个问题就是如何通过某种媒介来将2D图像特征转换成3D的感知特征。作者通过SR方法中低分辨率图像通过利用高分辨率图像中的一些信息来恢复高分辨率图像得到启发。通过将3D空间的位置编码特征融入到2D图像特征中来获取3D感知特征后用于最终的预测。

具体流程如下:
利用backbone提取图像特征,同时构建相机视锥体,之后利用外参将视锥坐标点转换到3D空间中,将图像特征和3D坐标输入到所设计的3D位置编码网络中来获取3D感知特征(这部分如下图所示)。之后将所生成的3D感知特征输入到Transformer中来的到最后的分类结果。
PETR系列(PETR,PETRv2,StreamPETR)_第2张图片
实验

  • 验证所提出位置编码(3D坐标经过3D Position Embedding的输出)的有效性
    通过利用前向摄像机图像所生成的位置编码中选取3个点,与其他方向的摄像机的位置编码进行相似度计算,最后可以得到如下结果,从图中可以看到所选取的点之和对应位置区域有响应(黄色区域),其他位置没有,证明了所提出位置编码的有效性。
    PETR系列(PETR,PETRv2,StreamPETR)_第3张图片
    同时作者比较利用原始2D位置编码或者融入图像序号的2D位置编码来代替所提出的3D位置编码实验结果如下表,说明利用3D位置编码的有效性
    PETR系列(PETR,PETRv2,StreamPETR)_第4张图片
  • 相机视锥空间的影响:
    PETR系列(PETR,PETRv2,StreamPETR)_第5张图片
  • 3D位置编码的影响

PETR系列(PETR,PETRv2,StreamPETR)_第6张图片

二、PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images
PETR系列(PETR,PETRv2,StreamPETR)_第7张图片
PETRv2是将PETR扩展到时序模型以及BEV语义分割上的一个新的模型。这里主要说明一下PETRv2和PETR有什么不同。

  • PETRv2由于引入了时序的感念,所以需要进行时序上的对齐,之后将对齐后的坐标点拼接起来作为新的坐标点,过程如下:
    P i l ( t ) = T c i ( t ) l ( t ) K i − 1 P m ( t ) \begin{align} P_i^l(t) = T_{c_i(t)}^{l(t)}K_i^{-1}P^m(t) \end{align} Pil(t)=Tci(t)l(t)Ki1Pm(t)
    首先利用上述公式将像素坐标转换到lidar坐标,之后将t-1时刻的坐标通过变换转移到t时刻的坐标,过程如下:
    P i l ( t ) ( t − 1 ) = T l ( t − 1 ) l ( t ) P i l ( 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 \begin{align} P_i^{l(t)}(t-1) = T_{l(t-1)}^{l(t)}P_i^{l(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}} \end{align} Pil(t)(t1)=Tl(t1)l(t)Pil(t1)(t1)Tl(t1)l(t)=Tetl(t)Tge(t)Tge(t1)1Te(t1)l(t1)1
    之后将 [ P i l ( t ) ( t − 1 ) , P i l ( t ) ( t ) ] [P_i^{l(t)}(t-1), P_i^{l(t)}(t)] [Pil(t)(t1),Pil(t)(t)]拼接起来来完成时序对齐
  • PETRv2在进行3D特征感知编码的时候不单单利用坐标,同时考虑了2D图像信息,具体过程如下图:
    PETR系列(PETR,PETRv2,StreamPETR)_第8张图片

三、Exploring Object-Centric Temporal Modeling for Efficient Multi-View 3D Object Detection
PETR系列(PETR,PETRv2,StreamPETR)_第9张图片
出发点: 如上图所示,首先作者将现有的基于时序的BEV方法分为两类(a,b),其中第一类是在BEV特征上进行时序融合,该类方法是将之前帧的BEV特征通过warp操作来转换到当前帧。但是这种方法如果想对移动的物体建模,就需要很大的感受野;第二类是基于感知的方法,该类方法可以通过稀疏的query来对移动的物体进行建模,但是由于每次都要查询之前所有的帧,会带来巨大的计算量。(作者还对上述两类方法针对时序特征如何进行融合的做了总结,大致意思就是上边概述的。)

针对上述两类方法的分析,作者提出了他们所设计的StreamPETR,设计了一种以对象为中心的时序模型。作者利用稀疏query作为中间表示,来对移动对象进行建模并有效地传播时序信息。
PETR系列(PETR,PETRv2,StreamPETR)_第10张图片
StreamPETR分为三个部分:2D backbone,循环记忆序列(memory queue)以及一个信息传播的transformer。2D的backbone就是目前3D目标检测中常用到的,这里就不介绍了,主要介绍一下memory queue和信息传播的transformer。

Memory queue:
首先memory queue的大小是 N ∗ K N*K NK的,其中N=4表示的是帧数,K=256表示每帧中对应的前k个分类分数最高的前景物体(也就是原来的query,不过这里要融入其他的一些信息)。
其次memory queue中对于每一帧的某个前景物体保存的是时间间隔,上下文编码,物体中心,速度以及自身姿态的矩阵。
memory queue的作用用来保存之前帧的信息。之后在信息传播transformer中来利用。

Propagation Transformer
PETR系列(PETR,PETRv2,StreamPETR)_第11张图片
该部分如上图所示,分为三个部分:MLN(运动感知归一化层),Hybnd Attention(混合注意力层),跨模态注意力。
其中MLN层是为了将之前帧的物体对齐到当前帧,混合注意力是将当前帧与之前帧进行时序融合,最后的跨模态注意力是将凸显该特征信息进行聚合。

MLN: 该部分针对静态物体和动态物体分别进行建模,首先针对静态物体只需要考虑将之前帧通过姿态矩阵进行转换就行,但是对于运动的物体除了简单的平移之外还需要详细考虑物体的形变(刚体可以通过放射变换来实现),所以作者通过利用保存的物体属性(姿态矩阵,速度,时间间隔)通过一个MLP网络来预测放射变换的系数和偏移。之后对物体中心和上下文编码同时应用来得到混合注意力的key和value的输入。

Hybnd Attention:该部分将通过MLN的特征和当前帧的特征进行拼接作为key和value,为了利用空间和文本编码的先验信息,query在生成的时候包含了两部分一部分是之前帧传播过来的,另一部分是随机初始化的。之后对query,key,value进行cross attention的操作。
Cross Attention:该部分将图像特征作为Key和Value并融合了位置编码信息,之后进行Cross Attention的操作。

你可能感兴趣的:(单图像3D目标检测,计算机视觉,目标检测,深度学习)