【瑞芯微RV1126(深度学习模型部署)】部署自己训练的yolov8-seg,实现足型检测!

前言

如果按照本系列第一篇博客那样交叉编译了opencv,那本文有些步骤就不用了,比如交叉编译工具链的下载,所以自己斟酌步骤。
本系列第一篇:https://blog.csdn.net/m0_71523511/article/details/139636367
本系列第二篇:https://blog.csdn.net/m0_71523511/article/details/140583609
本系列第三篇:本文


瑞芯微有很多部署的例子在官方的git仓库里,如下图所示:
在这里插入图片描述
部署官方的这些模型只需要在rknn_model_zoo目录下执行类似: ./build-linux.sh -t rv1126 -a armhf -d yolov8 ,编译生成可执行文件,再加上rknn模型就可以上板运行。由于瑞芯微的onnx模型都是对原模型的优化,所以类似yolo官网训练出来的模型就不能直接用它们demo的推理代码,有两种方法比较省力:一是更改自己的模型结构使其适配瑞芯微的demo推理代码;二是不修改自己的模型结构,更改瑞芯微的demo推理代码使其适配自己的模型。这里选择第一种方法。

要完成对自己训练的yolov8-seg模型进行部署主要是:
①训练自己的模型,得到pt文件
②对模型进行转换得到rknn模型,对推理代码进行编译生成可执行文件
③上板运行
④模型预编译(加快模型初始化速度)
这里面最难且最核心的就是第二步本文训练模型是在windows环境下,使用anaconda进行环境管理;转换模型是在ubuntu20.04环境下,也使用了anaconda管理环境。


一、训练yolov8-seg模型(windows)

关于windows-下搭建深度学习环境的文章,网上一搜一堆,这里不赘述,只需要能够训练就行,可以参考:
csdn博客
b站视频

预训练模型在官网下载,选择yolov8n-seg:
在这里插入图片描述
下面是我的windows工程目录结构,供参考:
在这里插入图片描述

训练完成之后可以在/runs/segment/train/weights下看到模型文件,这里的best.pt就是后续要用到的模型。
在这里插入图片描述


二、onnx模型转成rknn模型并编译推理代码(虚拟机ubuntu)

2.1 模型转换环境的配置:

到ubantu官网下载20.04版本的ubuntu,其他版本应该也可以,我这里是在虚拟机安装,当然也可以双系统,这里的安装教程都很多。
ubantu安装完成之后,需要到瑞芯微的git仓库下载必须的一些文件:
2.1.1、https://github.com/rockchip-linux/rknn-toolkit
在这里插入图片描述
第一个是rknn官方安装包压缩文件,whl文件在这里面。第二个是rknn官方压缩文件,这里没用到也可以不下载。

2.1.2、https://github.com/airockchip/rknn_model_zoo
RKNN Model Zoo是基于 RKNPU SDK 工具链开发的, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, C API 推理 RKNN 模型的流程。
在这里插入图片描述

2.1.3、arm交叉编译工具链,后续编译时需要用到。不懂这是干嘛用的可以网上搜,简单来说就是在虚拟机ubuntu的系统架构下(x86)编译出开发板架构(arm)下能运行的文件。

上面这些都下好之后放入同一个文件夹下即可:
在这里插入图片描述

2.1.4、anaconda安装、rknn-toolkit安装
进入anaconda官网,下载linux版本:在这里插入图片描述
可以在虚拟机里下载,也可以windows下载之后拷贝到ubantu里。
进入放置这个sh文件的目录下打开终端,执行:bash anaconda安装包名:
在这里插入图片描述
这个安装需要阅读协议,可以一直输入yes和回车,会比按enter键更快。
安装完成之后进行配置才能正常使用:source ~/.bashrc

①按照如下指令激活python环境

conda create -n py3.6-rknn-1.7.5 python=3.6      //创建虚拟环境conda activate py3.6-rknn-1.7.5       //激活虚拟环境

在安装rknn-tooltik之前先升级一下系统的cmake:
在这里插入图片描述
安装的tensorflow和pytorch版本最好适配rknn-tooltik的版本,否则可能会有问题,在rknn-toolkit-package里的txt里面有给出建议安装的版本。
在这里插入图片描述

②安装rknn-toolkit及其部分依赖包(确保激活了虚拟环境)
这里安装cpu版本是因为,虚拟机里的ubantu无法调用物理机的gpu,所以只能安装cpu版本,对于双系统的可以安装gpu版本,但需要注意cuda的版本对应。
在这里插入图片描述
上面的步骤结束之后,可以进行测试看安装是否成功:from rknn.api import RKNN
在这里插入图片描述
③配置交叉编译环境

xz -d gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
tar -xvf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar

解压完成后将解压目录设置到bash里,设置环境变量:

sudo gedit ~/.bashrc
export PATH=/home/ss/RV1126/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin:$PATH
# 上面这句修改为自己的目录,加到最末尾即可
source ~/.bashrc

上述设置全部成功之后,环境配置就到此结束。

2.2 模型转换:

①https://github.com/airockchip/ultralytics_yolov8/blob/main/RKOPT_README.zh-CN.md
此工程用于将使用官方yolov8-seg训练出来的模型转换成适配瑞芯微推理demo的onnx模型,将这个工程下载之后,按照网站里的去操作,即可得到onnx模型(注意使用自己训练出的pt模型)。

# 调整 ./ultralytics/cfg/default.yaml 中 model 文件路径,默认为 yolov8n.pt,若自己训练模型,请调接至对应的路径。支持检测、分割模型。
# 如填入 yolov8n.pt 导出检测模型
# 如填入 yolov8-seg.pt 导出分割模型export PYTHONPATH=./
python ./ultralytics/engine/exporter.py# 执行完毕后,会生成 ONNX 模型. 假如原始模型为 yolov8-seg.pt,则生成 yolov8_seg.onnx 模型。

②进入rknn_model_zoo/example/yolov8-seg/python中,将前面导出的onnx模型放到这个目录,然后执行:

python3 convert.py yolov8_seg.onnx rv1126

即可在model中得到rknn模型。
在这里插入图片描述
这里穿插说明,可以先使用python文件夹下的推理代码推理onnx模型,这一步不需要连接开发板,就是测试一下onnx模型是否可用,如果这一步可以用的话大概率转成rknn也是没问题的。

③进入rknn_model_zoo-main目录:

运行如下命令进行编译:
./build-linux.sh -t rv1126 -a armhf -d yolov8_seg

编译后在如下目录得到 可执行文件
在这里插入图片描述
此时在model_zoo目录的install中可以看到一个文件夹,后续会用到:
在这里插入图片描述


三、上板运行

将上面得到的rknn_yolov8_seg_demo文件夹送入板子即可,可以使用adb,也可也使用nfs挂载,也可以使用ssh远程登录。
在板子里进入到rknn_yolov8_seg_demo文件夹中:

chmod 777 rknn_yolov8_seg_demo       //给予权限./rknn_yolov8_demo yolov8_seg.rknn bus.jpg       //执行推理

这里由于没有进行预编译,所以初始化需要很久,实际推理速度很快,最终结果保存为rknn_yolov8_seg_demo目录下的out.png:
在这里插入图片描述


四、模型预编译(虚拟机ubantu)

直接按照example中的指令转换得到的rknn模型在rv1126板子上加载速度非常慢,也就是上面说的那样,所以进行在线预编译来加快加载速度。在线预编译的代码路径如下:
在这里插入图片描述
这里需要使用adb连接开发板才能运行这个py文件,开发板和电脑通过usb线连接,ubantu里执行:

sudo apt install adb

安装完成之后可以执行adb devices,看是否能看到板子的id,如果报错,那就百度,一般就是删除重装adb或者重启adb。如果能看到板子id就可以运行程序,首先把模型转换步骤中生成的rknn模型放到这个路径下:
在这里插入图片描述
执行:

python export_rknn_precompile_model.py yolov8_seg.rknn yolov8_seg_precompile.rknn rv1126

板子连接没有问题的话就会生成一个预编译后的模型:
在这里插入图片描述
此时可以用这个模型替换掉第三步上班运行中的rknn模型,可以看到推理时不用等很长时间初始化了。


五、板端按键控制摄像头拍照,送入深度学习模型进行推理实现足型检测

这个之所以写在后面是因为之前这部分是待改进的,还未完成的部分,现在完成了,懒得修改前面的内容,所以最好前面的内容都先做一遍,这样才能熟悉流程,这部分还需要修改推理及后处理的代码。由于此项目是一个课设,所以代码部分暂不给出,这里给出大致流程:
、首先需要在虚拟机中,按照这个博客的教程:https://blog.csdn.net/m0_71523511/article/details/139636367搭建出在rv1126开发板上可以使用opencv的高级函数的环境。当然也可以像本系列第二篇博客一样,使用v4l2来实现摄像头数据的读取,这里面还给出了板端按键检测和lcd显示的代码。

、修改cpp中的main.cc,这个文件默认是读取图像进行推理的,上一步已经搭建好了opencv交叉编译环境,此时可以直接修改代码,使用capture函数直接抓取usb摄像头的图像,可以再添加一些其它的功能,比如使用按键按下进行拍照并推理,将将结果显示到lcd屏幕上,这里我就是这样实现的,代码部分自己摸索。

、编译修改完的代码,将得到的模型文件和第一篇文章最后面得到的动态库全都放到开发板端,即可运行。
按键控制摄像头拍摄并推理
推理结果显示到lcd屏上
对推理结果再进行图像处理即可得到足型。


六、待改进

一、用QT做一个界面,来控制拍照和显示。
二、增加网络编程,将数据保存和展示在云端,以app、web、微信小程序其中一个方式来显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/402310.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字化转型底座-盘古信息IMS OS,可支撑构建MES/WMS/QCS/IoT等工业软件

在当今这个数字化浪潮汹涌的时代,众多企业纷纷踏上数字化转型之路。对于部分想自研工业软件的企业来说,一个强大、灵活且可扩展的数字化底座显得尤为重要。盘古信息IMS OS,,正是这样一款能够支撑构建MES(制造执行系统&…

井字棋游戏(HTML+CSS+JavaScript)

🌏个人博客主页:心.c 前言:这两天在写植物大战僵尸,写不动了,现在和大家分享一下之前我写的一个很简单的小游戏井字棋,这个没有AI,可以两个人一起玩,如果大家觉得我哪里写的有一些问…

BQ27441初始化配置程序,电压、SOC等参数读取程序

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、模拟IIC二、BQ27441初始化配置程序三、学习资料 前言 送给大学毕业后找不到奋斗方向的你(每周不定…

html+css+js网页制作 自定义电商10个页面

htmlcssjs网页制作 自定义电商10个页面 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…

机器学习 第11章-特征选择与稀疏学习

机器学习 第11章-特征选择与稀疏学习 11.1 子集搜索与评价 我们将属性称为“特征”(feature),对当前学习任务有用的属性称为“相关特征”(relevant feature)、没什么用的属性称为“无关特征”(irrelevant feature)。从给定的特征集合中选择出相关特征子集的过程&a…

UART通信实现与验证(RS485)

前言 UART是一种常用的串行通信协议,RS485则是一种用于长距离和抗干扰的物理层标准。结合UART和RS485可以实现可靠的数据传输,特别是在多点通信和长距离应用中。通过合适的硬件连接、软件配置和验证测试,可以确保这一通信系统的稳定性和数据完…

【刷题笔记】二叉树2

1 二叉树的层序遍历 上一期我们讲了关于二叉树的前序、中序以及后序遍历的相关内容。然而,还存在一种遍历方式,这种方式非常符合我们人类的正常思维,可以求解很多树相关的问题,比较暴力——二叉树的层序遍历。 二叉树的层序遍历与…

读软件开发安全之道:概念、设计与实施01基础

1. 基础 1.1. 实现软件安全既需要运用逻辑,又是一项艺术 1.1.1. 一项仰赖直觉来做出判断的艺术 1.1.2. 需要践行者对当代数字系统有所掌 1.1.3. 需要他们对人与系统之间的交互有所体悟 1.2. 需要准确地思考一下何谓安全 1.2.1. 安全定义的主观性颇强&#xff0…

HarmonyOS开发:跨应用数据共享详解

目录 前言跨应用数据共享的重要性HarmonyOS的数据共享能力相关的基本概念跨应用数据共享的数据管理具体实现跨应用数据共享延伸:数据共享的安全和隐私结语 前言 现在的移动操作系统中,应用之间的数据共享已成为提升用户体验和实现功能互补的重要手段&a…

watch 和 watchEffect 的隐藏点 --- 非常细致

之前有一篇文章讲述了 watch 和 watchEffect 的使用,但在实际使用中,仍然存在一些“隐藏点”,可能会影响开发,在这补充一下。 1. watch 的隐藏点 1.1 性能陷阱:深度监听的影响 当在 watch 中使用 deep: true 来监听…

[MRCTF2020]套娃1

打开题目,查看源代码,有提示 有两层过滤 1.过滤"_"与"%5f" 。 这里要求的参数必须是"b_u_p_t"但是不能检测出"_"。这里看着很作弄人。其实这里要用到php里非法参数名的问题。可以参考一下博客 ?b.u.p.t2333…

Python爬虫技术与K-means算法的计算机类招聘信息获取与数据分析

有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 目录 摘要.... 1 Abstract 2 1 引言.... 3 1.1 研究背景... 3 1.2 国内外研究现状... 4 1.3 研究目的... 5 1.4 研究意义... 7 2 关键技术理论介绍... 7 2.1 Python爬虫... 7 2.1 K-means…

微软开源库 Detours 详细介绍与使用实例分享

目录 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours应用场景 5、Detours兼容性 6、Detours具体使用方法 7、Detours使用实例 - 使用Detours拦截系统库中的UnhandledExceptionFilter接口,实现对程序异常的拦截 C软件异常排查从入门到精通…

VMware虚拟机下安装Ubuntu22.04以及汉化配置保姆级教程

目录 一.VMware和Ubuntu下载 二.在VMware中创建Ubuntu 1.点击 创建新的虚拟机 2.选择典型 3.选择Ubuntu镜像包(自定义存放的位置) 4.创建个人信息(密码一定要牢记) 5.选择虚拟机的安装位置 6.其他配置项(默认下…

Unity Obfuscator 使用说明

一、Assembly - Settings 1. 核心Unity程序集(Assembly-CSharp) Obfuscate Assembly-CSharp: 开启 这是Unity的核心程序集,所有没有存储在程序集定义文件(assembly definition file)中的代码都会被存储在这里。大多数…

C++多态详解

1. 多态的概念 多态就是函数调用的多种形态,使用多态能够使得不同的对象去完成同一件事时,产生不同的动作和结果。 举个栗子:比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买…

yolov5网络初始化问题

当你打印detect层的三个特征层时,发现有三种不同的长和宽,如下图所示: 我提出三个问题: 为什么不一样呢,输入有什么含义吗? 为什么网络初始化四次(forward)? 下面来逐个击破 1. torc…

uniapp 微信小程序生成水印图片

效果 源码 <template><view style"overflow: hidden;"><camera device-position"back" flash"auto" class"camera"><cover-view class"text-white padding water-mark"><cover-view class"…

【笔记】泰山派环境配置遇到E: Unable to locate package repo

答案来自通义千问&#xff0c;解决了我的问题&#xff0c;做一些记录 你尝试在Ubuntu或Debian系统上使用apt命令安装repo工具&#xff0c;但是遇到了问题&#xff0c;因为repo不是直接在软件源中作为一个独立的包提供的。repo是Google的一个Git仓库管理工具&#xff0c;通常用…

EasyCVR视频汇聚平台:打造全栈视频监控系统的基石,解锁可视化管理与高效运维

随着科技的飞速发展&#xff0c;视频监控已成为现代社会不可或缺的一部分&#xff0c;广泛应用于社区、公共场所、工业领域等多个场景。EasyCVR视频汇聚平台&#xff0c;作为一款高性能的视频汇聚管理平台&#xff0c;凭借其强大的视频处理、汇聚与融合能力&#xff0c;在构建全…