前言
从J5工具链的1.1.33版本开始,板端工具hrt_model_exec新增了两个参数,分别是dump_intermediate和hybrid_dequantize_process:前者用于dump模型每层的输入输出,是否dump BPU子图内部的输出取决于模型编译时的yaml参数设置;后者用于将模型的int输出反量化成float保存,若输出已经是float则直接保存。
dump_intermediate
基本介绍
可设置的值和对应功能如下表所示:
值 | 作用 |
|---|---|
0 | 不dump数据 |
1 | 数据保存类型为bin,其中BPU节点输出为aligned*数据 |
2 | 数据保存类型为bin和txt,其中BPU节点输出为aligned*数据 |
3 | 数据保存类型为bin和txt,其中BPU节点输出为valid*数据 |
https://developer.horizon.cc/forumDetail/118364000835765837
**作为模型输出节点的BPU节点依然是aligned数据,
使用示例

resnet18.bin
这是resnet18.bin模型的结构图,NV12格式的输入数据首先转换成YUV444格式送入BPU子图执行计算,之后依次经过反量化、Softmax、Reshape共3个CPU节点。在J5板端,可以使用以下命令验证dump_intermediate参数的效果:
执行结束后,同目录下会出现多个.bin文件,BPU子图和CPU节点的输入输出数据均已得到保存。
与layer_out_dump的关联
在模型编译阶段使用的yaml文件中,模型参数组有一个layer_out_dump参数,该参数用于指定混合异构模型是否保留输出BPU子图中间层值的能力,默认为False。若设置为True,则使用dump_intermediate时,BPU子图内部每个节点的输出数据都会被保存下来。
与环境变量对比
J5板端的环境变量_HB_DNN_DUMP_INTERMEDIATE_同样能起到dump数据的效果,使用方式如下:
该环境变量和dump_intermediate参数都会受到yaml配置文件中layer_out_dump参数的影响,但二者的使用场景存在差异:环境变量在运行自己编写的代码调用模型推理时起作用,而dump_intermediate参数用于hrt_model_exec的infer和perf功能。需要注意的是,二者互不干扰,配置一个并不会影响另一个的效果。
hybrid_dequantize_process
基本介绍
该参数只支持hrt_model_exec的infer模式,使用时需要同时配置enable_dump=true以dump模型的输入输出数据。
若设置hybrid_dequantize_process=true,则反量化整型输出数据,将所有输出按float类型保存为txt文件,其中模型输出为valid数据,支持配置dump_txt_axis参数控制换行规则和dump_precision参数控制小数点位数(这两个参数的使用说明可查阅J5工具链手册5.5.2章节),需要注意的是,该功能只适用于输出维度是四维的模型。
若设置hybrid_dequantize_process=false,则直接保存模型输出的aligned数据,不做任何处理。
使用示例

resnet18_modified.bin
这是resnet18_modified.bin模型的结构图,模型尾部原有的反量化、Softmax、Reshape算子均已被删除。在J5板端,可以使用以下代码验证hybrid_dequantize_process参数的效果:
执行结束后,同目录下会出现两个新文件:
打开txt文件,保存的float数据共有1000行,对应了模型的1000个分类输出。
一致性验证

resnet18_dequantize.bin
之后运行如下命令:
打开生成的txt文件,查看保存数据,与上一步生成的保存数据完全相同。
至此,一致性验证完成,配置hybrid_dequantize_process参数保存的float数据正确。
