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

news2024/12/28 8:15:25

前言

如果按照本系列第一篇博客那样交叉编译了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.coloradmin.cn/o/2046815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android-RK356x GT9XX多点触控设置为单点触控的方法

本文基于RK356x Android11系统描述GT9XX驱动芯片由多点触摸改为单点触摸功能。本次介绍的是触觉智能的Purple Pi OH鸿蒙开源主板,Purple Pi OH是华为Laval官方社区主荐的一款鸿蒙开发主板。 该主板主要针对学生党,极客,工程师,极大…

大模型应用——智能客服、机器翻译、文本生成、情感分析、问答系统、金融行业、电商、教育、医疗健康、个性化推荐、图像处理、视频处理、自动驾驶

大模型在各行业中的应用 1. 智能客服 应用场景:大模型可以作为智能客服系统的核心,提供自然流畅的对话体验,解答用户问题、推荐服务或产品,显著提升客户满意度。 效果:通过自然语言处理技术,大模型能够准…

深度学习每周学习总结N7:seq2seq翻译实战

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 目录 使用seq2seq实现文本翻译一、前期准备工作1. 搭建语言类2. 文本处理函数3. 文件读取函数 二、Seq2Seq 模型1. 编码器(Enc…

MySQL基础架构和日志系统

MySQL基础架构和日志系统 1,逻辑架构图1.1 连接器1.2.1 查询缓存1.2.2 分析器1.3 优化器1.4 执行器 2,日志系统2.1 redo log(重做日志)2.2 binlog(归档日志)2.3 两阶段提交2.3.1 崩溃恢复机制是什么&#x…

ai智能改写工具,一键智能改写文案效率高

在当今这个信息如洪流般涌来的时代,文案创作的重要性不言而喻。无论是为了吸引读者的目光、还是传达准确的信息,一篇精彩的文案都能发挥巨大的作用。而在这一过程中,ai智能改写工具宛如一颗璀璨的新星,以其独特的魅力和强大的功能…

Datawhale X 魔搭 AI夏令营第四期魔搭-AIGC文生图方向Task3笔记

Task3:进阶上分-实战优化 part1:工具初探一ComfyUI应用场景探索 ComfyUI概述 ComfyUI是一个功能强大、高度模块化的Stable Diffusion图形用户界面和后端系统,它允许用户通过链接不同的节点来构建复杂的图像生成工作流程。这些节点可以包括各…

Windows设置定时任务进行oracle数据库备份

先找到“定时任务计划” 方法1.开始->所有程序->附件->系统工具->定时任务计划 方法2:控制面板->输入计划 进行查询操作 名称随便定,点击下一步 下一步 设置每天的定时执行时间,点下一步 点下一步选择启动程序,点下一步 点…

Bruno API 工具

Bruno 是Postman 和Insomnia 的开源桌面替代品,用于 API 的测试、开发和调试。它将测试集合保存在本地,因此可以使用 Git 或其他版本控制工具来进行协作。 下载地址: https://www.usebruno.com/downloads 功能 1. 左边菜单 Collections Create Collec…

Unity 资源 之 功夫动画包(Kung-Fu animations),极致动作体验

震撼来袭!Unity 功夫动画包,极致动作体验 一、前言二,资源包内容三、免费获取资源包 一、前言 这个动画包简直让人惊叹不已,它包含了多达 140 多种不同的动画!想象一下,如此丰富的选择,几乎涵盖…

ChatGLM-4-9b-chat本地化|天翼云GPU上vLLM本地部署开源模型完整攻略

“ 拥有一个私有化的领先国产开源大模型?本文详细介绍了如何在天翼云GPU上使用vLLM部署ChatGLM-4-9b-chat本地化模型的完整攻略,助您快速上手。” 01 — vLLM 本来打算用ollama在GPU服务器上部署开源模型GLM4,在之前文章有部署教程&#xff1…

中央空调能量型计费系统,实现节能降耗

中央空调能量型计费系统是一种先进的计费方式,旨在通过科学、合理、公平地分摊中央空调使用费用,促进能源的有效利用和节能降耗。上海智能医疗创新示范基地使用的空调系统正是中央空调能量型计费系统 项目:上海智能医疗创新示范基地 项目情况…

【通信理论知识】数据传送的方式:串/并行;传输方向:单工、半/全双工;传输方式:同步/异步

通信协议与接口知识参考文章: 【通信理论知识】数据传送的方式:串/并行;传输方向:单工、半/全双工;传输方式:同步/异步 【串口通信详解】USART/UART、RS232、RS485标准接口与协议特点解析 【同步串行通信接…

【DGL系列】详细分析DGL中dgl.NID和orig_id的区别

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 背景知识 深入分析 初步结论 代码验证 实验设计 结果分析 最终结论 扩展思考 本文将详细分析orig_id和dgl.NID的区别。 背景知识 在做子图…

《Redis核心技术与实战》学习笔记4——AOF日志:宕机了,Redis如何避免数据丢失?

文章目录 AOF 日志是如何实现的?三种写回策略 日志文件太大了怎么办?AOF 重写会阻塞吗?小结 大家好,我是大白。 如果有人问你:“你会把 Redis 用在什么业务场景下?”我想你大概率会说:“我会把它当作缓存使…

【Kubernetes】k8s集群之包管理器Helm

目录 一.Helm概述 1.Helm的简介 2.Helm的三个重要概念 3.Helm2与Helm3的的区别 二.Helm 部署 1.安装 helm 2.使用 helm 安装 Chart 3.Helm 自定义模板 4.Helm 仓库 每个成功的软件平台都有一个优秀的打包系统,比如Debian、Ubuntu 的 apt,RedH…

医疗器械5G智能制造工厂物联数字孪生平台,推进制造业数字化转型

在当今这个日新月异的数字时代,医疗器械行业正经历着前所未有的变革与升级。随着5G技术的迅猛发展和智能制造的深入应用,医疗器械5G智能制造工厂物联数字孪生平台应运而生,它不仅为传统制造业注入了新的活力,更以其独特的优势引领…

C++图像识别、图像识别接口、ocr api

如果您在找工作并且在找内容审核编辑的工作,那么不难发现,快手在全国多个招聘网站发布了关于“内容审核编辑”岗位的招聘信息,据悉,此次的“内容审核编辑”岗位招聘的规模达3000人。因为快手上面“低龄妈妈”内容的炒作&#xff0…

Linux 与 Windows 服务器操作系统 | 全面对比

在服务器操作系统的领域,Linux 和 Windows 一直是两个备受关注的选择。 首先来看 Windows 操作系统。它由 Microsoft Corporation 开发,在桌面领域占据显著份额,其中 Windows 10 是使用最广泛的版本,广泛应用于个人计算机和企业桌…

8月16日笔记

只有DNS协议出网场景 DNS 协议是一种请求、应答协议,也是一种可用于应用层的隧道技术。DNS 隧道的工作原理很简单,在进行 DNS 查询时,如果查询的域名不在 DNS 服务器本机缓存中,就会访问互联网进行查询,然后返回结果。…

ELK整合实战,filebeat和logstash采集SpringBoot项目日志发送至ES

文章目录 ELK整合实战使用FileBeats将日志发送到Logstash配置Logstash接收FileBeat收集的数据并打印Logstash输出数据到Elasticsearch利用Logstash过滤器解析日志Grok插件Grok语法用法 输出到Elasticsearch指定索引 前文:FileBeats详解 前文:logstash详解…