当前位置:   article > 正文

yolov5部署在rk3588,pt转onnx,onnx转rknn(附安装包)_rk3588 如何转换pt为onnx

rk3588 如何转换pt为onnx

本文包含了将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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

然后主目录执行:
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
  • 1
  • 2
  • 3

不报错表示安装成功

(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平台
...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

执行: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 # 这里的数字修改为数据集中的标签种类数
  • 1

其次修改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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/933219
推荐阅读
相关标签
  

闽ICP备14008679号