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.pswp.cn/diannao/76509.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76509.shtml
英文地址,請注明出處:http://en.pswp.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 橫空出世的背景與意義…