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

2024-03-20 18:44

本文主要是介绍模型部署——RKNN模型量化精度分析及混合量化提高精度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


                        模型部署——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 npif __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 npif __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 RKNNif __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()

这篇关于模型部署——RKNN模型量化精度分析及混合量化提高精度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/830398

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep