专栏算法工具链j3 对yolov8n-seg模型进行QAT后,板端推理后分割指标精度下降较多

j3 对yolov8n-seg模型进行QAT后,板端推理后分割指标精度下降较多

解答中
默认478722026-03-07
29
6
  1. 芯片型号:J3

  2. 天工开物开发包 OpenExplorer 版本:horizon_xj3_open_explorer_v2.6.4-py38_20240319

  3. 问题定位:参考官方的流程进行qat,编译得到hbm后推理并用自己的后处理代码离线评估时,发现部分指标下降很大,特别是分割的指标,检测的指标还好

首先进行浮点训练,得到float-checkpoint.ckpt,评估得到精度指标如下:

进行qat训练,得到qat-checkpoint.ckpt,评估得到精度指标如下:

再进行int_infer评估得到指标如下:

在x86上经过float-qat-int_infer后,从指标上来看基本上没有损失,于是进行最后的编译步骤,得到上板的模型hbm,再编写部署代码,在板端生成推理数据后,传至开发主机,基于评测代码进行离线评估,精度指标如下:

分析精度损失:
模型在板端量化部署后整体表现出“基础检测坚挺、精细分割与小目标受损严重”,核心的大目标检测能力例如Driving_area 的 Box/Mask mAP50 仅从 0.970/0.968 微跌至 0.958/0.957(-1%),整体 Box mAP50 从 0.382 降至 0.352(-3%),均处于 INT8 量化的正常损耗水位;但在对边缘贴合度要求高的指标和小目标类别上出现明显掉点,整体 Mask mAP50-95 从 0.237 跌至 0.157(-8%),Driving_area 的 Box mAP50-95 降至 0.802(-14.7%),同时小目标如 Road_cone 的 Mask mAP50 降至 0.121(-6.4%),Bollard 和 Obstacle 的 Mask P 更是分别跌至 0.196(-14.5%)和 0.173(-17.9%);灾难级崩盘出现在 mask 和 curb 类别,mask 的 Mask mAP50 和 mAP50-95 分别从 0.984、0.867 暴跌至 0.571(-41.3%)和 0.310(-55.7%),其 Box mAP50-95 也跌至 0.522(-36.9%),而细长不规则的 curb 类别 Mask mAP50 亦从 0.272 降至 0.167(-10.5%)


请问由int_infer到最后板端实际推理的指标下降原因可能出在哪里,后续有什么精度优化方向吗
算法工具链
技术深度解析征程3
评论2
0/1000
  • Huanghui
    Lv.5
    目前怀疑你的板端后处理代码可能有问题或板端推理库有问题,建议先使用hb_verifier工具对比一下quanti.onnx模型推理、bin模型在板端推理,bin模型在X86环境下进行推理,并对三方推理结果,如果他们是一致的说明是后处理或前处理代码有问题,如果推理结果确实不一致,请检查以下模型编译版本和建议的部署平台BSP版本是否一致;最后如果版本也还是没有问题,那可以是编译器的问题,理论上quanti.onnx和hbm是对齐的。
    2026-03-07
    0
    2
    • 默认47872回复Huanghui:

      好的我检查一下

      2026-03-09
      0
    • 默认47872回复默认47872:
      我走的qat的流程,直接由qat-checkpoint.ckpt得到了板端的模型hbm,但是我比对了不加任何后处理的模型输出结果:使用一张图片,分别用qat-checkpoint.ckpt推理得到的tensor以及板端用hbm推理得到的tensor,计算两者余弦相似度,结果如下:
      2026-03-09
      0
  • DR_KAN
    Lv.4

    可以检查下后处理有没有做反量化以及去除bpu padding

    2026-03-09
    0
    2
    • 默认47872回复DR_KAN:

      好的,我看看

      2026-03-09
      0
    • 默认47872回复DR_KAN:
      应该是没有这方面的问题的,我提取了 properties.scale.scaleData 并在解框前对 INT8 数据进行了反量化 (* scale),也用了物理步长来寻址,排除了 BPU 内存对齐的 Padding 干扰
      2026-03-09
      1