yolov5部署在rk3588,pt转onnx,onnx转rknn(附安装包)

本文包含了将yolov5-5.0训练生成的权重文件.pt转为.onnx,并将.onnx转换为.rknn最终运行在rk3588平台的全部过程和安装包。至于为什么转换时需要修改yolo.py中的代码还没搞清楚,希望大家评论区中指导一下,谢谢!
借鉴了几篇优秀博客,在此给出链接:
瑞芯微RK3588开发板:虚拟机yolov5模型转化、开发板上python脚本调用npu并部署 全流程
3588板子部署yoloV5
yolov5训练并生成rknn模型部署在RK3588开发板上,实现NPU加速推理

1.按照《03_RKNN Toolkit2 环境搭建》搭建环境

所需要的安装包:https://pan.baidu.com/s/1_2oXkVxtgLK_vpUYJT__uQ?pwd=6666
提取码: 6666
由于Ubuntu20太大无法上传,建议大家自行查找教程在VM中安装ubuntu20系统

(1)VMwar17下载

我参考的博客,在此引用该博文:
VMware 17安装教程(附安装包)

(2)使用Vmware虚拟机软件运行ubuntu20环境

安装好后点击左上角 文件->扫描虚拟机载入ubuntu20

(3)安装Miniconda

将Miniconda3-latest-Linux-x86_64.sh安装包拷贝到虚拟机ubuntu上
使用./Miniconda3-latest-Linux-x86_64.sh命令进行安装,根据提示,输入回车和yes
等待安装完成
右键打开新的终端,发现用户名前出现(base),就代表安装成功了
终端中输入conda create -n rknn python=3.8创建新的环境,接着输入y继续
使用conda activate rknn激活相应的rknn环境
pip install numpy==1.16.6 -i https://pypi.tuna.tsinghua.edu.cn/simple

2.pt->onnx

(1).在yolov5主目录下转换模型

训练好模型后进行pt->onnx
需要更改yolov5-5.0/models/yolo.py中Detect类的def forward,训练时切勿修改:

def forward(self,x):
    z = []
    for i in range(self.nl):
        # x[i] = self.m[i](x[i])
        x[i] = torch.sigmoid(self.m[i](x[i]))
    return x

然后主目录执行:
python models/export.py --weights ./runs/train/exp/weights/best.pt --img 640 --batch 1
会在/yolov5-5.0/runs/train/exp/weights/下生成best.onnx

3.onnx->rknn,以下步骤必须在Ubuntu系统中进行

(1).在虚拟机上git rknn-toolkit2工具包

我是直接下载的1.5.2版本的,下载好后直接拖进虚拟机中,没有用克隆,给出克隆地址
右键打开终端执行:
git clone https://github.com/rockchip-linux/rknn-toolkit2.git

(2).激活之前创建的rknn环境

conda activate rknn

(3).安装依赖

1.5.2版本在rknn-toolkit2/doc目录下选择和环境对应的python版本
pip install -r ./doc/requirements_cp38-1.5.2.txt -i -i https://pypi.tuna.tsinghua.edu.cn/simple

(4).安装rknn-toolkit2

在packages文件夹下面,选择和环境对应的python版本
pip install ./packages/rknn_toolkit2-1.5.2+b642f30c-cp38-cp38-linux_x86_64.whl

(5).验证是否安装成功

在终端输入

python
然后输入
from rknn.api import RKNN

不报错表示安装成功

(6).修改/example/onnx/yolov5/目录下的test.py

将生成的best.onnx放在/example/onnx/yolov5/目录下

ONNX_MODEL='best.onnx'  #yolov5s.onnx所在地址
RKNN_MODEL='best.rknn'  #生成的rknn模型所在地址
IMG_PATH='./bus.jpg'    #测试图片所在地址
DATASET='./dataset.txt' #量化所需的图片集
...
...
CLASSES=("A","B")       #数据集中的标签label
...
...
rknn.config(.....,target_platform='rk3588') # 将最后这个参数修改为使用的3588平台
...

执行:python test.py生成yolov5s.rknn

4.将生成的rknn模型运行在rk3588板子上

(1).下载rknpu2包

我在服务器上git rknpu2包,切记在linux系统不要直接下载代码压缩包,要用git
git clone https://github.com/rockchip-linux/rknpu2.git

(2).进入rknnpu2/example/rknn_yolov5_demo目录下

修改include文件中的postprocess.h

#define OBJ_CLASS_NUM   3 # 这里的数字修改为数据集中的标签种类数

其次修改model目录下的coco_80_labels_list.txt文件,改为自己的标签类并保存

(3).最后将转换后的rknn文件放在 model/RK3588

编译并运行shell:
bash ./build-linux_RK3588.sh
执行完后会生成install/rknn_yolov5_demo_Linux目录

(4)该目录下会有二进制文件:rknn_yolov5_demorknn_yolov5_video_demo

将整个install目录放到rk3588板子上,执行这两个程序,一个是测试图片的,一个是测试265和264编码视频的
使用ffmpage将MP4转h.265
ffmpeg -i eif4_60s.mp4 -vcodec hevc eif4_60s.hevc

### 将YOLOv8 PT模型换为RKNN格式的方法 要将YOLOv8的PT模型换为RKNN格式,可以按照以下方式操作: #### 方法一:通过`yolo export`命令直接导出RKNN格式 可以直接利用Ultralytics库中的`export`功能完成模型换。此方法无需先生成ONNX文件,而是直接生成RKNN文件。 运行如下命令即可实现: ```bash yolo export model=<path_to_your_best_pt> format=rknn ``` 这里需要注意的是,在指定参数时应确保路径无误,并且环境已安装好支持RKNN的相关依赖项[^3]。 #### 方法二:借助Python脚本进行换 另一种常见的方式是从官方仓库获取示例代码并基于其调整适应自己的需求。具体步骤如下所示: 1. **克隆rknn_model_zoo项目** 首先需要下载rknn_model_zoo源码到本地机器上以便访问其中包含的各种实用工具。 ```bash git clone https://github.com/airockchip/rknn_model_zoo.git cd rknn_model_zoo/examples/yolov8/python/ ``` 2. **执行换脚本** 接下来调用所提供的python程序来进行实际化过程。假设输入是一个名为'yolov8n.onnx'的标准onnx版本网络结构定义文档以及目标硬件平台设置为rk3588,则可采用下面这条指令启动进程: ```bash python convert.py yolov8n.onnx rk3588 ``` 上述两条途径均能有效达成由pytorch(.pt)形式向rknn专属优化过的专有架构变的目的[^4]。 此外值得注意的一点在于无论是哪种方案都强烈建议事先确认所使用的框架版本号匹配情况良好以免遇到不必要的麻烦[^2]。 ```python import torch from ultralytics import YOLO model = YOLO('best.pt') success = model.export(format='rknn') # 导出RKNN模型 if not success: raise Exception("Export failed.") print("Model exported successfully!") ``` 以上代码片段展示了如何使用 Ultralytics 的 API 来简化整个导出流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值