立体匹配模型量化后掉点较严重

用户您好,请详细描述您所遇到的问题,这会帮助我们快速定位问题~

1.芯片型号:X3

2.天工开物开发包OpenExplorer版本:主要在oe 2.3.3测,oe 2.6.2问题类似

3.问题定位:模型转换

4.问题具体描述

搭建了一个立体匹配任务的模型,训练和微调效果正常,但是量化完后掉点比较严重。

验证了makertbin过程中产生的original_float_model.onnx和optimized_float_model.onnx,和准备量化的浮点模型输出一致。

但是在X3上,采用多种量化策略得到的量化网络,用校准数据集进行测试掉点严重。结果如下

我们这边尝试QAT训练策略,请问能否同时协助微调网络量化?

您好,地平线工具链在持续迭代优化,为了给您提供更好的服务,希望您能抽出3分钟左右的时间,将您在使用工具链期间的感受和建议告诉我们,您的宝贵意见对我们很重要,非常感谢!-
问卷链接:地平线算法工具链使用满意度反馈

您好,在多种量化策略未能改善精度的情况下,建议您这边使用PTQ 精度Debug工具进行调优,具体使用方式参考XJ3用户手册 4.1.2.11. 精度debug工具 — Horizon Open Explorer 。使用流程和结果分析请参考这三篇社区文章:

1. 【PTQ精度debug示例】mnasnet_1.0_96精度问题分析 (horizon.ai)

2. 【PTQ精度debug示例】repvgg_b2_deploy精度问题分析 (horizon.ai)

3. 【PTQ精度debug示例】MobileVit_s精度问题分析 (horizon.ai)

您尝试后,可以提供给我们节点量化敏感度排序、量化累积误差曲线等信息进行分析~~

按照上述教程尝试了一下模型评估,得到的中间结果如下

下图为单独量化权重 / 激活的累积误差分布情况

可见精度问题来自激活量化。

随后分析了节点敏感

发现激活量化某些层问题较严重

随后比较了不同部分量化配置下的精度

发现每种配置下量化精度仍都有问题

您好,模型精度损失大部分来自于激活节点的累积量化误差,由于XJ3不支持设置节点以Int16量化,这边建议您根据激活量化敏感度排序的节点,依次设置其run_on_cpu,然后测试模型精度改善情况(可能会对模型性能有较大影响,需要您权衡);如果激活节点run_on_cpu后模型精度仍无较大的改善,目前只能建议您尝试QAT~

还麻烦您对我们的PTQ Debug工具做出评价,可以从使用上手、分析结果可视化以及对模型精度问题定位等角度反馈,您的反馈有助于我们迭代更好用的工具,We are glad to hear from you~~

再请问下,HZ_PREPROCESS_FOR_input.1_HzCalibration节点是最开始的之前仅做输入归一化的节点,为啥这个节点的cosine就很低了

您好,这个激活校准节点的输入是上一个节点,也就是Hz_PREPROCESS节点的输出,它的量化敏感度高只能说明当前节点(Hz_PREPROCESS的后一个节点,可能是Conv)的节点输入对量化敏感,和Hz_PREPROCESS节点无关,所以基于此您可以选择让Hz_PREPROCESS节点高精度输出或者当前节点高精度输入,是这样的逻辑。

Hz_PREPROCESS前处理节点如果要进行图像格式转换的操作,例如bgr转nv12,可能会对模型精度产生影响,因为nv12是有损格式。