当前位置: 首页 > news >正文

模型转换和边缘计算中至关重要的概念:​​归一化​​ 和​​量化策略​​

1. 归一化

归一化是一种将数据缩放到一个统一标准范围的数据预处理技术。在深度学习中,这通常是模型训练和推理流程中​​必不可少​​的一步。

​为什么要做归一化?​
  1. ​加速模型收敛​​:神经网络通常对输入数据的尺度非常敏感。如果特征尺度差异巨大(例如,一个特征值范围是0-1,另一个是1-1000),梯度下降会难以高效地找到最优解,导致收敛缓慢。归一化将所有特征尺度统一,使优化过程更平滑、更快速。

  2. ​提升模型稳定性与精度​​:一致的输入分布有助于模型学习更稳定、更通用的特征,防止某些大尺度的特征主导整个训练过程,从而可能提高最终模型的精度。

  3. ​符合模型预期​​:模型在训练时“见过”的是归一化后的数据。因此,在推理时,也必须提供相同分布的数据,否则模型的输出将是不可靠的。

​在模型转换中的关键点​

在ONNX转RKNN的上下文中,归一化参数的正确设置是​​导致模型精度成功或失败最常见的原因​​。

  • ​常见归一化方法​​:

    • ​归一化到 [0, 1]​​: 像素值 / 255.0

    • ​归一化到 [-1, 1]​​: (像素值 - 127.5) / 127.5

  • ​配置一致性原则​​:

    当你在RKNN转换工具的 rknn.config中设置 mean_values(均值)和 std_values(标准差)时,你实际上是在告诉转换器:“请在我的模型​​最前面​​自动加入一个归一化层”。这个操作的数学表达是:

    output = (input - mean_values) / std_values

    ​因此,这个配置必须与你模型训练时以及后续推理代码中的预处理方式完全一致。​

    ​示例对比:​

训练/推理时的预处理

对应的 RKNN config配置

解释

img = img / 255.0

mean_values=[[0, 0, 0]]std_values=[[255, 255, 255]]

(img - 0) / 255 = img / 255

img = (img - 127.5) / 127.5

mean_values=[[127.5, 127.5, 127.5]]std_values=[[127.5, 127.5, 127.5]]

(img - 127.5) / 127.5

​如果配置错误​​(例如,训练时用了第二种方法,但RKNN配置却按第一种设置),模型接收到的输入数据分布就是完全错误的,必然导致推理结果异常。


2. 量化策略

量化是一种模型压缩和加速技术,其核心思想是​​使用更低精度的数据类型(如INT8)来表示和计算原始高精度数据(如FP32)​​。

​为什么要做量化?​
  1. ​大幅减少模型体积​​:INT8数据类型仅需8位(1字节)存储,而FP32需要32位(4字节)。因此,理论上的模型体积可减少至约1/4。

  2. ​显著提升推理速度​​:整数运算在硬件(尤其是NPU、DSP等专用芯片)上通常比浮点数运算快得多。

  3. ​降低功耗和内存占用​​:更小的模型和更高效的计算直接带来了更低的内存带宽需求和能耗。

​量化是如何工作的?​

量化的关键是要找到一个映射关系,将FP32的数值范围映射到INT8(-128 到 127)的数值范围。这个过程需要一个​​尺度因子​​ 和​​零点​​。

  • ​尺度因子​​: 表示一个INT8数值对应多少个FP32数值单位。

  • ​校准​​: 为了确定最佳的尺度因子,我们需要一个​​校准数据集​​——一组能够代表真实数据分布的样本(例如,从训练集中抽取的一些图片)。量化工具会分析模型中每个层在处理这些数据时的激活值(activation)分布,从而计算出合适的尺度因子。

​什么是量化策略?​

量化策略指的是在确定尺度因子时,所采用的​​具体算法或准则​​。由于FP32到INT8的映射是一种有损压缩,不同的策略会在​​精度​​和​​压缩率/速度​​之间做出不同的权衡。RKNN Toolkit等工具通常会提供几种策略供选择:

  • ​非饱和策略(如 normalmin_max)​

    • ​原理​​:找到张量中的绝对最大值(|max|)和绝对值最大值(|min|),取两者中较大的一个,然后根据这个最大值来定尺度因子。这样能保证所有数据都被映射到INT8范围内,不产生溢出。

    • ​优点​​:简单,快速。

    • ​缺点​​:如果数据分布中存在个别极端大的离群值,那么尺度因子会很大,导致大多数正常数据的表示精度降低(因为INT8的数值被“浪费”在表示一个很大的范围上)。

  • ​饱和策略(如 kl_divergencemmse)​

    • ​原理​​:尝试“剪掉”或削弱离群值的影响,选择一个更小的阈值作为饱和点,使得大多数数据的表示更精确。例如,KL散度策略会通过计算FP32和量化后分布的差异,来寻找一个能最小化信息损失的阈值。

    • ​优点​​:通常能获得更高的精度,因为它更关注数据分布的主要部分。

    • ​缺点​​:计算更复杂,耗时更长。可能会有少量极端值被截断到-128或127。

​如何选择量化策略?​
  1. ​默认策略​​:通常先从工具的默认策略(如 normal)开始尝试。

  2. ​精度优先​​:如果默认策略量化后精度损失较大,应优先尝试更高级的饱和策略(如 kl_divergence或 mmse)。

  3. ​校准数据集的质量​​:无论哪种策略,一个​​有代表性、无偏的校准数据集​​都是获得良好量化效果的基础。如果校准数据不能反映真实场景,任何策略都难以得到好结果。

总结

概念

​归一化​

​量化策略​

​核心目标​

​数据预处理​​,使输入数据符合模型训练时的分布,保证模型正确工作。

​模型压缩与加速​​,通过降低数据精度来极致优化性能。

​关键操作​

对输入数据进行线性缩放。

为模型权重和激活值确定从FP32到INT8的最佳映射参数。

​在RKNN转换中的作用​

​保证模型精度的基础​​。配置错误直接导致模型失效。

​在精度和性能之间取得平衡​​。策略选择影响最终部署效果。

​相互关系​

两者都是模型转换流程中的关键配置。​​先有正确的归一化输入,才有意义去讨论量化的好坏。​

简单来说,你可以将这个过程理解为:

​归一化​​是确保给模型的“食物”是它习惯吃的口味。

​量化策略​​是决定如何把这份“食物”更高效地打包和喂给专用的“消化系统”(NPU),既要保证“营养”(精度)不流失太多,又要提升“吃饭速度”(推理速度)。

http://www.dtcms.com/a/525624.html

相关文章:

  • 怎么把自己做的网站发布出去设计中国第一架飞机
  • 2025年江西省职业院校技能大赛“大数据应用开发“竞赛样题第二套
  • 做美团旅游网站多少钱移动互联网服务管理中心官网
  • 织梦网站密码网站怎么自己做优化
  • 怎么给新网站做推广企业网站设计与实现论文
  • 网站建设项目环境影响评价目录网络推广方案最新
  • 提供邯郸wap网站建设前端开发工程师怎么考
  • 自己基于golang写的MongoRest单文件的 RESTful API 网关,直接通过mongodb发布rest,crub聚合简单的很-于大爷工具集
  • 【机器学习】贝叶斯算法原理与应用
  • 企业网站规划与开发金戈枸橼酸西地那非片
  • 物联网开发生态及学习路线
  • 优质校建设网站建设部网站业绩如何录入
  • 佛山市住房和建设局网站陕西省高速建设集团公司网站
  • 广州白云做网站的公司如何免费开自己的网站
  • 陇南建设网站在网站开发中哪里需要js文件
  • 深圳 网站公司网站建设培训心得
  • 开发电商网站多少钱广州响应式网站
  • Java 多线程编程
  • Nginx代理服务应用实战:HTTP代理模块、正向代理、反向代理与TCP/UDP代理详解
  • 代做视频的网站唐山网站建设制作
  • 全面掌握PostgreSQL关系型数据库,逻辑备份删除,笔记49
  • 企业网站 响应式 案例红安县建设局网站
  • 物联网数据中台智慧医院企业厂家——全视通
  • 网站的交互设计泰安集团网站建设流程
  • 电子电气架构 --- 智驾芯片及域控制器一文入门篇
  • win7网站服务器制作软件广东省建设行业统一身份认证平台
  • Python 第二十三节 常用练习问题(二)
  • 基于STM32的多圈绝对值编码器的调试
  • asp.net 登陆两个网站快应用 小程序
  • 虚幻引擎5 GAS开发俯视角RPG游戏 P06-19 打开属性菜单