模型部署之——ONNX模型转RKNN

提示:这里可以添加学习目标

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、加载Docker镜像
  • 二、转换脚本


一、加载Docker镜像

加载rknn官方提供的基于x86架构下模型转换的镜像文件,生成容器,以及执行镜像。

sudo docker load -i rknn-toolkit2:1.3.0-cp36
sudo docker run -v `pwd`/rknn_model_convert:/data -it rknn-toolkit2:1.3.0-cp36 /bin/bash  # 将文件路径rknn_model_convert绑定在docker容器的data文件夹下
docker exec -it de0f9e94348c /bin/bash         #de0f9e94348c 为加载镜像生成容器的id

二、转换脚本

from rknn.api import RKNN
import cv2def export_rknn_inference(img, model_path, Dataset, rknn_path):# Create RKNN object# 只在屏幕打印详细的日志信息 # rknn = RKNN(verbose=True)rknn = RKNN(verbose=True)# pre-process configprint('--> Config model')# mean_values 通道均值# std_values 方差, rknn是除以方差# quant_img_RGB2BGR 该参数是将量化图片格式又RGB转换为BGR,通常caffe训练的模型需要这个操作# quantized_algorithm 量化算法,normal 和 mmse, 不写该参数默认值为 normal, 其中:normal量化速度快, mmse量化速度快,精度稍微比normal保持的好# quantized_method 量化方法 channel, layer可选; layer:每层的 weight 只有一套量化参数; channel:每层的 weight 的每个通道都有一套量化参数。默认使用channel# target_platform 可以用来配置不同的芯片, 目前支持 rk3566、rk3568、rk3588、rv1103、rv1106, 该参数的值大小写不敏感。#rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], quantized_algorithm='normal', quantized_method='channel', target_platform='rk3566')rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], quantized_algorithm='normal', quantized_method='channel', target_platform='rk3588')print('done')# Load ONNX modelprint('--> Loading model')# 从当前目录加载 mobilenet_v2 的 onnx 模型,outputs 为 onnx输出层的名字(outputs可不写)#ret = rknn.load_onnx(model=model_path, outputs=['output1', 'output2', 'output3'])ret = rknn.load_onnx(model=model_path)if ret != 0:print('Load model failed!')exit(ret)print('done')# Build modelprint('--> Building model')# 构建 RKNN 模型# do_quantization 是否做量化(不做量化为float16)# dataset 为量化图片的路径# rknn_batch_size 为 batch_size 默认值为1(可以不写),建议 batch_size 小于 32ret = rknn.build(do_quantization=True, dataset=Dataset, rknn_batch_size=1)if ret != 0:print('Build model failed!')exit(ret)print('done')# Export RKNN modelprint('--> Export rknn model')ret = rknn.export_rknn(rknn_path)if ret != 0:print('Export rknn model failed!')exit(ret)print('done')# Init runtime environmentprint('--> Init runtime environment')ret = rknn.init_runtime(target=None, device_id=None, perf_debug=True)# ret = rknn.init_runtime(target='rk3566')if ret != 0:print('Init runtime environment failed!')exit(ret)print('done')# Inferenceprint('--> Running model')outputs = rknn.inference(inputs=[img])rknn.release()print('done')return outputsif __name__ == '__main__':print('This is main ....')# Set inputsimg_path = '20231116_paper_1042005.jpg'model_input_w = 640model_input_h = 480model_path = './yolox.onnx'Dataset = './test_export_1.txt'rknn_path = './yolox.rknn'origimg = cv2.imread(img_path)origimg = cv2.cvtColor(origimg, cv2.COLOR_BGR2RGB)img = cv2.resize(origimg, (model_input_w , model_input_h ))outputs = export_rknn_inference(img, model_path, Dataset, rknn_path)print("outputs:",outputs)

其中test_export_1为量化图像的路径,在rknn_model_convert文件夹下新建quant_image文件夹,将量化图像拷贝到里面并且使用
ls -l ./quant_image/*.jpg > test_export_1.txt 生成test_export_1.txt


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

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

相关文章

【JavaScript】new原理解析

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

视频人脸识别马赛克处理

文章目录 前言一、实现思路?二、Coding三、实现效果 前言 前面几篇文章我们尝试了使用opencv完成图像人脸识别以及识别后贴图或者打马赛克的方法。 偶尔我们也会有需求在视频中将人脸马赛克化,opencv也提供了相应的方法来实现这个功能。 一、实现思路&a…

贪心算法的运用

贪心算法(Greedy Algorithm)是一种常用的算法思想,通常用来解决最优化问题。可以使用贪心算法来解决一些问题,例如找零钱、任务调度等。 以找零钱为例,简单介绍一下贪心算法的应用 假设有一堆不同面额的硬币&#xff…

netty源码:(40)ReplayingDecoder

ReplayingDecoder是ByteToMessageDecoder的子类,我们继承这个类时,也要实现decode方法,示例如下: package cn.edu.tju;import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handle…

Ubuntu20.04服务器使用教程(安装教程、常用命令、故障排查)持续更新中.....

安装教程(系统、驱动、CUDA、CUDNN、Pytorch、Timeshift、ToDesk) 制作U盘启动盘,并安装系统 在MSDN i tell you下载Ubuntu20.04 Desktop 版本,并使用Rufus制作UEFI启动盘,参考UEFI安装Ubuntu使用GPTUEFI模式安装&am…

【IoT网络层】STM32 + ESP8266 +MQTT + 阿里云物联网平台 |开源,附资料|

目标:实现STM32连接阿里云物联网平台发送数据同时接收数据,IOT studio界面显示数据。具体来说:使用ESP8266 ESP-01来连接网络,获取设备数据发送到阿里云物联网平台并显示且oled显示屏当前的设备数据,通过IOT studio界面…

centos 安装 配置 zsh

centos 编译安装 zsh 和 配置 oh-my-zsh 下载 wget https://jaist.dl.sourceforge.net/project/zsh/zsh/5.9/zsh-5.9.tar.xz依赖 yum install ncurses-devel安装zsh 执行: tar -xvf zsh-5.9.tar.xz cd zsh-5.9 ./configure --prefix/usr/local/zsh5.9 make &am…

Golang学习之路一三基本数据类型

Golang学习之路一三基本数据类型 基本数据类型 int8 是有符号类型,uint8 是无符号类型 go 语言中不同类型的数据不能相加,会编译错误 类型名称长度零值说明bool布尔类型1false值为 true 或 false, 不可以用数字代表byte字节型10uint8rune字符类型40专…

Linux文件和目录管理命令---- less 命令

less 是一个强大的命令行工具,用于在 Unix 和 Unix-like 系统中查看(不编辑)大文件的内容。与 more 命令类似,但提供更多的功能和灵活性。在本博客中,本文将深入探讨 less 的各种用法,并展示相应的控制台命…

OpenHarmony城市技术论坛武汉站:探索大模型时代的终端操作系统创新

2023年12月23日下午,OpenHarmony城市技术论坛(以下简称“技术论坛”)——第6期(武汉站)于华中科技大学梧桐语问学中心明德报告厅圆满举办。本次技术论坛聚焦“大模型时代的系统软件”,旨在探索AI大模型在终端操作系统领域的创新趋势和挑战。论坛从“终端操作系统十大技术挑战”…

Ndk编译hevc静态库

源码下载: https://hg.videolan.org/x265 然后执行以下脚本: #!/bin/bash# 设置NDK路径,根据你的实际安装路径修改 NDK_PATH/mnt/c/Users/Administrator/ubuntu_dev/ndk/android-ndk-r21e# 设置目标平台和ABI版本,可以根据实际情况修改 aarch64-linux-…

最适合学生用的台灯有哪些?分享高口碑的学生护眼台灯

台灯是我们日常比较实用的一盏桌面照明灯具,不管是休闲看书、学习、办公都会用得上。如果使用了一款光源不好的台灯,时间长了可能就会影响我们的眼睛健康,特别是孩子的眼睛,还没有发育完全,影响更大。因此孩子学习的台…

模式识别与机器学习-SVM(带软间隔的支持向量机)

SVM(带软间隔的支持向量机) 软间隔思想的由来软间隔的引入 谨以此博客作为复习期间的记录。 软间隔思想的由来 在上一篇博客中,回顾了线性可分的支持向量机,但在实际情况中,很少有完全线性可分的情况,大部分线性可分…

思考:怎样卖猪

© Conmajia, 2016 Miscellaneous 167.4 卖猪的思考 养猪的人通常不会等着猪猪长到最肥最大的时候才卖。他们通常会在某个时间提前卖掉还没长到最大的猪。虽然笨猪们这时还没有完全长大,但养猪人的利润却能达到最高。这是为什么呢?考虑到有些逆天跟…

识别pdf中论文标题并重命名PDF名称(2023.12.27)

改进思路: 当一个pdf文件重命名失败时不要终止程序,继续对下一个pdf文件进行操作 已打包成exe文件,链接放在评论区 import os import timeimport fitzdef find_largest_font_sentence(pdf_path):largest_font_size 0largest_font_sentence…

MYSQL高级SQL语句

目录 一、环境准备 二、高级SQL语句 三、通配符(通常通配符都是跟 LIKE 一起使用的) 四、函数 一、环境准备 create database kgc; use kgc; create table location (Region char(20),Store_Name char(20)); insert into location values(East,Bost…

【算法与数据结构】860、LeetCode柠檬水找零

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题的思路比较简单,首先要保存收到的零钱,其次计算找零,最后分解找…

前缀和——OJ题(二)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、和为 k 的子数组1、题目讲解2、思路讲解3、代码实现 二、和可被 K 整除的⼦数组1、题目讲…

【Pytorch】学习记录分享9——PyTorch新闻数据集文本分类任务实战

【Pytorch】学习记录分享9——PyTorch新闻数据集文本分类任务 1. 认为主流程code2. NLP 对话和预测基本均属于分类任务详细见3. Tensorborad 1. 认为主流程code import time import torch import numpy as np from train_eval import train, init_network from importlib impo…

adb和logcat常用命令

adb的作用 adb构成 client端,在电脑上,负责发送adb命令daemon守护进程adbd,在手机上,负责接收和执行adb命令server端,在电脑上,负责管理client和daemon之间的通信 adb工作原理 client端将命令发送给ser…