专栏算法工具链地平线bev参考算法板端一致性验证教程

地平线bev参考算法板端一致性验证教程

芯链情报局2023-09-01
210
0

1. 前言

由于部署时数据来源的硬件不同以及应用开发的高效性要求,往往会使得在板端部署阶段的数据准备操作与训练时有所差异,导致在同样的输入下,量化模型的输出结果和板端部署模型的输出结果不一致。本文将基于开发者社区中已经发布的地平线bev参考算法板端输入数据准备教程,以bev_mt_lss参考算法为例,介绍PC端和板端输出一致性验证的过程。

2. PC端输出获取

PC端输入的获取主要包括输入数据准备、输出节点配置和运行推理脚本这三个步骤,下面将对其进行逐一介绍。

2.1 输入数据准备

bev_mt_lss参考算法的PC端输入为:

输入

shape

备注

6V图像

6x3x256x704

nuscenes数据集中6张不同相机位置的图像

homography矩阵

6x4x4

获取到6V图像和homography矩阵后,配置config文件的infer_cfg字段中输入路径参数infer_inputs:

bev参考算法的输入的6V图像的有顺序的,所以需要在config文件的process_inputs函数中定义输入图像的顺序,如下所示:

6V图像的输入顺序为:FRONT_LEFT,FRONT,FRONT_RIGHT,BACK_LEFT,BACK,BACK_RIGHT

2.2 输出节点配置

2.2.1 dump分割头输出

在docker环境下,进入到/usr/local/lib/python3.8/dist-packages/hat/models/task_modules/fcn/head.py目录下,在FCNHead类的forward函数中保存分割头的输出,如下所示:

2.2.2 dump检测头输出

本节以bev参考算法检测头的“height"属性输出为例,介绍如何导出PC端的检测头输出,将其保存为txt文件。
在docker环境下,进入到/usr/local/lib/python3.8/dist-packages/hat/models/task_modules/centerpoint/head.py目录下,在TaskHead类的forward函数中dump检测头的输出,如下所示:

本节仅选择了检测头的一个类别的height输出一致性的验证,也可以选择在/usr/local/lib/python3.8/dist-packages/hat/models/task_modules/centerpoint/head.py中保存检测头的其它属性输出来验证一致性。

2.3 运行infer.py

最后,运行推理脚本infer.py:

运行infer.py之前请参考【参考算法】地平线 Bev_mt_lss 参考算法-v1.2.1 3.1.3节对config文件进行必要的修改。

运行infer.py完毕后,生成的seg_pred.txt即为模型的分割头输出,output_height.txt为检测头的“height”输出。

3. 板端输入获取

板端端输入的获取主要包括输入数据准备和运行hrt_model_exec工具这两个步骤,下面将对其进行逐一介绍。

3.1 输入数据准备

输入

shape

备注

6V图像(NV12)

6x3x256x704

fpoints(int16)

10x2x128x128

dpoints(int16)

10x2x128x128

3.2 运行hrt_model_exec工具

获取到bev_mt_lss板端hbm的3个输入后,在板端运行hrt_model_exec工具来dump模型的输出,命令如下:

工具运行完成后,会在当前路径下生成数个txt文件,分割头对应的输出是model_infer_output_0.txt,检测头的“height”属性对应的输出是model_infer_output_32.txt文件。

可通过hrt_model_exec model_info --model_file model.hbm来获取模型输出节点的信息。

4. 输出结果对比

将2.3节导出的PC端分割头的输出seg_pred.txt和检测头输出output_height.txt分别与3.2节dump出的model_infer_output_0.txt和model_infer_output_32.txt对比,如果数值相同,则说明一致性验证通过。

算法工具链
征程5官方教程
评论0
0/1000