专栏算法工具链yolox onnx模型输出置信度一列几乎都为0

yolox onnx模型输出置信度一列几乎都为0

已解决
默认383362025-03-24
81
19

我用yolox官方github仓库中的onnx模型文件,想用ptq量化方法比较量化前后coco数据集上yolox模型的准确率差异。我参考horizon_model_convert_sample中其他detection算法的前处理和后处理写了yolox的,但我发现在进行后处理之前,yolox输出(shape为1,8400,85)中置信度一列大部分均为0,在运行inference.sh和evaluate.sh时不管我指定origin还是quanti的model均如此。请问这是因为我ptq量化过程中yaml文件中数据格式配置错误或者preprocess方法错误导致的么?附件中为yaml文件和preprocess文件,谢谢!

附件:
算法工具链
征程5
评论3
0/1000
  • Huanghui
    Lv.5

    你好,你的模型在之前训练时候,那个数据是怎么进行前处理的,进行归一化了吗?如果之前进行归一化 ,现在没有,那么会造成数据分布不同。

    2025-03-24
    0
    0
  • Huanghui
    Lv.5

    保证你的校准集数据处理方法和之前的训练测试集前处理方法一样

    2025-03-24
    0
    1
    • 默认38336回复Huanghui:

      归一化操作如果训练过程中采用了,那preprocess.py中calibration_transformers和infer_transformers这两个函数,以及yaml文件中的norm_type和对应的mean、scale value都需要改成一样的么?

      2025-03-24
      0
  • Huanghui
    Lv.5

    或者你试下吧inpiut_type_train和input_type_rt都设置成featuremap格式的输入,mean和std就直接注掉不需要了。你再看下推理结果

    2025-03-24
    0
    15
    • 默认38336回复Huanghui:

      好的我试一下

      2025-03-24
      0
    • 默认38336回复Huanghui:

      改成featuremap以后,input_layout设为NCHW和NHWC都提示维度不匹配

      2025-03-24
      0
    • Huanghui回复默认38336:

      input_layout_rt设置成空试试类似于这样

      2025-03-24
      0
    • Huanghui回复默认38336:

      校准图片格式是npy吗

      2025-03-24
      0
    • 默认38336回复Huanghui:

      第二步处理校准数据后得到的是rgb格式,是要在preprocess里校准数据处理函数那改为npy的么?

      2025-03-24
      0
    • 默认38336回复Huanghui:

      input_layout_rt置为空会报错,featuremap需要这个参数

      2025-03-24
      0
    • Huanghui回复默认38336:

      看下onnx模型的输入是什么样式的另外我附一个之前做过的一个示例的数据前处理代码逻辑你仿照者试下看看能不能解决。

      2025-03-24
      0
    • Huanghui回复默认38336:

      稍等下稍后给你发,网络错误了。

      2025-03-24
      0
    • Huanghui回复默认38336:
      2025-03-24
      0
    • Huanghui回复默认38336:

      看其中一个就好,这里不多点两下发不出来。重复了

      2025-03-24
      0
    • Huanghui回复默认38336:

      这段代码里我是将图片除以255归一化之后,保存成npy格式。这个是个分割任务,最后能够正常分割。你仿照下试试

      2025-03-24
      0
    • 默认38336回复Huanghui:

      好的,那我是先根据这个改校准数据的预处理,然后其他部分先保持不变看一下?

      2025-03-24
      0
    • Huanghui回复默认38336:

      对,yaml文件里面也要换成featuremap,因为现在不配置mean和scale_value了

      2025-03-24
      0
    • 默认38336回复Huanghui:

      我对于下面这三个部分的预处理还不太理解:preprocess里的校准数据预处理,preprocess里的infer数据预处理infer_transformers和yaml文件里norm_type处配置的均值和缩放。后两者作用的时间相同吗?以及如果网络训练时有归一化等操作,三个里面哪部分需要保持一致的操作?感谢解答

      2025-03-24
      0
    • Huanghui回复默认38336:
      你好,在回答下之前的问题。如果你配置featuremap,那么你的rgb图像就需要在预处理阶段处理好,处理过程要与你的浮点模型的训练集和验证集预处理方法一样。然后将其保存成npy格式。如果你不是配置的featuremap你需要将其mean和scale_value配置,然后不需要在进行preprocess了,不然就重复了。校准时候会自动解析yaml文件里面的mean和scale_value值。相当于数据前处理这一步骤集成在模型内部做了。

      另外。“ preprocess里的infer数据预处理infer_transformers和yaml文件里norm_type处配置的均值和缩放。后两者作用的时间相同吗? ” 。这要看你指定的什么数据格式,如featuremap。当指定为featuremap时候,证明你已经进行完数据预处理了。送入到模型内部直接推理了,不会在对数据进行预处理,如果你配置的是nv12,如我之前所说,模型预处理会集成在模型内部。会读取mean,scale_value进行预处理
      2025-03-26
      0