专栏算法工具链yolox转定量模型检测不出框

yolox转定量模型检测不出框

盗亦有道2026-04-21
61
9

地平线的开发人员您好。

近期我们在做 YOLOX 红绿灯模型的板端部署对齐时,发现一个比较明确的问题,想请你们帮忙一起定位。

我们直接从板端获取同一张真实输入的 YUV(NV12) 数据,基于同一个输入文件,分别测试了:

1.deploy_optimized_float_model.onnx
2. deploy_ptq_model.onnx
3. deploy.hbm

在这个逐步部署的过程中,我们观察到一个很明显的现象:

- 模型对 light_share0 类别检测基本稳定,但 countdown_light(倒计时灯)这个类别的置信度随着部署链路推进逐步下降,最终在 PTQ / HBM 阶段,这个类别在常规阈值下基本就检不出来了。

本次所有测试都基于同一个板端输入:

- 输入文件:/jwsu/ocr_height/images/rm_img.yuv

- 格式:NV12

- 尺寸:1280x704

-模型:六分类

##附件说明##

1. input/rm_img.yuv

板端提供的真实输入,格式为 NV12,尺寸为 1280x704。

2. models/deploy_optimized_float_model.onnx

float ONNX 模型。

3. models/deploy_ptq_model.onnx

PTQ ONNX 模型。

4. models/deploy_wb_v20260420.hbm

HBM 模型。

5. scripts/onnx_single_input_nv12_vis.py

ONNX 推理脚本,用于读取 rm_img.yuv,解码为 BGR 后送入单输入 ONNX。

6. scripts/nv12_dual_input_infer.py

HBM 推理脚本,用于读取 rm_img.yuv,拆分为 blob1_y 和 blob1_uv 后送入 HBM。

7. scripts/hbm_demo_hzli.py

推理脚本依赖的后处理代码。

推理参考文档,包含 float ONNX、PTQ ONNX、HBM 的完整运行命令和输出说明。

附件:
算法工具链
技术深度解析征程6
评论4
0/1000
  • DR_KAN
    Lv.4

    ptq onnx有框,hbm没框,有可能是预处理节点的参数写错了,可以按这个方向检查下。还有一个排查方法,就是用预处理归一化之后的数据,给featuremap输入量化编译的所有模型测试,看看这个情况下有没有框,可以规避预处理节点的问题。

    9小时前
    1
    0
  • 默认7795968
    Lv.1

    11212

    4小时前
    1
    0
  • 默认7795968
    Lv.1
    4小时前
    0
    1
    • 默认7795968回复默认7795968:

      灌灌灌灌

      4小时前
      0
  • zyhang
    Lv.1

    您好,看起来像是精度损失比较大,校准集的准备是否正确,如果正确的话,可以先全设置为全INT16再量化转换试一下看看精度损失呢

    2026-04-22
    0
    5
    • 盗亦有道回复zyhang:

      您好。全int16按照我上面的测试过程也是到hbm就检测不出框了 。但是ptq.onnx能检测出框。能否帮我看看推理代码是否正确呢?现在不太能定位到具体原因。

      10小时前
      0
    • zyhang回复盗亦有道:
      我们对量化后的onnx模型转为bc模型以及hbm模型,然后对此bc模型和hbm模型进行了输出一致性验证,我们验证过bc模型是能检测出框的,hbm模型和bc模型输出是完全一致的,说明是你转换为hbm模型时yaml文件配置有问题,或者推理时前处理或者后处理有问题,可以给一下yaml文件配置信息吗
      6小时前
      0
    • 默认7795968回复盗亦有道:

      333

      4小时前
      0
    • 盗亦有道回复zyhang:

      我们这边原始 HBM 的 YAML 配置如下:

      input_type_rt: nv12

      input_type_train: bgr

      input_layout_train: NCHW

      mean_value: 0 0 0

      scale_value: 1.0

      cal_data_dir: ../input/ref_img_npy

      cal_data_type: uint8

      quant_config: {model_config: {all_node_type: int16, model_output_type: int16}}

      实际校准数据是 ref_img_npy/*.bgr.npy,shape 为 (3,704,1280),dtype 为 float32,数值范围 0~255。

      编译日志中看到该 HBM 最终 input_source 为 {'blob1': 'pyramid'},并插入了 image preprocess / image convert op,最终 HBM 输入为

      blob1_y/blob1_uv。

      我们另外做了一个 featuremap/blob1 直入版 HBM:

      input_type_rt: featuremap

      input_type_train: featuremap

      input_name: blob1

      input_shape: 1x3x704x1280

      cal_data_type: float32

      这个版本直接喂和 PTQ ONNX 一致的 blob1 后,倒计时灯分数从原始 HBM 的 0.0728 恢复到 0.3780。因此怀疑原始 YAML 的 nv12/pyramid 输入

      配置、cal_data_type,或 runtime 输入口径与 PTQ ONNX 的 blob1 输入不一致。

      请帮忙确认原始 HBM 若要使用 NV12 输入,input_type_rt/input_type_train/input_layout_train/cal_data_type/input_source 是否应该这样

      配置。

      4小时前
      0
    • zyhang回复盗亦有道:

      cal_data_type: uint8有问题,先把unit8改为float32试一下看看

      2小时前
      0