该示例为参考算法,仅作为在J6上模型部署的设计参考,非量产算法
0 性能精度指标
PETR模型配置及指标:
dataset | backbone | input_shape | num_query | NDS(浮点) | NDS(定点) | mAP(浮点) | mAP(定点) | J6M-Latency | J6M-FPS |
|---|---|---|---|---|---|---|---|---|---|
Nuscenes | Eficientnet-B3 | 6x3x512x1408 | 900 | 0.3881 | 0.3799 | 0.3031 | 0.2958 | 33.13 | 30.51 |
注:
建议使用小分辨率对模型性能会更友好:例如输入为[4,3,480,640]时,性能表现为双核62FPS,以实际需求为主
Nuscenes 数据集官方介绍:nuScenes
1 模型介绍

PETR 模型结构图
PETR模型主要包括以下部分:
1.1 改动点说明
替换了backbone,由resnet50的backbone替换回了同级别的efficientnet b3
Decoder部分,query由原来的3维(1,900,256)/ NQC 改成了(1,256, 4, 128)/NCHW,逻辑实现上与公版一致
使用1x1的卷积替换了公版的linear,减少transpose和reshape的操作
LayerNorm2d为地平线内部自实现算子,性能更高
1.2 源码说明
1.2.2 img_encoder
来自6个view的image作为输入通过共享的backbone(efficientnet-b3)输出经过encoder后的feature,feature_shape为(6*B,C,1/2H,1/2W)。encoder即对多个view的img_feature 做特征提取,过程见下图:

1.2.3 head

由上图可知,PETR的head层完成特征提取和生成预测目标的全流程,通过生成的3D coords融合位置编码生成成pos_embed ;根据num_query生成可学习的query_embed;再将2D feature 做1x1的conv映射,将以上做为transformer解码器的输入。经由transfomer层做注意力计算生成target,通过cls、reg分支得到预测类别和位置。
2D-Features 映射
将2D feature使用1x1的卷积映射:
3D Coords 生成
生成位置编码
3D PE 生成
融合位置编码
为了得到位置信息,将位置信息添加到PE中,融合方式为add
生成query 编码
生成可学习的reference_points(queries) ,转换为3D的query,然后将其编码(conv+relu+conv),最终形成query_embed 。
transformer层
完成2D features到3D features的 特征转换,该部分会在1.2.4章节详细说明。
预测层
预测分支分为reg_branch和cls_branch,PC端在head层完成根据reference_points和reg计算bbox过程。
1.2.4 PETR Transformer
由DecoderLayer构成:
Decoder层数为6层,上一层的输出为下一层的输入,每层主要完成两个注意力计算:在query之间做self-attention,再和图像特征之间做cross-attention。整理流程如下图:

Self Attention
该层为query之间的4维自注意力层,q=k,避免不同的queries 预测同一个目标。
CrossAttention
