pytorch模型转换为rknn模型,使用npu推理

2024-01-25 04:50

本文主要是介绍pytorch模型转换为rknn模型,使用npu推理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、转换为onnx模型

在yolov5代码中运行export.py,转换为onnx模型,参数根据自己需要修改。

二、创建转换目录

然后在rknn文件夹下,找到onnx2rknn.py、dataset.txt和coco2017数据集,将它们复制到新的文件夹中,作为rknn模型转换目录。将需要转换的onnx模型也放在该目录中。

在这里插入图片描述

我的目录结构如图所示,其中第一个文件夹是已经转换成功的生成目录。

在这里插入图片描述

三、转换为rknn模型

RKNN-Toolkit2 是为用户提供在 PC、 Rockchip NPU平台上进行模型转换、推理和性能评估的开发套件,用户通过该工具提供的 Python 接口可以便捷地完成以下功能:

  1. 🏆模型转换:支持Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch 等模型转为 RKNN模型,并支持 RKNN 模型导入导出,RKNN 模型能够在 Rockchip NPU 平台上加载使用。

  2. 🎽量 化 功 能 : 支 持将 浮 点 模 型 量 化 为 定 点 模 型 , 目 前 支 持 的 量 化 方 法 为 非 对 称 量 化 , 并 支 持 混 合 量化 功 能 。asymmetric_quantized-16 目前版本暂不支持。

  3. 🎯模型推理:能够在 PC 上模拟Rockchip NPU 运行 RKNN 模型并获取推理结果;或将 RKNN模型分发到指定的 NPU 设备上进行推理并获取推理结果。

  4. 🏋性能和内存评估:将 RKNN 模型分发到指定 NPU 设备上运行,以评估模型在实际设备上运行时的性能和内存占用情况。

  5. 🎼量化精度分析:该功能将给出模型量化前后每一层推理结果与浮点模型推理结果的余弦距离,以便于分析量化误差是如何出现的,为提高量化模型的精度提供思路。

进入我们之前配置安装有rknn-toolkit2的环境,输入命令进行转换。

python export.py

过程中的日志输出:

(py36) (base) dzh@dzh-Lenovo-Legion-Y7000:~/modelConvert/onnx2rknn$ python onnx2rknn.py 
W __init__: rknn-toolkit2 version: 1.3.0-11912b58
--> Loading model
W load_onnx: It is recommended onnx opset 12, but your onnx model opset is 10!
W load_onnx: Model converted from pytorch, 'opset_version' should be set 12 in torch.onnx.export for successful convert!More details can be found in examples/pytorch/torch2onnx
done
--> Building model
Analysing : 100%|███████████████████████████████████████████████| 168/168 [00:00<00:00, 3731.11it/s]
Quantizating : 100%|█████████████████████████████████████████████| 168/168 [00:00<00:00, 755.22it/s]
W build: The default input dtype of 'images' is changed from 'float32' to 'int8' in rknn model for performance!Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of 'output' is changed from 'float32' to 'int8' in rknn model for performance!Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of '335' is changed from 'float32' to 'int8' in rknn model for performance!Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of '336' is changed from 'float32' to 'int8' in rknn model for performance!Please take care of this change when deploy rknn model with Runtime API!
done
--> Export RKNN model: ./rknn_models/yolov5s-640-640_rm_transpose.rknn
done

然后在rknn_models下可以看到yolov5s-640-640_rm_transpose.rknn文件,重命名下,我们就可以拷贝到开发板上进行目标检测了。

在这里插入图片描述

四、问题记录

W __init__: rknn-toolkit2 version: 1.3.0-11912b58
--> Loading model
W load_onnx: It is recommended onnx opset 12, but your onnx model opset is 10!
W load_onnx: Model converted from pytorch, 'opset_version' should be set 12 in torch.onnx.export for successful convert!More details can be found in examples/pytorch/torch2onnx
E load_onnx: The len of mean_values ([0, 0, 0]) for input 0 is wrong, expect 12!
W load_onnx: ===================== WARN(3) =====================
E rknn-toolkit2 version: 1.3.0-11912b58
E load_onnx: Catch exception when loading onnx model: /home/dzh/modelConvert/onnx2rknn/yolov5s.onnx!
E load_onnx: Traceback (most recent call last):
E load_onnx:   File "rknn/api/rknn_base.py", line 1182, in rknn.api.rknn_base.RKNNBase.load_onnx
E load_onnx:   File "rknn/api/rknn_base.py", line 663, in rknn.api.rknn_base.RKNNBase._create_ir_and_inputs_meta
E load_onnx:   File "rknn/api/rknn_log.py", line 113, in rknn.api.rknn_log.RKNNLog.e
E load_onnx: ValueError: The len of mean_values ([0, 0, 0]) for input 0 is wrong, expect 12!
load model failed!

pt模型的输入图像的通道一定要和转换时的图像通道数相同,对于RGB图像肯定是3通道。

这篇关于pytorch模型转换为rknn模型,使用npu推理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642134

相关文章

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解