芯片型号:J3
天工开物开发包 OpenExplorer 版本:horizon_xj3_open_explorer_v2.6.4-py38_20240319
问题定位:模型量化编译hbm文件时报错
问题具体描述:我们自己搭建的模型,浮点训练、校准和QAT训练都正常,但在最后做模型量化编译时出现问题,具体报错信息如下:

log全文如下:
芯片型号:J3
天工开物开发包 OpenExplorer 版本:horizon_xj3_open_explorer_v2.6.4-py38_20240319
问题定位:模型量化编译hbm文件时报错
问题具体描述:我们自己搭建的模型,浮点训练、校准和QAT训练都正常,但在最后做模型量化编译时出现问题,具体报错信息如下:

log全文如下:
你好,在 common.py 里的 compile 前对量化模型包了一层 quantized_model = InversePermuteWrapper(quantized_model), 这一步会在模型最外层强制插入一次 NHWC/NCHW 的 transpose。 在使用 input_source = pyramid 的情况下,模型内部已经采用了硬件 pack 的 layout(如 NHCW_8W4C / 16W16C),再叠加这次 transpose 会触发 HBDK 当前不支持的 layout conversion 路径,从而导致编译失败。 我这边验证过:去掉 quantized_model = InversePermuteWrapper(quantized_model) 后,模型可以正常编译生成 hbm,说明网络结构和量化本身是 OK 的。


是这样的,ddr 和 pyramid 是板端的器件。配置 ddr 是设置 hbm 的输入数据格式为 rgb 格式的,如果配置了 ddr ,那你得准备int8的数据(通过hrt工具也可以看模型的输入输出)。配置 pyramid 是设置 hbm 的输入数据格式为 nv12 的数据,那你在推理时就应该准备 nv12的数据。你配置的是 pyramid ,所以要准备nv12的数据,OE 包里有相关示例。里面有转换函数 read_image_2_tensor_as_nv12,你可以参考一下。 路径在/horizon_xj3_open_explorer_v2.6.4-py38_20240319/ddk/samples/ai_toolchain/horizon_runtime_sample/code/00_quick_start/src/run_mobileNetV1_224x224.cc