你好!你的问题很明确:cal_data_count 不是 calibration_parameters 的有效配置项,这是配置参数名称错误导致的。
问题结论
cal_data_count 参数不存在,应该移除。校准数据数量由你放入 cal_data_dir 目录的实际文件数量决定,不需要在 YAML 中指定。
正确的 YAML 配置
根据你的 hb_mapper 版本 (1.24.3),修正后的配置如下:
model_parameters:
onnx_model: './best.onnx'
march: "bayes-e"
layer_out_dump: False
working_dir: 'model_output'
output_model_file_prefix: 'yolov8_cow'
input_parameters:
input_name: "images"
input_type_rt: 'nv12'
input_type_train: 'rgb'
input_layout_train: 'NCHW'
norm_type: 'data_scale'
scale_value: 0.003921568627451
calibration_parameters:
cal_data_dir: './cal_bin'
cal_data_type: 'float32'
calibration_type: 'default'
# 删除 cal_data_count: 100 ← 这个参数不存在!
compiler_parameters:
compile_mode: 'latency'
debug: False
optimize_level: 'O3'
# 删除 optimization_parameters 段落(你的版本不支持 quantize_output_nodes)
关键修改点
| 错误配置 | 正确做法 |
|---|---|
cal_data_count: 100 |
删除,不需要此参数 |
optimization_parameters: quantize_output_nodes: True |
删除,1.24.3 版本不支持 |
input_layout_rt: 'NHWC' |
删除,板端布局由 BPU 自动处理 |
校准数据准备
校准数据数量由目录中的实际文件数决定:
# 检查校准数据数量
ls ./cal_bin/*.bin | wc -l
# 如果少于 100 张,建议补充
# 校准数据应该是已经预处理成 bin 格式的图片
要求:
- 至少 50-100 张 代表性图片
- 格式为
.bin(已预处理为模型输入格式) - 覆盖各种场景(光照、角度、目标大小等)
执行步骤
步骤 1:修正 YAML 文件
cat > yolov8.yaml <<'EOF'
model_parameters:
onnx_model: './best.onnx'
march: "bayes-e"
layer_out_dump: False
working_dir: 'model_output'
output_model_file_prefix: 'yolov8_cow'
input_parameters:
input_name: "images"
input_type_rt: 'nv12'
input_type_train: 'rgb'
input_layout_train: 'NCHW'
norm_type: 'data_scale'
scale_value: 0.003921568627451
calibration_parameters:
cal_data_dir: './cal_bin'
cal_data_type: 'float32'
calibration_type: 'default'
compiler_parameters:
compile_mode: 'latency'
debug: False
optimize_level: 'O3'
EOF
步骤 2:重新编译
hb_mapper makertbin --model-type onnx --config yolov8.yaml
步骤 3:验证输出
编译成功后,检查模型输出:
hrt_model_exec model_info --model_file=./model_output/yolov8_cow.bin
期望输出(bbox 应该有 quanti type):
output[0]:
valid shape: (1,80,80,5,)
tensor type: HB_DNN_TENSOR_TYPE_F32
tensor layout: HB_DNN_LAYOUT_NHWC
quanti type: SCALE # 或 SHIFT
output[1]:
valid shape: (1,80,80,64,)
tensor type: HB_DNN_TENSOR_TYPE_S32 # bbox 应该是 int32
tensor layout: HB_DNN_LAYOUT_NHWC
quanti type: SCALE # 关键:这里有量化信息
关于 OE 版本
你提到的版本信息:
- hb_mapper version: 1.24.3
(这是工具链版本,不是 OE 版本) - OE 版本: 应该是 1.2.8(对应 hb_mapper 1.24.x)
版本兼容性:
- 你的版本是最新的,不需要升级
- 配置格式错误是因为参数名称不对,不是版本问题
如果 quanti type 仍然是 NONE
如果编译后 quanti type 还是显示 NONE,可能原因:
- 校准数据不足:确保
cal_bin目录有足够图片 - ONNX 模型问题:确认导出脚本已修正(保持 float32,先 cls 后 bbox)
- 需要手动配置输出量化(高级):
- 参考社区教程使用 QAT 方案
- 或在 ONNX 中添加 FakeQuantize 节点
参考资源
先按上述配置重新编译,然后把 hrt_model_exec model_info 的输出发出来,我们继续分析!