网络架构

PETR

以上为官方示意图,其中包括左上部分的图像特征提取和左下部分的 2D 坐标到 3D 视锥的变化,query 为独立部分(参考 DETR),然后输入到 Transformer Decoder 中得到特征。

PETR

上图将示意图进一步细化得到的特征及编码的计算流程图,下面详细介绍各部分的计算逻辑。

PositionEncoder

首先对图像特征计算每个位置在原始图像坐标和3D深度位置下的向量嵌入,同时过程中考虑是否在 BEV 范围内进行掩码过滤。输出的维度为 Batch, Num_camera, Embed_dims, Feature_h, Feature_w 的向量 pos_embed;然后对每个位置进行 Sin/Cos 的位置编码得到 pos_encoding;最后两个向量相加得到最终的位置嵌入 pos_embed

QueryEncoder

通过初始化 num_queryx3 的 query 嵌入向量,再结合一个轻量的嵌入网络,得到 query_embed

PETRTransformer

只保留了 Decoder 结构,然后经过 [self_attn, norm, cross_attn, norm, fft, norm] 6层得到最终的输出,其中 attn 中会使用多个 head 进行多维特征提取。

个人理解

本文工作的基本思路与 DETR 类似,区别点是给图像特征生成了 3D 位置空间的嵌入编码,而 query 为随机生成,通过学习的方式得到 query 的参数从而使得模型能有较好的检测结果。另外,在特征计算阶段,query 是与全图的 feature 计算的 attention,整体计算度较大。

参考链接

  1. https://arxiv.org/abs/2203.05625
  2. https://github.com/megvii-research/PETR
  3. PETR head code
  4. PETR_transformer