模型部署——RKNN模型量化精度分析及混合量化提高精度

news2024/11/25 7:14:27


                        模型部署——RKNN模型量化精度分析及混合量化提高精度(附代码)-CSDN博客

3.1 量化精度分析流程
计算不同情况下,同一层网络输入值的余弦距离,来近似的查看每一层精度损失的情况。具体量化精度分析的流程如下:

3.2 量化精度分析accuracy_analysis接口
量化精度分析调用accuracy_analysis接口,推理并产生快照,也就是dump出每一层的tensor数据。会dump出包括fp32和quant两种数据类型的快照,用于计算量化误差。

注:

该接口只能在 build或 hybrid_quantization_step2之后调用,并且原始模型应该为非量化的模型,否则会调用失败。

该接口使用的量化方式与config_中指定的一致。

3.3.1 参数修改

量化精度分析代码对应于源码包中accuracy_analysis.py脚本,需要修改的地方如下:

from rknn.api import RKNN
import cv2
import numpy as np

if __name__=='__main__':
    rknn = RKNN(verbose=True)             # 打印详细日志

    # 调用config接口设置模型的预处理、量化方法等参数
    rknn.config(
        mean_values = [[123.675,116.28,103.53]],           # mean_values表示预处理要减去的均值化参数
        std_values = [[58.395,58.395,58.395]],             # std_values 表示预处理要除的标准化参数
        target_platform = "rk3588"                         # target_platform表示生成的RKNN模型要运行在哪个RKNPU平台上。通常有rk3588,rk3566,rv1126等
    )

    # 添加load_xxx接口,进行常用深度学习模型的导入           将深度学习模型导入
    rknn.load_pytorch(
        model = "./resnet18.pt",
        input_size_list = [[1, 3,224,224]]
    )

    # 使用build接口来构建RKNN模型
    rknn.build(
        do_quantization = True,
        dataset = "dataset.txt",
        rknn_batch_size = -1
    )

    # 调用export_rknn接口导出RKNN模型
    rknn.export_rknn(export_path="resnet18.rknn")

    # 使用accuracy_analysis 接口进行模型量化精度分析
    rknn.accuracy_analysis(
        inputs = ["space_shuttle_224.jpg"],               # inputs 表示进行推理的图像
        output_dir = 'snapshot',                          # 表示精度分析的输出目录
        target = None,                                    # 表示目标硬件平台
        device_id = None,                                 # 表示设备的编号

    )

    rknn.release()

4.2.2.2 代码

具体代码对应于源码包中hrhrid_quantization文件夹中的setp1.py脚本,具体代码如下:

from rknn.api import RKNN
import cv2
import numpy as np

if __name__=='__main__':
    rknn = RKNN(verbose=True)             # 打印详细日志

    # 调用config接口设置模型的预处理、量化方法等参数
    rknn.config(
        mean_values = [[123.675,116.28,103.53]],           # mean_values表示预处理要减去的均值化参数
        std_values = [[58.395,58.395,58.395]],             # std_values 表示预处理要除的标准化参数
        target_platform = "rk3588"                         # target_platform表示生成的RKNN模型要运行在哪个RKNPU平台上。通常有rk3588,rk3566,rv1126等
    )

    # 添加load_xxx接口,进行常用深度学习模型的导入           将深度学习模型导入
    rknn.load_pytorch(
        model = "./resnet18.pt",
        input_size_list = [[1, 3,224,224]]
    )

    # 使用hybrid_quantization_step 接口进行混合量化第一步
    rknn.hybrid_quantization_step1(
        dataset="dataset.txt",  # 表示模型量化所需要的数据集
        rknn_batch_size=-1,  # 表示自动调整模型输入batch数量
        proposal=False,  # 设置为True,可以自动产生混合量化的配置建议,比较耗时
        # proposal= True,  # 设置为True,可以自动产生混合量化的配置建议,比较耗时
        proposal_dataset_size=1,  # 第三步骤所用的图片
    )

    rknn.release()

4.2.2.5 添加量化层

从上面可以看出25层,33层,43层,51层等损失较大,这里举例选取其中input.25层,将该层从量化层转为非量化层,在resnet18.quantization.cfg文件夹添加,如下:

4.3.3 代码
代码对应源码包中的step2.py,具体代码如下:

from rknn.api import RKNN

if __name__=="__main__":
    rknn = RKNN(verbose=True)

    # 调用hyborid_quantization_step2接口进行混合量化的第二个步骤
    rknn.hybrid_quantization_step2(
        model_input = "resnet18.model",          # 表示第一步生成的模型文件
        data_input= "resnet18.data",             # 表示第一步生成的配置文件
        model_quantization_cfg="resnet18.quantization.cfg"  # 表示第一步生成的量化配置文件
    )

    # 调用量化精度分析接口(评估RKNN模型)
    rknn.accuracy_analysis(
        inputs=["space_shuttle_224.jpg"],
        output_dir="./snapshot",
        target = None
    )

    # 调用RKNN模型导出RKNN模型
    rknn.export_rknn(export_path="./resnet18.rknn")

    rknn.release()

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

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

相关文章

【好用】Star超36.8k,一个的免费通用数据库管理工具

关于数据库管理工具,大家可能都在用SQLyog、Navicat、MySQL-Front、SQL Studio、MySQL Workbench等等,这些管理工具不是不好用,就是要变魔术才可以用,今天 V 哥给大家推荐一个即好用,又免费的可视化通用数据库管理工具…

对JS文件进行压缩未通过,对WXML文件进行压缩未通过 问题解决

问题描述 在使用uniapp 开发微信小程序,进行上架发布时 代码质量栏 出现对JS文件进行压缩未通过,对WXML文件进行压缩未通过 问题。 虽然现实代码上传成功,但是作为一个合格的猿人,肯定是要解决的。那么如何解决呢? …

java-ssm-jsp基于javaweb的宠物猫狗商业系统

java-ssm-jsp基于javaweb的宠物猫狗商业系统 获取源码——》公主号:计算机专业毕设大全 获取源码——》公主号:计算机专业毕设大全

PMP备考心得 | 策略与技巧大揭秘

1.理解考试大纲:首先,你需要熟悉PMP考试的内容和结构。PMI官网提供了详细的考试大纲,包括项目管理的五个过程组(启动、规划、执行、监控、收尾)和十个知识领域; 2.制定学习计划:根据个人的时间…

【Leetcode-73.矩阵置零】

题目: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2&…

白嫖阿里云程序员日历

https://developer.aliyun.com/topic/lingma/activities/202403?taskCode14508&recordId44f3187f7950776f494eec668a62c65f#/?utm_contentm_fission_1 「通义灵码 体验 AI 编码,开 AI 盲盒」 打开链接直接领就行了

基于springboot的社区服务系统的设计与实现

一、系统架构 前端:vuex3 | element-ui 后端:springboot | mybatis-plus 环境:jdk1.8 | mysql | maven | node 二、代码及数据库 三、功能介绍 01. 管理后台-登录 02. 管理后台-首页 03. 管理后台-用户管理 04. 管理后台-业主缴费管理…

编程语言那么多,为什么偏偏是C语言成了大学的必修课?

编程语言那么多,为什么偏偏是C语言成了大学的必修课? 必修JAVA? c#不服 必修Python? JAVA不服 甚至你必修到一半,Python落伍了都有可能。 当年我们还以必修JAVA,JSP为主要论点,然而刚过两年,JSP就成古…

遗传算法 - 函数最优解计算

遗传算法 遗传算法概念 遗传算法的概念是在 1975 年由密切根大学的 J.Holland 提出的,这是一种通过模拟自然进化过程寻找最优解的方法。它遵循达尔文的物竞天择,适者生存的进化准则。基本思想: 初始一个种群,选择种群中适应度高…

Transformer位置编码(Position Embedding)理解

本文主要介绍4种位置编码,分别是NLP发源的transformer、ViT、Sw-Transformer、MAE的Position Embedding 一、NLP transformer 使用的是1d的绝对位置编码,使用sincos将每个token编码为一个向量【硬编码】 Attention Is All You Need 在语言中&#xff0…

Java基础---反射

什么是反射? 反射允许对成员变量,成员方法和构造方法的信息进行编程访问。 这么说可能比较抽象,可以简单理解为:反射就是一个人,可以把类里面的成员变量,成员方法,构造方法都获取出来。 并且可…

用友NC Cloud runScript SQL注入漏洞复现

0x01 产品简介 用友 NC Cloud 是一种商业级的企业资源规划云平台,为企业提供全面的管理解决方案,包括财务管理、采购管理、销售管理、人力资源管理等功能,基于云原生架构,深度应用新一代数字技术,打造开放、 互联、融合、智能的一体化云平台,支持公有云、混合云、专属云…

jmeter打开文件报异常无法打开

1、问题现象: 报错部分内容: java.desktop does not export sun.awt.shell to unnamed module 0x78047b92 [in thread "AWT-EventQueue-0"] 报错部分内容: kg.apc.jmeter.reporters.LoadosophiaUploaderGui java.lang.reflect.Invo…

华为ENSP的VLAN原理和配置命令

CSDN 成就一亿技术人! 作者主页:点击! ENSP专栏:点击! CSDN 成就一亿技术人! ————前言———— VLAN(Virtual Local Area Network,虚拟局域网)是一种在物理网络基…

Transformer的前世今生 day05(Self-Attention、

Self-Attention 前情提要 注意力机制:我们在看一幅图的时候,不会去看它的所有信息,相反我们倾向于看一些重点,并把我们的焦点放到这些重要信息上,过程如下: 首先:Q、K相乘求相似度&#xff0c…

dB、dBm、dBw是什么

1、dB,3dB 3 dB,表示功率增加为2倍;10 dB,表示功率增加为10倍。 -3 dB,表示功率减小为1/2;-10 dB,表示功率减小为1/10。 dB的使命就是把很大的数,用很小的数简短地表示出来&#x…

【二分查找】算法例题

目录 十八、二分查找 114. 搜索插入位置 ① √- 115. 搜索二维矩阵 ② 116. 寻找峰值 ② √- 117. 搜索旋转排序数组 ② 118. 在排序数组中查找元素的第一个和最后一个位置 ② √ 119. 寻找寻钻排序数组中的最小值 ② 120. 寻找两个正序数组的中位数 ③ 136. 直线上最多…

【Linux】Linux安装软件---软件包管理器 yum

主页:醋溜马桶圈-CSDN博客 专栏:Linux_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1.Linux中安装软件 1.1 源代码安装 1.2 rpm包安装 1.3 yum安装 1.3.1 举例 1.3.2 图示yum下载安装 2.Linux系统的生态 如何选…

西瓜书机器学习AUC与ℓ-rank(loss)的联系理解以及证明(通俗易懂)

前言 在学习到这部分时,对 ℓ-rank 以及AUC的关系难以理解透彻,在网上看到其他博主也并未弄明白,大家大多写自己的理解,我希望您在看完这篇文章时能够深刻理解这二者的关系,如果我的理解有误,希望您在评论…

为什么共享单车泊车点可以识别得如此精准?

共享单车解决了民众最后一公里的出行问题,方便快捷,低碳环保,缓解了交通拥堵。然而,乱停乱放成为这一新兴事物发展过程中需要解决的迫在眉睫的问题。这真是个伤脑筋的问题,虽然很多城市已经推出共享单车电子围栏,由于G…