板端部署 YOLOv5 目标检测
本文档旨在演示如何在 rockchip RK3588/3566 系列芯片上运行板端推理 YOLOv5 目标检测模型,所需环境配置请参考 RKNN 安装
此示例用 rknn_model_zoo 中预训练好的 ONNX 格式模型为例子通过模型转换到板端推理做完整示例。
利用 rknn 部署YOLOv5 需要两个步骤
- PC 端利用 rknn-toolkit2 将不同框架下的模型转换成 rknn 格式模型
- 板端利用 rknn-toolkit2-lite 的 Python API 板端推理模型
PC端模型转换
Radxa 已提供预转换好的 yolov5s_rk35XX.rknn
模型,用户可直接参考板端推理 YOLOv5 跳过 PC 端模型转换章节
-
如使用 conda 请先激活 rknn conda 环境
conda activate rknn
-
下载 yolov5s_relu.onnx 模型
cd rknn_model_zoo/examples/yolov5/model
# 下载预训练好的 yolov5s_relu.onnx 模型
bash download_model.sh如遇 到网络问题,可访问 此页 下载对应的模型到对应文件夹
-
使用 rknn-toolkit2 转换成 yolov5s_relu.rknn
cd rknn_model_zoo/examples/yolov5/python
python3 convert.py ../model/yolov5s_relu.onnx <TARGET_PLATFORM> <dtype> <output_rknn_path>参数解析:
<onnx_model>
: 指定 ONNX 模型路径<TARGET_PLATFORM>
: 指定 NPU 平台名称。支持的平台请参考这里<dtype>(可选)
: 指定为i8
或fp
。i8
用于 int8 量化,fp
用于 fp16 量化。默认为i8
<output_rknn_path>(可选)
: 指定 RKNN 模型的保存路径,默认保存在与 ONNX 模型相同的目录中,文件名为yolov5.rknn
-
将 yolov5.rknn 模型拷贝到板端
板端推理 YOLOv5
RK3566/3568 芯片用户使用 NPU 前需要在 rsetup overlays 中开启, 具体请参考 rsetup
-
(可选)下载 radxa 准备的 yolov5s rknn 模型
平台 下载链接 rk3566 yolov5s_rk3566.rknn rk3568 yolov5s_rk3568.rknn rk3588 yolov5s_rk3588.rknn -
修改
rknn_model_zoo/py_utils/rknn_executor.py
代码请根据板端安装 RKNN Model Zoo 配置 RKNN Model Zoo 代码仓库
1 # from rknn.api import RKNN
2 try:
3 from rknn.api import RKNN
4 except:
5 from rknnlite.api import RKNNLite as RKNN
...
...
18 ret = rknn.init_runtime() -
修改
rknn_model_zoo/examples/yolov5/python/yolov5.py
代码262 outputs = model.run([np.expand_dims(input_data, 0)])
-
安装依赖环境
pip3 install opencv-python-headless
-
运行 yolov5 示例代码
cd rknn_model_zoo/examples/yolov5/python
python3 yolov5.py --model_path <your model path> --img_save如你使用的是自己转换的模型需从 PC 端拷贝到板端,并用 --model_path 参数指定模型路径
rock@radxa-zero3:~/rknn_model_zoo/examples/yolov5/python$ python3 yolov5.py --model_path ./yolov5s_rk3566.rknn --target rk3566 --img_save
use anchors from '../model/anchors_yolov5.txt', which is [[[10.0, 13.0], [16.0, 30.0], [33.0, 23.0]], [[30.0, 61.0], [62.0, 45.0], [59.0, 119.0]], [[116.0, 90.0], [156.0, 198.0], [373.0, 326.0]]]
--> Init runtime environment
I RKNN: [09:28:50.071] RKNN Runtime Information, librknnrt version: 1.6.0 (9a7b5d24c@2023-12-13T17:31:11)
I RKNN: [09:28:50.071] RKNN Driver Information, version: 0.8.8
I RKNN: [09:28:50.073] RKNN Model Information, version: 6, toolkit version: 2.1.0+708089d1(compiler version: 2.1.0 (967d001cc8@2024-08-07T11:32:45)), target: RKNPU lite, target platform: rk3566, framework name: ONNX, framework layout: NCHW, model inference type: static_shape
W RKNN: [09:28:50.073] RKNN Model version: 2.1.0 not match with rknn runtime version: 1.6.0
W RKNN: [09:28:50.141] query RKNN_QUERY_INPUT_DYNAMIC_RANGE error, rknn model is static shape type, please export rknn with dynamic_shapes
W Query dynamic range failed. Ret code: RKNN_ERR_MODEL_INVALID. (If it is a static shape RKNN model, please ignore the above warning message.)
done
Model-./yolov5s_rk3566.rknn is rknn model, starting val
infer 1/1
IMG: bus.jpg
person @ (209 243 286 510) 0.880
person @ (479 238 560 526) 0.871
person @ (109 238 231 534) 0.840
person @ (79 353 121 517) 0.301
bus @ (91 129 555 464) 0.692
Detection result save to ./result/bus.jpg参数解析:
--model_path
: 指定 rknn 模型路径--img_folder
: 进行推理的图片库, 默认 ../model--img_save
: 是否保存推理结果图到 ./result,默认 False -
所有推理结果保存在 ./result 中