yolov5训练并生成rknn模型部署在RK3588开发板上,实现NPU加速推理
简介
RK3588是瑞芯微(Rockchip)公司推出的一款高性能、低功耗的集成电路芯片。它采用了先进的28纳米工艺技术,并配备了八核心的ARM Cortex-A76和Cortex-A55处理器,以及ARM Mali-G76 GPU。该芯片支持多种接口和功能,适用于广泛的应用领域。
本篇为yolov5部署在RK3588的教程。
一、yolov5训练数据
请选择v5.0版本:Releases · ultralytics/yolov5 (github.com)
训练方法请按照官方的READEME文件进行。
转换前将model/yolo.py的 Detect 类下的
def forward(self, x):z = [] # inference outputfor i in range(self.nl):if os.getenv('RKNN_model_hack', '0') != '0':z.append(torch.sigmoid(self.m[i](x[i])))continuex[i] = self.m[i](x[i]) # convbs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85)x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()if not self.training: # inferenceif self.onnx_dynamic or self.grid[i].shape[2:4] != x[i].shape[2:4]:self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i)y = x[i].sigmoid()if self.inplace:y[..., 0:2] = (y[..., 0:2] * 2 + self.grid[i]) * self.stride[i] # xyy[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # whelse: # for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953xy, wh, conf = y.split((2, 2, self.nc + 1), 4) # y.tensor_split((2, 4, 5), 4) # torch 1.8.0xy = (xy * 2 + self.grid[i]) * self.stride[i] # xywh = (wh * 2) ** 2 * self.anchor_grid[i] # why = torch.cat((xy, wh, conf), 4)z.append(y.view(bs, -1, self.no))if os.getenv('RKNN_model_hack', '0') != '0':return zreturn x if self.training else (torch.cat(z, 1),) if self.export else (torch.cat(z, 1), x)
修改为:
def forward(self, x):z = []for i in range(self.nl):x[i] = self.m[i](x[i])return x
但在训练阶段请勿修改。
接着将训练好的best.pt放在工程文件夹下,使用yolov5工程中的export.py将其转换为onnx模型。

python export.py --weights best.pt
二、下载RKNN-Toolkit2
1、下面的请在 Ubuntu下进行,创建一个Python环境
conda create -n rknn152 python=3.8
激活环境rknn152
conda activate rknn152
拉取rockchip-linux/rknn-toolkit2 at v1.5.2 (github.com)仓库。我是直接下载的1.5.2版本的zip包。
git clone git@github.com:rockchip-linux/rknn-toolkit2.git
2、安装依赖(requirements_cp38-1.5.2.txt,在rknn-toolkit2/doc目录下)
pip install -r /home/yuzhou/rknn15/rknn-toolkit2-1.5.2/doc/requirements_cp38-1.5.2.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
安装rknn-toolkit2,位置在packages文件夹下面,请选择合适的版本。
pip install /home/yuzhou/rknn15/rknn-toolkit2-1.5.2/packages/rknn_toolkit2-1.5.2+b642f30c-cp38-cp38-linux_x86_64.whl
3、开发环境与板子连接
sudo apt-get install adb
使用USB-typeC线连接到板子的TypeC0接口,PC端识别到虚拟机中。
在开发环境中检查是否连接成功
adb devices
如果连接成功会返回板子的设备ID,如下:
List of devices attached
* daemon not running; starting now at tcp:5037
* daemon started successfully
75370ea69f64098d device
三、onnx转rknn模型
在rknn-toolkit2工程文件夹中浏览至./examples/onnx/yolov5,将我们在yolov5工程中转换得到的best.onnx复制到该文件夹下,需要修改该文件夹下的test.py中的内容。

- ONNX_MODEL:模型名;
- RKNN_MODEL:转换后的rknn模型名;
- IMG_PATH:推理的图片路径;
- DATASET:需要打开txt文件修改,改为IMG_PATH的图片名
- CLASSES:修改为自己数据集的类别

添加target_platform='rk3588'。
进入此目录,运行:
python test.py

如上图如此,说明没有问题,并且在该目录下会生成一个推理图片,以及转换好的rknn模型。
四、下载NPU工程
git clone https://github.com/rockchip-linux/rknpu2
将rknn_server和rknn库发送到板子上
adb push /home/yuzhou/rknn15/rknpu2-1.5.0/runtime/RK3588/Linux/rknn_server/aarch64/usr/bin/rknn_server /usr/bin/
adb push /home/yuzhou/rknn15/rknpu2-1.5.0/runtime/RK3588/Linux/librknn_api/aarch64/librknnrt.so /usr/bin/
adb push /home/yuzhou/rknn15/rknpu2-1.5.0/runtime/RK3588/Linux/librknn_api/aarch64/librknn_api.so /usr/bin/
在板子上运行rknn_server服务
adb shell
root@ok3588:/# chmod +x /usr/bin/rknn_server
root@ok3588:/# rknn_server &
[1] 6932
root@ok3588:/# start rknn server, version:1.5.0 (17e11b1 build: 2023-05-18 21:43:39)
I NPUTransfer: Starting NPU Transfer Server, Transfer version 2.1.0 (b5861e7@2020-11-23T11:50:51)
在开发环境中检测rknn_server是否运行成功
(base) yuzhou@yuzhou-HP:~$ adb shell
root@ok3588:/# pgrep rknn_server
6932
有返回进程id说明运行成功。
git clone https://github.com/rockchip-linux/rknpu2.git
五、部署在rk3588上
修改include文件中的头文件postprocess.h
#define OBJ_CLASS_NUM 80 #这里的数字修改为数据集的类的个数
修改model目录下的coco_80_labels_list.txt文件,改为自己的类并保存
car
将转换后的rknn文件放在model/RK3588目录下
在model目录下放入需要推理的图片
cd /home/yuzhou/rknn15/rknpu2-1.5.0/examples/rknn_yolov5_demo
编译,运行shell
bash ./build-linux_RK3588.sh
成功后生成install目录,将文件推到我们的板子上面
adb push /home/yuzhou/rknn15/rknpu2-1.5.0/examples/rknn_yolov5_demo /mydatas/
与rk3588进行交互
adb shell
进入我们传入文件的目录下
cd /mydatas/rknn_yolov5_demo_Linux
使用npu加速推理
./rknn_yolov5_demo ./model/RK3588/best5s.rknn ./model/6.jpg

将生成的图片拉取到本地来
adb pull /mydatas/rknn_yolov5_demo_Linux/6out.jpg /home/yuzhou/rknn-toolkit2/examples/onnx/yolov5_rk3588_demo/test
参考文章
瑞芯微RK3588开发板:虚拟机yolov5模型转化、开发板上python脚本调用npu并部署 全流程_yolov5模型在rk3588-CSDN博客
yolov5训练pt模型并转换为rknn模型,部署在RK3588开发板上——从训练到部署全过程_yolov5 rknn-CSDN博客
瑞芯微rk3588部署yolov5模型实战_在rk3588上部署yolov5-CSDN博客
yolov5训练并生成rknn模型以及3588平台部署_yolov5 在rk3588上的部署-CSDN博客
相关文章:
yolov5训练并生成rknn模型部署在RK3588开发板上,实现NPU加速推理
简介 RK3588是瑞芯微(Rockchip)公司推出的一款高性能、低功耗的集成电路芯片。它采用了先进的28纳米工艺技术,并配备了八核心的ARM Cortex-A76和Cortex-A55处理器,以及ARM Mali-G76 GPU。该芯片支持多种接口和功能,适…...
SCI一区 | Matlab实现SSA-TCN-BiGRU-Attention麻雀算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测
SCI一区 | Matlab实现SSA-TCN-BiGRU-Attention麻雀算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现SSA-TCN-BiGRU-Attention麻雀算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述程序…...
javaSwing宿舍管理系统(三个角色)
一、 简介 宿舍管理系统是一个针对学校宿舍管理的软件系统,旨在方便学生、宿管和管理员进行宿舍信息管理、学生信息管理以及宿舍评比等操作。该系统使用 Java Swing 进行界面设计,分为三个角色:管理员、宿管和学生。 二、 功能模块 2.1 管…...
蓝桥杯day12刷题日记
P8720 [蓝桥杯 2020 省 B2] 平面切分 思路:首先借用dalao的图解释一下,又多出一条与当前平面任意一条直线都不重合线时,多了的平面是交点数1,所以用双层循环每次往里面加一条直线,计算交点 #include <iostream>…...
深度学习pytorch——多分类问题(持续更新)
回归问题 vs 分类问题(regression vs classification) 回归问题(regression) 1、回归问题的目标是使预测值等于真实值,即predy。 2、求解回归问题的方法是使预测值和真实值的误差最小,即minimize dist(p…...
Flutter探索之旅:控制键盘可见性的神奇工具(flutter_keyboard_visibility)
随着移动应用的不断发展,用户体验的重要性愈发突显。而键盘的弹出和隐藏对于用户体验来说是至关重要的一环。在Flutter中,我们有幸拥有一个强大的工具——flutter_keyboard_visibility,它让我们能够轻松地监测键盘的可见性并做出相应的响应。…...
提升质量透明度,动力电池企业的数据驱动生产实践 | 数据要素 × 工业制造
系列导读 如《“数据要素”三年行动计划(2024—2026年)》指出,工业制造是“数据要素”的关键领域之一。如何发挥海量数据资源、丰富应用场景等多重优势,以数据流引领技术流、资金流、人才流、物资流,对于制造企业而言…...
华为数通 HCIP-Datacom H12-831 题库补充
2024年 HCIP-Datacom(H12-831)最新题库,完整题库请扫描上方二维码,持续更新。 缺省情况下,PIM报文的IP协议号是以下哪一项? A:18 B:59 C:103 D:9 答案&a…...
tensorflow中显存分配
tensorflow中显存分配 问题:使用tensorflow-gpu训练模型,GPU的显存都是占满的。 # GPU 1的显存将占满 os.environ["CUDA_VISIBLE_DEVICES"] "1" 原因:默认情况下,tensorflow会把可用的显存全部占光&#…...
STM32--RC522学习记录
一,datasheet阅读记录 1.关于通信格式 2.读寄存器 u8 RC522_ReadReg(u8 address) {u8 addr address;u8 data0x00;addr((addr<<1)&0x7e)|0x80;//将最高位置一表示read,最后一位按照手册建议变为0Spi_Start();//选中从机SPI2_ReadWriteByte(ad…...
函数封装冒泡排序
大家好: 衷心希望各位点赞。 您的问题请留在评论区,我会及时回答。 一、冒泡排序 冒泡排序是最常见的一种排序算法,按照指定顺序比较相邻元素,如果顺序不同,就交换元素位置,每一趟比较,都会导致…...
mysql基础学习
一、DML 介绍:DML(数据操作语言),用来对数据库中表的数据记录进行增删改操作。 1.添加数据 /*给指定字段添加数据*/ insert into user(id, name) values (1,小王); select *from user;/*查询该表的数据*/ /*给所有字段添数据*/ insert int…...
mybatisplus提示:Property ‘mapperLocations‘ was not specified.
1、问题概述? 在使用springboot整么mybatisPlus启动的使用提示信息: Property mapperLocations was not specified. 但是我确实写了相对应的配置: 【在pom文件中配置xml识别】 <resources><resource><directory>src/m…...
【STL源码剖析】【2、空间配置器——allocator】
文章目录 1、什么是空间配置器?1.1设计一个简单的空间配置器,JJ::allocator 2、具备次配置力( sub-allocation)的 SGI 空间配置器2.1 什么是次配置力2.2 SGI标准的空间配置器,std::allocator2.2 SGI特殊的空间配置器,std::alloc2.…...
机器人|逆运动学问题解决方法总结
如是我闻: 解决逆运动学(Inverse Kinematics, IK)问题的方法多样,各有特点。以下是一个综合概述: 1. 解析法(Analytical Solutions) 特点:直接使用数学公式计算关节角度࿰…...
php搭建websocket
workerman文档:https://www.workerman.net/doc/gateway-worker/unbind-uid.html 1.项目终端执行命令:composer require topthink/think-worker 2.0.x 2.config多出三个配置文件: 3.当使用php think worker:gateway命令时,提示不…...
maven install报错原因揭秘:‘parent.relativePath‘指向错误的本地POM文件
哈喽,大家好,我是木头左! 今天我要和大家分享的是关于maven install时报错的一个常见原因:parent.relativePath’指向错误的本地POM文件。这个问题可能会影响到的开发效率,甚至导致项目构建失败。那么,该如…...
数据结构·排序
1. 排序的概念及运用 1.1 排序的概念 排序:排序是将一组“无序”的记录序列,按照某个或某些关键字的大小,递增或递减归零调整为“有序”的记录序列的操作 稳定性:假定在待排序的记录序列中,存在多个具有相同关键字的记…...
Python学习笔记01
第一章、你好Python 初识Python Python的起源 1989年,为了打发圣诞节假期,Gudiovan Rossum吉多范罗苏姆(龟叔)决心开发一个新的解释程序(Python雏形) 1991年,第一个Python解释器诞生 Python这个名字,来自龟叔所挚爱的电视剧M…...
Java学习笔记01
1.1 Java简介 Java的前身是Oak,詹姆斯高斯林是java之父。 1.2 Java体系 Java是一种与平台无关的语言,其源代码可以被编译成一种结构中立的中间文件(.class,字节码文件)于Java虚拟机上运行。 1.2.3 专有名词 JDK提…...
DeepSeek系统设计辅助:如何在48小时内完成可审计、可回滚、可压测的AI服务架构图?
更多请点击: https://intelliparadigm.com 第一章:DeepSeek系统设计辅助 DeepSeek系统设计辅助模块面向架构师与后端工程师,提供模型能力调用、接口契约生成、异步任务编排等核心支撑能力。该模块不替代人工设计决策,而是通过结构…...
HFSS仿真结果怎么看?以T型波导为例,读懂S参数与电场动态图
HFSS仿真结果深度解析:从S参数到电场动态图的实战指南当你第一次在HFSS中完成T型波导仿真后,面对满屏的曲线和彩色云图,是否感到既兴奋又困惑?那些起伏的S参数曲线究竟告诉你什么信息?电场图中跳跃的颜色又代表怎样的物…...
告别拍脑袋规划!用ArcGIS做绿道选线:如何科学量化坡度、水域、道路成本并加权计算
科学规划绿道的ArcGIS高阶技法:从成本栅格构建到最优路径生成绿道规划从来不是简单的"两点之间直线最短",而是需要综合考虑地形、生态、人文等多维因素的复杂决策过程。传统规划中常见的"拍脑袋"决策方式,往往导致建成后…...
LaTeX公式一键转Word:3步告别数学公式编辑烦恼
LaTeX公式一键转Word:3步告别数学公式编辑烦恼 【免费下载链接】LaTeX2Word-Equation Copy LaTeX Equations as Word Equations, a Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX2Word-Equation 还在为Word文档中的数学公式编辑而抓狂…...
AutoWall终极指南:如何在Windows上轻松设置炫酷动态壁纸
AutoWall终极指南:如何在Windows上轻松设置炫酷动态壁纸 【免费下载链接】AutoWall 🌌 Live wallpapers on Windows 7/8/10/11 using open-source wallpaper engine 项目地址: https://gitcode.com/gh_mirrors/au/AutoWall 厌倦了千篇一律的静态桌…...
Log4Shell漏洞深度解析:Spring Boot日志注入原理与四层修复方案
1. 这个漏洞不是“远程执行代码”那么简单——它是一次对Java生态信任链的系统性击穿Log4j CVE-2021-44228,业内常简称为“Log4Shell”,2021年12月爆发时,我正在给一家金融客户的Spring Boot微服务集群做灰度发布前的安全加固。凌晨三点收到告…...
独立开发者利用taotoken模型广场为不同任务选择性价比最优模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者利用taotoken模型广场为不同任务选择性价比最优模型 对于独立开发者而言,在有限的预算内高效完成多样化的开…...
Godot 4.3随机地图性能优化:避开TileMap与RNG陷阱
1. 为什么刚写完第一版随机地图就崩溃?——从“能跑”到“能用”的真实断层你兴冲冲地照着教程敲完几十行GDScript,RandomNumberGenerator初始化了,for x in range(width)循环也套好了,甚至还在_draw()里用draw_rect()把每个格子都…...
3分钟掌握Topit:Mac窗口置顶终极指南,让多任务处理效率翻倍!
3分钟掌握Topit:Mac窗口置顶终极指南,让多任务处理效率翻倍! 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否曾经在Ma…...
如何高效使用开源电路仿真工具:CircuitJS1桌面版新手快速入门指南
如何高效使用开源电路仿真工具:CircuitJS1桌面版新手快速入门指南 【免费下载链接】circuitjs1 Standalone (offline) version of the Circuit Simulator with small modifications based on modified NW.js. 项目地址: https://gitcode.com/gh_mirrors/circ/circ…...
