yolov5 onnx模型 转为 rknn模型

1、转换为rknn模型环境搭建

onnx模型需要转换为rknn模型才能在rv1126开发板上运行,所以需要先搭建转换环境

模型转换工具 模型转换相关文件下载:

网盘下载链接:百度网盘 请输入提取码  提取码:teuc

将其移动到虚拟机中,找到文件夹中的docker文件 rknn-toolkit-1.7.1-docker.tar.gz 、 model_convert文件夹

加载 模型转换工具docker镜像

docker load --input /home/developer/rknn-toolkit/rknn-toolkit-1.7.1-docker.tar.gz

进入 镜像bash环境

 执行以下指令把工作区域映射进docker镜像,其中/home/developer/rknn-toolkit/model_convert为工作区域/test为映射到docker镜像/dev/bus/usb:/dev/bus/usb为映射usb到docker镜像:

docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb -v /home/developer/rknn-toolkit/model_convert:/test rknn-toolkit:1.7.1 /bin/bash

两处文件映射,即同步

 2、生成量化图片列表

这一步是把准备好的一些图片,生成图片路径的文本文件,在构建RKNN模型的时候有用处。通过使用真实的样本数据集,RKNN工具可以更好地理解和建模模型的输入数据,从而更好地优化网络结构、权重和量化方案。

在docker环境切换到模型转换工作目录;执行 gen_list.py,会得到一个文本文件pic_path.txt,里面是图片的路径:

cd /test/coco_object_detect
python gen_list.py

gen_list.py内容如下:

import os
import randomdef main(image_dir):save_image_txt = './pic_path.txt'save_val_number = 0img_path_list = []image_list = os.listdir(image_dir)for i in image_list:#if os.path.isdir(image_dir):#print("i:", i)image_path = image_dir + '/' + i#print("image_path:", image_path)img_path_list.append(image_path)#print(img_path_list)print('len of all', len(img_path_list))random.shuffle(img_path_list)with open(save_image_txt, 'w') as F:for i in range(len(img_path_list)):F.write(img_path_list[i]+'\n')if __name__ == '__main__':image_dir = '/test/quant_dataset/coco_data'  # 图片所在路径,大概500张main(image_dir)

3、onnx模型转换为rknn模型

还是在docker环境 模型转换工作目录,运行rknn_convert.py

python rknn_convert.py

这一步如果是在虚拟机上运行的话,8GB的内存条win10系统也要用,分配给虚拟机的没多少,3GB也不够执行这一步。

后来我直接在Ubuntu系统执行这一步,8GB系统用一点还剩6.7GB,CPU和内存直接干满

 

rknn_convert.py 源码:

import os
import urllib
import traceback
import time
import sys
import numpy as np
import cv2
from rknn.api import RKNNONNX_MODEL = 'best.onnx' # onnx 模型的路径
RKNN_MODEL = './yolov5_mask_rv1126.rknn'  # 转换后的 RKNN 模型保存路径
DATASET = './pic_path.txt'   # 数据集文件路径QUANTIZE_ON = True   # 是否进行量化if __name__ == '__main__':# 创建 RKNN 对象rknn = RKNN(verbose=True)# 检查 ONNX 模型文件是否存在if not os.path.exists(ONNX_MODEL):print('model not exist')exit(-1)# 配置模型预处理参数print('--> Config model')rknn.config(reorder_channel='0 1 2', # 表示 RGB 通道mean_values=[[0, 0, 0]], # 每个通道的像素均值,预处理时对应通道减去该值std_values=[[255, 255, 255]], # 每个通道的像素标准差,每个通道除以该值optimization_level=3, # 优化级别target_platform = 'rv1126', #指定目标平台为rv1126output_optimize=1,      # 输出优化为真quantize_input_node=QUANTIZE_ON)  # 对时输入节点进行量化print('done')# 加载 ONNX 模型print('--> Loading model')ret = rknn.load_onnx(model=ONNX_MODEL)if ret != 0:print('Load yolov5 failed!')exit(ret)print('done')# 构建模型print('--> Building model')ret = rknn.build(do_quantization=QUANTIZE_ON, dataset=DATASET)if ret != 0:print('Build yolov5 failed!')exit(ret)print('done')# 导出 RKNN 模型print('--> Export RKNN model')ret = rknn.export_rknn(RKNN_MODEL)if ret != 0:print('Export yolov5rknn failed!')exit(ret)print('done')

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

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

相关文章

android——ktor封装

ktor封装 代码如下: object KtorClient { // private const val BASE_URL "http://***.**.***.62:8002"private const val BASE_URL "https://mock.***.cn"val client HttpClient(CIO) {install(ContentNegotiation) {json(Json {pretty…

洛谷题单 Part 6.7.1 矩阵

应队友要求,开始学线性代数,具体路线是矩阵 → \rightarrow →高斯消元 → \rightarrow →线性基。为多项式做个准备 P3390 【模板】矩阵快速幂 题面 板子,用结构体写的,感觉有点丑,一会儿看看题解有没有写得好看的 …

Java 递归实现迷宫出逃小游戏

Java 递归实现迷宫出逃小游戏 一、规则二、代码实现三、运行结果 一、规则 数字含义 0 - 路; 1 - 墙; 2 - 通路; 3 - 死路 寻路策略 向下 --> 向右 --> 向上 --> 向左 二、代码实现 public class MyClass {public static void main(String[] args){//迷宫地图&…

前端开发Vue3.0 标签setup语法『UI组件库』之『模态框』【业务提升必备】

封装模态框需要定义的参数 title //弹窗标题 show // 是否显示弹窗 width // 弹窗宽度 height // 弹窗高度 borderRadius // 弹窗圆角 headerColor // 弹窗顶部颜色 contentText // 内容文本 contentTextCorder //内容文本颜色 position // 标题的位置 …

OpenCV 算法解析

opencv大坑之BGR opencv对于读进来的图片的通道排列是BGR,而不是主流的RGB!谨记! #opencv读入的矩阵是BGR,如果想转为RGB,可以这么转 img4 cv2.imread(1.jpg) img4 cv2.cvtColor(img4,cv2.COLOR_BGR2RGB) OpenCV 常见…

自定义 View(六) 自定义评分星星

先看看效果图 1.自定义 View 的基本流程 创建 View Class创建 attr 属性文件,确定属性View Class 绑定 attr 属性onMeasure 测量onDraw 绘制onTouchEvent ( 用户交互需要处理 ) 1.1 创建 View Class package com.example.view_day05_ratingbar;import android.…

javaweb会话技术

cookie的入门使用 package com.hspedu.cookie;import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import …

GAMES104里渲染等一些剩下的问题

渲染的一些剩下的问题 1. 如何理解渲染中的AO(环境光遮蔽) 环境光遮蔽 我们先从一个简单的效果开始—环境光遮蔽(Ambient Occlusion,以下简称AO)。大家可以看到,下图中的场景没有任何渲染效果,也没有任何着色效果,但场景呈现出了非常清晰的…

面试-杨辉三角python递归实现,二进制转换

杨辉三角 def yang_hui(x,y):xint(x)yint(y)assert x>y,列数不应该大于行数# x 表示行,y表示列if y1 or yx:return 1else:return yang_hui(x-1,y-1)yang_hui(x-1,y)xinput(输入第几行) yinput(输入第几列) resultyang_hui(int(x),int(y)) print(result) #inclu…

前端开发中的常见优化

目录 外观 组件库(无法满足->接口?->自定义/封装) 兼容 不同尺寸(包裹,height:100%) 不同 浏览器 隐藏滚动条 的 不同属性名 重排->重绘 不显示 display:none->禁用disable 性能 导航…

libuv库学习笔记-basics_of_libuv

Basics of libuv libuv强制使用异步和事件驱动的编程风格。它的核心工作是提供一个event-loop,还有基于I/O和其它事件通知的回调函数。libuv还提供了一些核心工具,例如定时器,非阻塞的网络支持,异步文件系统访问,子进…

【学习笔记】关于图像YUV格式分类和排布方式的全学习

这里是尼德兰的喵学习笔记相关文章,欢迎您的访问! 如果文章对您有所帮助,期待您的点赞收藏 让我们一起为芯片前端全栈工程师而努力 目录 前言 YUV格式导图 YUV444 packed planar I444 YV24 semi-planar NV24 NV42 YUV422 packed …

华为数通HCIA-网络模型

TCP 网络通信模式 作用:指导网络设备的通信; OSI七层模型: 7.应用层:由应用层协议(http、FTP、Telnet.)为应用程序产生对应的数据; 6.表示层:将应用层产生的数据转换成网络设备看…

《现代C++教程》笔记(5-7)

文章目录 5 智能指针与内存管理5.1 RAII与引用计数5.2 std::shared_ptr5.3 std::unique_ptr5.4 std::weak_ptr 6 正则表达式7 并行与并发7.1 并行基础7.2 互斥量与临界区7.3 期物7.4 条件变量7.5 原子操作与内存模型 5 智能指针与内存管理 5.1 RAII与引用计数 在传统 C 中&am…

一个月学通Python(二十八):Python网络数据采集(爬虫)概述(爬虫)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 文章目录 专栏介绍什么是爬虫爬虫的应用领域爬虫合法性探讨R…

Go语言中的结构体详解

关于 Golang 结构体 Golang 中没有“类”的概念,Golang 中的结构体和其他语言中的类有点相似。和其他面向对 象语言中的类相比,Golang 中的结构体具有更高的扩展性和灵活性。 Golang 中的基础数据类型可以表示一些事物的基本属性,但是当我们…

HuggingGPT Solving AI Tasks with ChatGPT and its Friends in Hugging Face

总述 HuggingGPT 让LLM发挥向路由器一样的作用,让LLM来选择调用那个专业的模型来执行任务。HuggingGPT搭建LLM和专业AI模型的桥梁。Language is a generic interface for LLMs to connect AI models 四个阶段 Task Planning: 将复杂的任务分解。但是这里…

Android.mk中的LOCAL_OVERRIDES_PACKAGES用法

Android.mk中的LOCAL_OVERRIDES_PACKAGES用法_mk local_over_觅风者的博客-CSDN博客 Android.mk中的LOCAL_OVERRIDES_PACKAGES的用法说明可以参考以下文章: Android.mk覆盖替换LOCAL_OVERRIDES_PACKAGES 此变量可以使其他的模块不加入编译 项目中遇到的问题&…

C语言复合赋值符和运算符的优先级问题

结论: 复合赋值符的优先级小于运算符 【练习1】 a * a / b的运算顺序是什么? a / b * a 【练习2】 x / 3 2 * 3 2 / 3 6 2 x 0

【力扣周赛】第 355 场周赛(构造二分答案异或前缀 状态压缩⭐)

文章目录 Q1:6921. 按分隔符拆分字符串(双指针)Q2:6915. 合并后数组中的最大元素(倒序遍历贪心)代码优化 Q3:6955. 长度递增组的最大数目🚹🚹🚹🚹…