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

网站域名变更网站建设公司方维

网站域名变更,网站建设公司方维,js做网站统计,wordpress 收费阅读简介#xff1a;本文以近期流行的YOLOX[8]目标检测模型为例#xff0c;介绍量化感知训练的原理流程#xff0c;讨论如何实现精度无损的实践经验#xff0c;并展示了量化后的模型能够做到精度不低于原始浮点模型#xff0c;模型压缩4X、推理加速最高2.3X的优化效果。 1. 概…简介本文以近期流行的YOLOX[8]目标检测模型为例介绍量化感知训练的原理流程讨论如何实现精度无损的实践经验并展示了量化后的模型能够做到精度不低于原始浮点模型模型压缩4X、推理加速最高2.3X的优化效果。 1. 概述 对深度学习模型进行低比特量化可以有效地降低模型部署时在存储、计算、通信上的开销是一种常见的模型压缩和推理优化技术。然而模型量化在实际应用中仍然存在不少挑战最为常见的问题就是模型精度下降如无特殊说明本文中“模型精度”是指准确率等模型应用于具体任务的效果指标。以计算机视觉领域为例在目标检测、图像分割等复杂任务上量化带来的精度下降更为明显。 通过在模型训练阶段引入量化相关约束即量化感知训练Quantization-aware trainingQAT能够更好地解决模型量化的精度问题。本文以近期流行的YOLOX[8]目标检测模型为例介绍量化感知训练的原理流程讨论如何实现精度无损的实践经验并展示了量化后的模型能够做到精度不低于原始浮点模型模型压缩4X、推理加速最高2.3X的优化效果。 2. 量化原理 在数字信号处理领域量化是指将信号的连续取值或者大量可能的离散取值近似为有限多个或较少的离散值的过程。具体到深度学习领域模型量化是指将浮点激活值或权重通常以32比特浮点数表示近似为低比特的整数16比特或8比特进而在低比特的表示下完成计算的过程。通常而言模型量化可以压缩模型参数进而降低模型存储开销并且通过降低访存和有效利用低比特计算指令等能够取得推理速度的提升这对于在资源受限设备上部署模型尤为重要。 给定浮点类型的值可以通过如下公式将它转化成8比特量化值 其中表示量化的scale与分别表示量化值域的最小值与最大值表示输入浮点值表示量化后的值。量化值转化为浮点值只需执行反操作即可 进一步的在将输入数据和权重进行量化后我们就能够将神经网络的常见操作转换为量化操作。以卷积操作为例其量化版本典型的计算流程如图1所示 图1 典型的量化卷积算子计算流程图 权重与输入先量化成8bit进行卷积操作用32bit来存储中间结果bias量化为32bit与进行相加为利用、以及的量化scale将32bit的转化为8bit的如果该层的下一层也是量化OP则可直接输出给下一层如果是非量化OP则将反量化为浮点值后再输出给下一层。 从上述量化计算的原理能够容易看出将浮点数转化为低比特整数进行计算会不可避免地引入误差神经网络模型中每层量化计算的误差会累积为模型整体精度的误差。常见的训练后量化Post Training QuantizationPTQ方案中通过统计在典型输入数据情况下待量化变量的数值分布来选择合适的量化参数scalezero point等将因量化而引入的信息损失降低到最小。 但是PTQ方案往往还是无法实现精度无损的模型量化为了进一步降低量化带来的精度下降我们可以采用量化感知训练的方案在训练的计算图中引入伪量化的操作通过微调训练(finetuning)让模型权重“适应”量化引入的误差以实现更好的、甚至无损的量化模型精度。 3. YOLOX量化训练 我们以YOLOX-s目标检测模型(GitHub repo[1])为例使用公开的预训练模型参数在COCO2017数据集上进行量化训练实验。量化训练算法选择LSQ[2,3]该系列算法利用梯度来更新量化的scale与zero_point在不需要精细调节参数的情况下能够获得较好的性能。为了通过量化训练获得更好的量化模型精度我们需要重点关注如下几点设置 3.1 与部署后端相匹配的量化方式 不同的部署后端可能采用不用的量化计算实现方式需要匹配训练和部署阶段的量化方式以避免引入额外误差。以PyTorch[7]默认的CPU后端为例基本的量化方式为 weight per-channelint8对称量化activation per-tensoruint8非对称量化量化对象 所有的Conv2d 以移动端框架MNN为例基本的量化方式为 weight per-channelint8对称量化activation per-tensorint8对称量化量化对象 所有的Conv2d 通常在具体推理框架上部署量化模型时还会对类似conv-bn、conv-relu/relu6、conv-bn-relu/relu6这样的卷积层进行算子融合因此需要设置为量化融合后的activation。YOLOX中的SiLU激活函数通常不会被融合output activation的量化仅需要设置到bn的输出而不是SiLU的输出。训练时一个典型的卷积层量化位置如图2所示。 图2 量化位置示意图 同时QAT时所有的BN全部fold入相应的卷积中实验采取了文献[6]中的fold策略。由于模拟量化的引入可能会使得BN层的running_mean与running_var不稳定从而导致量化训练无法收敛。因此我们在量化训练中固定BN的running_mean与running_var。 此外特定部署后端的实现可能需要将activation量化为7bit数值范围以防止计算溢出。带有avx512_vnni指令集的CPU型号上则没有相应要求。 3.2 量化训练参数初始化 为了避免导致训练loss不稳定甚至训练发散的情况我们利用训练后量化Post training quantizationPTQ所得的量化参数来初始化LSQ量化训练中activation scale参数。基本的步骤是 选取几十张典型图片在预训练模型上进行推理并收集统计各个待量化的activation信息。使用如MSE、KL散度等metric来计算各activation的最佳scale。 基本的实现方式可以使用PyTorch的HistogramObserver计算activation scale zero pointPerChannelMinMaxObserver计算weight scale。 3.3 训练超参数 在QAT阶段我们使用已经收敛的预训练模型权重并且使用PTQ量化参数进行QAT初始化。这种情况下模型参数已接近收敛因此我们将整体训练的超参数和原始YOLOX训练保持一致将学习率设置为原始训练收敛阶段的学习率即5e-4。 3.4 特定后端算子实现的计算误差 因为数值表示精度问题round操作的结果在训练框架与推理后端上可能并不是相同的例如 import torch torch.tensor(2.5).cuda().round()  # 输出tensor(2., devicecuda:0) torch.tensor(3.5).cuda().round()  # 输出tensor(4., devicecuda:0) 2.5和3.5的四舍五入行为在PyTorch上并不是相同的而该行为差异在常见的部署后端框架上可能不存在。这种问题会导致QAT模拟精度和后端实际运行时的精度存在明显差异因此需要在量化训练阶段进行修正。例如针对MNN后端我们可以采取如下操作来避免这个差异。 def round_pass(x): A simple way to achieve STE operation. # y torch.round(x) # for PyTorch backend y (x torch.sign(x) * 1e-6).round()  # for mnn backend, round前添加一个小的数值 y_grad x return (y - y_grad).detach() y_grad 4. 实验结果与分析 4.1 精度和加速效果 按照上述方式在YOLOX-s模型上进行量化训练使用COCO2017 validation set进行精度验证结果如表1所示。两种后端上真实量化的模型的精度性能均和浮点模型齐平。 量化方式 模型 YOLOX-s mAP 0.5:0.95 mAP 0.5 mAP 0.75 - 浮点模型 40.5 59.3 43.8 权重对称量化 激活值对称量化 PTQ 39.3 58.5 43.0 QAT 40.8 59.9 44.1 真实量化模型 40.6 59.7 44.2 权重对称量化 激活值非对称量化 PTQ 39.9 58.9 43.2 QAT 40.7 59.8 43.9 真实量化模型 40.5 59.8 43.7 表1 浮点模型、QAT模型及后端真实量化模型的精度对比 速度实验中我们选取PyTorch[7]后端及x86测试平台进行测试测试的图片分辨率为1x3x640x640。不同资源数下的结果如表2所示。在精度无损的前提下量化模型的推理速度最高可以提升2.35x同时模型尺寸为原来的1/4。 后端 浮点速度 (ms) 量化速度 (ms) 加速比 设备 线程数 PyTorch 321.2 189.9 1.70x Intel(R) Xeon(R) Platinum 8369HC CPU 3.30GHz 1 218.3 106.2 2.06x 2 117.3 57.7 2.03x 4 75.3 34.1 2.21x 8 57.9 24.7 2.35x 16 表2 浮点模型、QAT模型及后端真实量化模型的速度对比 4.2 量化参数初始化的影响 LSQ及LSQ论文中提出了相应的量化信息初始化方法实际使用中会发现该种初始化方法对于学习率的设定会比较敏感。一方面若量化参数的初始值距离收敛值较远需要通过设置较大的学习率来训练他们。另一方面较大的学习率会使得模型本身参数跳出已收敛的状态使得模型进入“重训练”的状态不确定性增加。而用PTQ来初始化量化参数可以使得参数处于较优的初始状态利用浮点模型收敛时的学习率去进行finetune即可获得较好的性能。固定学习率为4e-5的前提下PTQ及LSQ初始化的训练结果与曲线如图4所示。LSQ初始化的训练曲线在开启mossac数据增强时是逐渐向下的而PTQ初始化是逐渐向上的。 图4 固定finetune学习率下不同初始化方法的训练曲线 4.3 训练超参数的影响 学习率的设定会直接影响到最终QAT模型的性能。以原始模型训练收敛阶段的学习率5e-4为基准如果QAT阶段使用相同的学习率QAT初期的模型精度会逐渐下降如图4中PTQ初始化红色曲线训练早期所示但是最终精度会提升至原始非量化模型的水平。如果QAT使用更低学习率例如5e-4模型精度会相比于PTQ初始化状态逐渐上升但是最终精度提升不大 学习率 mAP50:95 Baseline - 40.8 PTQ - 39.4 QAT 5e-6 39.9 QAT 7.5e-6 39.8 QAT 2.5e-6 39.8 上述现象的一种可能原因是在小学习率下模型权重、量化scale基本不变。实际上是基于PTQ的初始解空间继续向局部更好的收敛点靠近跳出局部解空间的可能性较低。因此在PTQ初始化的前提下学习率可以直接设置成浮点模型训练收敛阶段的值。 4.4 训练轮数的选择 上述QAT的结果是训练300 epochs后的模型减少训练epoch数量的结果如下所示 学习率 AP 50:95 mAP 0.5 mAP 0.75 QAT300 epoch 5e-4 40.8 59.9 44.1 QAT15 epoch 5e-4 39.6 58.5 43.3 QAT30 epoch 5e-4 39.8 58.8 43.0 可以看出随着训练轮数的增大QAT的结果会更好。QAT训练轮数较低结果会不如直接用小学习率进行finetune。我们可以得出经验性的trade-off如果计算资源充足可以选择训练更长的时间来获得更好的性能。如果计算资源较少则可以用小学习率训练较短的时间以获得高于PTQ的性能。 4.5 修正特定算子计算误差的影响 特定算子在训练框架与后端框架中的行为会有细微的差别这会导致量化训练精度与实际量化模型的精度产生较大的差异。以MNN[5]为例在YOLOX模型中存在如下两类OP会导致该现象。 修正round操作的影响 是否对round进行修正的结果如表3所示。从训练角度而言round经过修正后的性能会略好于未修正的。同时如果在训练时round的行为与后端不一致的话可能会导致真实量化模型的精度发生较大的变化。 mAP 0.5:0.95 mAP 0.5 mAP 0.75 修正 40.8 59.9 44.1 未修正 40.5 59.9 32.9 表3 round修正对于量化训练的影响 Sigmoid快速实现引入的误差 为了提升指数计算的速度后端框架通常会采取一些快速近似计算。这对于浮点模型而言通常不会引入较大的误差。但是对于量化模型而言这个误差可能因为量化操作而被放大。 如图3所示对于YOLOX的主要patternConv - SiLU - Conv前一层Conv的输出经过SiLU函数后快速近似计算引入的误差会被后一层卷积输入处的量化操作除以scale而缩放。scale越小缩放的程度越大。以YOLOX-s为例是否对指数计算进行近似的量化模型精度如表4所示。 图3 YOLOX量化pattern mAP 0.5:0.95 mAP 0.5 mAP 0.75 近似 40.2 59.5 43.7 未近似 40.6 59.7 44.2 表4 指数计算的近似带来的模型性能误差 5. 总结 本文通过在YOLOX目标检测模型上的量化实践验证了通过量化感知训练(QAT)能够在精度无损的情况下获得显著的模型压缩和推理加速。我们对量化精度误差因素进行了具体分析指出了解决精度问题的一系列实践手段并通过实验验证了效果这可以作为我们在实际应用模型量化时的经验参考。虽然量化相关方法已经被大量研究但是在实际复杂任务中应用量化仍然面临不少挑战真正将量化压缩落地更需要通过模型和系统两方面的协同。此外还有更多量化训练相关的技术方案如混合精度量化、更低比特量化等值得探索和完善。 关于我们 本文中关于量化训练实践工作由阿里云-PAI模型压缩团队和微软NNI团队合作完成也感谢MNN团队的技术支持。更多模型压缩的算法实现可参考NNIGitHub repo[4]更多模型推理优化技术方案可见阿里云PAI-Blade。 参考文献代码仓库 [1] https://github.com/Megvii-BaseDetection/YOLOX [2] Esser S K, McKinstry J L, Bablani D, et al. Learned step size quantization[J]. arXiv preprint arXiv:1902.08153, 2019. [3] Bhalgat Y, Lee J, Nagel M, et al. Lsq: Improving low-bit quantization through learnable offsets and better initialization[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops. 2020: 696-697. [4] https://github.com/microsoft/nni [5] Jiang X, Wang H, Chen Y, et al. Mnn: A universal and efficient inference engine[J]. arXiv preprint arXiv:2002.12418, 2020. [6] Jacob B, Kligys S, Chen B, et al. Quantization and training of neural networks for efficient integer-arithmetic-only inference[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 2704-2713. [7] Paszke A, Gross S, Massa F, et al. Pytorch: An imperative style, high-performance deep learning library[J]. Advances in neural information processing systems, 2019, 32: 8026-8037. [8] Ge Z, Liu S, Wang F, et al. Yolox: Exceeding yolo series in 2021[J]. arXiv preprint arXiv:2107.08430, 2021. 原文链接 本文为阿里云原创内容未经允许不得转载。
http://www.pierceye.com/news/324076/

相关文章:

  • 在线动画手机网站模板下载学软件开发需要什么基础
  • 北京的网站建设收费标准推广产品的方法和步骤
  • 北京市专业网站制作企业合肥做网络推广的公司
  • 网站建设php教程视频手机商城网站设计
  • 重庆网站建设公司哪个最好老家装设计网
  • 外贸网站建设产品crm公司
  • 网站做查赚钱网站建设捌金手指花总四
  • 有没有做链接的网站彩票型网站建设
  • 15年做哪个网站能致富网站界面设计的相关指南
  • 网站报价功能清单德州做网站最好的公司
  • 网站开发设计图片搭建论坛需要多少钱
  • 网站建设价格明细做一套二级域名网站怎么做
  • 网站建设 发展方向手机开发人员选项怎么打开
  • 深圳网站建设深圳网络邢台市政建设集团股份有限公司网站
  • 广东网站开发搭建旅游网站开发内容
  • 恭城网站建设中象做网站怎么样
  • 泰兴网站建设开发门户网站内容建设岗位职责
  • 单页网站有后台搜索引擎优化工具有哪些
  • 视频网站弹幕怎么做中小企业网站优化
  • 南充网站建设江宁外贸网站建设
  • 从事网站开发需要的证书泰安百度推广代理
  • 找工作哪个网站好2022查询网站备案显示划横线
  • 06627网页制作和网站建设如何制作自己的公司内部网站
  • 网站营销与推广方案百度大数据分析
  • 手机怎么做自己的网站做网站的公司广州
  • asp.net网站开发案例教程南京seo排名
  • 购物网站开发技术分销
  • 企业网站建设专家工业产品设计包括哪些
  • 潍坊网站开发高手重庆市设计院
  • 微信公众号平台网站开发WordPress破解分享