香橙派模型转换以及部署二

news2024/11/24 14:08:46

由于想更新RKNN-Tookl2的版本,重新做一下记录。

上一篇文章安装的是RKNN-Tookl2 v1.5.2:

香橙派转换模型以及在开发板上部署-CSDN博客

现在记录一下RKNN-Tookl2 v2.0.0beta0版本,使用起来更方便,且可使用的功能更多一些,大概的流程和1.5.2差不多,细节上有一些区别。

一、相关资料的下载:

1、rknn-toolkit2

Tags · airockchip/rknn-toolkit2 (github.com)

2、rknn_model_zoo

Tags · airockchip/rknn_model_zoo (github.com)

3、交叉编译器

https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz

将三个下载下来之后,最好都放到虚拟机里面再解压,不然可能后面会有问题。三个文件在虚拟机里面的存放位置如下(其中rk3588是我自己新建的一个文件夹,名字随意):

下载下来之后,在下面位置有对应的使用文档说明。

二、环境的安装

1、python环境

注:这里可以采用两种方式进行,第一种直接在本地环境安装,第二种是使用conda管理环境,新建一个虚拟环境,然后确认好自己python的版本,安装包都要根据python版本进行安装的。我因为硬盘空间不足,之间在虚拟机的本地环境进行安装。

查看自己python版本:

python3 --version

我的虚拟机环境是3.8的,刚好官方推荐3.8。

2、安装rknn-toolkit2的依赖包:

sudo apt-get update
sudo apt-get install libxslt1-dev zlib1g zlib1g-dev libglib2.0-0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc

3、接下来要使用到pip安装命令,所以先安装pip

sudo apt install python3-pip

4、安装rknn-toolkit2相关的库:

pip3 install -r ~/rk3588/rknn-toolkit2/rknn-toolkit2/packages/requirements_cp38-2.0.0b0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

这里requirements_cp38-2.0.0b0.txt要注意和自己的python保持一致,如果有个别库下载不下来的话,可以更换镜像源。

5、等所有的库都下载安装完成之后,安装rknn-toolkit2:

pip install rknn_toolkit2-2.0.0b0+9bab5682-cp38-cp38-linux_x86_64.whl

这里可以直接把上面的终端关上,找到packages文件夹,右击在终端打开,也可以使用cd命令进入packages文件夹,然后执行上面的命令,注意rknn_toolkit2-2.0.0b0+9bab5682-cp38-cp38-linux_x86_64.whl要和自己的python版本保持一致。

6、检查环境是否安装成功 

先进入到python3环境中,然后导入RKNN。

python3
from rknn.api import RKNN

三、mobilenet模型转换以及在板端测试

rknn_model_zoo文件夹里面给出了很多测试例子,包括了很多模型的转换和部署,下面使用mobilenet来测试一下(使用说明文档可以看02_Rockchip_RKNPU_User_Guide_RKNN文档的第四部分示例)。

1、mobilenet模型下载

进入到rknn_model_zoo/example/mobilenet/model,里面有一个download_model.sh文件,是用来下载mobilenet的onnx模型。使用下面命令下载:

./download_model.sh

2、模型转换:

在rknn_model_zoo/example/mobilenet/python文件夹里面有一个mobilenet.py文件,可以进行模型转换:

python3 mobilenet.py --model ../model/mobilenetv2-12.onnx --target rk3588

转换成功之后,会在rknn_model_zoo/example/mobilenet/model文件夹里面多出一个.rknn的模型文件。

3、板端和虚拟机的连接:

可见香橙派转换模型以及在开发板上部署-CSDN博客的第二部分。

4、更新开发板的rknn_server和librknnrt.so:

注意,我这里是重新开了一个终端进行下面的操作,所以和上面的位置不一样,打开服务之后,就可以把这个终端关掉了。

adb push /home/ly/rk3588/rknn-toolkit2/rknpu2/runtime/Linux/rknn_server/aarch64/usr/bin/* /usr/bin
adb push /home/ly/rk3588/rknn-toolkit2/rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so  /usr/lib

注意要修改成自己文件的位置。

5、打开rknn_server服务:

adb shell
restart_rknn.sh

6、连扳测试mobilenet:

 还是使用rknn_model_zoo/example/mobilenet/python文件夹里面的mobilenet.py文件

(1)模型推理测试

python3 mobilenet.py --target rk3588 --npu_device_test

(2) 模型速度测试

python3 mobilenet.py --target rk3588 --eval_perf

 文档里面还有一些精度测试和内存占用测试,我这里都没有做,可以自己做下试试。

7、板端部署

(1)设置交叉编译环境

交叉编译生成也使用rknn_model_zoo,在rknn_model_zoo文件夹下有一个build-linux.sh文件如下:

直接双击打开build-linux.sh文件,在文件的开头添加:

GCC_COMPILER=~/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu

这里要注意路径,如果报错找不到,不存在之类的错误,大概率是路径有问题,可以检查一下路径是否正确。

这里还有一个需要注意的点是,最好在虚拟机里面解压文件,我开始是在物理机里面解压的文件,拖进虚拟机里面的,结果libgcc_s.so文件有损坏,报了下面的错误:

-- The C compiler identification is GNU 6.3.1

-- The CXX compiler identification is GNU 6.3.1

-- Check for working C compiler: /home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc

-- Check for working C compiler: /home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc -- broken

CMake Error at /usr/share/cmake-3.16/Modules/CMakeTestCCompiler.cmake:60 (message):

  The C compiler

    "/home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc"

  is not able to compile a simple test program.

  It fails with the following output:

Change Dir: /home/ly/rk3588/rknn_model_zoo/build/build_rknn_mobilenet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeTmp

    

    Run Build Command(s):/usr/bin/make cmTC_a1471/fast && /usr/bin/make -f CMakeFiles/cmTC_a1471.dir/build.make CMakeFiles/cmTC_a1471.dir/build

    make[1]: 进入目录“/home/ly/rk3588/rknn_model_zoo/build/build_rknn_mobilenet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeTmp”

    Building C object CMakeFiles/cmTC_a1471.dir/testCCompiler.c.o

    /home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc    -o CMakeFiles/cmTC_a1471.dir/testCCompiler.c.o   -c /home/ly/rk3588/rknn_model_zoo/build/build_rknn_mobilenet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeTmp/testCCompiler.c

    Linking C executable cmTC_a1471

    /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a1471.dir/link.txt --verbose=1

    /home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc      CMakeFiles/cmTC_a1471.dir/testCCompiler.c.o  -o cmTC_a1471

    /home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/bin/ld:/home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so: file format not recognized; treating as linker script

    /home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/bin/ld:/home/ly/rk3588/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so:1: syntax error

    collect2: 错误: ld 返回 1

    make[1]: *** [CMakeFiles/cmTC_a1471.dir/build.make:87:cmTC_a1471] 错误 1

    make[1]: 离开目录“/home/ly/rk3588/rknn_model_zoo/build/build_rknn_mobilenet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeTmp”

    make: *** [Makefile:121:cmTC_a1471/fast] 错误 

  CMake will not be able to correctly generate this project.

Call Stack (most recent call first):

  CMakeLists.txt:3 (project)

-- Configuring incomplete, errors occurred!

See also "/home/ly/rk3588/rknn_model_zoo/build/build_rknn_mobilenet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeOutput.log".

See also "/home/ly/rk3588/rknn_model_zoo/build/build_rknn_mobilenet_demo_rk3588_linux_aarch64_Release/CMakeFiles/CMakeError.log"

(2)进行交叉编译生成:

./build-linux.sh -t rk3588 -a aarch64 -d mobilenet

完成之后,会生成一个install的文件夹,我们需要的文件就在这个文件夹里面。

(3)将生成的文件推送到板端

adb push install/rk3588_linux_aarch64/rknn_mobilenet_demo /userdata

(4)板端推理测试

adb shell
cd /userdata/rknn_mobilenet_demo/
./rknn_mobilenet_demo model/mobilenet_v2.rknn model/bell.jpg

成功!

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

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

相关文章

容联云容犀Copilot&Agent入选《中国 AI Agent 产品罗盘》

近日,InfoQ研究中心推出《中国AI Agent应用研究报告》,并在报告中对现行的中国AI Agent产品进行梳理总结,并形成《中国AI Agent产品罗盘》。 作为“营销服”领域垂直类Agent,容联云容犀Copilot&Agent入选2024中国AI A…

天地一体化物联网:挑战与机遇

这篇论文的标题是《Space-Terrestrial Integrated Internet of Things: Challenges and Opportunities》,作者包括Juan A. Fraire, Oana Iova, 和 Fabrice Valois。文章发表在2022年12月的IEEE Communications Magazine上。论文主要探讨了如何将卫星通信与物联网&am…

vue3中的实例

实例类型 Vue2:每个Vue应用都是new Vue创建的一个新实例,创建的时候将data作为property添加到响应式系统中 vue3:createApp创建一个Application Instance、应用实例用来注册全局内容,大多数方法支持链式调用,返回实例…

C++当中的多态(二)

(三)final和override关键字 在继承和多态当中我们还会很经常看到这两个关键字final和override。这两个关键字的作用其实很简单。 final关键字字面意思上理解就是我们这个虚函数是最后一个虚函数,之后不能够被重写。所以我们以后想要定义一个虚函数只能够…

word文档的读入(7)

获取了标准答案和学生答案后,就可以计算每位同学的填空题分数啦。我们将分数累加到studentData字典里的scoreTwo键中。需要注意的是,使用这个键之前,必须先在第一个for循环里和第二个for循环外,对它进行初始化赋值为0,…

一文搞懂线程的生命周期以及状态

一. Java 线程生命周期概述 Java 中的线程生命周期主要分为以下五个状态: 新建状态(NEW):线程被创建但尚未启动。可运行状态(RUNNABLE):线程可以被操作系统调度执行。阻塞状态(BLO…

如何投放Spotify广告:费用与关键考量

Spotify在2008年上市时,市场上已经充斥着各种竞争对手的音乐服务。这款音乐流媒体应用不仅打破了预期,还在180个市场上吸引了超过602百万用户,其中包括2.36亿订阅用户。现如今,它是全球最受欢迎的音频流媒体订阅服务。 Spotify广…

MySQL分组查询(DQL)

先看一下我的表内容和数据,再做接下来的例子和讲解1.分组函数的基本用法 select 字段列表 from 表名 [WHERE 条件] group by 分组字段名 [HAVING 分组后的过滤条件] 2.先声明where和having的区别 1.执行时机不同:where是分组之前进行过滤,…

❤Node08-Express-jwt身份认证

❤Node08-Express-jwt身份认证 1、token基本概念​ Session认证的局限性​ Session 认证机制需要配合Cookie才能实现。由于 Cookie 默认不支持跨域访问,所以,当涉及到前端跨域请求后端接口的时候,需要做很多额外的配置,才能实现…

特征值特征向量

正交矩阵 施密特正交化,本质上是正交​编辑投影定理的应用

再次进阶 舞台王者 第八季完美童模全球赛荣耀大使【李暖希】赛场秀场超燃合集!

7月20-23日,2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上,一位才能出众的少女——李暖希,迎来了她舞台生涯的璀璨时刻。 荣耀大使——李暖希,以璀璨童星之姿,优雅地踏上完美童模盛宴的绚丽舞台&am…

Python爱心射线(完整代码)

目录 系列目录 写在前面​ 完整代码 下载代码 代码分析 写在后面 系列目录 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3

【工资计算 / 2】

题目 枚举 #include <bits/stdc.h> using namespace std; int T; int a[] {0,1500,4500,9000,35000,55000,80000,1000000}; int b[] {0,3,10,20,25,30,35,45}; int check(int x) {if(x < 3500) return x;x - 3500;int tax 0;for(int i 1; i < 8; i){if(x >…

【Spring Boot 整合 MyBatis 详细教程】

文章目录 Spring Boot 整合 MyBatis 详细教程简介环境准备项目搭建项目结构配置项目1. pom.xml 配置2. 数据源和 MyBatis 配置3. 启动类配置4. Mapper 接口和 XML 映射文件 测试总结 Spring Boot 整合 MyBatis 详细教程 简介 Spring Boot 与 MyBatis 的整合可以让你轻松地构建…

Unity射击游戏开发教程:(35)轰炸敌人

现在敌人和飞机已经慢慢地越来越有各自地地行为了,在本文中,我们将介绍如何创建一个具有以下行为的敌人: 飞机会来回弹跳。飞机将有 4 架无人机轰炸机围绕飞机旋转。无人机轰炸机会偶尔投下沿着屏幕传播的炸弹。如果炸弹击中玩家或在随机时间后就会爆炸。如果炸弹没有击中玩…

机器学习--逻辑回归

逻辑回归 前情提要&#xff1a;线性回归 关于分类 C l a s s i f i c a t i o n Classification Classification 在逻辑回归中&#xff0c;我们只讨论 y ∈ { 0 , 1 } y\in\{0, 1\} y∈{0,1} 的情况。其中 1 1 1 表示 p o s i t i v e c l a s s positive \; class posit…

无人机培训机构组装调试技术详解

一、基础知识学习 在进入无人机组装调试领域之前&#xff0c;扎实的基础知识是不可或缺的。学员需掌握以下内容&#xff1a; 1. 无人机基本原理&#xff1a;了解无人机的飞行原理&#xff0c;包括升力、推力、重力和阻力等基本物理概念&#xff0c;以及无人机的飞行控制系统&…

CSP-J 初中的数学知识要学完, CSP-S 肯定是要需高中的知识

学信奥赛好处很多&#xff0c;进则科技特长&#xff0c;退则数理化强。

【97】shell实现精确延时

#!/bin/bash#使用date精确延时的函数&#xff0c;参数是毫秒 function precise_sleep_ms() {local duration_ms$1# 将毫秒转换为秒local duration_sec$(echo "scale9; $duration_ms / 1000" | bc)duration_sec$(printf "%.3f" "$duration_sec")#…

JDBC API详解二

PreparedStatement 作用&#xff1a; 预编译SQL的执行&#xff0c;&#xff0c;预防SQL注入问题 SQL注入 通过操作输入来修改预先定义好的SQL语句&#xff0c;用以达到执行代码对服务器进行攻击的方法&#xff1b; SQL注入延时 需求&#xff0c;完成用户登录 select * fr…