rk3568环境配置和推理报错: RKNN_ERR_MALLOC_FAIL

前言
最近在部署算法在板子侧遇到的一些问题汇总一下:

一、版本问题

经过测试现在将自己环境配置如下:在这里插入图片描述
在这里插入图片描述

本地linux安装rknn-toolkit2-1.5.0

  1. 本地Linux使用的miniconda新建的一个python虚拟环境(自行网上查找相关方法)
    在这里插入图片描述
  2. 安装好自己的虚拟环境之后:安装所需的依赖包
 sudo apt-get install libxslt1-dev zlib1g-dev libglib2.0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc 
  1. 将官方的RKNN-Toolkit2库git到linux本地:(如果提示没有找到git命令,使用:sudo apt install git-all安装git工具)
 git clone https://github.com/rockchip-linux/rknn-toolkit2

在这里插入图片描述

  1. 进入 Toolkit2 工程文件夹, 根据工程的保存路径修改 cd 命令中的路径。
cd ~/rknn-toolkit2
  1. 安装必要相应版本的依赖包(这里我安装和我自己linux匹配的py3.8版本)
 pip3 install -r doc/requirements_cp38-1.5.0 
  1. 安装 RKNN-Toolkit2(Python3.6 for x86_64)
 pip3 install package/rknn_toolkit2-1.5.0+1fa95b5c-cp38-cp38-linux_x86_64
  1. 检查 RKNN-Toolkit2 是否安装成功。 出现这个界面,就说明本地linux端的安装已经成功,
    在这里插入图片描述
  2. 可以运行官方的examples案例检测:rknn-toolkit2/examples/onnx/yolov5
    在这里插入图片描述

板子RK3568环境安装

  1. git源码到板子上
git clone https://github.com/rockchip-linux/rknn-toolkit2
cd ./rknn_toolkit_lite2

文件结构如下:
在这里插入图片描述

  1. 环境安装
 sudo apt update
#安装python工具等
sudo apt-get install python3-dev python3-pip gcc
#安装相关依赖和软件包
pip3 install wheel
sudo apt-get install -y python3-opencv
sudo apt-get install -y python3-numpy
sudo apt -y install python3-setuptools
  1. Toolkit Lite2工具安装:
# 进入到rknn_toolkit_lite2目录下,
cd rknn_toolkit_lite2/
# ubuntu22 python3.7
pip3 install packages/rknn_toolkit_lite2-1.5.0-cp310-cp310m-linux_aarch64.whl
  1. 检测安装成功
python3
>>> from rknnlite.api import RKNNLite
>>>
  1. 运行官方的demo
    此时运行一定是在rknn_toolkit_lite2这个文件下找到examples进行运行:

运行我的demo:仓库地址:https://gitee.com/wangyoujie11/rk3568_-demo
在这里插入图片描述
Mnist_PC放在本地电脑的linux环境下,激活自己的python虚拟环境,然后python test.py就可以运行
Mnist_rk3568放在板子的linux环境下,然后python3 rk3568_test.py就可以运行
运行结果分别如下:
pc端(程序里加载的1.png):
在这里插入图片描述
RK3568板子端(程序里加载的7.png):
在这里插入图片描述

---------------------------------------------分割线(不定期更新)-----------------------------------------

问题一

在使用RK3568开发板的时候,在板子侧部署.rknn模型推理的时候报错:*Exception: RKNN init failed. error code: RKNN_ERR_MALLOC_FAIL*

然后查看官方的手册发现报错提示:内存分配失败
但是没有对应的解决方法,只能自己debug了(一杯茶,一包烟,一个bug找一天)…
后面发现问题所在:我的.onnx模型输出如下:有多个输出,导致在本地linux下可以运行自己的模型,但是在板子上由于资源受限,导致板子的内存分配失败。所以解决的办法就是将自己的.onnx模型的输出给减少。https://netron.app/可以将自己的.onnx模型加载看输入输出
在这里插入图片描述

#原xxx.onnx文件放在onnx文件夹下,然后创建一个新的文件夹newonnx用来存放新的.onnx模型
#版本说明这里的.onnx模型是在pytorch版本1.6.0~1.10.1直接训练的模型,并且在onnx版本在1.7.0~1.10.0之间
import onnx
model = onnx.load('./onnx/xxx.onnx')
node = model.graph.output[1]
model.graph.output.remove(node)
onnx.save(model, './newonnx/xxx.onnx')model = onnx.load('./newonnx/xxx.onnx')
for i in range(1,9): #根据自己要删除的节点设置范围node = model.graph.output[1]model.graph.output.remove(node)onnx.save(model, './newonnx/xxx.onnx')

在这里插入图片描述
经过上面的代码裁剪.onnx模型之后
在这里插入图片描述
得到这个新的.onnx模型之后,就可以由本地Linux运行rknn的对应api将.onnx模型转为.rknn模型,然后将.rknn模型在板子上进行推理了。

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

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

相关文章

Linux 链表示例 LIST_INIT LIST_INSERT_HEAD

list(3) — Linux manual page 用Visual Studio 2022创建CMake项目 * CmakeLists.txt # CMakeList.txt : Top-level CMake project file, do global configuration # and include sub-projects here. # cmake_minimum_required (VERSION 3.12)project ("llist")# I…

【Linux】系统编程线程读写者模式(C++)

目录 一、读写锁 二、读写锁接口 【2.1】设置读写优先 【2.2】初始化 【2.3】销毁 【2.4】加读锁 【2.5】加写锁 【2.6】解锁 三、读写锁实例 一、读写锁 在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相…

14:00面试,14:06就出来了,问的问题过于变态了。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

使用 docker-compose 构建你的项目

使用 docker-compose 构建你的项目 1. Docker1.1 安装1.2 docker-compose 2 准备项目2.1 初始化一个node项目4. 准备一个 Dockerfile 文件5. 构建镜像 3.docker-compose构建3.1 配置docker-compose.yml 文件3.2 编排多个服务 重新构建镜像 --force-rm 删除构建过程中的临时容器…

AI-Chat,一款集全网ai功能的应用(附下载链接)

AI-Chat是一款综合性的聊天机器人,集成了多种先进的模型和功能。它采用了GPT4.0、联网版GPT和清华模型等多种模型,使得其具备更强大的语言处理能力。同时,AI-Chat还融合了AI绘画模型,例如Stable Diffusion绘画、文生图、图生图、艺…

硬件知识积累 网口接口 百兆,千兆,万兆 接口介绍与定义 (RJ45 --简单介绍)

1. 百兆网口 1.1百兆网的定义 百兆网的意思是是100Mb/S,中文叫做100兆位/秒。 1.2百兆网口的常用连接器 1.1.1 一般百兆网口的连接器一般是RJ45 下面是 实物图, 原理图,封装图。 1.3 百兆网口连接线的介绍 1.3.1 百兆需要使用的线的定义 百…

Flowable主要子流程介绍

1. 内嵌子流程 (1)说明 内嵌子流程又叫嵌入式子流程,它是一个可以包含其它活动、分支、事件,等的活动。我们通常意义上说的子流程通常就是指的内嵌子流程,它表现为将一个流程(子流程)定…

十四、流式编程(2)

本章概要 中间操作 跟踪和调试流元素排序移除元素应用函数到元素在 map() 中组合流 中间操作 中间操作用于从一个流中获取对象,并将对象作为另一个流从后端输出,以连接到其他操作。 跟踪和调试 peek() 操作的目的是帮助调试。它允许你无修改地查看…

Learn Prompt- Midjourney 图片生成:基本设置和预设

/settings指令为模型版本、样式值、质量值和升级器版本等常用选项提供切换按钮。 备注 添加到提示末尾的参数将覆盖/settings中的设置。 模型版本​ 1️⃣ MJ Version 12️⃣ MJ Version 23️⃣ MJ Version 34️⃣ MJ Version 45️⃣ MJ Version 5🌈 Niji Mode&a…

数据结构与算法-时间复杂度与空间复杂度

数据结构与算法 🎈1.概论🔭1.1什么是数据结构?🔭1.2什么是算法? 🎈2.算法效率🔭2.1如何衡量一个算法的好坏?🔭2.2算法的复杂度🔭2.3时间复杂度📖2…

Swift SwiftUI 隐藏键盘

如果仅支持 iOS 15 及更高版本,则可以通过聚焦和取消聚焦来激活和关闭文本字段的键盘。 在最简单的形式中,这是使用 FocusState 属性包装器和 focusable() 修饰符完成的-第一个存储一个布尔值,用于跟踪第二个当前是否被聚焦。 Code struct C…

分类预测 | MATLAB实现WOA-CNN-GRU-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-GRU-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-GRU-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-GRU-Attention数据分类预测,运行环境Matlab2021b及以上&…