专栏算法工具链hbdk-model-verifier源码解析

hbdk-model-verifier源码解析

kuku2024-08-16
60
0

对于pytorch模型,hbdk-model-verifier工具是用来验证 pt 和 hbm 模型一致性的,同时该模型也会保存输入输出

一般来说,对于 pyramid 输入的数据(nv12)类型,正确的数据预处理方法是:

  • 板端hbm,直接给模型。

  • 仿真器pt,nv12转yuv444,减128,除128后,给模型

那hbdk-model-verifier工具,是怎么验证这两个模型一致性的呢?

hbdk-model-verifier的源码在工具链的dockers路径下,

/usr/local/lib/python3.8/dist-packages/hbdk_model_verifier

下面是整体代码的总结:

hbdk_model_verifier的数据来源有两个,随机 or 指定 , 通过 图像来源(pyramid/resizer/ddr) 对数据做不同的处理,并存储成input_data,
  1. 生成ddr的.bin

  2. 生成pyramid的 .y 或 .yuv

  3. 生成resizer的 .y 或 .yuv

bpu推理:上面的存的input_data直接给

pt推理:

ddr 直接给

pyramid 经过 convert_nv12_to_yuv444_int8() 存原图数据

Resizer 经过 convert_nv12_to_yuv444_int8() 存roi数据

convert_nv12_to_yuv444_int8 () 归一化只做了-128, 除128也是需要做的,猜测是别的做的( 这块处理完后会调hbdk-pred工具,是一个二进制文件,没有源码)。

输入数据处理

cd verifier.py 查看main(), 准备输入数据是下面这部分代码:

生成随机输入数据

判断数据来源

info.generate_random_input_file() 这个函数首先会判断input_source是那种类型,

  • ddr

  • pyramid

  • resizer 略

存数据

指定输入数据

def generate_data_for_bpu(self):

判断输入数据类型

ddr

  • 指定后缀.bin

pyramid

  • 指定后缀.y或.yuv

  • 判断图片尺寸是否正确

resizer

  • 指定后缀.y或.yuv

存数据

推理hbm模型(bpu/simulator)

bpu上推理

前面都是一些准备的代码,推理调的这个接口

simulator上推理

推理pt模型

  1. 处理输入数据

  2. 推理模型

处理输入数据时,会判断数据来源,调用不同的函数

以pyramid为例:

算法工具链
社区征文杂谈
评论0
0/1000