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中找到。
比如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的步骤 板端驱动 在板端,首先查看rknpu驱动是否安装、存在。若键入下面的命令有返回则,证明驱动已安装。 dmesg | grep -i rknpu 瑞芯微官方说,驱动版本最好大于0.9.2。但是我看有的博主说ÿ…...
数据可视化复习2-绘制折线图+条形图(叠加条形图,并列条形图,水平条形图)+ 饼状图 + 直方图
目录 目录 一、绘制折线图 1.使用pyplot 2.使用numpy 编辑 3.使用DataFrame 编辑 二、绘制条形图(柱状图) 1.简单条形图 2.绘制叠加条形图 3.绘制并列条形图 4.水平条形图 编辑 三、绘制饼状图 四、绘制散点图和直方图 1.散点图 2…...
JavaScript原生深拷贝方法 structuredClone使用
structuredClone 简介 structuredClone 是现代浏览器提供的原生 JavaScript 方法,用于深拷贝对象。它可以处理各种复杂数据结构,包括嵌套对象、数组、Date、Map、Set 等,且支持循环引用。 语法 const clone structuredClone(value);value:…...
SpringBoot无法使用jkd8问题
1. 解决SpringBoot无法使用jdk8问题 创建一个高 jkd 版本,如 jkd21 在创建项目后,将 pom.xml中的 jdk 版本改为8,找到下图所在位置修改即可。 此外将 SpringBoot 的版本修改为 2 开头的 如2.7.4 ,然后 刷新 Maven 项目即可。 在 …...
使用 Jina Embeddings v2 在 Elasticsearch 中进行后期分块
作者:来自 Elastic Gustavo Llermaly 在 Elasticsearch 中使用 Jina Embeddings v2 模型并探索长上下文嵌入模型的优缺点。 在本文中,我们将配置和使用 jina-embeddings-v2,这是第一个开源 8K 上下文长度嵌入模型,首先使用 semant…...
QT简易项目 数据库可视化界面 数据库编程SQLITE QT5.12.3环境 C++实现
案例需求: 完成数据库插入,删除,修改,查看操作。 分为 插入,删除,修改,查看,查询 几个模块。 代码: 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…...
网络流学习笔记
注:笔者是蒟蒻,所以本文几乎是干货,枯燥无味甚至可能会引人不适,请读者谨慎阅读。 为了笔者快爆掉的肝点个赞好吗??? 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版本:3.5.7 注意:版本3.1.2及以下是需要return的 因当前为高版本,代码中已将 return 注释。 2、代码 QueryWrapper<Object> queryWrapper new Que…...
Debezium日常分享系列之:Debezium Engine
Debezium日常分享系列之:Debezium Engine 依赖打包项目在代码中输出消息格式消息转换消息转换谓词高级记录使用引擎属性异步引擎属性数据库模式历史属性处理故障 Debezium连接器通常通过部署到Kafka Connect服务来运行,并配置一个或多个连接器来监视上游…...
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简介…...
【R安装】VSCODE安装及R语言环境配置
目录 VSCODE下载及安装VSCODE上配置R语言环境参考 Visual Studio Code(简称“VSCode” )是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代Web和云应用的跨平台源代码编辑器&…...
ES更新问题 Failed to close the XContentBuilder异常
问题描述 使用RestHighLevelClient对文档进行局部更新的时候报错如下: Suppressed: java.lang.IllegalStateException: Failed to close the XContentBuilderat org.elasticsearch.common.xcontent.XContentBuilder.close(XContentBuilder.java:1011)at org.elast…...
svn-git下载
windows: svn 客户端:-------------- TortoiseSVN 安装 下载地址:https://tortoisesvn.net/downloads.html, 页面里有语言包补丁的下载链接。 目前最新版为 1.11.0 下载地址: https://osdn.net/projects/tortoisesvn/storage/1.…...
10个Word自动化办公脚本
在日常工作和学习中,我们常常需要处理Word文档(.docx)。 Python提供了强大的库,如python-docx,使我们能够轻松地进行文档创建、编辑和格式化等操作。本文将分享10个使用Python编写的Word自动化脚本,帮助新…...
Paddle Inference部署推理(十八)
十八:Paddle Inference推理 (C)API详解 3. 使用 CPU 进行预测 注意: 在 CPU 型号允许的情况下,进行预测库下载或编译试尽量使用带 AVX 和 MKL 的版本 可以尝试使用 Intel 的 MKLDNN 进行 CPU 预测加速,默…...
Redis开发02:redis.windows-service.conf 默认配置文件解析与注解
文件位置:redis安装目录下的 redis.windows-service.conf ,存放了redis服务的相关配置,下面列举出默认配置的含义: 配置项含义bind 127.0.0.1限制 Redis 只监听本地回环地址,意味着只能从本地连接 Redis。protected-m…...
redis大key和热key
redis中大key、热key 什么是大key大key可能产生的原因大key可能会造成什么影响如何检测大key如何优化删除大key时可能的问题删除大key的策略 热key热key可能导致的问题解决热key的方法 什么是大key 大key通常是指占用内存空间过大或包含大量元素的键值对。 数据量大ÿ…...
Dubbo 最基础的 RPC 应用(使用 ZooKeeper)
看国内的一些项目时 Dubbo 这个词经常闪现,一直也不以为然,未作搜索,当然也不知道它是做什么用的。直到最近阅读关于大型网站架构相关的书中反复提到 Dubbo 后,觉得不能再对它视而不见。Google 了一下,它是在阿里巴巴创…...
科技赋能:企业如何通过新技术提升竞争力的策略与实践
引言 在当今瞬息万变的商业环境中,科技的迅猛发展正在重新定义行业的游戏规则。无论是小型企业还是跨国巨头,都感受到数字化转型的迫切需求。过去,企业竞争力更多依赖于成本控制、资源调配或市场覆盖,而如今,新技术的引…...
从0开始深度学习(33)——循环神经网络的简洁实现
本章使用Pytorch的API实现RNN上的语言模型训练 0 导入库 import torch import torch.nn as nn import torch.nn.functional as F from torch.utils.data import Dataset, DataLoader from collections import Counter import re import math from tqdm import tqdm1 准备数据 …...
【FAQ】HarmonyOS SDK 闭源开放能力 — 公共模块
1.问题描述: 文档哪里能找到所有的权限查看该权限是用户级的还是系统级的。 解决方案: 您好,可以看一下下方链接是否可以解决问题: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/permissions-for-all-V…...
百度 文心一言 vs 阿里 通义千问 哪个好?
背景介绍: 在当前的人工智能领域,随着大模型技术的快速发展,市场上涌现出了众多的大规模语言模型。然而,由于缺乏统一且权威的评估标准,很多关于这些模型能力的文章往往基于主观测试或自行设定的排行榜来评价模型性能…...
内网不出网上线cs
一:本地正向代理目标 如下,本地(10.211.55.2)挂好了基于 reGeorg 的 http 正向代理。代理为: Socks5 10.211.55.2 1080python2 reGeorgSocksProxy.py -l 0.0.0.0 -p 1080 -u http://10.211.55.3:8080/shiro/tunnel.jsp 二:虚拟机配置proxifer 我们是…...
ubuntu22开机自动登陆和开机自动运行google浏览器自动打开网页
一、开机自动登陆 1、打开settings->点击Users 重启系统即可自动登陆桌面 二、开机自动运行google浏览器自动打开网页 1、安装google浏览器 sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i ./google-chrome-stable…...
企业建站高性能的内容管理系统
AnQiCMS 是一款高性能的内容管理系统,基于Go语言开发。它支持多站点、多语言管理,提供灵活的内容发布和模板管理功能,同时,系统内置丰富的利于SEO操作的功能,支持包括自定义字段、文档分类、批量导入导出等功能 AnQiC…...
【爬虫框架:feapder,管理系统 feaplat】
github:https://github.com/Boris-code/feapder 爬虫管理系统 feaplat:http://feapder.com/#/feapder_platform/feaplat 爬虫在线工具库 :http://www.spidertools.cn :https://www.kgtools.cn/1、feapder 简介 对于学习 Python…...
faiss库中ivf-sq(ScalarQuantizer,标量量化)代码解读-5
训练过程 通过gdb调试得到这个ivfsq的训练过程,我尝试对这个内容具体训练过程进行解析,对每个调用栈里面的逻辑和代码进行解读。 步骤函数名称调用位置说明1faiss::IndexIVF::train/faiss/IndexIVF.cpp:1143开始训练,判断是否需要训练第一级…...
代码随想录算法训练营第六十天|Day60 图论
Bellman_ford 队列优化算法(又名SPFA) https://www.programmercarl.com/kamacoder/0094.%E5%9F%8E%E5%B8%82%E9%97%B4%E8%B4%A7%E7%89%A9%E8%BF%90%E8%BE%93I-SPFA.html 本题我们来系统讲解 Bellman_ford 队列优化算法 ,也叫SPFA算法…...
在嵌入式Linux下如何用QT开发UI
在嵌入式 Linux 环境下使用 Qt 开发用户界面 (UI) 是一个常见的选择。Qt 提供了丰富的功能、跨平台支持以及优秀的图形界面开发能力,非常适合用于嵌入式系统。以下是开发流程的详细步骤: 1. 准备开发环境 硬件环境 一块运行嵌入式 Linux 的开发板&…...
a站b站/上海互联网管理系统推广公司
求拓扑排序,题目保证有结果,拓扑排序的关键词是入度,过程和广度优先搜索有点类似,同时是判断有向图是不是无环的一个方法 #include <bits/stdc.h>#define fi first #define se second #define pb push_back #define mk mak…...
wordpress wordapp插件/百度客服中心人工在线
fastjson-1.2.24漏洞,搭建及复现,手把手图文教程 java1.8、python,我就不写这么安装了 文章目录fastjson-1.2.24漏洞,搭建及复现,手把手图文教程一、搭建文件数据(docker、vulhub、mvn、RMI)1.…...
网站开发代码无中文/开一个免费网站
这类问题不是必现的,部分系统会出现文档介绍了微信和qq的universal link情况一、微信universal link 验证问题例如:(1)Error DomainShareSDKErrorDomain Code200300 "(null)" UserInfo{SELregisterApp:universalLink:, error_code200300}(2)返…...
做网上任务赚钱的网站/网页模板怎么用
一、如图所示进行创建,一路next 二、创建完成后的项目结构(拉红线的是我写的测试,大家略过) 三、启动试试(右键run,或者唯一的java类内的小绿三角点击启动,或者使用快捷键) 五、成功后的日志(…...
html5怎么做网站/奶茶推广软文200字
解决方法:配置下Bucket的跨域设置 点击设置 编辑跨域规则 之后就不再报403错误了。...
哪家企业网站做的好/爱网站关键词查询工具
0 Python Excel库对比我们先来看一下python中能操作Excel的库对比(一共九个库):1 Python xlrd 读取 操作Excel1.1 xlrd模块介绍(1)什么是xlrd模块?python操作excel主要用到xlrd和xlwt这两个库,即…...