rdks100p板子跑yolo系列视觉模型,怎么使用npu算力

你好 @sky77777

HBM 模型不能直接运行,需要配合推理代码使用。Model Zoo 里已经提供了完整的推理示例!


:rocket: 快速运行步骤

:one: 直接使用 Model Zoo 的参考代码

# 在 S100P 板子上操作
cd /path/to/rdk_model_zoo_s/samples/Vision/ultralytics_yolo

# 查看推理代码
ls source/
# 应该有:
# - cpp/  (C++ 推理)
# - python/  (Python 推理)

:two: 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 后处理

:three: 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)

:clipboard: 关键注意事项

要点 说明
输入格式 必须是 NV12(YUV420SP),不能直接用 RGB
输入尺寸 640x640(和模型转换时一致)
输出解析 YOLO 有 6 个输出 tensor,需要做 NMS 后处理
内存管理 使用 hbUCPMallocCached 分配内存
编译依赖 需要链接 hobot_dnnhobot_ucp

:link: 完整代码参考

  1. Model Zoo 官方示例

    • Python: rdk_model_zoo_s/samples/Vision/ultralytics_yolo/source/python/
    • C++: rdk_model_zoo_s/samples/Vision/ultralytics_yolo/source/cpp/
  2. 社区完整教程(含编译说明):


:high_voltage: 最小可用测试

如果你只是想快速验证 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

:red_question_mark: 常见问题

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 模型。