专栏算法工具链使用HB_ONNXRuntime推理QAT模型与convert_fx结果不一致

使用HB_ONNXRuntime推理QAT模型与convert_fx结果不一致

ArthurThomas2023-08-28
21
4
1.芯片型号:X3
2.天工开物开发包OpenExplorer版本:hbdk-3.47.5、horizon_nn-0.20.1、horizon_tc_ui-1.20.1
3.问题定位:模型转换
4.问题具体描述

使用HB_ONNXRuntime推理QAT模型与convert_fx结果不一致,具体步骤如下

1. 使用QAT训练完异构(softmax在CPU)模型后,转换onnx,转换部分代码见图1

2. 使用hb_mapper嵌入前处理,得到量化onnx,转换部分代码见图2
3. 将qat模型使用convert_fx转换,并手动前处理进行推理,部分代码和结果见图3,4
4. 使用HB_ONNXRuntime推理与步骤3一致的图片,不进行前处理,部分代码和结果见图5,6

图1

图2

图3

图4

图5

图6

算法工具链
评论1
0/1000
  • 颜值即正义
    Lv.2
    您好,根据您这边的描述,我门这边有以下建议:
    1. 首先建议您这边推理一下QAT模型、convert_fx后的int模型,和hb_mapper生成的quantized_onnx模型,验证是否是因为量化导致的误差;
    2.检查输入数据的准备和HB_ONNXRuntime接口的使用是否正确,a.qat模型的输入数据准备操作应该和训练数据的操作相同(resize,e,归一化等);b.quantized_onnx模型的的输入需要-128,可在sess.run接口中配置,

    3.验证流程和onnx的推理可以参考:https://developer.horizon.cc/forumDetail/118364000835765839;https://developer.horizon.cc/forumDetail/71036815603174578 ;

    2023-08-30
    0
    3
    • ArthurThomas回复颜值即正义:
      验证了转换过程的中间产物optimized_float_modelquantized_model,两模型采用的输入内容一致,除了数据类型和排布有差异。其中opt结果正确,quant结果错误。相关代码和结果如下
      2023-08-31
      0
    • ArthurThomas回复颜值即正义:
      另外,推理original_float_model时报错
      2023-08-31
      0
    • 颜值即正义回复ArthurThomas:

      1. 对于optimized.onnx和quantized.onnx 推理结果差距较大的问题,可以再多推理几张图片验证一下,如果确定是量化误差导致的精度问题,建议您这边先使用精度调优手段,若无效果再使用量化精度dubug工具来定位引起量化误差的算子,可以参考以下链接使用debug工具https://developer.horizon.cc/api/v1/fileData/horizon_j5_open_explorer_cn_doc/oe_mapper/source/ptq/ptq_tool/accuracy_debug.html;

      2. 对于original_float_model推理报错的原因,需要你这边提供一下onnx模型看一下

      2023-08-31
      0