YOLOV8-DET转ONNX和RKNN

目录

1. 前言

2.环境配置

(1) RK3588开发板Python环境

(2) PC转onnx和rknn的环境

3.PT模型转onnx

4. ONNX模型转RKNN

6.测试结果

1. 前言

        yolov8就不介绍了,详细的请见YOLOV8详细对比,本文章注重实际的使用,从拿到yolov8的pt检测模型,怎样转onnx和rknn的使用,配置好相应的环境,就可以开心的做yolov8的检测啦!!!

2.环境配置

(1) RK3588开发板Python环境


        numpy ==1.26.0
        onnxruntime == 1.16.0
        opencv-python== 4.8.0.76
        rknn-toolkit-lite2 ==1.5.2

(2) PC转onnx和rknn的环境

        Python == 3.10

        ultralytics ==8.0.147

        rknn_toolkit2 == 1.5.2

        torch ==2.0.1
        torchvision==0.15.2

相关的库缺少什么就安装,很简单的

3.PT模型转onnx

        根据自己模型路径设置model_path,输入的shape也自己设置,我这里设置的是640*640,这样就得到了onnx模型,按道理是可以做推理了

from ultralytics import YOLO# pip install ultralyticsinput_width = 640
input_height = 640
model_path = "./models/yolov8x.pt"model = YOLO(model_path)
model.export(format="onnx", imgsz=[input_height, input_width], opset=12)

4. ONNX模型转RKNN

        rknn用FP16,用INT8设置了,但是量化效果精度有误差,用混合量化或者增加量化数据集,都可以试试(我偷懒就不尝试了)

from rknn.api import RKNNONNX_MODEL = 'yolov8n-sim.onnx'
RKNN_MODEL = 'yolov8n-sim-fp16.rknn'
IMG_PATH = './bus.jpg'
DATASET = './dataset.txt'if __name__ == '__main__':# Create RKNN objectrknn = RKNN()if not os.path.exists(ONNX_MODEL):print('model not exist')exit(-1)# pre-process configprint('--> Config model')rknn.config(mean_values=[[0, 0, 0]], std_values=[[1, 1, 1]], target_platform='rk3588')print('done')# Load ONNX modelprint('--> Loading model')ret = rknn.load_onnx(model=ONNX_MODEL)if ret != 0:print('Load yolov8 failed!')exit(ret)print('done')# Build modelprint('--> Building model')ret = rknn.build(do_quantization=False, dataset=DATASET)if ret != 0:print('Build yolov8 failed!')exit(ret)print('done')# Export RKNN modelprint('--> Export RKNN model')ret = rknn.export_rknn(RKNN_MODEL)if ret != 0:print('Export yolov8rknn failed!')exit(ret)print('done')# Ret = rknn.accuracy_analysis(inputs=['./bus.jpg'])# if ret != 0:#     print('Accuracy analysis failed!')# exit(ret)# print('done')

5. RK3588推理

        代码使用的是https://github.com/ibaiGorordo/ONNX-YOLOv8-Object-DetectionibaiGorord博主的基础代码,在YOLOv8中集成了rknn模型的推理

import cv2
from yolov8 import YOLOv8# Initialize yolov8 object detector
# model_path = "./models/yolov8n-sim.onnx"
model_path = "./models/yolov8n-sim-fp16.rknn"
yolov8_detector = YOLOv8(model_path, conf_thres=0.3, iou_thres=0.5)
# Read image
img = cv2.imread('./bus.jpg')
# Detect Objects
boxes, scores, class_ids = yolov8_detector(img)
# Draw detections
combined_img = yolov8_detector.draw_detections(img)
cv2.imwrite("./detected_objects.png", combined_img)

6.测试结果

onnx推理结果

rknn推理结果

        使用的是yolov8n模型,检测的速度加速了8倍,量化成int8的话应该还要更加快!!!

        完整的代码在资源中下载

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

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

相关文章

GitHub上有助于开发微信小程序的仓库

2023年9月30日,周六晚上 最近帮同学在GitHub找了一些开发小程序会用到的东西 目录 UI库WePY框架基于WePY框架的Demo微信小程序开发资源汇总 UI库 GitHub - Tencent/weui-wxss: A UI library by WeChat official design team, includes the most useful widgets/m…

CSS详细基础(二)文本样式

插播一条CSS的工作原理: CSS是一种定义样式结构如字体、颜色、位置等的语言,被用于描述网页上的信息格式化和显示的方式。CSS样式可以直接存储于HTML网页或者单独的样式单文件。无论哪一种方式,样式单包含将样式应用到指定类型的元素的规则。…

数据结构-----二叉排序树

目录 前言 1.什么是二叉排序树 2.如何构建二叉排序树 3.二叉排序树的操作 3.1定义节点储存方式 3.2插入节点操作 3.2创建二叉排序树 3.4遍历输出(中序遍历) 3.5数据查找操作 3.6获取最大值和最小值 3.7删除节点操作 3.8销毁二叉排序树 4.完…

【文献】TOF标定 Time-of-Flight Sensor Calibration for a Color and Depth Camera Pair

文章目录 Article info.Introduction处理TOF误差Take home messagesResourcesIDEAS Article info. Time-of-Flight Sensor Calibration for a Color and Depth Camera Pair IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE, VOL. 37, NO. 7, JULY 2015 Intr…

nextTick源码解读

📝个人主页:爱吃炫迈 💌系列专栏:Vue 🧑‍💻座右铭:道阻且长,行则将至💗 文章目录 nextTick原理nextTicktimerFuncflushCallbacks 异步更新流程updatequeueWatcherflushS…

ROS2 库包设置和使用 Catch2 进行单元测试

说明 本文的目的是了解如何在 ROS2 中创建库,以供其他 ROS2 包使用。除此之外,本文还介绍了如何使用 catch2 框架编写单元测试。本文的第 1 部分将详细介绍如何创建库包。第 2 部分将介绍 ROS2 软件包如何利用创建的库 上篇 ROS2 库包设置和使用 Catch2…

GEO生信数据挖掘(一)数据集下载和初步观察

检索到目标数据集后,开始数据挖掘,本文以阿尔兹海默症数据集GSE1297为例 目录 GEOquery 简介 安装并加载GEOquery包 getGEO函数获取数据(联网下载) 更换下载数据源 对数据集进行初步观察处理 GEOquery 简介 GEOquery是一个…

【AntDesign】封装全局异常处理-全局拦截器

[toc] 场景 本文前端用的是阿里的Ant-Design框架,其他框架也有全局拦截器,思路是相同,具体实现自行百度下吧 因为每次都需要调接口,都需要单独处理异常情况(code !0),因此前端需要对后端返回的…

联邦学习-Tensorflow实现联邦模型AlexNet on CIFAR-10

目录 Client端 Server端 扩展 Client.py Server.py Dataset.py Model.py 分享一种实现联邦学习的方法,它具有以下优点: 不需要读写文件来保存、切换Client模型 不需要在每次epoch重新初始化Client变量 内存占用尽可能小(参数量仅翻一…

1.4.C++项目:仿muduo库实现并发服务器之buffer模块的设计

项目完整版在: 一、buffer模块: 缓冲区模块 Buffer模块是一个缓冲区模块,用于实现通信中用户态的接收缓冲区和发送缓冲区功能。 二、提供的功能 存储数据,取出数据 三、实现思想 1.实现换出去得有一块内存空间,采…

Learning Invariant Representation for Unsupervised Image Restoration

Learning Invariant Representation for Unsupervised Image Restoration (Paper reading) Wenchao Du, Sichuan University, CVPR20, Cited:63, Code, Paper 1. 前言 近年来,跨域传输被应用于无监督图像恢复任务中。但是,直接应用已有的框架&#xf…

【python海洋专题三】图像修饰之画布和坐标轴

【python海洋专题三】图像修饰之画布和坐标轴 海洋与大气科学 上期读取nc水深文件,并出图 但是存在一些不完美,本期修饰 本期内容目录 1:改变画布大小 2:改变画布背景色 3:改变画布在显示屏中的显示位置 4&#xf…

【项目管理】--敏捷开发管理之Scrum

目录 一、前言二、what---敏捷开发是什么2.1、敏捷开发宣言2.2、敏捷开发原则2.3、一句话概述敏捷开发三、why---为什么会有敏捷开发3.1、传统开发模式和敏捷开发模式对比四、how---敏捷开发怎么实践到项目团队4.1、what---Scrum是什么4.2、what---Scrum有哪些内容(1)、Scrum之…

NLP 01(介绍)

一、NLP 自然语言处理 (Natural Language rrocessing,简称NLP) 是计算机科学与语言学中关注于计算机与人类语言间转换的领域。 1.1 发展 规则:基于语法 自然语言处理的应用场景: 语音助手 机器翻译 搜索引擎 智能问答

【单片机】12-串口通信和RS485

1.通信有关的常见概念 区分:串口,COM口,UART,USART_usart和串口区别-CSDN博客 串口、COM口、UART口, TTL、RS-232、RS-485区别详解-CSDN博客 1.什么是通信 (1)人和人之间的通信:说话&#xff…

抓包习讯云院校数据通过PHP解析导入数据库

前言 最近,打卡APP需要这个数据,通过抓包后发现这个数据是固定的,获取很简单,但是数据太多,手动导入不显示,于是分析了json格式后果断通过脚本完成 【推荐】 《【MQTT】Esp32数据上传采集:最…

栈和队列的概念和实现

栈和队列的概念和实现 一.栈二.队列一些题目 一.栈 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,进行数据插入和删除操作的一端称为栈顶,另一端称为栈底,栈中的数据元素遵守后进先出LIFO&#x…

UG\NX二次开发 用程序修改“用户默认设置”

文章作者:里海 来源网站:《里海NX二次开发3000例专栏》 简介 可以用程序修改“用户默认设置”吗?下面是用代码修改“用户默认设置->基本环境->用户界面->操作记录->操作记录语言”的例子。 效果 代码 #include <uf_defs.h> #include <NXOpen/NXExcept…

angular 在vscode 下的hello world

Angulai 是google 公司开发的前端开发框架。Angular 使用 typescript 作为编程语言。typescript 是Javascript 的一个超集&#xff0c;提升了某些功能。本文介绍运行我的第一个angular 程序。 前面部分参考&#xff1a; Angular TypeScript Tutorial in Visual Studio Code 一…