如何将onnx转为.bin文件

我已经有onnx文件了,怎么才能转为.bin文件

参考用户手册,使用官方工具链来完成

RDK X5:7.4.1 简介 | RDK DOC
RDK S100:7.4.1 算法工具链 | RDK DOC

关键看你用的什么板型,工具链和参数有差异。通用流程三步:

1. 确认板型 → 选工具链

  • X3 → Horizon OE v1.x,march=bernoulli2
  • X5/Ultra → Horizon OE v2.x,march=bayes-e
  • S100/S100P → 天工开物工具链,march=nash-e(S100)/ nash-m(S100P)

工具链在 主机 Docker 里跑,板上只装 runtime(hobot-dnn),别在板上找 hb_mapper

2. 导出 ONNX
以 YOLOv8 为例,必须用 D-Robotics fork 的仓库导出,原生 ultralytics 导出的算子 BPU 不兼容:

from ultralytics import YOLO
model = YOLO('yolov8n.pt')
model.export(format='onnx', imgsz=640, opset=11)

3. 准备校准数据 + 转换
准备 50-100 张与训练集分布一致的图片做 PTQ 校准,然后编写 YAML 配置:

model_parameters:
  onnx_model: 'yolov8n.onnx'
  march: 'bayes-e'
  working_dir: './model_output'
  output_model_file_prefix: 'yolov8n'
input_parameters:
  input_type_rt: 'nv12'
  input_layout_train: 'NCHW'
calibration_parameters:
  cal_data_dir: './calibration_data'

执行转换:

hb_mapper makertbin --config convert.yaml

输出 .bin 文件,scp 到板子上 /userdata/models/ 即可用 hobot_dnn 加载推理。

常见坑:

  • ONNX opset 版本太高 → 固定 opset=11
  • 校准数据不足 → 精度暴跌,至少 50 张
  • 板端 runtime 版本不匹配 → dpkg -l | grep hobot-dnn 确认

如果你能说一下用的什么板子和模型,我可以给更精确的参数。