YOLOV8-DET转ONNX和RKNN

news2024/12/24 12:20:06

目录

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 ultralytics

input_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 RKNN


ONNX_MODEL = 'yolov8n-sim.onnx'
RKNN_MODEL = 'yolov8n-sim-fp16.rknn'
IMG_PATH = './bus.jpg'
DATASET = './dataset.txt'


if __name__ == '__main__':
    # Create RKNN object
    rknn = RKNN()
    
    if not os.path.exists(ONNX_MODEL):
        print('model not exist')
        exit(-1)
    
    # pre-process config
    print('--> Config model')
    rknn.config(mean_values=[[0, 0, 0]], std_values=[[1, 1, 1]], target_platform='rk3588')
    print('done')
    
    # Load ONNX model
    print('--> Loading model')
    ret = rknn.load_onnx(model=ONNX_MODEL)
    if ret != 0:
        print('Load yolov8 failed!')
        exit(ret)
    print('done')
    
    # Build model
    print('--> Building model')
    ret = rknn.build(do_quantization=False, dataset=DATASET)
    if ret != 0:
        print('Build yolov8 failed!')
        exit(ret)
    print('done')
    
    # Export RKNN model
    print('--> 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.coloradmin.cn/o/1044379.html

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

相关文章

玩转gpgpu-sim 04记—— __cudaRegisterBinary() of gpgpu-sim 到底做了什么

官方文档&#xff1a; GPGPU-Sim 3.x Manual __cudaRegisterBinary(void*) 被执行到的代码逻辑如下&#xff1a; void** CUDARTAPI __cudaRegisterFatBinary( void *fatCubin ) { #if (CUDART_VERSION < 2010)printf("GPGPU-Sim PTX: ERROR ** this version of GPGPU…

查看Linux系统信息的常用命令

文章目录 1. 机器配置查看2. 常用分析工具3. 常用指令解读3.1 lscpu 4. 定位僵尸进程5. 参考 1. 机器配置查看 # 总核数物理CPU个数x每颗物理CPU的核数 # 总逻辑CPU数物理CPU个数x每颗物理CPU的核数x超线程数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| w…

电子电路学习笔记之NCV6324BMTAATBG——同步降压转换器

关于同步降压转换器&#xff1f; 是一种广泛应用于各种电子产品中的转换器。它具有输入范围宽、转换效率高、输出电流大等优点。在同步降压型转换器的驱动电路中&#xff0c;一般包括电平移位电路、死区时间控制电路以及过零检测电路等。 电平移位电路用于将固定电平Vcc和GND…

86、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->String相关命令

本次讲解要点&#xff1a; String相关命令&#xff1a;String是指value中的数据类型 启动redis服务器&#xff1a; 打开小黑窗&#xff1a; C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.…

【知识点随笔分析】我看看谁还不会用CURL命令

目录 前言&#xff1a; CURL介绍&#xff1a; CURL的基本使用&#xff1a; CURL与PING命令的区别&#xff1a; CURL命令的应用&#xff1a; 总结&#xff1a; 前言&#xff1a; 当今互联网时代&#xff0c;与服务器进行数据交互成为了无法回避的需求。无论是获取Web…

电脑入门:电脑不认新硬盘时该怎么办?

电脑不认新硬盘时该怎么办? 当新硬盘加进后,正常工作时,没有什么问题。若电脑遇到特殊情况时,电脑对新硬盘“不认”,可采取以下措施让电脑重新“认”新硬盘,显示新分区(如G、H、I、J)。 咱的目的是保持S-ATA的开启,把控制板载S-ATA设定值由No变成Yes就可以。 首…

mysql 8.0.34 安装

1、进入mysql官网 &#xff1a;https://www.mysql.com/ 拉到最下面&#xff0c;选择社区服务 2、下载mysql服务 msi方式的参考&#xff1a;https://blog.csdn.net/m0_59086544/article/details/129034408。 这里介绍下zip格式的怎么使用&#xff01; 3、 安装服务 下载好 z…

使用Webpack设置TS引用模块,解决Module not found: Error: Can‘t resolve ‘./m1‘ in ...问题

当我们把ts文件作为模块被引用的时候&#xff0c;我们使用Webpack打包代码会报错&#xff1a; Module not found: Error: Cant resolve ./m1 in ... 解决方法&#xff1a; 在webpack.config.js文件中配置如下代码&#xff1a; module.exports {// 设置引用模块resolve: {ext…

React 全栈体系(十七)

第九章 React Router 6 一、概述 React Router 以三个不同的包发布到 npm 上&#xff0c;它们分别为&#xff1a; react-router: 路由的核心库&#xff0c;提供了很多的&#xff1a;组件、钩子。react-router-dom: 包含 react-router 所有内容&#xff0c;并添加一些专门用于 …

解决oss视频上传后截取的第一帧图片被旋转问题

因此,直接配置参数ar_auto就okpic.url ?x-oss-processvideo/snapshot,t_1000,m_fast,ar_auto

Unity Game FrameWork—模块使用—资源热更新

工程选项配置​ json文件解析不要用默认的unity解析方式&#xff0c;unity解析有问题&#xff0c;使用StarForce.LitJsonHelper​ ​ 资源模式改为热更新模式​ ​ 配置文件配置​ BuiltinDataComponent自定义组件引用率了Buildinfo.txt配置文件&#xff0c;该文件配置了热更…

根据excel批量修改文件夹及其文件名称

简介 表哥公司电脑上有一大批文件夹&#xff0c;用于存放一些pdf。他希望对这些文件进行整理。文件夹批量重命名为好记一些的名字&#xff0c;文件夹下的pdf改成的名字格式为&#xff1a;文件夹名序号。 例如&#xff1a;文件夹从“1234”&#xff0c;改成“案件001”&#xf…

Sql注入(手工注入思路、绕过、防御)

一、Sql注入思路 1、判断注入点 在GET参数、POST参数、以及HTTP头部等&#xff0c;包括Cookie、Referer、XFF(X-Forwarded-for)、UA等地方尝试插入代码、符号或语句&#xff0c;尝试是否存在数据库参数读取行为&#xff0c;以及能否对其参数产生影响&#xff0c;如产生影响则…

Snapdragon Profiler分析Android GPU

Snapdragon Profiler&#xff08;骁龙分析器&#xff09;是一款性能分析软件&#xff0c;在Windows、 Mac、和 Linux平台上都可以运行&#xff0c;主要是用来分析使用了高通骁龙处理器的Android设备。 Snapdragon Profiler通过USB连接这些Android设备&#xff0c;开发者可以用…

基本页面配置与登录页面编写

删除原有的所有初始内容&#xff0c;在views下新建WelcomeView组件 安装vue router 在router下新建index.js文件&#xff0c;编写路由&#xff1a; import {createRouter,createWebHistory} from "vue-router";const routercreateRouter({history:createWebHistor…

金融生产存储亚健康治理:升级亚健康 3.0 ,应对万盘规模的挑战

随着集群规模的不断扩大&#xff0c;硬盘数量指数级上升&#xff0c;信创 CPU 和操作系统、硬盘多年老化、物理搬迁等多种复杂因素叠加&#xff0c;为企业的存储亚健康管理增加了新的挑战。 在亚健康 2.0 的基础上&#xff0c;星辰天合在 XSKY SDS V6.2 实现了亚健康 3.0&#…

LeetCode【474. 一和零】

给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 示例 1&#xff1a; 输入&#xff1a;strs ["…

区块链实验室(27) - 区块链+物联网应用案例

分享最新的区块链物联网应用案例&#xff1a;HPCLS-BC

AI智能语音机器人的优势

1.高效自动拨号功能。 导入客户数据&#xff0c;外呼机器人自动拨号&#xff0c;无需看守&#xff0c;真人录音话术&#xff0c;定制场景问答和1秒内的问答响应&#xff0c;为客户带来真实准确的咨询体验。同时&#xff0c;每次通话结束后&#xff0c;外呼系统根据通话时间和关…

前端uniapp图片select联动文本切换

图片 代码 <template><!-- 这个是uniapp的下拉框 --><uni-data-select v-model"pay_type" :localdata"range" change"handleSelectChange"></uni-data-select><!-- 图片 --><image :src"dynamicImage&qu…