跳到主要内容

4.1.5 Model Zoo 推理接口参考

概述

Model Zoo 的 Python 推理接口按硬件平台和分支选择:

平台分支推理接口接口来源
RDK X5rdk_x5hbm_runtime板端系统自带
RDK X5(历史)rdk_x5_legacybpu_infer_lib_x5 / hobot_dnn.pyeasy_dnn手动安装 / 板端自带
RDK X3rdk_x3bpu_infer_lib_x3 / hobot_dnn.pyeasy_dnn手动安装 / 板端自带
RDK S 系列rdk_shbm_runtime板端系统自带

hbm_runtime 接口

hbm_runtime 是 RDK X5 和 RDK S 系列统一使用的 Python 推理接口,接口名称一致,但底层依赖、模型格式和输入方式存在差异:

项目RDK X5RDK S 系列
底层依赖libdnnlibhbucp
模型格式.bin.hbm
安装包hobot-spdev(板端自带)hobot-dnn(板端自带)
NV12 输入方式单个 packed 输入(Y+UV 拼接)双输入(Y 与 UV 分离)

RDK X5 调用流程

加载模型

import hbm_runtime

model = hbm_runtime.HB_HBMRuntime("model.bin")
model_name = model.model_names[0]
input_names = model.input_names[model_name]
output_names = model.output_names[model_name]

准备输入(packed NV12)

RDK X5 视觉模型常见输入为 packed NV12 格式,Y 和 UV 拼接为单个输入 tensor:

y, uv = bgr_to_nv12_planes(resized_img)
packed_nv12 = np.concatenate([y.reshape(-1), uv.reshape(-1)]).astype(np.uint8)

inputs = {model_name: {input_names[0]: packed_nv12}}

执行推理与读取输出

outputs = model.run(inputs)
result = outputs[model_name][output_names[0]]

详细 API 文档

👉 RDK X5 hbm_runtime Python API 文档

RDK S 系列调用流程

加载模型

import hbm_runtime

model = hbm_runtime.HB_HBMRuntime("model.hbm")
model_name = model.model_names[0]
input_names = model.input_names[model_name]
output_names = model.output_names[model_name]

准备输入(分离 Y/UV)

RDK S 系列视觉模型使用分离的 Y 和 UV 两个输入 tensor:

y, uv = bgr_to_nv12_planes(resized_img)

inputs = {
model_name: {
input_names[0]: y, # Y 平面
input_names[1]: uv, # UV 平面
}
}

执行推理与读取输出

outputs = model.run(inputs)
result = outputs[model_name][output_names[0]]

详细 API 文档

👉 RDK S hbm_runtime Python API 文档

bpu_infer_lib 接口

bpu_infer_lib_x3bpu_infer_lib_x5 安装后均通过 import bpu_infer_lib 导入。

RDK X3 使用 bpu_infer_lib_x3 wheel,rdk_x5_legacy 分支使用 bpu_infer_lib_x5 wheel。

警告

bpu_infer_lib 对 featuremap 输入模型支持不佳。如需使用 featuremap 输入模型,请使用 hbm_runtime 推理接口(RDK X5 或 RDK S 系列)。

安装

RDK X3:

wget -nc https://archive.d-robotics.cc/downloads/rdk_model_zoo/rdk_x3/bpu_infer_lib_x3-1.0.3-py3-none-any.whl
pip install bpu_infer_lib_x3-1.0.3-py3-none-any.whl

RDK X5(rdk_x5_legacy 分支):

wget -nc https://archive.d-robotics.cc/downloads/rdk_model_zoo/rdk_x5/bpu_infer_lib_x5-1.0.3-py3-none-any.whl
pip install bpu_infer_lib_x5-1.0.3-py3-none-any.whl

基础调用流程

import bpu_infer_lib

inf = bpu_infer_lib.Infer(False)
inf.load_model("model.bin")
inf.read_input(input_array, 0)
inf.forward()
inf.get_output()

result = inf.outputs[0].data

常用接口说明

接口说明
Infer(debug)创建推理对象。debug=True 时输出更多调试信息。
load_model(model_path)加载 BPU .bin 模型。
read_input(input, index)写入预处理后的 numpy 输入。index 为输入节点序号,从 0 开始。
forward()执行模型推理。
get_output()获取推理输出。
outputs[index].data读取指定输出 tensor 的 numpy 数据。

hobot_dnn.pyeasy_dnn 接口

hobot_dnn.pyeasy_dnn 是板端系统自带的 Python 推理接口。RDK X3 的 YOLO、FCOS、YOLOv8-Seg 等 demo 使用该接口;rdk_x5_legacy 分支的部分 demo 也使用该接口。

警告

hobot_dnn.pyeasy_dnn 对 featuremap 输入模型支持不佳。如需使用 featuremap 输入模型,请使用 hbm_runtime 推理接口(RDK X5 或 RDK S 系列)。

基础调用流程

from hobot_dnn import pyeasy_dnn as dnn

models = dnn.load("models/yolov5s_672x672_nv12.bin")
model = models[0]
outputs = model.forward(input_tensor)

模型路径、输入格式、预处理和后处理以目标目录 README 和源码入口为准。

接口选择说明

平台推荐接口使用说明
RDK X5,RDK OS >= 3.5.0hbm_runtimerdk_x5 分支,按 sample README 使用
RDK X5(历史 demo)bpu_infer_lib_x5 / hobot_dnn.pyeasy_dnnrdk_x5_legacy 分支,按目标目录 README 使用
RDK X3bpu_infer_lib_x3 / hobot_dnn.pyeasy_dnnrdk_x3 分支,按目标目录 README 使用
RDK S 系列hbm_runtimerdk_s 分支,按 sample README 使用