基于RKNN的嵌入式深度学习开发(2)

        上一个章节我们介绍的RKNN模型的模型转换和模型的推理,这一章节我们将介绍模型的量化和评估部分。

2.3 RKNN模型的量化

        量化就是将浮点转换为定点运算的过程,或者训练后由rknn来量化。量化模型使用较低精度(如int8/uint8/int16)保存模型的权重信息,在部署时可以使用更少的存储空间,获得更快的推理速度。但各深度学习框架训练、保存模型时,通常使用浮点数据,所以模型量化是模型转换过程中非常重要的一环。RKNN Toolkit目前对量化模型的支持主要有以下两种形式

  • RKNN Toolkit根据用户提供的量化数据集,对加载的浮点模型进行量化,生成量化的RKNN 模型。
    • 支持的量化精度类型:int16,int8,uint8
    • 量化方式:训练后静态量化
    • 支持的量化粒度:per-tensor(或 per-layer),不支持 per-channel 量化
  • 由深度学习框架导出量化模型,RKNN Toolkit加载并利用已有的量化信息,生成量化 RKNN 模型。
    • 支持的深度学习框架:PyToch(v1.9.0)、ONNX(Onnxruntime v1.5.1)、Tensorflow、TFLite
    • 支持的量化精度类型:int8, uint8
    • 量化方式:训练后静态量化, 量化感知训练(QAT)

以下代码为量化的示例代码:

# 导入RKNN库  
from rknn.api import RKNN  # 创建RKNN对象  
rknn = RKNN()  # 加载已训练的模型,例如TensorFlow或PyTorch模型  
# 这里以TensorFlow Frozen Graph为例  
model_path = 'your_model.pb'  
rknn.load_tensorflow(model=model_path, inputs=['input_tensor'], outputs=['output_tensor'])  # 配置量化  
rknn.config(quantized_enable=True, quantized_dtype='int8')  # 编译模型  
print("编译模型...")  
rknn.compile()  # 进行量化  
print("量化模型...")  
rknn.quantize()  # 导出量化后的模型  
output_model_path = 'quantized_model.rknn'  
rknn.export(output_model_path)  print("量化完成,模型已保存到:", output_model_path)  # 释放RKNN对象  
rknn.release()

2.4 RKNN模型的评估

        通过模型转换得到 RKNN 模型后,可以使用RKNN Toolkit在Rockchip NPU开发板上对模型的准确性、性能、内存使用情况进行评估。评估的流程如下所示:

模型评估主要分三部分进行:准确性评估、性能评估和内存评估。

  1. 准确性评估:评估 RKNN 模型推理结果的准确性。
  2. 性能评估:评估 RKNN 模型在指定开发板上推理时的耗时。 
  3. 内存评估:评估 RKNN 模型推理时在 Rockchip NPU 上的内存使用情况。

2.5 RKNN模型的加密

        为了避免模型的结构、权重等信息泄漏,RKNN Toolkit提供模型加密功能。 RKNN Toolkit 提供 3 个加密等级,等级越高,安全性越高,解密越耗时;反之,安全性越低,解密越快。

 

加密模型的部署流程和普通一样,不需要解密等额外操作。

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

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

相关文章

单一职责原则(设计模式)

目录 问题: 定义: 解决: 方式 1:使用策略模式 示例:用户管理 方式 2:使用装饰者模式 示例:用户操作 方式 3:使用责任链模式 示例:用户操作链 总结 推荐 问题&a…

Java 8 到 Java 17 主要新特性

Java 8 到 Java 17 是 Java 语言的多个重要版本,其中每个版本都引入了新的特性和改进。下面是 Java 8 到 Java 17 中主要的新特性概览。 Java 8 新特性 1. Lambda 表达式 Lambda 表达式是 Java 8 的一个重要特性,它使得 Java 支持函数式编程&#xff…

Qt 中signals和slots、Q_SIGNAL和Q_LOT、Q_SIGNALS和Q_SLOTS的区别和使用

Qt 中signals和slots、Q_SIGNAL和Q_SLOT、Q_SIGNALS和Q_SLOTS的区别和使用 1.signals和slots 信号和槽函数需要在类的声明中明确声明。信号需要使用signals关键字,而槽函数可以使用slots关键字(虽然在现代Qt中,槽函数也可以直接作为普通成员…

【极客时间】浏览器工作原理与实践-2 宏观视角下的浏览器- 2.1 Chrome架构:仅仅打开了1个页面,为什么有4个进程?

https://time.geekbang.org/column/article/113513 2.1 Chrome架构:仅仅打开了1个页面,为什么有4个进程? 前置:基于Chrome浏览器学习浏览器的工作原理 原因: 因为 Chrome、微软的 Edge 以及国内的大部分主流浏览器…

智能图像处理平台:图像处理配置类

这里我们先修改一下依赖&#xff0c;不用JavaCV&#xff0c;用openCV。 导入依赖&#xff1a; <!-- JavaCV 依赖&#xff0c;用于图像和视频处理 --> <!-- <dependency>--> <!-- <groupId>org.bytedeco</groupId>--> &l…

【Python 初级函数详解】—— 参数沙漠与作用域丛林的求生指南

欢迎来到ZyyOvO的博客✨&#xff0c;一个关于探索技术的角落&#xff0c;记录学习的点滴&#x1f4d6;&#xff0c;分享实用的技巧&#x1f6e0;️&#xff0c;偶尔还有一些奇思妙想&#x1f4a1; 本文由ZyyOvO原创✍️&#xff0c;感谢支持❤️&#xff01;请尊重原创&#x1…

夜天之书 #106 Apache 软件基金会如何投票选举?

近期若干开源组织进行换届选举。在此期间&#xff0c;拥有投票权的成员往往会热烈讨论&#xff0c;提名新成员候选人和治理团队的候选人。虽然讨论是容易进行的&#xff0c;但是实际的投票流程和运作方式&#xff0c;在一个成员众多的组织中&#xff0c;可能会有不少成员并不清…

【蓝桥】大小写转换

1、islower()和isupper() 1.1 islower()函数 定义&#xff1a;用于判断一个字符是否为小写字母&#xff08;即 ‘a’ 到 ‘z’&#xff09; 1.2 isupper()函数 定义&#xff1a;用于判断一个字符是否为大写字母&#xff08;即 ‘A’ 到 ‘Z’&#xff09; 1.3 基础用法 #incl…

DeepSeek开源周 Day04:从DualPipe聊聊大模型分布式训练的并行策略

DualPipe简介 今天是DeepSeek开源周的第四天&#xff0c;官方开源了一种新型并行计算优化策略——DualPipe。 其实大家阅读过Deepseek-V3技术报告的同学&#xff0c;对这个技术并不陌生。 开源地址&#xff1a;https://github.com/deepseek-ai/DualPipe 核心亮点 DualPipe&…

2025.3.1面试总结

昨天面试了一家做路由器的公司&#xff0c;问的问题还是挺多的&#xff0c;比较全面&#xff0c;也有一定的深度&#xff0c;比较注重底层原理的实现。 下面是具体问题&#xff1a; 岗位&#xff1a;嵌入式软件工程师 自我介绍&#xff1b;&#xfeff;项目介绍&#xff0c;…

React:B站评论demo,实现列表渲染、删除按钮显示和功能实现、导航栏渲染切换及高亮显示、评论区的排序

功能要求&#xff1a; 1、渲染评论列表 2、删除评论功能&#xff1a;只显示自己评论的删除按钮&#xff1b;点击删除按钮&#xff0c;删除当前评论&#xff0c;列表中不再显示。 3、渲染导航Tab&#xff08;最新 | 最热&#xff09;和其 高亮实现 4、评论排序功能实现&…

智能座舱介绍

目录 智能座舱智能座舱的核心技术组成车载信息娱乐系统(IVI)数字仪表盘与HUD(抬头显示)语音交互与AI助手多屏联动与场景化交互生物识别技术智能座舱的发展趋势沉浸式体验情感化与个性化多模态交互融合车联网(V2X)生态扩展应用场景挑战与未来硬件系统软件系统关键技术智能…

linux-docker及docker-compose相关命令

文章目录 计算机系统5G云计算LINUX Docker及docker-conpose相关命令一、Docker 常用命令1、镜像管理1.拉取镜像2.列出本地镜像3.删除镜像4.构建镜像&#xff08;从 Dockerfile&#xff09;5.推送镜像到仓库6.从 .tar 文件加载镜像7.将镜像保存为 .tar 文件8.搜索镜像9.查看镜像…

一文了解:部署 Deepseek 各版本的硬件要求

很多朋友在咨询关于 DeepSeek 模型部署所需硬件资源的需求&#xff0c;最近自己实践了一部分&#xff0c;部分信息是通过各渠道收集整理&#xff0c;so 仅供参考。 言归正转&#xff0c;大家都知道&#xff0c;DeepSeek 模型的性能在很大程度上取决于它运行的硬件。我们先看一下…

0301 leetcode - 1502.判断是否能形成等差数列、 682.棒球比赛、657.机器人能否返回原点

1502.判断是否能形成等差数列 题目 给你一个数字数组 arr 。 如果一个数列中&#xff0c;任意相邻两项的差总等于同一个常数&#xff0c;那么这个数列就称为 等差数列 。 如果可以重新排列数组形成等差数列&#xff0c;请返回 true &#xff1b;否则&#xff0c;返回 false…

C#贪心算法

贪心算法&#xff1a;生活与代码中的 “最优选择大师” 在生活里&#xff0c;我们常常面临各种选择&#xff0c;都希望能做出最有利的决策。比如在超市大促销时&#xff0c;面对琳琅满目的商品&#xff0c;你总想用有限的预算买到价值最高的东西。贪心算法&#xff0c;就像是一…

【JAVA SE基础】抽象类和接口

目录 一、前言 二、抽象类 2.1 抽象类的概念 2.2 抽象类语法 2.3 抽象类特性 2.4 抽象类的作用 三、接口 3.1 什么是接口 3.2 语法规则 3.3 接口使用 3.4 接口特性 3.5 实现多接口 3.6 接口间的继承 四、Object类 4.1 获取对象信息&#xff08; toString() &…

查找Excel包含关键字的行(の几种简单快速方法)

需求&#xff1a;数据在后缀为xlsx的Excel的sheet1中且量比较大&#xff0c;比如几十万行几百列&#xff1b;想查找一个关键字所在的行,比如"全网首发"&#xff1b; 情况①知道关键字在哪一列 情况②不确定在哪一列&#xff0c;很多列相似又不同&#xff0c;本文演…

网络运维学习笔记(DeepSeek优化版)009网工初级(HCIA-Datacom与CCNA-EI)路由理论基础与静态路由

文章目录 路由理论基础核心概念路由表六要素路由选路原则加表规则选路优先级 协议与参数常见协议号路由协议优先级对比 网络架构基础AS&#xff08;autonomous system&#xff0c;自治系统&#xff09;路由分类 静态路由(static routing)实验拓扑思科配置示例华为配置示例 典型…

为什么深度学习选择Tensor而非NumPy数组?核心优势深度解析

简短总结&#xff1a; 支持 GPU 加速&#xff1a;Tensor 提供对 GPU 的原生支持&#xff0c;能够有效加速计算&#xff0c;而 NumPy 则通常只能在 CPU 上运行。支持自动求导&#xff1a;深度学习模型的训练依赖于参数的优化&#xff0c;而 Tensor 提供了自动求导功能&#xff…