在s100上如何部署自己的模型,如果有了.onnx文件以后,应该怎么转,然后如何在s100上运行

你好 @TonyYan,

在 RDK S100 上部署自己的 ONNX 模型,核心流程是:ONNX → HBM 模型转换 → 板端推理。以下是完整步骤:


:rocket: 快速结论

可以部署。S100 使用地平线 BPU 算力,需通过官方 OpenExplorer 工具链 将 .onnx 转换为 .hbm 格式,然后在板端调用推理。


:clipboard: 部署步骤

:one: 环境准备

宿主机要求:

  • Ubuntu 18.04/20.04/22.04(推荐 22.04)
  • 安装 Docker(可选,推荐使用官方工具链容器)
  • 下载对应 S100 的 OpenExplorer 工具包:地平线开发者中心

推荐方式:使用官方 Docker 镜像

# 拉取 S100 工具链镜像
docker pull horizonrobotics/ai_toolchain_ubuntu_22_s100_cpu:v3.7.0

:two: 模型转换(ONNX → HBM)

# 进入工具链容器
docker run -it --rm \
  -v /path/to/your/model:/workspace \
  horizonrobotics/ai_toolchain_ubuntu_22_s100_cpu:v3.7.0 \
  bash

# 在容器内执行转换
hb_mapper convert \
  --model-type onnx \
  --model your_model.onnx \
  --output your_model.hbm \
  --chip-type s100 \
  --quantization-type ptq \
  --calibration-dataset /workspace/calib_data/ \
  --yaml-config your_config.yaml

关键参数说明:

  • --chip-type s100:指定目标芯片
  • --quantization-type:ptq(训练后量化)或 qat(量化感知训练,精度更高)
  • --calibration-dataset:校准数据集(PTQ 必需,约 100-500 张代表性图片)
  • --yaml-config:量化配置文件(可自定义输入预处理、算子策略等)

:three: 板端部署与推理

传输文件到 S100:

scp your_model.hbm user@s100_ip:/home/user/models/

Python 推理示例:

from hobot_dnn import Model
import cv2

# 加载 HBM 模型
model = Model('/home/user/models/your_model.hbm')

# 读取并预处理图像
image = cv2.imread('test.jpg')
image = cv2.resize(image, (640, 640))  # 根据模型输入调整
image = image.astype('uint8')

# 推理
result = model.inference(image)

# 后处理(根据模型输出格式解析)
print(result)

或使用命令行工具测试:

# 使用 hrt_model_exec 测试性能
hrt_model_exec --model your_model.hbm --input test.jpg --loop 100

:warning: 关键注意事项

  1. 算子支持检查:转换前先用 --check-only 模式检查算子兼容性

    hb_mapper check --model your_model.onnx --chip-type s100
    
  2. 输入数据格式:量化后的 HBM 模型输入通常是 int8,需确保预处理一致

  3. 校准数据集:PTQ 量化必须提供校准数据集,分布应与实际推理数据一致

  4. 版本匹配:工具链版本需与板端系统镜像版本匹配(查看 cat /etc/version)


:books: 推荐资源


:magnifying_glass_tilted_left: 如果遇到问题

请补充以下信息以便进一步排查:

  • 你的模型类型(检测/分类/分割/LLM?)
  • OpenExplorer 工具链版本
  • 转换时的具体报错信息
  • 板端系统版本(cat /etc/version)

建议将完整转换日志和报错信息发到社区,方便其他开发者参考!