专栏算法工具链【J6】bc与hbm一致性比对

【J6】bc与hbm一致性比对

Jade-self2024-11-25
434
2

1. 引言

使用地平线J6算法工具链时,算法侧在验证quantized.bc精度符合预期后,软件侧反馈hbm精度不符合预期,此时应该怎么做呢?(“打一架!”)
对于熟悉地平线算法工具链的用户而言,可能会立刻想到,使用hb_verifier工具比对bc与hbm的一致性即可,so easy!
但对于不太熟悉的同学,可能会遇到如下问题:
  1. hb_verifier工具怎么用?

  2. 输入数据怎么准备?准备几个输入?准备什么shape?什么type?

为了详细介绍该过程,结合用户的疑问,本文会举个非常详细的例子来介绍。
有没有比hb_verifier更“优雅”的比对方式?当然是有的,欢迎往下看。

2. 模型定义

quantized.bc与hbm可以分为以下几类:

  • convert后什么都不做的:quantized_stage1.bc,对应quantized_stage1.hbm
    Description
  • 在stage1的基础上,插入前处理nv12节点的:quantized_nv12_stage2.bc,对应quantized_nv12_stage2.hbm
    Description
  • 在stage2的基础上,删除尾部反量化节点的:quantized_nv12_remove_stage3.bc,对应quantized_nv12_remove_stage3.hbm
    Description
    理论上,大家直接比对stage3.bc与stage3.hbm的一致性即可,而这一步,也是最复杂的。

3. hb_verifier简介

hb_verifier比对bc与hbm一致性时,需要关注的信息如下:

11
bc与hbm一致性比对时,输出信息如下:
Description
本文的例子中,命令如下:

4. 输入数据准备

在地平线docker中,可以使用hb_model_info查看bc以及hbm的输入信息,或在docker/开发板上使用hrt_model_exec工具查看模型输入信息,然后根据终端打印的模型输入数量、输入类型来准备输入数据,以quantized_nv12_remove_stage3.bc/quantized_nv12_remove_stage3.hbm为例,来准备输入数据。

Description

输入数据准备的代码如下:

上述代码只介绍了NV12输入时,如何准备输入数据,对于int8、int16、bool等类型如何准备输入数据呢?

5. hb_verifier比对bc与hbm一致性

此时有模型:quantized_nv12_remove_stage3.bc,quantized_nv12_remove_stage3.hbm,有输入数据:y_data.npy,uv_data.npy。在地平线J6工具链提供的docker中,运行如下命令:

结果如下:
Description
可以发现,二者输出一致。

6. 优雅的方案

使用一套数据,在docker中推理bc与hbm,并比对一致性的python代码如下:

Description
算法工具链
社区征文征程6技术深度解析官方教程
评论1
0/1000
  • AnnieLittleYu
    Lv.1

    在stage2的基础上,删除尾部反量化节点的:quantized_nv12_remove_stage3.bc,对应quantized_nv12_remove_stage3.hbm,请问一下这一步是不是必须的,是不是可以通过在yml里的remove_node_type里配置。如果部署上板的hbm在配置的时候是没有用remove_node_type的呢

    2026-01-27
    0
    1
    • Jade-self回复AnnieLittleYu:

      不是必须的,如果没有删除则没有这一步

      2026-01-28
      0