NCNN中的模型量化解决方案:源码阅读和原理解析

前言:去年NCNN发布了模型量化的解决方案,作为目前中国大陆被使用最多的端侧模型推理解决方案,NCNN开源的代码值得认真阅读和研究。这篇博客笔者和大家一起探索NCNN的模型量化部分,希望大家在NCNN的世界里玩得开心。

目录

量化方法分类

INT8静态离线量化

源码解析

第一步:Optimize model

第二步:创建校准数据

第三步:量化模型

量化后模型推理


量化方法分类

量化方法根据是否需要校正数据可以分成在线量化和离线量化。动态离线量化是不需要任何校准数据的,但是损失精度较多,所以使用的并不是很多。我觉得在生成类任务中,这种很难有校准数据的场景下,可以使用动态离线量化。但是实际的业务场景中,使用静态离线量化会比较多一些,在易用性和精度损失之间做了一个平衡。

相关的知识可以看看飞桨中文的手册,总结的非常清楚:量化 — PaddleSlim 文档

NCNN使用的是INT8静态离线量化,超低比特量化(INT4/INT2)在工业界尚未大规模应用,但是学术界已经有不少论文讨论这一问题,后面我会专门写一些文章讨论这些问题的,先埋个坑。

INT8静态离线量化

首先我们要准备校准数据,下载地址:GitHub - nihui/imagenet-sample-images: 1000 images, one per image-net class. For easy visualization/exploration of classes.

动工前观察一下数据,是一个算法工程师的好习惯:

一共1k张,来自imagenet-1k,也就是每个类有有一张图片,图片的大小不一。

源码解析

量化部分放在ncnn/tools/quantize/目录下:

ncnn/tools/quantize at master · Tencent/ncnn · GitHub

使用文档:ncnn/quantized-int8-inference.md at master · Tencent/ncnn · GitHub

以mobilenet 量化为例子,只需要三个步骤就可以完成静态离线量化:

第一步:Optimize model

./ncnnoptimize mobilenet.param mobilenet.bin mobilenet-opt.param mobilenet-opt.bin 0

第二步:创建校准数据

find images/ -type f > imagelist.txt
./ncnn2table mobilenet-opt.param mobilenet-opt.bin imagelist.txt mobilenet.table mean=[104,117,123] norm=[0.017,0.017,0.017] shape=[224,224,3] pixel=BGR thread=8 method=kl
./ncnn2table mobilenet-opt.param mobilenet-opt.bin imagelist-bgr.txt,imagelist-depth.txt mobilenet.table mean=[104,117,123],[128] norm=[0.017,0.017,0.017],[0.0078125] shape=[224,224,3],[224,224,1] pixel=BGR,GRAY thread=8 method=kl

第三步:量化模型

./ncnn2int8 mobilenet-opt.param mobilenet-opt.bin mobilenet-int8.param mobilenet-int8.bin mobilenet.table
./ncnn2int8 rnn-model.param rnn-model.bin rnn-model-int8.param rnn-model-int8.bin

量化后模型推理

ncnn::Net mobilenet;
mobilenet.load_param("mobilenet-int8.param");
mobilenet.load_model("mobilenet-int8.bin");

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

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

相关文章

linux中逻辑卷管理与扩展

逻辑卷管理与扩展 逻辑卷 作用: 1.整合分散的空间2.空间支持扩大 逻辑卷制作过程:将众多的物理卷(PV)组建成卷组(VG),再从卷组中划分出逻辑卷(LV) 逻辑卷的逻辑思路 …

2024年西安交通大学程序设计校赛(ABCDEFO)

题目链接:https://vjudge.net/contest/630537#overview 文章目录 A题题意思路编程 B题题意思路编程 C题题意思路编程 D题题意思路编程 E题题意思路编程 F题题意思路编程 O题题意思路编程 写在前面:今天的训练赛出的题目偏简单,与XCPC的难度差…

【Linux】Linux基本指令2

我们接着上一篇:http://t.csdnimg.cn/bSJx8 我们接着完善ls指令 我们可以直接匹配对应格式的文件匹配出来 1.man指令(重要): Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助…

降价潮背后:中国产业大模型落地的卡点到底在哪?

“技术是不会以任何商业行为或者人们的意愿所改变它的上限和下限的,它需要的时间是恒定的。 ” 作者|思杭 编辑|皮爷 出品|产业家 如果说中国大模型市场最核心的话题是什么?降价则必然是其中之一。 从目前的参赛玩家来看,不论是字节豆…

在window中使用HTTP服务器获取kali的文件

文章目录 一、在window中使用HTTP服务器获取kali的文件1、疑问2、执行条件3、成功读取 一、在window中使用HTTP服务器获取kali的文件 1、疑问 有时候kali上面有的文件想传入window但是发现不允许这样操作那怎么办呢?特别是在一些限制工具的比赛中想把kali的文件传…

主播们直播时的美颜是如何实现的?集成第三方美颜SDK方案详解

很多人问小编,主播们直播时的美颜效果是如何实现的呢?接下来,我将为您详细介绍美颜功能的实现原理。 一、美颜功能的基本原理 通过对图像进行实时处理,达到美化人脸的效果。其主要技术包括: 1.人脸检测与关键点定位 …

【Python】解决Python报错:SyntaxError: invalid character in identifier

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

vue3和vite实现vue-router4版本路由的配置以及自动生成路由配置

这个是普通的手动路由配置:https://blog.csdn.net/weixin_68658847/article/details/130071101 自动路由配置 创建项目 npm create vitelatest my-vue-app -- --template vue // 或者 yarn create vite my-vue-app --template vue// 安装路由 yarn add vue-route…

备受推崇的公司文件加密文件推荐榜单

迄今为止,加密依然是最有效的用于保护数据、通讯安全的手段之一 在数字化时代,文件加密软件成为了保护个人和企业数据安全的重要工具。随着技术的不断进步,市场上涌现出了众多优秀的文件加密软件。 以下十款文件加密软件因其出色的性能、易…

生成随机数值与二维数组的探索之旅

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、随机数生成的策略 三、实现过程与代码案例 四、注意事项与扩展讨论 一、引言…

系统架构设计师【第2章】: 计算机系统基础知识 (核心总结)

文章目录 2.1 计算机系统概述2.2 计算机硬件2.2.1 计算机硬件组成2.2.2 处理器2.2.3 存储器2.2.4 总线2.2.5 接口2.2.6 外部设备 2.3 计算机软件2.3.1 计算机软件概述2.3.2 操作系统2.3.3 数据库2.3.4 文件系统2.3.5 网络协议2.3.6 中间件2.3.7 软件构件2.3.8 …

【车载开发系列】Autosar DEM中重要配置项说明

【车载开发系列】Autosar DEM中重要配置项目 【车载开发系列】Autosar DEM中重要配置项目说明 【车载开发系列】Autosar DEM中重要配置项目1)DemDtcStatusAvailabilityMask2)DemTypeOfDTCSupported3)DemFreezeFrameCapture4)DemIm…

如何在phpMy管理对Joomla后台的登录密码进行重置

本周有一个客户,购买Hostease的虚拟主机,询问我们的在线客服,如何在phpMy管理对Joomla后台的登录密码进行重置?我们为用户提供相关教程,用户很快解决了遇到的问题。在此,我们分享这个操作教程,希…

给想玩AIGC的小白:教你从0搭一个图文视频生成网站(附插件源码)

Stable Diffusion的发布是AI图像生成发展过程中的一个里程碑,相当于给大众提供了一个可用的高性能模型,让「AI 文本图片生成」变成普通人也能玩转的技术。最近一些网友将网上的真人图片不断喂给模型,让其自主学习,训练出来的效果已…

透视AI技术:探索折射技术在去衣应用中的奥秘

引言: 随着人工智能技术的飞速发展,其在图像处理和计算机视觉领域的应用日益广泛。其中,AI去衣技术作为一种颇具争议的应用,引发了广泛的讨论和关注。本文将深入探讨折射技术在AI去衣中的应用及其背后的原理。 一、AI去衣技术简介…

小红书引流获客软件,轻松成为爆款达人

在这个信息爆炸的时代,小红书凭借其独特的内容分享社区模式,迅速成为了品牌和个体创业者不可忽视的营销宝地。作为一个集生活方式分享、购物心得、美妆教程、旅行攻略等于一身的平台,小红书聚集了大量追求品质生活的年轻用户群体。对于想要在…

【传知代码】知识图谱推理-论文复现

文章目录 概述方法介绍核心逻辑实验条件数据集实验步骤实验结果 核心代码小结 本文涉及的源码可从知识图谱推理该文章下方附件获取 概述 本研究深入探讨了基于图神经网络(GNN)的知识图谱推理,特别聚焦于传播路径的优化与应用。在智能问答、推…

【条形码code39】基础知识

条形码-39码(code39) 符号集。(共43个字符)包括 数字0 ~ 9,大写字母A~Z,空格,-,。,$,/,,% Extended Code39,支持全部ASCII字符。 完整的code39条形码:起始字符( * ) 数据数值 (可选的&#…

XXL-JOB分布式任务调度框架详解(全网最详细!!!)

​​​​​​​ 引言 第一部分:XXL-JOB概述 第二部分:架构与组件 第三部分:使用教程 第四部分:源码分析 第五部分:最佳实践 引言 在分布式系统中,任务调度是一项基础而又关键的服务,它涉…

失落的方舟 命运方舟台服怎么下载游戏客户端 游戏账号怎么注册

《失落的方舟》(Lost Ark)是韩国Smilegate公司精心打造的一款大型多人在线角色扮演游戏(MMORPG),以其精美的画面、沉浸式的剧情、类似动作游戏的战斗体验和广阔的开放世界设定,自面世以来便深受全球玩家喜爱…