RKNN3588——YOLOv8的PT模型转RKNN模型

一:PT转ONNX

1. 首先克隆rknn修改后的ultralytics版本项目到本地

https://github.com/airockchip/ultralytics_yolov8

cd ultralytics-main
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -e .

主要是修改了源码的ultralytics/nn/modules/head.py和ultralytics/engine/exporter.py两个文件。

2. 使用修改后的ultralytics对pt模型进行模型转换,此处的format=rknn代表支持rknn后续的转换,而不是用onnx,一定要注意!!!

yolo export model=/your_path/best.pt format=rknn

二:ONNX转RKNN

1. 在linux x86上配置Toolkit环境,具体步骤如下链接:

https://docs.radxa.com/rock5/rock5b/app-development/rknn_install

相关链接: 

# 下载 RKNN-Toolkit2 仓库
https://github.com/airockchip/rknn-toolkit2.git

# 下载 RKNN Model Zoo 仓库
https://github.com/airockchip/rknn_model_zoo.git

2. 模型的转换只能在rknn-toolkit2中,因此Linux系统只能是linux x86,配置环境时注意python版本问题

- RKNN-Toolkit2 is not compatible with [RKNN-Toolkit](https://github.com/airockchip/rknn-toolkit)
- Currently only support on:
  - Ubuntu 18.04 python 3.6/3.7
  - Ubuntu 20.04 python 3.8/3.9
  - Ubuntu 22.04 python 3.10/3.11

配置好环境后,可通过

python
import rknn

检查是否安装成功?!

3. 然后通过rknn_model_zoo里的YOLOv8的convert.py转换即可

import sys
from rknn.api import RKNNif __name__ == '__main__':
# onnx模型位置model_path = "/home/zhangh/RKNN_Docker/ultralytics_yolov8-main/ultralytics_yolov8-main/yolov8n.onnx"
# rknn导出位置output_path = "/home/zhangh/RKNN_Docker/ultralytics_yolov8-main/ultralytics_yolov8-main/weight/yolov8n.rknn"# Create RKNN objectrknn = RKNN(verbose=False)# Pre-process configprint('--> Config model')rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], target_platform='rk3588')print('done')# Load modelprint('--> Loading model')ret = rknn.load_onnx(model=model_path)if ret != 0:print('Load model failed!')exit(ret)print('done')# Build modelprint('--> Building model')ret = rknn.build(do_quantization=False)if ret != 0:print('Build model failed!')exit(ret)print('done')# Export rknn modelprint('--> Export rknn model')ret = rknn.export_rknn(output_path)if ret != 0:print('Export rknn model failed!')exit(ret)print('done')# Releaserknn.release()

可视化rknn模型 

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

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

相关文章

如何使用find查找命令

Linux查找命令是类Unix操作系统中最重要且最常用的命令行实用程序之一。查找命令可以根据你设定的参数匹配的文件指定的条件来搜索和查找文件或目录的列表。 查找可以在多种条件下使用,例如可以按权限,用户,组,文件类型&#xff…

JAVA声明数组

一、声明并初始化数组 直接初始化:在声明数组的同时为其分配空间并初始化元素。 int[] numbers {1, 2, 3, 4, 5}; 动态初始化:先声明数组,再为每个元素分配初始值。 double[] decimals;decimals new double[5]; // 分配空间,但…

PhpStorm 2024 for Mac PHP集成开发工具

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件(适合自己的M芯片版或Intel芯片版),将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功3、打开访达,点击【文…

锁之Syncronized(java面经)

在Java中,锁机制是用于管理多线程环境下的资源访问,以确保数据的一致性和完整性。Java提供了多种锁的实现方式,包括但不限于: 锁从宏观上分类,分为悲观锁与乐观锁。 乐观锁: 即读多写少 , 并发的可能性小 , 一般只有…

大数据面试题之Flink(1)

目录 Flink架构 Flink的窗口了解哪些,都有什么区别,有哪几种?如何定义? Flink窗口函数,时间语义相关的问题 介绍下Flink的watermark(水位线),watermark需要实现哪个实现类,在何处定义?有什么作用? Flink的…

如何在TikTok上获得更多观看量:12个流量秘诀

TikTok作为热门海外社媒,在跨境出海行业中成为新兴的推广渠道,但你知道如何让你的TikTok赢得更多关注次数吗?如果您正在寻找增加 TikTok 观看次数的方法,接下来这12种策略,你需要一一做好! 1. 在内容中添加…

HQ-SAM

不建议复现

鸿蒙开发设备管理:【@ohos.update (升级)】

升级 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 升级范围&…

argparse大坑之parser

parser.add_argument(--rate,help"--rate 0.5 means that there is a 50% probability;",typefloat,default0.5)此时用-h输出usage会报错如下: 最后发现是因为parser的help里面出现了%,改了之后就好了。真坑啊!

[AI Kimi] Context Caching 正式公测,推动长文本模型降本 90%

Kimi 的上下文缓存(Context Caching)技术,开启了公测。我们一起来看下。 介绍 上下文缓存(Context Caching)是一种高效的数据管理技术,它允许系统预先存储那些可能会被频繁请求的大量数据或信息。这样&am…

BeautifulSoup 类通过查找方法选取节点

BeautifulSoup 类提供了一些基于 HTML 或 XML 节点树选取节点的方法,其中比较主流 的两个方法是 find() 方法和 find_all() 方法。 find() 方法用于查找符合条件的第一个节点; find_all() 方法用于查找所有符合条件的节点,并以列表的…

深入Spring Boot启动过程:揭秘设计模式与代码优化秘籍

Spring Boot作为一个强大的框架,其简化的配置和快速启动特性深受开发者喜爱。在本篇博客中,我们将深入探讨Spring Boot的启动过程,并分享一些在日常开发中可以参考的实例,包括工厂类的使用、设计模式的应用以及代码优化的技巧。 …

新火种AI|AI搜索挑战百度谷歌,重塑信息检索的市场?

作者:一号 编辑:美美 AI正在颠覆传统的搜索引擎市场。 随着ChatGPT等大型语言模型的火爆,AI搜索技术成为了公众和业界关注的焦点。这些技术不仅能够提供快速、准确的信息检索,还能够通过自然语言处理技术理解用户的复杂查询&am…

typescript2-类的类型

/* 输出 吃饭 游泳 */ []( )继承与多态------------------------------------------------------------------------1. 子类继承父类特征子类 extends 父类2. 当需要父类参数传递时,用子类也可以,这就是多态/* 继承:子类继承父类 多态…

系统级应用锁的实现方法

前言: 应用锁是一种常见的需求, 下面提供一个个人认为还比较完美的解决方法。本篇从两个方面详述应用锁的实现方法。 一. 流程图 二. 实现细节 一.流程图 二. 实现效果及细节

【区块链+基础设施】蜀信链 | FISCO BCOS应用案例

蜀信链是在四川省经济和信息化厅指导下,在四川省区块链行业协会组织下,由全省区块链相关从业与应用机构 共同参与建设和运营的区域性区块链基础设施,通过多方协同,共同打造合作共赢的区块链产业生态。 蜀信链区块链服务生态秉承“…

iiiiiiiiiiiiiiiiiiiiiiiiiio_contexttttttttttttttttttttttttt

https://www.cnblogs.com/bwbfight/p/17594353.html 谈一谈linux下线程池 - 白伟碧一些小心得 - 博客园 (cnblogs.com) 谈一谈linux下线程池 - 白伟碧一些小心得 - 博客园 (cnblogs.com) https://www.cnblogs.com/bwbfight/p/10901574.html 前面的设计,我们对asio…

中序遍历的两种实现——二叉树专题复习

递归实现: /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right)…

改变conda创建虚拟环境时的默认路径(C盘)

①C:\Users\Lenovo 找到C盘中用户目录下的.condarc文件 ②打开.condarc文件后,添加并修改.condarc 中的 env_dirs 环境路径,按顺序第⼀个路径作为默认存储路径,也就是我的E盘(需要你先在E盘中新建文件夹envsE)。修改完…

智能本质:马毅教授对大模型和白盒理论的观点

引言 在人工智能的快速发展中,我们见证了从简单的自动化工具到复杂的智能系统的演变。随着深度学习技术的突破,大模型如GPT系列已经能够执行从文本生成到图像识别等多样化任务。然而,这些模型虽然在功能上取得了显著进展,但其内部…