yolov5训练pt模型并转换为rknn模型,部署在RK3588开发板上——从训练到部署全过程

这篇具有很好参考价值的文章主要介绍了yolov5训练pt模型并转换为rknn模型,部署在RK3588开发板上——从训练到部署全过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、任务介绍

二、实验过程

2.1 使用正确版本的yolov5进行训练(平台:x86机器windows系统)

2.2 best.pt转换为best.onnx(平台:x86机器window系统)

2.3 best.onnx转换为best.rknn(平台:x86机器Linux系统)

2.3.1 环境准备和工具包安装

2.3.2 onnx转换为rknn

2.4 RK3588部署rknn实现NPU加速(平台:aarch板子Linux系统)

三、总结


一、任务介绍

        瑞芯微RK3588是一款搭载了NPU的国产开发板。NPU(neural-network processing units)可以说是为了嵌入式神经网络和边缘计算量身定制的,但若想调用RK3588的NPU单元进行推理加速,则需要首先将模型转换为.rknn格式的模型,否则无法使用。

        这次我们的任务是将yolov5训练得到的pt模型,一步步转换为rknn模型,并将rknn模型部署在搭载RK3588的StationPC M3主机上,使用NPU推理。(官网NPU教程:NPU使用 — Firefly Wiki)查阅资料和官网后发现转换和使用过程分以下几步,首先总结给大家,后文细说:

1.使用正确版本(v5.0)的yolov5进行训练得到pt模型

2.将pt模型使用yolov5工程中的export.py转换为onnx模型

3.将onnx模型使用rknn-toolkit2中onnx文件夹的test.py转换为rknn模型;

4.在板子上使用rknpu2工具调用rknn模型,实现NPU推理加速。

        接下来进行详细介绍。

二、实验过程

2.1 使用正确版本的yolov5进行训练(平台:x86机器windows系统)

        在这次任务之前,博主本人甚至不知道yolov5有不同的版本(小白落泪),更不知道用不同版本训练得到的pt模型会决定rknn模型转换的成功与否。一开始我使用的是最新版本的yolov5(大概是v7.0)进行训练,最后模型转换自然是不成功。网上也有许多使用新版本yolov5训练,之后修改onnx模型的教程,但都比较麻烦。人菜就要跟着官方教程做,请看官方教程:

rknn-toolkit/examples/pytorch/yolov5 at master · rockchip-linux/rknn-toolkit · GitHub

        需要指出的是,虽然我们后面要使用的是rknn-toolkit2工具进行模型转换,但教程却在rknn-toolkit工程中,github二者的父目录如图:

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

         进入rknn-toolkit工程,浏览至/example/pytorch/yolov5,在README中赫然写着:

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

        这就是我们本次要使用的“正确版本的yolov5” ,怕麻烦的读者请一定按照这个id去yolov5官网找到工程并克隆下来。进入yolov5官网GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

在右上角搜索这个commit id并进入“In this repository”,如图所示:

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

         进入commits,点击右边的commit id,再次进入后点击Browse files,如下三图所示:

        commit id:

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

        Browse files:

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

        对应版本的源码:

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

        非常棒,至此我们已经找到了正确版本的yolov5!接下来就是把代码克隆到本地或者云服务器,开始训练自己的pt模型;此处实际上是yolov5 5.0版本的工程,其中未包含预训练模型yolov5s.pt,需要我们自行下载,在releasesl链接中找到V5.0下载yolov5s.pt,链接如下:

https://github.com/ultralytics/yolov5/releases

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

        关于yolov5的运行环境配置、参数修改和训练命令,网上教程很多,满足package的要求,可以开始训练收敛即可,不作为本文重点。最终在经过若干轮训练后,我们得到了自己的best.pt模型,本部分告一段落。

2.2 best.pt转换为best.onnx(平台:x86机器window系统)

        此处依然参考rknn-toolkit工程中的教程进行转换,切记以下步骤!!!

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

        注意:在训练时不要修改yolo.py的这段代码,训练完成后使用export.py进行模型导出转换时一定要进行修改,不然会导致后面的rknn模型转换失败! 

        修改后将best.pt移动至export.py同一文件夹下,在命令行调用以下命令:

python export.py --weights best.pt --img 640 --batch 1 --include onnx

        我们便可以得到成功转换的模型best.onnx

2.3 best.onnx转换为best.rknn(平台:x86机器Linux系统)

2.3.1 环境准备和工具包安装

        有了以上的best.onnx模型作为基础,现在可以正式开始rknn模型的转换了。此处的转换工具rknn-toolkit2只能在Linux系统上运行,这里我使用的是PC上的Ubuntu虚拟机。在上文提到的链接中下载rknn-toolkit2,下载后的文件夹如图:

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

        首先安装rknn-toolkit2的环境, 其环境要求在./doc/requirements_cp38-1.4.0.txt中,这里我使用的是miniconda创建的python3.8虚拟环境,和windows下anaconda使用方法类似,方便且占用空间小,推荐大家在管理python环境时使用。创建环境并命名为rknn,使用pip安装requirements_cp38-1.4.0.txt中的包,过程如下图:

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

         环境满足需求后便可以安装rknn-toolkit2工具包了,浏览至./packages中,输入以下命令:

pip install rknn_toolkit2-1.4.0_22dcfef4-cp38-cp38-linux_x86_64.whl

        提示安装完成后我们可以检查是否安装成功,在终端中运行python,输入:

from rknn.api import RKNN

        若不报错说明我们的工具包已经安装成功,之后便可进行rknn模型的转换了~

2.3.2 onnx转换为rknn

        在rknn-toolkit2工程文件夹中浏览至./examples/onnx/yolov5,将我们在2.2中转换得到的best.onnx复制到该文件夹下,修改该文件夹下的test.py中的内容为自己模型的名字,要修改的地方如下:

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

         在这个test.py的main函数中(在第239行附近)可以了解到这个python文件的作用:

       【 配置——加载onnx模型—导出rknn模型——rknn模型推理——后处理——输出结果

        运行test.py,神奇的转换过程就开始了...

python test.py

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

        最终弹窗得到post process result,若结果正确,说明我们的rknn模型转换成功了!这里的test.py构建了一个虚拟的NPU运行环境,模拟在RK3588上真实运行的情况。结果正确说明离最终完成任务只差部署在板子上这一步了。

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

         这时在当前文件夹./example/onnx/yolov5中可以看到生成的best.rknn模型。至此,我们离胜利就不远了。

2.4 RK3588部署rknn实现NPU加速(平台:aarch板子Linux系统)

        终于RK3588板子登场的时候了,但如果它还是原生的安卓系统,请按官网教程给它安装一个Linux系统吧。我这里使用TF卡烧录安装了Ubuntu系统。

        依然找到官网,下载其中的rknpu2工具,链接如下:https://github.com/rockchip-linux/rknpu2

        这一部分借鉴了该博客,十分详细,大家可以将转换后的best.rknn模型复制到板子上,并按照这个步骤进行操作:yolov5训练并生成rknn模型以及3588平台部署_新鑫信心的博客-CSDN博客_rknn yolov5

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

         最终安装的命令如上图最后一行代码所示,第一个参数为生成的推理程序,第二个参数为我们之前训练和转换得到的best.rknn模型,第三个参数为待检测的图片。最终会输出推理结果out.jpg。若读者想要在自己编写的python代码中调用该程序,可以使用subprocess.Popen()命令,我书写的代码段如下,仅供参考:

p = subprocess.Popen(['./rknn_yolov5_demo', './model/RK3588/best.rknn', './defect_det.jpg'])
p.wait()
picDetected = cv2.imread('out.jpg')

        我得到的out.jpg如下,一个简单的二分类缺陷检测:yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

        到了这一步,我们已经成功完成了任务,撒花~~~但调用了NPU之后,与CPU相比究竟有没有实现加速呢?这里进行一个对比:

        NPU推理速度(69ms左右):

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

        CPU推理速度(2.16s左右): 

yolov5 rknn,嵌入式硬件,边缘计算,pytorch,深度学习

        推理速度快了30多倍!NPU还是很给力的。

三、总结

        本文比较好地实现了yolov5模型从训练pt模型,到转换为rknn模型,最终部署在RK3588板子上使用NPU加速推理的过程。其它教程指出也可以使用rknn-toolkit-lite在RK3588上完成部署,这部分没有时间验证了,欢迎大家进行探索。文章来源地址https://www.toymoban.com/news/detail-777399.html

到了这里,关于yolov5训练pt模型并转换为rknn模型,部署在RK3588开发板上——从训练到部署全过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • yolov5-6.0项目部署+自用Pytorch模型转换rknn模型并在RK3568 linux(Debian)平台上使用qt部署使用NPU推理加速摄像头目标识别详细新手教程

    1 我们打开yolov的官网,Tags选择6.0版本 2. 下载该压缩包并解压到工程目录下 3. 我们这里使用pycharm,专门针对python的IDE,用起来非常方便,下载方式就是官网直接下载,用的是社区版 4. 我们需要安装环境,这里我推荐安装Anaconda在电脑上,这是一个非常方便的包管理工具,可

    2024年02月05日
    浏览(68)
  • 36、RK3399Pro 环境搭建和Yolov5 c++调用opencv进行RKNN模型部署和使用

    基本思想:记录rk3399 pro配置环境和c++ npu开发记录,主要想搞一份c++代码和其它图像算法结合一下,好进行部署,淘宝链接见附录  需要的python3.7对应的aarch64的whl包:包含opencv-whl 、h5py-whl包: 链接: https://pan.baidu.com/s/1cvCAmHBa_4KgEjrcFIYnig 提取码: 5ui4 链接: https://pan.baidu.com/s/1hrc

    2024年02月07日
    浏览(42)
  • 使用rknn-toolkit2把YOLOV5部署到OK3588上

    首先在PC的ubuntu系统安装虚拟环境: 我的服务器是ubuntu18.04版本,所以安装python3.6 conda create -n ok3588 python=3.6 需要键盘输入y,然后完成虚拟环境安装。 其他系统的对应关系: Ubuntu 18.04 python 3.6 / Ubuntu 20.04 python 3.8 / Ubuntu 22.04 python 3.10 进入虚拟环境 conda activate ok3588 首先安装正

    2024年02月16日
    浏览(35)
  • RK3588平台开发系列讲解(项目篇)YOLOv5部署测试

    平台 内核版本 安卓版本 RK3588 Linux 5.10 Android 12 沉淀、分享、成长,让自己和他人都能有所收获!😄

    2024年02月06日
    浏览(57)
  • 瑞芯微RK3568/RK3588平台YOLOV5实时视频算法的部署小白教程

    本文实现整体的部署流程比较小白,首先在PC上分别实现工程中的模型仿真推理、yolov5-pytorch仿真推理、自己训练yolov5模型仿真推理,完成仿真之后再在板端分别实现rk提供模型的板端推理、yolov5-pytorch板端推理、自己训练的yolov5模型板端推理,最后实现自己训练的yolov5模型实

    2024年02月06日
    浏览(85)
  • YOLOV5(二):将pt转为onnx模型并用opencv部署

    yolov5s 6.0自带export.py程序可将.pt转为.onnx等,只需配置需要的环境即可。 1. 安装环境 报错:NVIDIA-tensorrt安装失败! 解决:从源码安装TensorRt: ①安装CUDNN和CudaToolKit等GPU配置 ②从官网下载需要的rt版本:https://developer.nvidia.com/nvidia-tensorrt-8x-download ③解压后,将lib文件夹添加到

    2024年02月10日
    浏览(44)
  • 瑞芯微RK3588 C++部署Yolov8检测和分割模型

    最近这一个月在研究国产瑞芯微板子上部署yolov8的检测和分割模型,踩了很多坑,记录一下部署的过程和遇到的一些问题: 需要的环境和代码主要包括: (1)rknn-toolkit2-1.5.2:工具链,开发环境 (2)rockchip-yolov8:pt模型转onnx模型 (3)yolov8_onnx2rknn:在(2)的基础上转检测

    2024年04月09日
    浏览(59)
  • RK3588平台开发系列讲解(AI 篇)RKNN-Toolkit2 模型的加载

    沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 RKNN-Toolkit2 目前支持 Caffe 、 TensorFlow 、 TensorFlowLite 、 ONNX 、 DarkNet 、 PyTorch 等模型的加载转换,这些模型在加载时需调用对应的接口,以下为这些接口的详细说明。

    2024年02月11日
    浏览(53)
  • rk3588下yolov5火焰识别图片输出log

    post process config: box_conf_threshold = 0.25, nms_threshold = 0.45 Loading mode… sdk version: 1.5.2 (c6b7b351a@2023-08-23T15:28:22) driver version: 0.9.3 model input num: 1, output num: 3 index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp

    2024年03月13日
    浏览(53)
  • RK3588平台开发系列讲解(项目篇)基于yolov5的物体识别

    平台 内核版本 安卓版本 RK3588 Linux 5.10 Android 12 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将给大家介绍,如

    2024年02月06日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包