前言
在准备BEVFormer模型推理时,相信很多开发者都遇到过这样的困惑:模型输入除了常见的imgs和reference_point之外,还需要额外的五个神秘输入。这些输入到底是什么?应该如何准备?本文将详细解答这些问题。
一、问题背景
1.1BEVFormer模型的输入结构
BEVFormer量化模型在推理时需要以下输入:
基础输入:
- imgs: 多视角相机图像
- reference_point: 参考点坐标
额外的五个输入(如图1所示)
这些输入通常与特征提取、空间变换相关
数据格式需要与量化模型匹配

1.2 核心问题
这些额外输入应该如何准备?
答案是:通过推理HBIR(Horizon BPU Intermediate Representation)模型来获取。
二、准备HBIR模型输入
2.1 HBIR模型所需输入
推理HBIR模型需要准备以下数据:
- 相机图像: 多视角相机采集的原始图像
- Homography矩阵: 根据相机内参生成的单应性变换矩阵
💡 提示: Homography矩阵用于描述不同视角之间的几何变换关系,是BEV(Bird's Eye View)视角转换的关键。
三、代码修改步骤
3.1 修改配置文件
第一步:添加保存函数
在BEVFormer模型qat配置文件中添加保存函数,用于保存HBIR模型的推理输出。
如图二所示:

代码如下:
第二步:启用HBIR推理配置
修改hbir_infer_model相关配置,使保存函数生效
3.2 修改推理代码
进入Docker环境,修改推理相关代码(如图3所示):

修改目的:
在模型推理的第一步自动生成所需的五个固定输入文件
将这些输出保存到指定路径
确保输出格式与量化模型要求一致
四、 数据类型转换与量化
4.1 数据类型问题
当前状态: HBIR模型生成的文件数据类型为fp32(32位浮点数)
目标状态: 量化模型需要int8(8位整数)类型
解决方案: 需要手动对数据进行量化转换
4.2 获取量化参数
量化过程必须使用正确的Scale因子,获取方法如下:
方法:使用hrt_model_exec工具
执行后会显示模型的详细信息(如图4所示):

关键信息:
红色框中标注的即为所需的量化Scale因子
每个输入tensor都有对应的量化参数
4.3 处理多scale值情况
特殊情况说明
有时一个输入会有多个Scale值,这是为什么呢?
示例分析:
观察模型信息:
原因解析:
- quantizeAxis: 3 表示在第3个轴(从0开始计数)上进行量化
- valid_shape的第3个维度大小为2
- 因此需要在两个通道上分别量化
每个通道对应一个Scale值
通用规则:
- 检查quantizeAxis值,确定量化的轴
查看该轴的维度大小
Scale值的数量 = 该轴的维度大小
五、完整工作流程
5.1 流程图
5.2 检查清单
在完成配置后,请检查以下内容:
HBIR模型配置正确
保存路径可写入
生成了五个输出文件
获取了正确的Scale参数
量化后数据类型为int8
验证量化前后数值范围合理
