你好 @sky77777,
HBM 模型不能直接运行,需要配合推理代码使用。Model Zoo 里已经提供了完整的推理示例!
快速运行步骤
直接使用 Model Zoo 的参考代码
# 在 S100P 板子上操作
cd /path/to/rdk_model_zoo_s/samples/Vision/ultralytics_yolo
# 查看推理代码
ls source/
# 应该有:
# - cpp/ (C++ 推理)
# - python/ (Python 推理)
Python 快速测试(推荐新手)
# 参考 Model Zoo 中的 Python 推理脚本
# 通常在:samples/Vision/ultralytics_yolo/source/python/
# 核心代码结构:
from hobot_dnn import Model
# 1. 加载 HBM 模型
model = Model('yolov8s_detect_nashe_640x640_nv12.hbm')
# 2. 准备输入(NV12 格式)
import cv2
img = cv2.imread('test.jpg')
# 转为 NV12 格式(关键!)
yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV_I420)
# 3. 推理
result = model.inference(yuv)
# 4. 解析结果(6 个输出)
# 需要做 NMS 后处理
C++ 完整示例(性能更好)
参考社区教程中的完整代码:RDKS100 模型部署教程
核心流程:
#include "hobot/dnn/hb_dnn.h"
// 1. 加载模型
hbDNNPackedHandle_t packed_handle;
hbDNNInitializeFromFiles(&packed_handle, &model_path, 1);
// 2. 获取模型句柄
hbDNNHandle_t dnn_handle;
hbDNNGetModelHandle(&dnn_handle, packed_handle, model_name);
// 3. 准备输入(NV12 格式,分配内存)
std::vector<hbDNNTensor> input_tensors;
// 分配 Y 分量和 UV 分量内存
// 4. 推理
hbUCPTaskHandle_t task_handle = nullptr;
hbDNNInferV2(&task_handle, output_tensors, input_tensors, dnn_handle);
// 5. 等待结果
hbUCPWaitTaskDone(task_handle, 10000);
// 6. 解析输出(6 个 tensor,做 NMS)
关键注意事项
| 要点 | 说明 |
|---|---|
| 输入格式 | 必须是 NV12(YUV420SP),不能直接用 RGB |
| 输入尺寸 | 640x640(和模型转换时一致) |
| 输出解析 | YOLO 有 6 个输出 tensor,需要做 NMS 后处理 |
| 内存管理 | 使用 hbUCPMallocCached 分配内存 |
| 编译依赖 | 需要链接 hobot_dnn、hobot_ucp 库 |
完整代码参考
-
Model Zoo 官方示例:
- Python:
rdk_model_zoo_s/samples/Vision/ultralytics_yolo/source/python/ - C++:
rdk_model_zoo_s/samples/Vision/ultralytics_yolo/source/cpp/
- Python:
-
社区完整教程(含编译说明):
- RDKS100 模型部署万字教程
- 里面有完整的 CMakeLists.txt 和编译命令
最小可用测试
如果你只是想快速验证 HBM 模型能用:
# 1. 进入 Model Zoo 的 YOLO 目录
cd rdk_model_zoo_s/samples/Vision/ultralytics_yolo
# 2. 编译示例代码(如果有预编译的可执行文件直接用)
mkdir build && cd build
cmake ..
make
# 3. 运行测试
./yolo_infer ../reference_hbm_models/yolov8s_detect_nashe_640x640_nv12.hbm test_image.jpg
常见问题
Q: 没有推理代码怎么办?
A: 直接 clone Model Zoo 仓库,里面有完整的 Python 和 C++ 示例
Q: 输入图片格式不对?
A: 必须转为 NV12,参考教程中的 cvtColor(img, yuv, COLOR_BGR2YUV_I420)
Q: 输出结果看不懂?
A: YOLO 输出 6 个 tensor,需要做 NMS 后处理,Model Zoo 里有现成代码
需要我帮你整理一份Python 快速测试脚本吗?可以直接运行验证 HBM 模型。