RDK X5如何使用BPU对ONNX模型进行推理

你好 @Anan1,欢迎加入地瓜机器人开发者社区!:waving_hand:

针对你提出的 RDK X5 如何使用 BPU 对 ONNX 模型进行推理 的问题,核心结论如下:

不能直接在板端将 ONNX 模型用于 BPU 推理。
必须先在**开发机(PC/WSL)上使用地平线算法工具链(Docker 环境)**将 .onnx 模型量化、编译为 .bin 模型,然后将 .bin 文件传输到 RDK X5 板端,通过 BPU API 进行推理。


:white_check_mark: 完整操作流程(3 步走)

步骤 1:准备开发机环境

  1. 系统要求:Ubuntu 20.04 或 WSL2 + Ubuntu 22.04
  2. 安装 Docker 并配置 NVIDIA Container Toolkit(如需 GPU 加速量化)
  3. 获取 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
      

步骤 2:在 Docker 中转换 ONNX → BIN

  1. 启动 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
    
  2. 检查 ONNX 模型兼容性

    hb_mapper checker --model-type onnx --march bayes-e --model /path/to/your_model.onnx
    
  3. 配置量化 YAML 文件(参考官方模板):

    • 指定输入尺寸、数据类型、校准数据集路径等
    • 示例(YOLOv5 检测):ptq_yamls/yolov5_detect_bayese_640x640_nv12.yaml
  4. 执行量化编译

    hb_mapper makertbin --model-type onnx --config your_config.yaml
    
    • 输出:.bin.hbm 模型文件
  5. 验证模型(可选):

    hb_perf --model your_model.bin
    

步骤 3:板端部署与推理

  1. 传输模型到 RDK X5

    scp your_model.bin user@rdk_x5_ip:/home/user/models/
    
  2. 板端推理代码示例(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);
    
    // 处理输出结果
    // ...
    
  3. Python 推理(如使用 hb_pybind):

    from hb_dnn import DNNModel
    
    model = DNNModel("your_model.bin")
    outputs = model.inference(input_image)
    

:books: 推荐参考资源


:light_bulb: 关键提示

  • 板端无 hb_mapper 工具:所有转换必须在开发机 Docker 中完成
  • 校准数据集:PTQ 量化需要代表性数据集(通常 100~500 张图像)
  • 输入格式:BPU 通常要求 NV12 或 RGB 格式,注意预处理一致性
  • 性能对比:BPU 推理相比 CPU 通常有 10~50 倍加速,具体取决于模型结构

如果你在转换过程中遇到具体问题(如 YAML 配置、算子不支持、量化精度下降等),欢迎将错误日志和模型结构贴到社区,我们会进一步协助排查!:rocket:

建议你将此问题的解决过程也整理成帖子,帮助其他开发者~