你好 @TonyYan,
在 RDK S100 上部署自己的 ONNX 模型,核心流程是:ONNX → HBM 模型转换 → 板端推理。以下是完整步骤:
快速结论
可以部署。S100 使用地平线 BPU 算力,需通过官方 OpenExplorer 工具链 将 .onnx 转换为 .hbm 格式,然后在板端调用推理。
部署步骤
环境准备
宿主机要求:
- 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
模型转换(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:量化配置文件(可自定义输入预处理、算子策略等)
板端部署与推理
传输文件到 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
关键注意事项
-
算子支持检查:转换前先用
--check-only模式检查算子兼容性hb_mapper check --model your_model.onnx --chip-type s100 -
输入数据格式:量化后的 HBM 模型输入通常是
int8,需确保预处理一致 -
校准数据集:PTQ 量化必须提供校准数据集,分布应与实际推理数据一致
-
版本匹配:工具链版本需与板端系统镜像版本匹配(查看
cat /etc/version)
推荐资源
- 官方工具链文档:S100 OpenExplorer 开发指南
- Model Zoo 案例:rdk_model_zoo_s(包含 YOLO、ResNet 等完整示例)
- 社区教程:万字长文:RDKS100 模型量化及部署
如果遇到问题
请补充以下信息以便进一步排查:
- 你的模型类型(检测/分类/分割/LLM?)
- OpenExplorer 工具链版本
- 转换时的具体报错信息
- 板端系统版本(
cat /etc/version)
建议将完整转换日志和报错信息发到社区,方便其他开发者参考!