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

量化注意事项和模型设计思想

量化的注意事项

1、量化检测器时,尽量不要对Detect Head进行量化,一旦进行量化可能会引起比较大的量化误差;
2、量化模型时,模型的First&Second Layer也尽可能不进行量化(精度损失具有随机性);
3、TensorRT只支持对称量化,因此Zero-Point为0;
4、PTQ的结果一般比TensorRT的结果好,同时更具有灵活性,可以进行局部量化(因为TensorRT时性能优先);
5、Resize和add操作可能会引入混合精度节点,这可能也是后面TensorRT改进和优化的点;
6、激活函数的量化对精度没有影响(ReLU/ReLU6等),因此使用per_tensor粗粒度量化即可;
7、随机量化并不能提高精度;
8、量化粒度越细精度越高,相应计算复杂度也就越高,速度越慢;一般使用per_channels即可;
9、Depth-wise Conv可能会破坏截断误差与舍入误差的平衡,进而影响精度;
10、BN层与Conv的融合可能会对per_tensor量化有所影响,但是对于per_channel没有影响;
11、MobileNet系列中的深度可分离卷积的量化误差比较大,需要进行局部量化;
12、卷积/转置卷积的量化选择per_tensor与per_channel均可。
13、参数量大的网络模型对于量化加速更加鲁棒;
14、非对称的per_channel量化能够提高精度(TensorRT不支持,其他框架支持);
15、语义分割一般PTQ即可满足量化精度的要求,因为本质是逐像素分类;
16、pytorch-quantization本身的initialize不建议使用,最好使用本次实践中的方法更为灵活;
17、多分支结构并不利于QAT的训练,QAT办法缓解PTQ的精度丢失。

模型的设计原则

1、模型涉及和改进避免多分支结构,如果项目中使用了多分支结构,建议使用结构重参思想;
2、如果使用了结构重参,同时PTQ不能满足要求,QAT也不能缓解,建议使用梯度先验的形式RepOpt;
3、YOLOv6中的上采样使用TransposeConv比YOLOv5中使用的Upsample更适合进行量化,因为使用Upsample在转为Engine的时候,TensorRT会模型将其转为混合精度的Resize,影响性能;
4、在自己设计Block的时候,应该更多考虑Block中的算子尽可能进行算子融合,YOLOv6这方面就是典范,值得多多学习。
5、如果模型中涉及到Plugin,使用局部量化跳过该层即可;

检测头与ADD

在这里插入图片描述
在这里插入图片描述

nn.Upsample

在这里插入图片描述
在这里插入图片描述

转置卷积

在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/8129.html

相关文章:

  • 【零基础保姆级教程】制作自己的数据集(二)——Labelme的安装与使用及常见的报错解决方法
  • stm32定时器输出比较----驱动步进电机
  • 第22天:信息收集-Web应用各语言框架安全组件联动系统数据特征人工分析识别项目
  • log4j2漏洞复现(CVE-2021-44228)
  • 使用TC命令模拟弱网丢包
  • 如何用gpt来分析链接里面的内容(比如分析论文链接)和分析包含多个文件中的一块代码
  • rsync远程同步实现快速、安全、高效的异地备份
  • Spring 之循环依赖
  • 【计算机网络-网络层】路由选择协议
  • Redission分布式锁
  • vue3脚手架Vite
  • ChatGPT常用prompts汇总
  • springboot感受优化06
  • 使用for循环对ArrayList在遍历时删除存在的问题
  • Linux如何在Ubuntu系统服务器上安装 Jenkins?【详细教程】
  • 初识设计模式 - 策略模式
  • 基于SpringBoot+Vue的家政平台
  • 命名空间和程序集
  • Mysql 的B+树索引 和HASH索引
  • 160. 相交链表 ——【Leetcode每日一题】
  • CSS基础知识,必须掌握!!!
  • Android:启动流程
  • 城乡供水一体化管控平台-农村供水监管平台-乡村振兴
  • C++实现多线程
  • 聚类问题的算法总结
  • Nuxt中使用vuex管理组件信息通讯