专栏算法工具链PTQ量化后模型输入数据类型

PTQ量化后模型输入数据类型

已解决
老超20242024-10-18
127
13

您好,~Thanks♪(・ω・)ノ

1. 芯片型号:J6E

2. 天工开物开发包 OpenExplorer 版本:v3.0.22

3. 问题定位:模型转换

4. 问题具体描述:

PTQ量化时模型沿batch维度拆分后y, uv的输入数据类型为uint8, 在对量化后的bc模型推理时,如果对图像进行前处理操作(如减均值除方差,之后转nv12再拆y,uv)得到的输入数据为浮点类型。这两者无法对齐,如果强制将输入数据转为uint8,精度又无法保证。请问是否需要在沿batch维度拆分时对模型输入类型进行修改?
算法工具链
征程6
评论2
0/1000
  • Huanghui
    Lv.5
    你好,对量化后的bc模型推理时,输入模型的数据就是做了w32对齐的uint8的y + uv的数据,如果需要前处理操作,你可以将这部分计算配置到yaml的mean_value和scale_value 中。
    2024-10-18
    0
    11
    • 老超2024回复Huanghui:

      感谢回复!目前PTQ量化过程中使用了两次yaml文件:

      第一次是在模型沿batch维度拆分之前做了一次量化编译生成 sparse_256x704_nv12_ptq_model.onnx 使用了yaml文件

      第二次是在沿batch维度拆分之后使用拆分后的模型又做了一次量化编译生成.bc模型 使用了yaml文件。

      我按如下修改yaml文件之后

      执行第一步操作后出现报错:(意思是featuremap不支持mean、scale

      还是只在第二步修改yaml文件执行编译就行?

      2024-10-18
      0
    • Huanghui回复老超2024:

      只在第二步修改yaml文件执行编译就行!!!

      2024-10-18
      0
    • 老超2024回复Huanghui:

      好的,谢谢

      2024-10-18
      0
    • 老超2024回复Huanghui:

      你好,通过这种方式量化出的bc模型,通过执行samples/ai_toolchain/horizon_model_convert_sample/02_bev/01_sparse4d/04_inference.sh,得到的推理结果经过decoder输出的scores值都极小。请问OE包中是否有类似Sparse4D这种需要沿batch维度拆分的PTQ量化示例可供对比分析?


      2024-10-21
      0
    • Huanghui回复老超2024:

      你好,看了一下,目前OE包中PTQ量化示例都是单输入的,没有沿batch维度拆分的示例,但是你可以同样存在输入为Y+UV的示例,比如horizon_model_convert_sample/04_detection/08_yolov4,相比你目前的模型输入较简单,但是NV12输入部分的逻辑可供参考。

      2024-10-22
      0
    • 老超2024回复Huanghui:

      你好,对比了yolov4示例中的推理代码,目前Sparse4D量化的bc模型也是按照这个推理流程设置输入的,推理输入设置如下:

      但执行04_inference.sh,模型推理输出结果如下:


      使用OE包中下载得到的Sparse4d qat.bc模型使用相同输入得到结果为

      对比两种bc模型的推理结果,两者输出的四种结果shape相同,但数值却不在一个量级。还请帮忙排查一下,谢谢!

      完整工程代码如下

      链接: https://pan.baidu.com/s/1ODsB5N74gJ_OqrpTo-rqdQ?pwd=1234 提取码: 1234

      2024-10-22
      0
    • Huanghui回复老超2024:

      查代码嘛,这个需要的时间比较久,我尽量安排时间验证一下哈,

      2024-10-22
      0
    • 老超2024回复Huanghui:

      你好,数据预处理代码比较简单,仅是6张图padresize后转nv12再拆分yuv给到模型输入。目前在修改yaml文件后执行量化编译时没有余弦相似度输出,无法判断PTQ量化后模型的精度问题,还请尽快安排验证,非常感谢!

      2024-10-22
      0
    • Huanghui回复老超2024:

      你上面的对比没有意义呀,QAT和PTQ是两套不同的流程,你用PTQ的结果跟QAT的对比?即使要对比量化损失也是PTQ流程中量化之前和量化之后的精度对比呀!

      2024-10-23
      0
    • 老超2024回复Huanghui:

      但应该也是一个数量级的吧,目前两者输出结果差别比较大,解码出来的结果也完全不一样。


      2024-10-23
      0
    • Huanghui回复老超2024:
      这样理解吧:QAT模型跟PTQ这个模型输出前的处理逻辑是不是一样的都很难说,如果不能确认他们具有一样的计算逻辑,那这个差距是很难说是对还是错的。

      另外,

      1. HBRuntime是可以推理浮点模型的,而浮点模型是没有量化损失的,你可以试试推理的结果是不是跟QAT的是一个量级的。

      2. hb_verifer这个工具,可以对比量化前后模型的一致性,如果ptq量化前后模型一致性基本是OK的,那量化损失就是可以接受的,就不是导致这个问题的原因,

      2024-10-23
      0
  • Huanghui
    Lv.5

    收到!

    2024-10-18
    0
    0