rknn_convert的使用方法

rknn_convert是RKNN-Toolkit2提供的一套常用模型转换工具,通过封装上述API接口,用户只需编辑模型对应的yml配置文件,就可以通过指令转换模型。以下是如何使用rknn_convert工具的示例命令以及支持的指令参数:

python -m rknn.api.rknn_convert -t rk3588 -i ./model_config.yml/onnx -o ./output_path

通过使用上述命令和参数,用户可以将模型转换为RKNN格式,并将转换后的模型保存到指定的输出路径。
注意:我写这个功能主要是为了方便临时测试,不要写代码就可以进行简单的连板调试
部分指令参数说明如下:

  • -i: 模型配置文件(.yml/onnx)路径,如果只是评估rknn模型在板子上的精度、速度和内存使用情况可以直接使用onnx模型,也可以配置yml(挺繁琐的但是也有小部分人用)。
  • -o: 转换后模型输出路径。
  • -t: target_platform,目标平台可以选择rv1103,rv1103b, rv1106,rv1106b,rv1126b, rk2118,rk3562,rk3566,rk3568,rk3576或rk3588(只要不是rknpu1都可以)。
  • -e: (选填) 评估连板运行时model的耗时和内存占用,若开启请输入-e。注:一定要连接相应开发板并正确设置target_platform,否则会报错,当有多设备时可通过-d参数指定设备ID。
  • -a: (选填)评估生成的rknn模型精度,开启模拟器精度评估请输入-a "xx1.jpg”,如果模型是两输入则-a “xx1.jpg xx2.jpg”,若要开启连板精度评估请配合-d参数使用。
  • -v: (选填)指定是否要在屏幕上打印详细日志信息,若开启打印模式请输入-v。
  • -d: (选填)单个adb设备使用-d,多adb设备使用-d device_id,device_id通过adb devices查询。
  • -do_Quant:若要量化成int8就设置这个参数,后接量化集xxx.txt,如果这个参数不设置默认使用fp16,即不量化
  • -onnx_inputs:有时候onnx的输入可能是[?,3,384,384]这种没有指定的,则可以使用该参数固定shape,比如-onnx_inputs “{‘img’:[1,3,384,384]}”
  • -onnx_outputs:可以用来截断模型,比如-onnx_outputs “[‘output_0’,‘output_1’]”
  • -custom_hybrid:用来fi16和i8混合量化的功能(1106则是int16和int8混合量化),实现的效果可以参考rknn model zoo的yolov8 pose混合量化
  • -h: 查询具体参数

具体参数如下

Usage: python script.py [OPTIONS]
Options:-i, --input : yml config file path (required)-o, --output : output dir-t, --target_platform : target_platform, support rk3568/rk3566/rk3562/rk3588/rv1126b (required)-e, --eval_perf_memory : eval model perf and memory, board debugging is required, multi adb device use -d, default=false (default: False)-a, --accuracy_analysis : Usage: -a "xx1.jpg xx2.jpg". Simulator accuracy_analysis, if want to turn on board accuracy_analysis, please use -d-v, --verbose : whether to print detailed log information on the screen, default=false (default: False)-d, --device_id : Single adb device usage: -d. Multi adb device usage:-d device_id-mean, --mean : Usage: -mean "[0,0,0]" or "[[127],[127],[127]]", default is 0-std, --std : Usage: -std "[1,1,1]" or "[[127],[127],[127]]", default is 1-do_Quant, --do_Quant : Attach dataset txt file, such as -do_Quant xxx.txt. If there is no txt file, do_quantization=False by default.-onnx_inputs, --onnx_inputs : Usage: -onnx_inputs "{'Cast_0':[1,3,384,384],'Cast_1':[1,3,640,640]}"-onnx_outputs, --onnx_outputs : Usage: -onnx_outputs "['output_0','output_1']"-dynamic_input, --dynamic_input : Usage: -dynamic_input "[[[1,3,256,256]],[[1,3,160,160]]]"-RGB2BGR, --quant_img_RGB2BGR : quant_img_RGB2BGR, default=false (default: False)-Quant_algorithm, --quantized_algorithm : Usage: -Quant_algorithm normal/mmse/kl_divergence, default='normal'  (default: normal)-compress_weight, --compress_weight : compress_weight, default=false (default: False)-single_core_mode, --single_core_mode : single_core_mode, default=false (default: False)-Quant_dtype, --quantized_dtype : quantized_dtype support: w8a8, w8a16, w16a16i, w16a16i_dfp, w4a16. default is w8a8 (default: w8a8)-custom_hybrid, --custom_hybrid : Usage: -custom_hybrid "[['start_node_name','end_node_name']]"

下面是一个使用onnx输入的例子(注意外层使用” “,内层使用’ ',要不然会有bug,比如-onnx_outputs “[‘output_0’]”):

python -m rknn.api.convert -i xxx.onnx/yml -o ./ -t rk3588 -do_Quant xxx.txt  -mean "[0,0,0]" -std "[255,255,255]" -onnx_inputs "{'Cast_0':[1,3,384,384]}"-onnx_outputs "['output_0']"  -Quant_algorithm kl_divergence -a "xx1.jpg" -e -d 123456 -custom_hybrid "[['/model.22/cv4.0/cv4.0.0/act/Mul_output_0','/model.22/Concat_6_output_0']]"

下面是一个参考的yml配置文件(object_detection.yml):

 models:# model output namename: object_detection                           # Original model frameworkplatform: onnx                                   # Model input file pathmodel_file_path: ./object_detection.onnx         # Describe information such as input and output shapessubgraphs:                                       # model input tensor shapeinput_size_list:                               - 1,3,512,512# input tensor nameinputs:                                        - data# output tensor nameoutputs:                                      - conv6-1- conv6-2- conv6-3# quantification flagquantize: true                                   # Quantify dataset file path (relative yml path)dataset: ./dataset.txt                           configs:quantized_dtype: asymmetric_quantized-8      # rknn.config mean_values  mean_values: [127.5,127.5,127.5]      # rknn.config std_values         std_values: [128.0,128.0,128.0]                # rknn.config quant_img_RGB2BGR  quant_img_RGB2BGR: false  # rknn.config quantized_algorithm quantized_algorithm: normal

这个配置文件包括了模型的名称、原始模型使用的框架、模型文件路径、输入输出信息、是否进行量化等详细信息。用户可以根据模型的特定需求编辑相应的配置文件。

模型转换配置详见下表:

表3-1 rknn_convert模型转换配置参数说明
参数名填写内容
-name模型输出名称
-platform原始模型使用的框架,支持tensorflow、tflite、caffe、onnx、pytorch、darknet
-model_file_path原始模型文件路径,适用于单模型文件输入,例:tensorflow、tflite、onnx、pytorch
-quantize是否开启量化
-dataset量化dataset文件路径(相对yml配置文件路径),若要开启accuracy_analysis此项必填
-prototxt_file_pathplatform为caffe时,模型的prototxt文件
-caffemodel_file_pathplatform为caffe时,模型的caffemodel文件
-darknet_cfg_pathplatform为darknet时,模型的cfg文件
-darknet_weights_pathplatform为darknet时,模型的weight文件
-subgraphs描述输入输出shape等信息。除特定框架外,一般情况下该参数及附带的子参数可不写,使用模型默认值
----input_size_list(子参数)输入tensor的shape
----inputs(子参数)输入tensor的名称
----outputs(子参数)输出tensor的名称
-configs对应rknn.config()配置
----quantized_dtype(子参数)量化类型,RKNN_toolkit2: 可填写 [asymmetric_quantized-8],不输入用默认值
----mean_values(子参数)输入的均值归一数,模型为单输入RGB如[123.675,116.28,103.53],若为多输入如[[123,116,103],[255,255,255]]
----std_values(子参数)输入的方差归一数,模型为单输入RGB如[58.395,58.295,58.391],若为多输入如[[127,127,127],[255,255,255]]
----quant_img_RGB2BGR(子参数)用于控制量化时加载量化校正图像时是否需要先进行RGB到 BGR 的转换,默认值是False
----quantized_algorithm(子参数)量化算法,可选[‘normal’, ‘kl_divergence’, ‘mmse’],默认为 normal
----quantized_method(子参数)量化方式,RKNN_toolkit2可选[‘layer’, ‘channel’],默认为channel
----optimization_level(子参数)设置优化级别。默认为3,表示使用所有默认优化选项
----model_pruning(子参数)修剪模型以减小模型大小,默认为false,开启为true
----quantize_weight(子参数)当quantize参数为false时,通过量化一些权重来减小rknn模型的大小。默认为false,开启为true
----single_core_mode(子参数)是否仅生成单核模型,可以减小RKNN模型的大小和内存消耗。默认值为False。目前对RK3588/RK3576生效。默认值为 False
----compress_weight(子参数)压缩权重使rknn模型更小,默认为false,开启为true
----inputs_yuv_fmt(子参数)输入配置为YUV格式,默认为false

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

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

相关文章

解决 axios get请求瞎转义问题

在Vue.js项目中,axios 是一个常用的HTTP客户端库,用于发送HTTP请求。qs 是一个用于处理查询字符串的库,通常与 axios 结合使用,特别是在处理POST请求时,将对象序列化为URL编码的字符串。 1. 安装 axios 和 qs 首先&a…

【XTerminal】【树莓派】Linux系统下的函数调用编程

目录 一、XTerminal下的Linux系统调用编程 1.1理解进程和线程的概念并在Linux系统下完成相应操作 (1) 进程 (2)线程 (3) 进程 vs 线程 (4)Linux 下的实践操作 1.2Linux的“虚拟内存管理”和stm32正式物理内存(内存映射)的区别 (1)Linux虚拟内存管…

torch 拆分子张量 分割张量

目录 unbind拆分子张量 1. 沿着第n个维度拆分(即按“批次”拆分) split分割张量 常用用法: 总结: unbind拆分子张量 import torchquaternions torch.tensor([[1, 2, 3, 4], [5, 6, 7, 8]]) result torch.unbind(quaternio…

【Linux】内核驱动学习笔记(二)

7、framebuffer驱动详解 7.1、什么是framebuffer (1)裸机中如何操作LCD (2)OS下操作LCD的难点 (3)framebuffer帧缓冲(简称fb)是linux内核中虚拟出的一个设备 (4)framebuffer向应用层提供一个统一标准接口的显示设备 (5)从驱动来看,fb是一个…

用 Docker Compose 与 Nginx 反向代理部署 Vikunja 待办事项管理系统

在高效管理日常任务和项目的过程中,开源待办事项工具 Vikunja 以其简洁、直观的设计和多视图支持受到越来越多用户的青睐。本文将详细介绍如何使用 Docker Compose 快速部署 Vikunja,并通过 Nginx 反向代理实现 HTTPS 访问,从而确保服务安全稳…

使用Python快速接入DeepSeek API的步骤指南

使用Python快速接入DeepSeek API的步骤指南 1. 前期准备 注册DeepSeek账号 访问DeepSeek官网注册账号 完成邮箱验证等认证流程 获取API密钥 登录后进入控制台 → API管理 创建新的API Key并妥善保存 安装必要库 pip install requests # 可选:处理复杂场景 pip…

Redis 主要能够用来做什么

Redis(Remote Dictionary Server)是一种基于内存的键值存储数据库,它的性能极高,广泛应用于各种高并发场景。以下是 Redis 常见的用途: 1. 缓存(Cache) 作用:存储热点数据&#xf…

印度股票实时数据API接口选型指南:iTick.org如何成为开发者优选

在全球金融数字化浪潮中,印度股票市场因其高速增长潜力备受关注。对于量化交易开发者、金融科技公司而言,稳定可靠的股票报价API接口是获取市场数据的核心基础设施。本文将深度对比主流印度股票API,并揭示iTick在数据服务领域的独特优势。 一…

24.多路转接-poll

poll也是一种linux中的多路转接的方案 解决select的fd有上限的问题解决select每次调用都要重新设置关心的fd poll函数接口 poll, ppoll - wait for some event on a file descriptor#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);DESCRIP…

Linux 基础入门操作 前言 linux操作指令介绍

1 linux 目录介绍 Linux 文件系统采用层次化的目录结构&#xff0c;所有目录都从根目录 / 开始 1.1 核心目录 / (根目录) 整个文件系统的起点、包含所有其他目录和文件 /bin (基本命令二进制文件) 存放系统最基本的shell命令&#xff1a;如 ls, cp, mv, rm, cat 等&#…

Chrome开发者工具实战:调试三剑客

在前端开发的世界里&#xff0c;Chrome开发者工具就是我们的瑞士军刀&#xff0c;它集成了各种强大的功能&#xff0c;帮助我们快速定位和解决代码中的问题。今天&#xff0c;就让我们一起来看看如何使用Chrome开发者工具中的“调试三剑客”&#xff1a;断点调试、调用栈跟踪和…

函数柯里化(Currying)介绍(一种将接受多个参数的函数转换为一系列接受单一参数的函数的技术)

文章目录 柯里化的特点示例普通函数柯里化实现使用Lodash进行柯里化 应用场景总结 函数柯里化&#xff08;Currying&#xff09;是一种将接受多个参数的函数转换为一系列接受单一参数的函数的技术。换句话说&#xff0c;柯里化将一个多参数函数转化为一系列嵌套的单参数函数。 …

torch.nn中的非线性激活介绍合集——Pytorch中的非线性激活

1、nn.ELU 基本语法&#xff1a; class torch.nn.ELU(alpha1.0, inplaceFalse)按元素应用 Exponential Linear Unit &#xff08;ELU&#xff09; 函数。 论文中描述的方法&#xff1a;通过指数线性单元 &#xff08;ELU&#xff09; 进行快速准确的深度网络学习。 ELU 定义为…

Databend Cloud Dashboard 全新升级:直击痛点,释放数据价值

自 Databend Cloud 上线以来&#xff0c;我们一直致力于为用户提供高效的数据处理与可视化体验。早期&#xff0c;我们在工作区的“图表”区域推出了轻量级可视化功能&#xff0c;支持积分卡、饼图、柱状图和折线图四种展示方式。这些功能简单易用&#xff0c;基本满足了用户对…

Android Fresco 框架扩展模块源码深度剖析(四)

Android Fresco 框架扩展模块源码深度剖析 一、引言 在 Android 开发领域&#xff0c;图片处理一直是一个重要且具有挑战性的任务。Fresco 作为 Facebook 开源的强大图片加载框架&#xff0c;在图片的加载、缓存和显示等方面已经提供了非常完善的功能。然而&#xff0c;为了满…

蓝桥杯最后十天冲刺 day 2 双指针的思想

双指针思想介绍 双指针&#xff08;Two Pointers&#xff09;是一种在数组或链表等线性结构中常用的算法技巧&#xff0c;通过使用两个指针&#xff08;索引或引用&#xff09;以不同的速度或方向遍历数据结构&#xff0c;从而高效解决问题。双指针通常用于优化暴力解法&#…

Axure 使用笔记

1.Axure如何制作页面弹窗 https://blog.csdn.net/SDTechnology/article/details/143948691 2.axure 怎么点击按钮打开新页面 &#xff08;1&#xff09;新建交互 &#xff08;2&#xff09;单击是触发 &#xff08;3&#xff09;选择打开链接 &#xff08;4&#xff09;选择…

STM32实现一个简单电灯

新建工程的步骤 建立工程文件夹&#xff0c;Keil中新建工程&#xff0c;选择型号工程文件夹里建立Start、Library、User等文件夹&#xff0c;复制固件库里面的文件到工程文件夹工程里对应建立Start、Library、User等同名称的分组&#xff0c;然后将文件夹内的文件添加到工程分组…

html5炫酷图片悬停效果实现详解

html5炫酷图片悬停效果实现详解 这里写目录标题 html5炫酷图片悬停效果实现详解项目介绍技术栈核心功能实现1. 页面布局2. 图片容器样式3. 炫酷悬停效果缩放效果倾斜效果模糊效果旋转效果 4. 悬停文字效果5. 性能优化6. 响应式设计 项目亮点总结 项目介绍 本文将详细介绍如何使…

Playwright与Browser Use:领略AI赋能UI自动化测试的魔法魅力

目录 Browser Use是什么&#xff1f; Playwright简介 框架设计的核心目标与原则 Playwright 在 UI 自动化测试中的优势 如何高效拦截错误 实现视频录制 UI自动化框架设计的挑战 测试框架的结构与模块化设计 自动化测试不是银弹 走进Browser Use 横空出世的背景与意义…