这个情况有什么可能的原因吗?original_float_model和optimized_float_model都验证过和原本的onnx一致了
在编译的日志里有一些find illegal threshold的warning,我看onnx里这些层的threshold被设置成1了,这个是否有影响?
您好,关于 quantized_model 精度损失严重的问题,建议参考以下排查思路。
首先,请附上完整的编译 Log 文件和 YAML 配置文件,我们需要查看具体的层结构和报错上下文。
针对您提到的 “find illegal threshold warning”,这很可能是问题的核心原因:
- 现象分析:如果日志提示 threshold 非法并强置为 1,说明校准步骤未能正确统计到该层激活值的分布范围。
- 后果:虽然
calibrated_model看起来正常,但一旦转为真正的quantized_model(Int8),错误的 Scale/Threshold 会导致该层数值完全失真,从而导致精度崩塌。 - 排查校准数据:请检查您的校准数据集是否覆盖了该模型的典型输入场景,或者是否存在预处理不匹配的问题。
通用的精度排查标准流程(建议按此步骤操作):
- 建立 Baseline(基于 ONNXRuntime) 编写 Python 脚本使用原生 ONNXRuntime 推理原始浮点 ONNX,确保前后处理逻辑正确,以此作为精度对齐的基准。
- 排除前处理干扰(关键步骤) 在 yaml配置中,暂时将输入类型配置为
NCHW(FeatureMap 模式),并设置no_preprocess。- 这样编译出的模型不包含任何硬件前处理(Resize/NV12转RGB等),输入数据必须是已经处理好的 Float32 数据。
- 目的:保证输入给模型的数据与第一步中的浮点模型完全一致。
- 使用 HB_ONNXRuntime 验证 Quantized ONNX 在开发机上,使用地瓜工具链提供的
hb_onnxruntime加载quantized_model.onnx进行推理。 - 前处理加速 只有
quantized_model符合预期后,才会考虑在 yaml 中加入 NV12/RGB 等硬件加速相关的配置,进行前处理加速。
下面是yaml的配置和编译log,编译时设置了featuremap输入,且没有预处理。我用HB_ONNXRuntime验证过optimized_float_model的正确性了。麻烦帮忙看下threshold非法并设置为1的原因,谢谢!
20251204_makertbin.txt (247.8 KB)
校准文件应该是输入onnx前dump下来的数据应该没问题吧,我看编译成功余弦相似度度有0.99+,看yaml文件的配置没啥问题,可能需要参考进行精度调优。
精度调优:8.2. PTQ模型精度调优 — Horizon Open Explorer
精度debug工具详解:6.2.12. 精度debug工具 — Horizon Open Explorer
在部分层加入BN后缓解了一些,现在模型里还有很多ReLU的量化在精度debug里相似度都小于0.8(only_activation模式),我设置的是全int16量化,在编译日志里有很多ReLU层的requantize warning,是这个导致的吗?

