bin模型精度下降较严重

问题总结

你的情况很典型:quantized.onnx精度正常(87%),但bin模型精度严重下降(51%)。根据admin回复和社区案例,核心排查方向如下:


排查路径

第一步:运行精度Debug工具

# 使用hb_mapper的精度debug功能
hb_mapper debug --model_config your_model.yaml \
                --output_dir ./debug_output \
                --mode cosine_similarity

重点关注:

  • 余弦相似度 < 0.98 的层
  • 你数据中 spatial_conv 相关层相似度已降到 0.971,这些是重点怀疑对象

第二步:检查编译Log中的Warning

搜索日志中是否有以下关键字:

grep -i "illegal threshold" make_rtbin.log
grep -i "requantize" make_rtbin.log
  • find illegal threshold → 校准失败,threshold被强置为1
  • requantize warning → ReLU等激活函数量化问题

第三步:快速验证方案

方案A:全局Int16测试(验证是否是量化精度问题)

# 在yaml配置中添加
set_all_node_int16: true

重新编译bin模型,测试精度是否恢复。如果恢复到85%+,说明是Int8量化参数问题。

方案B:针对问题层设置Int16

custom_node_config:
  - layer_name_pattern: ".*spatial_conv.*Conv"
    precision: "int16"

第四步:校准数据集检查

检查项 要求
数据量 100-500张
场景覆盖 覆盖典型输入场景
预处理 与训练时完全一致
数据格式 是输入onnx前dump的原始数据

社区参考资源

帖子 关键解决方案
量化后calibrated正常但quantized精度损失 使用FeatureMap模式排除前处理干扰
PTQ精度调优—Int16量化 对敏感层设置int16平衡精度/性能
算法工具链量化精度问题 quantized与bin不一致的排查方法

建议操作顺序

1. 先试 set_all_node_int16: true → 验证是否是量化精度问题
2. 如果有效,用debug工具定位具体问题层
3. 只对问题层设置int16,其他保持int8
4. 如果仍无效,检查校准数据集质量

需要进一步帮助的话,可以提供:

  • 完整的编译log(特别是warning部分)
  • YAML配置文件
  • 精度debug工具输出的累计误差图

这样可以更精准定位问题节点。