论坛算法工具链X86仿真相同模型不同输入格式类型,部分图片存在低置信度或漏检的情况

X86仿真相同模型不同输入格式类型,部分图片存在低置信度或漏检的情况

已解决
fataJtz2026-07-16
74
7
OE版本:OE3.2.0
我使用相同的校准数据集,分别以nv12和rgb进行量化编译;在x86上用python端模拟板端c++进行测试推理时,nv12的推理结果部分会出现置信度低和小部分的漏检情况,想问一下可能是什么原因如何排查。
算法工具链
技术深度解析征程6
评论2
0/600
  • XZH
    Lv.2

    可能是NV12和RGB两条链路的预处理结果没有完全对齐,可以选择一张能稳定复现的图片先按RGB链路执行resize、letterbox/padding、BGR/RGB 通道转换等公共预处理,保存此时的rgb_preprocess。再将其转换为NV12,并按实际推理输入的Y plane+UV plane格式组织数据,之后将这个NV12再转回RGB去和rgb_preprocess去进行逐元素对比。还有一点需要注意就是BGR转NV12时不能直接把I420数据当作NV12使用,I420 的U、V是分平面排列,而NV12的UV是交错排列。生成NV12时需确认U、V的交错顺序。顺便一问,你使用的是bc模型在x86推理还是onnx呢?

    2026-07-16
    0
    5
    • fataJtz回复XZH:

      好的,谢谢。使用的是bc模型在x86推理。

      2026-07-17
      0
    • fataJtz回复XZH:

      原来的NV12模型是漏检大目标。

      2026-07-17
      0
    • fataJtz回复XZH:

      将NV12图片转成RGB后,模型能跑通,只是小尺寸物体的检测效果不太理想。

      2026-07-17
      0
    • XZH回复fataJtz:
      可以检查一下是不是Python代码构造的NV12 Buffer内存布局(特别是Stride Padding和 UV起始位置)与编译器生成的 .bc模型所期望的逻辑布局不一致,如果仿真器读到错位数据会导致精度崩塌。
      此外还可以检查一下nv12_quantized.bc这个HBIR的NV12->RGB节点的正确性,在编译生成hbm之前会在这个bc的input中加入input.insert_transpose、node.insert_image_preprocess和node.insert_image_convert("nv12")操作,如果您是通过yaml配置文件自动配置的工具链会自动生成对应操作,但是insert_image_preprocess中的参数可能和您指定的模型的mean,std不一致,导致在仿真推理精度变差,这需要您自己去设置。
      2026-07-21
      0
    • XZH回复XZH:

      示例代码如下:

      qat_model = load("qat.bc") #此处的qat.bc需要您手动通过python api进行导出,如果通过hb_compile则只能得到最终结果nv12_quantized.bc

      func = qat_model.functions[0]

      for input in func.inputs[::-1]:

      node = input.insert_transpose(permutes=[0, 3, 1, 2])

      # 【重点检查这里】确保 mode, mean, std与你训练代码完全对应

      node = node.insert_image_preprocess(mode="yuvbt601full2rgb", divisor=1, mean=[128,128,128], std=[128,128,128])

      node.insert_image_convert("nv12")

      nv12_model = convert(qat_model, "j6") #重新定点化以融合新节点

      save(nvilz_model, "nv12_quantized.bc")

      2026-07-21
      0
  • HuangHui
    Lv.5

    客户您好,由于较长时间未收到您的进一步反馈,我们暂时关闭本帖。如问题仍未解决,欢迎重新发帖咨询,感谢您的理解与配合!

    2026-08-05
    0
    0