RV1126预编译模型:减少加载时间,提升推理速度的最佳实践

1 介绍

本文将以 MobileNetV2 模型为例,详细介绍如何在 RV1126 平台上完成预编译工作,帮助开发者高效地部署深度学习模型。通过这篇教程,您将了解如何在 RV1126 上进行环境配置、模型编译、以及如何将预编译后的模型进行推理操作。

2 RV1126预编译的技术优势

  • 减少加载时间:通过预编译,模型加载时间大幅缩短,提升应用响应速度。
  • 优化资源消耗:预编译后,模型更紧凑,占用内存更少,提升硬件利用率。
  • 提升推理效率:优化推理过程,减少推理延迟,提升整体性能。
  • 稳定性与可靠性:避免运行时编译带来的错误,保证系统的稳定性。

3 预编译步骤

3.1 环境准备

  • 物理机环境:Ubuntu 18.04 x86_64
  • RKNN版本
    • rknn-toolkit版本:1.7.5
    • rknpu驱动版本:1.7.3
  • 交叉编译环境:gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
    在这里插入图片描述

如果驱动版本不满足要求:则参考此篇文章【驱动版本升级】完成对开发板驱动版本的升级。

3.2 模型转换

1、切换到rv1126的环境:

conda activate rv1126

2、使用参考代码执行以下命令:

# python test.py [target] [device_id]
python test.py rv1126 905d17c82d2c9bd3

3、执行结束则终端成功打印:
在这里插入图片描述

3.3 模型预编译

1、执行预编译的python脚本:

python export_rknn_precompile_model.py /home/ros/Downloads/project/deployed/rk/rv1126/rknn-toolkit-1.7.5/examples/caffe/mobilenet_v2/mobilenet_v2.rknn /home/ros/Downloads/project/deployed/rk/rv1126/rknn-toolkit-1.7.5/examples/caffe/mobilenet_v2/mobilenet_v2.hw.rknn rv1126 905d17c82d2c9bd3

2、执行结束则终端成功打印:
在这里插入图片描述

3.4 预编译模型测试

1、使用rknn_model_zoo中的MobileNet代码,执行以下命令:

./build-linux.sh -t rv1126 -a armhf -d mobilenet

2、将编译生成的可执行文件推送至板端:

adb push install /userdata/rknn_model_zoo

3、执行推送的可执行文件:

export LD_LIBRARY_PATH=./lib
./rknn_mobilenet_demo ./model/mobilenet_v2.rknn model/bell.jpg

4、执行成功后,终端显示结果如下:

4 效率对比

4.1 测试方法

分别使用没有预编译的模型和使用预编译的模型测试10次,观察模型初始化的时间对比。

4.2 测试结果
在这里插入图片描述

5 报错集合

1、注意在模型预编译时,不能使用mini driver进行模型转换,否则会报错:MODEL INVALID!
在这里插入图片描述

2、在更新驱动后,如果使用没有预编译的模型,则会报错:
在这里插入图片描述

3、使用rknn-toolkit1.7.5模型预编译时,rknn.release报错:
源码:

def __del__(self):
    if self.rknn_log is not None and 'logging' in globals()['sys'].modules:
        print("self.rknn_log :{}".format(self.rknn_log))
        for log_handler in self.rknn_log.logger.handlers:
            if isinstance(log_handler, globals()['sys'].modules['logging'].FileHandler):
                log_handler.close()
                self.rknn_log.logger.removeHandler(log_handler)

更新后源码:

def __del__(self):
    if hasattr(self, 'rknn_log') and self.rknn_log is not None:
        logger = self.rknn_log.logger
        if logger is not None:
            print("Logger exists and has handlers")
            for log_handler in logger.handlers[:]:
                if isinstance(log_handler, logging.FileHandler):
                    try:
                        log_handler.close()
                        logger.removeHandler(log_handler)
                    except Exception as e:
                        print(f"Error while cleaning up log handler: {e}")
        else:
            print("Logger is None")

6 技术交流

6.1 QQ交流:

  • RKNN非官方交流:909472035

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用html和JavaScript实现一个简易的物业管理系统

码实现了一个简易的物业管理系统,主要使用了以下技术和功能: 1.主要技术 使用的技术: HTML: 用于构建网页的基本结构。包括表单、表格、按钮等元素。 CSS: 用于美化网页的外观和布局。设置字体、颜色、边距、对齐方式等样式。 JavaScript…

VMware虚拟机 Ubuntu没有共享文件夹的问题

在虚拟机的Ubuntu系统中,共享文件目录存放在 mnt/hgfs 下面,但是我安装完系统并添加共享文件后发现,在mnt下连/hgfs目录都没有。 注意:使用共享文件目录需要已安装VMtools工具。 添加共享文件目录 一:在超级用户下 可…

云开发实战教程:手把手教你高效开发应用

声明:本文仅供实践教学使用,没有任何打广告成分 目录 1.引言 2.云开发 Copilot介绍 云开发 Copilot 的功能与特点 3.环境准备 步骤一登录账号 步骤二新建环境 4.开发实践 4.1AI 生成低代码应用 4.2AI 生成低代码页面/区块 4.3AI 优化低代码组件…

聊聊Oracle自适应查询优化

成也AQO败也AQO 因为工作的原因,我们接触到的客户大部分是金融和运营商行业,这些客户有个最大的特点是追求稳定,对于使用数据库新特性持保守的态度,不会轻易尝试某些可能会导致生产系统不稳定的新特性。上线前通常都会将一些新特…

纯CSS实现文本或表格特效(连续滚动与首尾相连)

纯CSS实现文本连续向左滚动首尾相连 1.效果图&#xff1a; 2.实现代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, init…

深度学习物体检测之YOLOV5源码解读

V5比前面版本偏工程化,项目化,更贴合实战 一.V5版本项目配置 (1)整体项目概述 首先github直接查找yolov5&#xff0c;下载下来即可。在训练时&#xff0c;数据是怎么处理的&#xff1f;网络模型架构是怎么设计的(如各层的设计)&#xff1f;yolov5要求是大于python3.8与大于等…

uniapp h5 js设置监听:超时未操作返回首页(全局只监听一次,可设置监听事件+检查时间+超时时长)

功能实现: 可自定义超时时长,检查时间超时后跳转首页(/pages/home/index/index); 如果在首页,则不进行跳转监控状态下, 用户有任意操作(包括但不限于点击,滑动,跳转页面等),则重置监听,重新开始算时间超时方法及逻辑封装到单独的js文件中 全局只需在app.vue创建监听,其他页面无…

MAC M3电脑在idea上搭建Spark环境并跑通第一个程序

我的电脑是Macbook Pro&#xff0c;最近在学习Spark&#xff0c;想要在idea里搭建Spark环境&#xff0c;为之后的Spark编程作准备。下面是在MAC版本的idea里配置Spark环境。 1. 准备工作 1.安装 JDK 确保Mac 上已经安装了 JDK 8 或更高版本。 可通过 java -version 查看是否…

展柜设计公司平面布置小程序的分析与设计springboot+论文源码调试讲解

3系统的需求分析 需求分析的任务是通过详细调查展柜设计公司平面布置小程序软件所需的对象&#xff0c;充分了解系统的工作概况&#xff0c;明确功能实现的各种需求&#xff0c;然后在此基础上确定系统的功能。系统必须充分考虑今后可能的扩充和改变。 3.1可行性分析 通过对…

用人话讲计算机:Python篇!(十二)正则运算+re模块

目录 一、正则表达式 &#xff08;1&#xff09;什么是正则表达式 &#xff08;2&#xff09;它的结构及使用 示例&#xff1a; 1.字符 . &#xff08;←这里有个小点哦&#xff09; 2.字符 | 3.字符 [ ] 4.字符^ 5.字符\d &#xff08;3&#xff09;补充&#xff…

C# 与PLC数据交互

点击跳转下载地址 点击跳转胡工科技官网

康佳Android面试题及参考答案(多张原理图)

JVM 内存分布和分代回收机制是什么? JVM 内存主要分为以下几个区域。 堆(Heap)是 JVM 管理的最大的一块内存区域,主要用于存放对象实例。所有线程共享堆内存,在堆中又分为年轻代(Young Generation)和老年代(Old Generation)。年轻代又分为 Eden 区和两个 Survivor 区(…

家校通小程序实战教程10部门管理前后端连接

目录 1 加载后端的数据2 为什么不直接给变量赋值3 保存部门信息4 最终的效果5 总结 现在部门管理已经完成了后端功能和前端开发&#xff0c;就需要在前端调用后端的数据完成界面的展示&#xff0c;而且在录入部门信息后需要提交到数据库里&#xff0c;本篇我们介绍一下前后端如…

【Java】链接数据库简介

JDBC基本原理 JDBC 提供了一套通用的接口&#xff0c;允许 Java 程序与不同类型的数据库进行交互。 JDBC 是 Java 提供的一种用于与数据库通信的 API&#xff08;应用程序编程接口&#xff09;&#xff0c;定义了 Java 程序如何与数据库进行连接、执行查询、操作数据等。JDBC…

企业级包管理器之 monorepomultirepo (8)

在企业级项目开发中&#xff0c;面对多个项目的管理&#xff0c;monorepo 和 multirepo 是两种常见的代码管理方案&#xff0c;它们各有特点与优劣&#xff0c;下面我们来详细了解一下。 一、基本概念 monorepo&#xff1a;“mono”在英语中有“单一的、单独的”之意&#xf…

SQLite 数据库学习

0.引言 SQL, 全名是 Structured Query Language, 中文翻译是"结构化查询语言"。它是一种专门用来与数据库交互的语言。简单来说&#xff0c;SQL就是跟数据库"对话"的一种语言。 1.install sudo apt update sudo apt install sqlitebrowser这是一个开源的…

电子科技大学考研,计算机与软件专业怎么选择?

电子科技大学在计算机与软件领域具备卓越实力&#xff0c;其毕业生就业前景及薪资水平均颇为可观。因此&#xff0c;学生应依据个人课程专长来选定专业。若各项课程均表现出色&#xff0c;推荐25届考生优先考虑软件专业&#xff0c;因其上岸难度相对较低。 接下来&#xff0c;C…

智能客户服务:科技赋能下的新体验

在当今这个数字化时代&#xff0c;客户服务已经不仅仅是简单的售后服务&#xff0c;它已竞争的关键要素之一。随着人工智能、大数据、云计算等技术的飞速发展&#xff0c;智能客户服务正逐步改变着传统的服务模式&#xff0c;为企业和消费者带来了前所未有的新体验。 一、智能客…

HCIA-Access V2.5_2_3_网络通信基础_以太网概述

什么是以太网 以太网是由IEEE定义的局域网技术&#xff0c;也是目前应用最普遍的技术&#xff0c;早期的令牌环网&#xff0c;FDDI等局域网技术都被它取代了&#xff0c;以太网主要分为两类&#xff0c;共享型以太网和交换型以太网。共享式以太网主要采用总线型的拓扑结构&…

Unix 传奇 | 谁写了 Linux | Unix birthmark

注&#xff1a;本文为 “左耳听风”陈皓的 unix 相关文章合辑。 皓侠已走远&#xff0c;文章有点“年头”&#xff0c;但值得一阅。 文中部分超链已沉寂。 Unix 传奇 (上篇) 2010 年 04 月 09 日 陈皓 了解过去&#xff0c;我们才能知其然&#xff0c;更知所以然。总结过去…