同步操作将从 PaddlePaddle/PaddleClas 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
复杂的模型有利于提高模型的性能,但也导致模型中存在一定冗余。此部分提供精简模型的功能,包括两部分:模型量化(量化训练、离线量化)、模型剪枝。
其中模型量化将全精度缩减到定点数减少这种冗余,达到减少模型计算复杂度,提高模型推理性能的目的。 模型量化可以在基本不损失模型的精度的情况下,将FP32精度的模型参数转换为Int8精度,减小模型参数大小并加速计算,使用量化后的模型在移动端等部署时更具备速度优势。
模型剪枝将CNN中不重要的卷积核裁剪掉,减少模型参数量,从而降低模型计算复杂度。
本教程将介绍如何使用飞桨模型压缩库PaddleSlim做PaddleClas模型的压缩。 PaddleSlim 集成了模型剪枝、量化(包括量化训练和离线量化)、蒸馏和神经网络搜索等多种业界常用且领先的模型压缩功能,如果您感兴趣,可以关注并了解。
在开始本教程之前,建议先了解PaddleClas模型的训练方法以及PaddleSlim
当训练出一个模型后,如果希望进一步的压缩模型大小并加速预测,可使用量化或者剪枝的方法压缩模型。
模型压缩主要包括五个步骤:
pip install paddleslim -i https://pypi.tuna.tsinghua.edu.cn/simple
git clone https://github.com/PaddlePaddle/PaddleSlim.git
cd Paddleslim
python3.7 setup.py install
PaddleClas提供了一系列训练好的模型,如果待量化的模型不在列表中,需要按照常规训练方法得到训练好的模型。
进入PaddleClas根目录
cd PaddleClas
slim
训练相关代码已经集成到ppcls/engine/
下,离线量化代码位于deploy/slim/quant_post_static.py
。
量化训练包括离线量化训练和在线量化训练,在线量化训练效果更好,需加载预训练模型,在定义好量化策略后即可对模型进行量化。
训练指令如下:
以CPU为例,若使用GPU,则将命令中改成cpu
改成gpu
python3.7 tools/train.py -c ppcls/configs/slim/ResNet50_vd_quantization.yaml -o Global.device=cpu
其中yaml
文件解析详见参考文档。为了保证精度,yaml
文件中已经使用pretrained model
.
export CUDA_VISIBLE_DEVICES=0,1,2,3
python3.7 -m paddle.distributed.launch \
--gpus="0,1,2,3" \
tools/train.py \
-c ppcls/configs/slim/ResNet50_vd_quantization.yaml
注意:目前离线量化,必须使用已经训练好的模型,导出的inference model
进行量化。一般模型导出inference model
可参考教程.
一般来说,离线量化损失模型精度较多。
生成inference model
后,离线量化运行方式如下
python3.7 deploy/slim/quant_post_static.py -c ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml -o Global.save_inference_dir=./deploy/models/class_ResNet50_vd_ImageNet_infer
Global.save_inference_dir
是inference model
存放的目录。
执行成功后,在Global.save_inference_dir
的目录下,生成quant_post_static_model
文件夹,其中存储生成的离线量化模型,其可以直接进行预测部署,无需再重新导出模型。
训练指令如下:
以CPU为例,若使用GPU,则将命令中改成cpu
改成gpu
python3.7 tools/train.py -c ppcls/configs/slim/ResNet50_vd_prune.yaml -o Global.device=cpu
export CUDA_VISIBLE_DEVICES=0,1,2,3
python3.7 -m paddle.distributed.launch \
--gpus="0,1,2,3" \
tools/train.py \
-c ppcls/configs/slim/ResNet50_vd_prune.yaml
在得到在线量化训练、模型剪枝保存的模型后,可以将其导出为inference model,用于预测部署,以模型剪枝为例:
python3.7 tools/export.py \
-c ppcls/configs/slim/ResNet50_vd_prune.yaml \
-o Global.pretrained_model=./output/ResNet50_vd/best_model \
-o Global.save_inference_dir=./inference
上述步骤导出的模型可以通过PaddleLite的opt模型转换工具完成模型转换。 模型部署的可参考 移动端模型部署
1/20~1/10
,同时将训练epoch数修改为常规训练的1/5~1/2
,学习率策略方面,加上Warmup,其他配置信息不建议修改。此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。