本篇主要介绍如何判定自己训练模型的量化损失以及如何选择最优的模型去量化

如有错误和不当之处,望指教!

根据我自己工作遇到的海思量化精度问题,以及如何改善和提升精度,整理记录而成。

模型转换量化的一般流程:

1:训练模型(fp32)

2:模型选优,依据acc或者loss

2:量化模型(int8/fp16)

3:单图比较输出相似度

4:多图评测ROC,验证精度+选择合适阈值(约等指数)

一般在第3或者第4步才发现量化后,精度损失严重,甚至不能使用。

举个亲身例子:

我在训练活体模型,一般会选择指标最优的模型,然后转换:pytorch->onnx->caffe->wk

自信满满,可一部署,瞬间打脸。明明选择最优模型,为啥量化后效果就崩了呢?

最优模型选择

难道我依据acc或者loss选择的模型并不是最优的???

是的,因为我忽略了部署平台的推理精度fp16这个非常重要的考量因素如果一个模型中的权重分布大部分都处在溢出边缘的话,那么模型转换完精度的模型指标可能会大大下降。

为了更加对比的说明,我选择了两个模型:fp32推理都很棒棒,但量化fp16差异很大。为了方便观察,我们选择onnx模型进行比对。

没有量化损失模型 A                                                           量化损失较大模型B

    

只要不溢出精度上限和下限,就没啥问题。对于FP32来说,1e-10是小case。所以两个模型fp32推理都没有问题。我们知道FP16的普遍精度是~5.96e−8 (6.10e−5) … 65504,可以很明显的看到,右侧模型众多数值,已经溢出了fp16的精度下限。所以大概率量化后精度会下降。

这里有关于精度的介绍:https://moocaholic.medium.com/fp64-fp32-fp16-bfloat16-tf32-and-other-members-of-the-zoo-a1ca7897d407

netron方便查看某一层的权重信息,如果想统计整个模型的权重信息该怎么作呢?上代码

    onnx_model = onnx.load(onnx_file)onnx_graph = onnx_model.graphnode_weight = []node_num = len(onnx_graph.node)for idx in range(node_num):item_node = onnx_graph.node[idx]item_name = item_node.nameitem_type = item_node.op_typeitem_input = item_node.inputif item_type == "Conv":# print(item_name, item_type, item_input)node_weight.append(item_input[1])num_small = 0num_total = 0for item in onnx_graph.initializer:if item.name in node_weight:# print(item.name)value_w = np.abs(numpy_helper.to_array(item).flatten())value_count = np.where(value_w<=1e-5, 1, 0)num_small += np.sum(value_count)num_total += value_count.shape[0]print("name: ", item.name, "  ratio: ", np.sum(value_count)/value_count.shape[0])print(num_small, num_total, num_small/num_total)

需要注意的点:pytorch转onnx时,需要注意BN是否融合到Conv层中。就是确定你对比的是conv还是conv+bn。

我们来看看这两个模型的整体信息统计:

                       没有量化损失模型 A                                                           量化损失较大模型B

很显然,模型A权重数值范围是没有问题的,模型B权重数值在网络深层时很多超过精度范围。特别是在最后,层中有超过1/3的权值精度范围不理想。CNN推理的时候,毕竟是累乘效应,微小的损失可能会积累放大,造成量化精度大幅下降。

说了半天,到底如何选择最优模型呢?

需要综合考量:acc + 权值范围

在训练精度可接受的多个模型中,选择权值范围最符合推理平台的那个模型就可以了。

20210902:Hisi量化篇2-模型择优相关推荐

  1. 20210906:Hisi量化篇4-模型剪枝

    本篇主要介绍网络剪枝可以极大改善量化损失 如有错误和不当之处,望指教! 根据我自己工作遇到的海思量化精度问题,以及如何改善和提升精度,整理记录而成. 网络剪枝的好处是啥? 1:在保持精度的条件下,可以 ...

  2. 【Python机器学习及实践】进阶篇:模型实用技巧(特征提升)

    Python机器学习及实践--进阶篇:模型实用技巧(特征提升) 所谓特征抽取,就是逐条将原始数据转化为特征向量的形式,这个过程同时涉及对数据特征的量化表示:而特征筛选则进一步,在高维度.已量化的特征向 ...

  3. CUDA上的量化深度学习模型的自动化优化

    CUDA上的量化深度学习模型的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参 ...

  4. ML之LightGBM:基于titanic数据集利用LightGBM和shap算法实现数据特征的可解释性(量化特征对模型贡献度得分)

    ML之LightGBM:基于titanic数据集利用LightGBM和shap算法实现数据特征的可解释性(量化特征对模型贡献度得分) 目录 基于titanic数据集利用LightGBM和shap算法实 ...

  5. CCNA-第四篇-OSI模型-下

    CCNA-第四篇-OSI模型-下 这里先来说一下上一期的问题 来一个小问题 当你访问百度的时候,你的最初的目的MAC是谁? 1.二层交换机(接入) 2.出口设备GW(路由器) 3.运营商 TAG:这是 ...

  6. CCNA-第三篇-OSI模型-上

    CCNA-第三篇-OSI模型-上 OSI七层模型-上 第七层 应用层 第六层 表示层 第五层 会话层 第四层 传输层=定义数据发送方式 TCP UDP 第三层 网络层=ICMP协议,网络设备 第二层 ...

  7. 语音论文:用于端到端语音识别的简化完全量化的Transformer模型

    论文题目 A SIMPLIFIED FULLY QUANTIZED TRANSFORMER FOR END-TO-END SPEECH RECOGNITION 摘要 讲了近些年来,端到端语音识别性能方 ...

  8. 推荐系统深度学习篇-NFM 模型介绍(1)

    一.推荐系统深度学习篇-NFM 模型介绍(1) NFM是2017年由新加披国立大学提出的一种模型,其主要优化点在于提出了Bi-Interaction,Bi-Interaction考虑到了二阶特征组合, ...

  9. C++:实现量化Latent变量模型的基本用法测试实例

    C++:实现量化Latent变量模型的基本用法测试实例 #include <ql/qldefines.hpp> #if !defined(BOOST_ALL_NO_LIB) &&a ...

最新文章

  1. 非空约束对数据更新的影响
  2. rbf神经网络_基于RBF神经网络的监督控制(09)
  3. matlab 判断文件有多少行,在Matlab中有没有办法确定文件中的行数,而不是循环遍历每一行?...
  4. selenium autoit java_Java+Selenium——AutoIt工具处理文件上传
  5. Redis PPT abstract
  6. 解题报告 『[Poetize6]IncDec Sequence(差分)』
  7. NLP任务增强:通过引入外部知识来提供额外信息
  8. 【SSO-CAS】sso 之 cas 实现的几个问题
  9. 多线程编程进阶——Java类库中的锁
  10. 中国电信物联网平台入门学习笔记3: 电信开发者平台使用
  11. python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'解决办法
  12. 清北第一套题(zhx)
  13. 【数学】线性代数技巧篇
  14. USB C口5V输入,四节串联锂电池充电管理芯片,IC电路板PW4405芯片-22号电路板
  15. 骑行日志2011滇藏珠峰尼泊尔青藏 - 记那些逝去的青春
  16. 汇编指令-bic(位清除)、orr(位或)(3)
  17. linux红帽子怎么配置dhcp,红帽7 配置dhcp服务器
  18. ps怎么把黑白照片变成彩色?ps把儿童黑白照变彩色教程
  19. 实战SOHO接单的全过程
  20. Java条形码生成-Barcode4j

热门文章

  1. 开机弹出网页或定时弹出网页的解决办法
  2. 山海演武传·黄道·第一卷 雏龙惊蛰 第十一章 天下英雄在谱中(下)
  3. 常见的亮灭屏流程分析
  4. 美颜算法--数字图像处理作业
  5. Android 性能优化—— 启动优化提升60,Android开发全套学习
  6. python 读取outlook_通过Python读取Outlook事件
  7. 28《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》中文分享
  8. Python学习日记-13-文件操作
  9. 可视对讲系统服务器,数字楼宇可视对讲系统
  10. 猜数字游戏穷举法(迅雷水晶矿场中的游戏求解)