RK3588部署yolo模型实时单张或批量推理

说明:

​ 步骤1-2在任何可执行的平台(x86,arm等)都ok

​ 步骤3开始在arm上执行

​ 版本:python3.8

​ rknn-toolkit2 :2.3.0 用于转换rknn模型,2.3.0版本支持了arm

​ rknn_model_zoo: 2.3.0 用于转换rknn模型

​ rknn_toolkit_lite2: 1.5.0 用于部署实时推理

1. 下载公开的yolov5模型或训练自己的yolov5模型
1.1 下载公开的yolov5模型

​ 基于开源COCO数据集预训练的模型权重 Pretrained Checkpoints

​ 下载地址: https://github.com/ultralytics/yolov5?tab=readme-ov-file

1.2 训练自己的yolov5模型

​ 参照jetson

2. pt转onnx
2.1 克隆 airockchip从官方yolov5 fork的仓库
git clone https://github.com/airockchip/yolov5.git

​ **注:**据说拉官方的有问题,没试过

2.2 转onnx

​ 参考仓库中README_rkopt.md,换成要转的yolov5版本权重

python export.py --rknpu --weight yolov5s.pt

如此便得到了一个onnx模型

注:

1.不管用rknn进行单张预测,还是批量预测,此步骤转的时候都不需要改export.py脚本中的batch_size

2.img_size默认是(640,640),rknn推理代码默认也是640,其他size,我也没试过。可以自行测试

3. onnx转rknn
3.1 首先克隆2个仓库,仓库有些大,如果克隆不动,直接下载zip,下载2.3.0版本
git clone https://github.com/airockchip/rknn-toolkit2.git -b v2.3.0 
git clone https://github.com/airockchip/rknn_model_zoo.git -b v2.3.0 
3.2 安装python依赖

​ 安装包在 ./rknn-toolkit2/rknn-toolkit2/packages 下, 依赖比如torch在内的一些包,最好加上pip源

pip3 install -i https://mirrors.aliyun.com/pypi/simple rknn_toolkit2-2.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl 
3.3 执行转rknn

​ cd到执行目录 ./rknn_model_zoo/examples/yolov5/python

​ 对于后续部署实时只要单张预测的,convert.py脚本保持不变,执行

python3 convert.py ../model/yolov5s_relu.onnx rk3588 i8 ../model/yolov5s_relu.rknn

​ 对于后续部署实时要批量预测的,convert.py做如下修改,再执行上述命令

ret = rknn.build(do_quantization=do_quant, dataset=DATASET_PATH) 
### 根据需要的batch, 修改为
ret = rknn.build(do_quantization=do_quant, dataset=DATASET_PATH,rknn_batch_size=4)

​ 执行完,得到一个.rknn模型

3.4 测试转后的rknn模型

​ 执行如下操作,

python3 yolov5.py --model_path ../model/yolov5s_relu.rknn --target rk3588

​ **注:**因为在arm上执行的,所以如果有啥报错,把yolov5.py中画图相关的代码注释掉即可

4. rknn部署实时推理

​ 2.3.0版本的rknn-toolkit2 已经支持在arm进行推理,不过之前的版本如果要在arm上推理,需要用另外的包:rknn-toolkit-lite2,所以下面还是介绍用rknn-toolkit-lite2部署推理

rknn-toolkit-lite2用1.5.0版本,用匹配的2.3.0版本也是ok的,不过2.3.0版本我没测过

4.1 克隆对应的仓库

​ 之所有用鲁班猫,是因为它最早提供了yolov5的示例,官方的rknn-toolkit-lite2中没给示例。不过后来用完发现不同模型用rknn的推理代码其实差不多,稍微改吧改吧就行

​ 但因为用2.3.0版本的rknn-toolkit2转的rknn模型,所以鲁班猫里的推理代码,也要改动不少(粘贴,复制就行)

git clone https://github.com/LubanCat/lubancat_ai_manual_code.git
4.2 修改鲁班猫里的推理代码(重要)

要修改的推理脚本:lubancat_ai_manual_code/dev_env/rknn_toolkit_lite2/examples/yolov5_inference/test.py

​ 具体修改如下:

#1# 删除test.py中outputs = rknn_lite.inference(inputs=[img]) 之后的代码,即:对outputs后处理的代码

#2# 用步骤3中 rknn_model_zoo/examples/yolov5/python下的yolov5.py中后处理代码(post_process函数操作)替换即可

注: 如果不做此修改,实时推理的结果会有出现很多目标检测结果,原因是没做同目标的对齐。

4.3 单张图片预测

​ 代码不用做其他修改,直接用单张预测转换的rknn模型,执行test.py即可

4.4 批量图片预测

​ 可以参考其他模型的批量示例,用批量预测转换的rknn模型,具体操作如下:

#1# 在outputs = rknn_lite.inference(inputs=[img])之前,加上
img = np.concatenate((img, img, img, img), axis=0) # 4张图片

#2# 对于推理结果的后处理,在进行post_process之前,加上
first_outputs =[outputs[0][0],outputs[1][0],outputs[2][0]] # 第一张图片输出
second_outputs =[outputs[0][1],outputs[1][1],outputs[2][1]] # 第二张图片输出,依次...

#3# 将得到的first_outputs,second_outputs,... 依次进行post_process的后处理,得到各自目标识别结果

**注:**批量的图片输入数量,一定要和rknn_batch_size一样,否则会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NullGogo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值