网络架构
以上为官方示意图,其中包括左上部分的图像特征提取和左下部分的 2D 坐标到 3D 视锥的变化,query
为独立部分(参考 DETR),然后输入到 Transformer Decoder 中得到特征。
上图将示意图进一步细化得到的特征及编码的计算流程图,下面详细介绍各部分的计算逻辑。
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,整体计算度较大。
参考链接
- https://arxiv.org/abs/2203.05625
- https://github.com/megvii-research/PETR
- PETR head code
- PETR_transformer