专栏算法工具链【地平线工具链参考算法|J6|HEAL】地平线 PETR_v3.0

【地平线工具链参考算法|J6|HEAL】地平线 PETR_v3.0

芯链情报局2026-08-25
13
0

该示例为参考算法,仅作为在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模型主要包括以下部分:

Part1—2D feature extra:对输入的6V图像经过2D CNN提取多视图2D图像特征。
Part2—3D Position Encoder:生成3D坐标,对3D坐标融合位置编码形成3D Position Embedding。
Part3—transfomer Decoder:transformer解码器,将query做自注意力后再与图像特征做交互注意力,最后通过FFN层得到目标的类别分数和位置。

1.1 改动点说明

  1. 替换了backbone,由resnet50的backbone替换回了同级别的efficientnet b3

  2. Decoder部分,query由原来的3维(1,900,256)/ NQC 改成了(1,256, 4, 128)/NCHW,逻辑实现上与公版一致

  3. 使用1x1的卷积替换了公版的linear,减少transpose和reshape的操作

  4. 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 做特征提取,过程见下图:

流程图.jpg
对应代码:heal/models/backbones/efficientnet.py

1.2.3 head

流程图1.jpg

由上图可知,PETR的head层完成特征提取和生成预测目标的全流程,通过生成的3D coords融合位置编码生成成pos_embed ;根据num_query生成可学习的query_embed;再将2D feature 做1x1的conv映射,将以上做为transformer解码器的输入。经由transfomer层做注意力计算生成target,通过cls、reg分支得到预测类别和位置。

对应代码:hat/models/task_modules/petr/head.py

2D-Features 映射

将2D feature使用1x1的卷积映射:

3D Coords 生成

实现为position_embeding,通过feat的shape和homo生成3D coords:

生成位置编码

位置编码记录图像的位置信息,编码方式为正弦编码,实现为 SinePositionalEncoding3D

3D PE 生成

对3D coords 编码,实现为conv+relu+conv,输出的C为embed_dims

融合位置编码

为了得到位置信息,将位置信息添加到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。整理流程如下图:

流程图2.jpg

Self Attention

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

self_attns为多头注意力机制MultiheadAttention,具体实现的代码路径为heal/models/base_modules/attention.py:

CrossAttention

该层为交叉注意力层,为MultiheadAttention,将2D feature融合3D PE作为key,该层在特征中实现提取和聚集目标信息,参数如下:

算法工具链
技术深度解析官方教程征程6
评论0
0/600