搜索

精度无损体积压缩70%以上百度PaddleSlim为你的模型瘦身

gecimao 发表于 2019-06-11 20:55 | 查看: | 回复:

  WAVE SUMMIT 2019 深度学习开发者峰会上,PaddleSlim 全新发布,对于在内存紧张、功耗限制、存储有限的设备上进行深度学习应用的开发者是一份重磅惊喜。

  PaddleSlim 是一个无论是新手还是经验者都可以很方便用来优化模型以进行部署的模型压缩库:在普通的模型训练上,只需要两行 python 代码,构造一个 Compressor 对象,即可调用。PaddleSlim 实现了目前主流的网络量化、剪枝、蒸馏三种压缩策略,并可快速配置多种压缩策略组合使用。针对体积已经很小的 MobileNet 模型,在模型效果不损失的前提下实现 70% 以上的体积压缩。

  深度学习技术已经在互联网的诸多方向产生影响,关于深度学习和神经网络的讨论越来越多。深度学习技术近几年在计算机视觉、语音识别、自然语言处理等领域大放异彩,各种互联网产品都争相应用深度学习技术,我们的生活中也越来越多的 AI 时代新能力,例如人脸识别、智能翻译、语音助手等。

  根据《2019 年移动市场报告》,2018 年,用户支出已经突破了 1010 亿美元。用户越来越习惯于在手机上完成各种事项,平均每天在移动设备上花费的时间已经达到 3 小时。随着移动设备被广泛使用,在移动互联网产品应用深度学习和神经网络技术已经成为必然趋势。而移动端设备通常内存少、运算能力也比较弱小,并且移动端的 CPU 需要将功耗指标维持在很低的水平,当前主流的模型很难直接部署到移动设备中。在这种情况下,PaddleSlim 应运而生,实现了目前主流的网络量化、剪枝、蒸馏三种压缩策略,并可快速配置多种压缩策略组合使用,在多种压缩策略上达到了业绩领先的效果。

  如图所示,PaddleSlim 从上到下为 API 依赖关系。蒸馏、量化和剪切模块都依赖底层的基础框架。最上层为用户接口,在 Python 脚本中调用模型压缩功能时,只需要构造一个 Compressor 对象即可。我们将每个压缩算法称为压缩策略,在迭代训练模型的过程中调用用户注册的压缩策略完成模型压缩。模型压缩工具封装好了模型训练逻辑,用户只需要提供训练模型需要的网络结构、数据、优化策略(optimizer)等。

  以配置文件方式集中管理可配参数,方便实验管理在普通模型训练脚本上,添加极少代码即可完成模型压缩效果好

  对于冗余信息较少的 MobileNetv1 模型,卷积核剪切策略依然可缩减模型大小,并保持尽量少的精度损失。蒸馏压缩策略可明显提升原始模型的精度。量化训练与蒸馏的组合使用,可同时做到缩减模型大小和提升模型精度。功能更强更灵活

  剪切压缩过程自动化剪切压缩策略支持更多网络结构蒸馏支持多种方式,用户可自定义组合 loss支持快速配置多种压缩策略组合使用PaddleSlim 蒸馏、剪切、量化简要介绍

  该策略通过减少指定卷积层中卷积核的数量,达到缩减模型大小和计算复杂度的目的。根据选取剪切比例的策略的不同,PaddleSlim 提供以下两个方式:

  uniform pruning: 每层剪切一样比例的卷积核。在剪切一个卷积核之前,按 l1_norm 对 filter 从高到低排序,越靠后的 filter 越不重要,优先剪掉靠后的 filter.sensitive pruning: 根据每层敏感度,剪切掉不同比例的卷积核数量。两种剪切方式都需要加载预训练模型。

  PaddleSlim 为开发者提供在训练过程中对量化进行建模以确定量化参数的 Quantization Aware Training 量化模式,提供更高的预测精度。现阶段的量化训练主要针对卷积层(包括二维卷积和 Depthwise 卷积)以及全连接层进行量化。卷积层和全连接层在 PaddlePaddle 框架中对应算子包括 conv2d、depthwise_conv2d 和 mul 等。量化训练会对所有的 conv2d、depthwise_conv2d 和 mul 进行量化操作,且要求它们的输入中必须包括激活和参数两部分。

  本示例中的五个压缩策略使用相同的训练数据和压缩 Python 脚本 compress.py,每种策略对应独立的配置文件。

  在 compress.py 中定义了执行压缩任务需要的所有模型相关的信息,这里对几个关键的步骤进行简要介绍:

  然后,通过 clone 方法得到 eval_program, 用来在压缩过程中评估模型精度,如下:

  所有示例的执行命令都放在 run.sh 文件中,用户可以修改 run.sh 后,执行不同的压缩策略示例。

  在该示例中,用预训练好的 ResNet50 模型监督训练 MobileNetv1 模型。修改 run.sh, 执行以下命令,执行蒸馏压缩示例:

  在该示例中,将 MobileNetv1 模型剪掉 50% 的 FLOPS. 修改 run.sh, 执行以下命令,执行敏感度卷积核剪切压缩示例:

  本示例先将预训练好的 MobileNetv1 模型剪掉 50% FLOPS, 让后再对其进行动态 int8 量化训练。修改 run.sh, 执行以下命令,执行剪切与 int8 量化训练结合的模型压缩示例:

本文链接:http://robynlynne.com/duixiangmoxing/510.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部