你好 @Anan1,欢迎加入地瓜机器人开发者社区!![]()
针对你提出的 RDK X5 如何使用 BPU 对 ONNX 模型进行推理 的问题,核心结论如下:
不能直接在板端将 ONNX 模型用于 BPU 推理。
必须先在**开发机(PC/WSL)上使用地平线算法工具链(Docker 环境)**将.onnx模型量化、编译为.bin模型,然后将.bin文件传输到 RDK X5 板端,通过 BPU API 进行推理。
完整操作流程(3 步走)
步骤 1:准备开发机环境
- 系统要求:Ubuntu 20.04 或 WSL2 + Ubuntu 22.04
- 安装 Docker 并配置 NVIDIA Container Toolkit(如需 GPU 加速量化)
- 获取 RDK X5 工具链镜像:
- 从地平线开发者平台下载 RDK OE 交付包(如
horizon_x5_open_explorer_v1.2.8) - 导入 Docker 镜像:
docker load -i docker_openexplorer_ubuntu_20_x5_gpu_v1.2.8.tar.gz
- 从地平线开发者平台下载 RDK OE 交付包(如
步骤 2:在 Docker 中转换 ONNX → BIN
-
启动 Docker 容器:
sudo docker run -it --rm --gpus all --shm-size=15g \ -v "$AI_TOOLCHAIN_PATH":/open_explorer \ -v "$DATASET_PATH":/data \ openexplorer/ai_toolchain_ubuntu_20_x5_gpu:v1.2.8-py310 -
检查 ONNX 模型兼容性:
hb_mapper checker --model-type onnx --march bayes-e --model /path/to/your_model.onnx -
配置量化 YAML 文件(参考官方模板):
- 指定输入尺寸、数据类型、校准数据集路径等
- 示例(YOLOv5 检测):
ptq_yamls/yolov5_detect_bayese_640x640_nv12.yaml
-
执行量化编译:
hb_mapper makertbin --model-type onnx --config your_config.yaml- 输出:
.bin或.hbm模型文件
- 输出:
-
验证模型(可选):
hb_perf --model your_model.bin
步骤 3:板端部署与推理
-
传输模型到 RDK X5:
scp your_model.bin user@rdk_x5_ip:/home/user/models/ -
板端推理代码示例(C++):
#include "hb_dnn.h" hbDNNHandle_t packed_dnn_handle_; const char* model_path = "/home/user/models/your_model.bin"; // 初始化 BPU 模型 hbDNNInitializeFromFiles(&packed_dnn_handle_, &model_path, 1); // 准备输入 tensor(NV12/RGB 等格式) hbDNNTensor input_tensor; // ... 填充 input_tensor ... // 执行推理 hbDNNTensor output_tensors[MAX_OUTPUT_NUM]; hbDNNInference(packed_dnn_handle_, &input_tensor, output_tensors); // 处理输出结果 // ... -
Python 推理(如使用
hb_pybind):from hb_dnn import DNNModel model = DNNModel("your_model.bin") outputs = model.inference(input_image)
推荐参考资源
- 官方文档:7.4 算法工具链开发指南
- PTQ 量化教程:PTQ 量化流程详解
- Model Zoo 示例:RDK X5 官方模型库
- 社区案例:
关键提示
- 板端无
hb_mapper工具:所有转换必须在开发机 Docker 中完成 - 校准数据集:PTQ 量化需要代表性数据集(通常 100~500 张图像)
- 输入格式:BPU 通常要求 NV12 或 RGB 格式,注意预处理一致性
- 性能对比:BPU 推理相比 CPU 通常有 10~50 倍加速,具体取决于模型结构
如果你在转换过程中遇到具体问题(如 YAML 配置、算子不支持、量化精度下降等),欢迎将错误日志和模型结构贴到社区,我们会进一步协助排查!![]()
建议你将此问题的解决过程也整理成帖子,帮助其他开发者~