问题定位
错误信息很明确:
ERROR cannot reshape array of size 103914 into shape (1,3,640,640)
原因:校准数据格式不对。
- 你的校准目录里是 JPG 图片文件
- 但
cal_data_type: float32告诉工具链期望 原始 float32 数据 - 工具链读取 JPG 文件二进制数据(103914 字节),无法 reshape 成
3×640×640=1,228,800的数组
解决方案
方案一:使用图片格式(推荐,简单)
修改 YAML,让工具链直接读取 JPG 图片:
calibration_parameters:
cal_data_dir: /workspace/calibration_images
cal_data_type: jpg # 改为 jpg,工具链会自动解码
方案二:预处理校准数据(正式部署推荐)
使用 OE 包里的预处理脚本将图片转为 float32 格式:
# 1. 找到数据预处理脚本(在 OE 包里)
find /open_explorer -name "data_preprocess.py"
# 2. 执行预处理(假设脚本在 /open_explorer/tools/)
python3 /open_explorer/tools/data_preprocess.py \
--src_dir /workspace/calibration_images \
--dst_dir /workspace/calibration_data_float \
--dst_type float32 \
--img_size 640
# 3. 修改 YAML 指向新目录
calibration_parameters:
cal_data_dir: /workspace/calibration_data_float
cal_data_type: float32
方案三:快速验证(先跑通)
如果只是想快速验证流程,用方案一改 YAML 即可:
cat > /workspace/yolo11n_seg_config.yaml <<'EOF'
model_parameters:
onnx_model: /workspace/yolo11n-seg.onnx
march: bayes-e
output_model_file_prefix: /workspace/yolo11n_seg
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: /workspace/calibration_images
cal_data_type: jpg
compiler_parameters:
compile_mode: latency
optimize_level: O3
debug: false
EOF
hb_mapper makertbin --config /workspace/yolo11n_seg_config.yaml
校准数据要求
| 要求 | 说明 |
|---|---|
| 数量 | 建议 100+ 张,最少 50 张 |
| 格式 | JPG/PNG 或预处理后的 float32 |
| 尺寸 | 不需要严格 640×640,工具链会自动 resize |
| 内容 | 应覆盖实际使用场景的各种情况 |
验证校准数据
# 检查图片数量和格式
ls -la /workspace/calibration_images/ | head -20
ls /workspace/calibration_images/ | wc -l
# 查看第一张图片信息(如果安装了 ImageMagick)
identify /workspace/calibration_images/calib_00.jpg
建议:先用方案一(cal_data_type: jpg)跑通流程,确认模型转换成功后,再用方案二做正式部署的校准数据预处理。
参考教程:从头开始 YOLOV11 自训练模型的板端部署和量化 - 里面有完整的校准数据准备说明。