当前位置: 首页 > news >正文

RK3568部署yolo8记录

 本教程记录自己一下在RK3568上部署yolo8的步骤

板端驱动 

在板端,首先查看rknpu驱动是否安装、存在。若键入下面的命令有返回则,证明驱动已安装。

dmesg | grep -i rknpu

瑞芯微官方说,驱动版本最好大于0.9.2。但是我看有的博主说,低于这个版本的也可行正常推理

其他博主的驱动版本升级教程

 按照瑞芯微的官方文档,接下来需要检查RKNPU2 环境是否安装

 使用下面的命令 查询rknn_server版本

strings /usr/bin/rknn_server | grep -i "rknn_server version"

其实,如果你是用linux x86电脑通过数据线连接板端,在linux x86安装rknn-toolkit2,进行模型转化,并编写代码传输至板端仿真代码结果。这种情况,需要在板端安装rknn_server。我这里是直接在板端安装rknn-toolkit2、进行模型转化......,总之我这里一切操作都是在板端,像我这种情况是不需要再板端安装rknn_server的

 使用下面的命令 查询librknnrt.so库版本

strings /usr/lib/librknnrt.so | grep -i "librknnrt version"

官方文档要求,两者输入的版本必须一致。

我的板子执行上面的 命令查询rknn_server版本,结果没有返回任何信息,查询librknnrt.so返回的信息显示是1.5.0。

于是果断选择更新 rknn_server与librknnrt.so

首先github上下载rknpu

将下载下来的文件拷贝到板卡上,将下面对应文件拷贝对板卡的对应位置

sudo cp rknn-toolkit2/rknpu/runtime/Linux/rknn_server/aarch64/usr/bin/* /usr/bin/
sudo cp rknn-toolkit2/rknpu/runtime/Linux/librnkk_api/aarch64/librknnrt.so /usr/lib/

给rknn_server赋予可执行权限

sudo chmod +x /usr/bin/rknn_server
sudo chmod +x /usr/bin/start_rknn.sh
sudo chmod +x /usr/bin/restart_rknn.sh

紧接着重启服务

cd /usr/bin
./restart_rknn.sh 

接下来控制台会有信息输出,打印出版本后,就可以用ctrl+c关闭掉

重新查看rknn_server与librknnrt.so版本,发现两者一致,并升级到2.3.0

注意,若使用strings命令发现  -bash: strings:未找到命令 

则需要安装strings命令

sudo apt-get update
sudo apt-get install binutils

在板端配置rknn-toolkit2

其实配置rknn-toolkit2环境,官方推荐在linux x86电脑上配置,在上面进行模型pt-onnx-rknn转化,最后将rknn模型及其推代码部署到板端。我这里直接在板端配置rknn-toolkit2

将事先下载好的rknn-toolkit2文件夹上传到板端,在rknn-toolkit2/rknn-toolkit2/packages/arm64中安装对应的rknn-toolkit。先安装requirement.txt,我这里选择的是arm64_requirements_cp310.txt,然后安装对应的whl,我这里选择的是rknn_toolkit2-2.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

 我这是在板端用miniconda虚拟环境安装的。若执行以下命令没有报错,则安装rknn-toolkit2成功。

$ python3
>>> from rknn.api import RKNN

pt模型转onnx模型

这里需要下载瑞芯微官方github上推出的yolo8,项目名称叫做ultralytics_yolov8,这个项目其实就瑞芯微为了yolo8能更好的适配自家芯片,在ultralytics官方项目微改得来的,其使用方式跟Ultralytics基本无差别,可以用它训练自己的模型,也可以用官方ultraltics训练模型,但如果想要将自己训练好的yolo8 pt模型转化为onnx,以便于后续将onnx转换为rknn模型,这里一定要使用瑞芯微的ultralytics_yolov8将pt模型转化为onnx。这里简单解释一下瑞芯微的ultralytics_yolov8相比官方ultralytics的改动及其原因:

在基于不影响输出结果, 不需要重新训练模型的条件下, 有以下改动:

  • 修改输出结构, 移除后处理结构(yolo8后处理结果对于rknn量化不友好)

  • dfl 结构在 瑞芯微NPU 处理上性能不佳,移至模型外部的后处理阶段,此操作大部分情况下可提升推理性能。

  • 模型输出分支新增置信度的总和,用于后处理阶段加速阈值筛选。

以上移除的操作, 均需要在外部使用CPU进行相应的处理. (对应的后处理代码可以在 RKNN_Model_Zoo 中找到)

将下载好的ultralytics_yolov8上传到板端,并配置ultralytics_yolov8所需的依赖,建议pip install ultralytics,自动安装完依赖之后,在卸载掉ultralytics,因为我们要使用瑞芯微的ultralytics_yolo8(跟官方ultralytics所需依赖一模一样), 只借助pip install ultralytics自动安装依赖。

从瑞芯微官方github网站下载ultralytics_yolo8项目,把自己训练好的pt模型放到项目目录下,

在ultralytics_yolov8\ultralytics\cfg\default.yaml中修改模型地址为自己的模型地址

 接下来使用下面的命令用瑞芯微提供的ultralytics_yolo8将pt转换为onnx。 

export PYTHONPATH=./
python ./ultralytics/engine/exporter.py

此时在ultralytics目录下产生onnx文件,用netron打开onnx文件可以看到模型的输出是下面这个样子的

onnx转rknn

onnx转rknn及其推理代码可以在rknn_model_zoo中找到,下载rknn_model_zoo上传到板端,

将导出的onnx复制到 rknn_model_zoo/examples/yolov8/python

 修改convert.py中 DEFAULT_RKNN_PATH变量,这个变量是定义转化后rknn的保存路径,我把它设置为当前目录

运行下面的脚本将onnx转换为rknn

python convert.py <onnx_model> <TARGET_PLATFORM> <dtype(optional)> <output_rknn_path(optional)># such as: 
python convert.py fall_down.onnx rk3568
# output model will be saved as ../model/yolov8.rknn
```*Description:*- `<onnx_model>`: Specify ONNX model path.
- `<TARGET_PLATFORM>`: Specify NPU platform name. Such as 'rk3588'.
- `<dtype>(optional)`: Specify as `i8`, `u8` or `fp`. `i8`/`u8` for doing quantization, `fp` for no quantization. Default is `i8`.
- `<output_rknn_path>(optional)`: Specify save path for the RKNN model, default save in the same directory as ONNX model with name `yolov8.rknn`

 此时,在该目录下生成rknn模型,后续可以用于推理。

rknn模型推理

推理代码包含c++和python版本的都可以在rknn_model_zoo/examples中找到。

rknn支持的模型及其推理代码案例

比如yolo8 rknn的python推理就在rknn_model_zoo/examples/yolov8/python/yolov8.py中,在这个py文件中,只需要更改一下模型地址、模型标签、推理尺寸......即可实现推理自己的rknn模型,这里比较简单,可以自己去查看源码,这里不做演示。

总结,瑞芯微教程基本上都可以在ultralytics_yolo8、rknn_toolkit2、rknn_model_zoo这三个项目的doc目录下找到,模型量化、转化、推理、部署等教程都在这里面。不仅是yolo8部署教程、包括其他yolo版本都可以找到教程。总之,关于rknn的一切教程都在ultralytics_yolo8、rknn_toolkit2、rknn_model_zoo这三个项目中。

附:RKNN 查看NPU相关的命

# 查看驱动版本
cat /sys/kernel/debug/rknpu/version结果:RKNPU driver: v0.8.2# 查看电源状态
cat /sys/kernel/debug/rknpu/power
结果 off# 查看NPU使用率,需要root权限
cat /sys/kernel/debug/rknpu/load
结果 NPU load:  Core0:  0%, Core1:  0%, Core2:  0%,# 查看NPU可用的频率,然后设置频率
cat /sys/class/devfreq/fdab0000.npu/available_frequencies结果300000000 400000000 500000000 600000000 700000000 800000000 900000000 1000000000echo userspace > /sys/class/devfreq/fdab0000.npu/governor
结果:无echo 1000000000 > /sys/class/devfreq/fdab0000.npu/userspace/set_freq
结果:无# 查看NPU当前工作频率
cat /sys/kernel/debug/rknpu/freq
结果:1000000000NPU其他相关
# 查看librknnrt库版本
strings /usr/lib/librknnrt.so | grep "librknnrt version"结果:librknnrt version: 1.4.0 (a10f100eb@2022-09-09T09:07:14)
# 查看rknn_server版本
strings /usr/bin/rknn_server | grep build
结果:1.3.0 (121b661 build: 2022-04-29 11:12:02)
.note.gnu.build-id
# 查看NPU驱动版本
dmesg | grep -i rknpu
结果
[187804.047298] RKNPU fdab0000.npu: RKNPU: set rknpu freq: 1000000000, volt: 787500
[187806.290136] RKNPU fdab0000.npu: RKNPU: set rknpu freq: 1000000000, volt: 787500
# 或者
sudo cat /sys/kernel/debug/rknpu/version

相关文章:

RK3568部署yolo8记录

本教程记录自己一下在RK3568上部署yolo8的步骤 板端驱动 在板端&#xff0c;首先查看rknpu驱动是否安装、存在。若键入下面的命令有返回则&#xff0c;证明驱动已安装。 dmesg | grep -i rknpu 瑞芯微官方说&#xff0c;驱动版本最好大于0.9.2。但是我看有的博主说&#xff…...

数据可视化复习2-绘制折线图+条形图(叠加条形图,并列条形图,水平条形图)+ 饼状图 + 直方图

目录 目录 一、绘制折线图 1.使用pyplot 2.使用numpy ​编辑 3.使用DataFrame ​编辑 二、绘制条形图&#xff08;柱状图&#xff09; 1.简单条形图 2.绘制叠加条形图 3.绘制并列条形图 4.水平条形图 ​编辑 三、绘制饼状图 四、绘制散点图和直方图 1.散点图 2…...

JavaScript原生深拷贝方法 structuredClone使用

structuredClone 简介 structuredClone 是现代浏览器提供的原生 JavaScript 方法&#xff0c;用于深拷贝对象。它可以处理各种复杂数据结构&#xff0c;包括嵌套对象、数组、Date、Map、Set 等&#xff0c;且支持循环引用。 语法 const clone structuredClone(value);value:…...

SpringBoot无法使用jkd8问题

1. 解决SpringBoot无法使用jdk8问题 创建一个高 jkd 版本&#xff0c;如 jkd21 在创建项目后&#xff0c;将 pom.xml中的 jdk 版本改为8&#xff0c;找到下图所在位置修改即可。 此外将 SpringBoot 的版本修改为 2 开头的 如2.7.4 &#xff0c;然后 刷新 Maven 项目即可。 在 …...

使用 Jina Embeddings v2 在 Elasticsearch 中进行后期分块

作者&#xff1a;来自 Elastic Gustavo Llermaly 在 Elasticsearch 中使用 Jina Embeddings v2 模型并探索长上下文嵌入模型的优缺点。 在本文中&#xff0c;我们将配置和使用 jina-embeddings-v2&#xff0c;这是第一个开源 8K 上下文长度嵌入模型&#xff0c;首先使用 semant…...

QT简易项目 数据库可视化界面 数据库编程SQLITE QT5.12.3环境 C++实现

案例需求&#xff1a; 完成数据库插入&#xff0c;删除&#xff0c;修改&#xff0c;查看操作。 分为 插入&#xff0c;删除&#xff0c;修改&#xff0c;查看&#xff0c;查询 几个模块。 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget…...

python json.dump()和json.dumps()的区别

用人话总结一下 json.dump()是针对文件的json和python的转换 json.dumps()主要是针对内容数据 json.dumps(obj, skipkeysFalse, ensure_asciiTrue, check_circularTrue, allow_nanTrue, clsNone, indentNone, separatorsNone, encoding“utf-8”, defaultNone, sort_keysFalse…...

网络流学习笔记

注&#xff1a;笔者是蒟蒻&#xff0c;所以本文几乎是干货&#xff0c;枯燥无味甚至可能会引人不适&#xff0c;请读者谨慎阅读。 为了笔者快爆掉的肝点个赞好吗&#xff1f;&#xff1f;&#xff1f; Part.1 网络流基础定义 一个有向带权图 G ( V , E ) G(V,E) G(V,E) 是…...

Mybatis PLUS查询对List使用OR模糊查询

Mybatis PLUS查询对List使用OR模糊查询 1、版本2、代码3、效果 1、版本 Mybatis PLUS版本&#xff1a;3.5.7 注意&#xff1a;版本3.1.2及以下是需要return的 因当前为高版本&#xff0c;代码中已将 return 注释。 2、代码 QueryWrapper<Object> queryWrapper new Que…...

Debezium日常分享系列之:Debezium Engine

Debezium日常分享系列之&#xff1a;Debezium Engine 依赖打包项目在代码中输出消息格式消息转换消息转换谓词高级记录使用引擎属性异步引擎属性数据库模式历史属性处理故障 Debezium连接器通常通过部署到Kafka Connect服务来运行&#xff0c;并配置一个或多个连接器来监视上游…...

I.MX6U 裸机开发20. DDR3 内存知识

I.MX6U 裸机开发20. DDR3 内存知识 一、DDR3内存简介1. DDR发展历程SRAMSDRAMDDR1DDR2DDR3DDR4DDR5 2. 开发板资源3. DDR3的时间参数1. 传输速率2. tRCD3. CL 参数作用取值范围工作原理4. tRC参数原理单位与取值5. tRAS重要性及作用 二、I.MX6U MMDC 控制器1. MMDC简介&#xf…...

【R安装】VSCODE安装及R语言环境配置

目录 VSCODE下载及安装VSCODE上配置R语言环境参考 Visual Studio Code&#xff08;简称“VSCode” &#xff09;是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的&#xff0c;针对于编写现代Web和云应用的跨平台源代码编辑器&…...

ES更新问题 Failed to close the XContentBuilder异常

问题描述 使用RestHighLevelClient对文档进行局部更新的时候报错如下&#xff1a; Suppressed: java.lang.IllegalStateException: Failed to close the XContentBuilderat org.elasticsearch.common.xcontent.XContentBuilder.close(XContentBuilder.java:1011)at org.elast…...

svn-git下载

windows&#xff1a; svn 客户端&#xff1a;-------------- TortoiseSVN 安装 下载地址&#xff1a;https://tortoisesvn.net/downloads.html, 页面里有语言包补丁的下载链接。 目前最新版为 1.11.0 下载地址&#xff1a; https://osdn.net/projects/tortoisesvn/storage/1.…...

10个Word自动化办公脚本

在日常工作和学习中&#xff0c;我们常常需要处理Word文档&#xff08;.docx&#xff09;。 Python提供了强大的库&#xff0c;如python-docx&#xff0c;使我们能够轻松地进行文档创建、编辑和格式化等操作。本文将分享10个使用Python编写的Word自动化脚本&#xff0c;帮助新…...

Paddle Inference部署推理(十八)

十八&#xff1a;Paddle Inference推理 &#xff08;C&#xff09;API详解 3. 使用 CPU 进行预测 注意&#xff1a; 在 CPU 型号允许的情况下&#xff0c;进行预测库下载或编译试尽量使用带 AVX 和 MKL 的版本 可以尝试使用 Intel 的 MKLDNN 进行 CPU 预测加速&#xff0c;默…...

Redis开发02:redis.windows-service.conf 默认配置文件解析与注解

文件位置&#xff1a;redis安装目录下的 redis.windows-service.conf &#xff0c;存放了redis服务的相关配置&#xff0c;下面列举出默认配置的含义&#xff1a; 配置项含义bind 127.0.0.1限制 Redis 只监听本地回环地址&#xff0c;意味着只能从本地连接 Redis。protected-m…...

redis大key和热key

redis中大key、热key 什么是大key大key可能产生的原因大key可能会造成什么影响如何检测大key如何优化删除大key时可能的问题删除大key的策略 热key热key可能导致的问题解决热key的方法 什么是大key 大key通常是指占用内存空间过大或包含大量元素的键值对。 数据量大&#xff…...

Dubbo 最基础的 RPC 应用(使用 ZooKeeper)

看国内的一些项目时 Dubbo 这个词经常闪现&#xff0c;一直也不以为然&#xff0c;未作搜索&#xff0c;当然也不知道它是做什么用的。直到最近阅读关于大型网站架构相关的书中反复提到 Dubbo 后&#xff0c;觉得不能再对它视而不见。Google 了一下&#xff0c;它是在阿里巴巴创…...

科技赋能:企业如何通过新技术提升竞争力的策略与实践

引言 在当今瞬息万变的商业环境中&#xff0c;科技的迅猛发展正在重新定义行业的游戏规则。无论是小型企业还是跨国巨头&#xff0c;都感受到数字化转型的迫切需求。过去&#xff0c;企业竞争力更多依赖于成本控制、资源调配或市场覆盖&#xff0c;而如今&#xff0c;新技术的引…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...