『paddle』paddleseg 学习笔记:模型压缩

本文介绍了如何使用PaddleSeg和PaddleSlim进行模型压缩,包括模型量化和模型裁剪的步骤。量化能降低计算强度和内存消耗,而裁剪通过减少卷积核数量减小模型大小。支持的模型包括BiSeNetv2、FCN等。完成压缩后,模型可更高效地部署在资源受限的环境中。
部署运行你感兴趣的模型镜像


许多的神经网络模型需要巨大的计算开销和内存开销,严重阻碍了资源受限下的使用,通过模型压缩可以减少模型参数或者计算量,有效地降低计算和存储开销,便于部署再受限的硬件环境中。PaddleSeg 基于 PaddleSlim,集成了模型在线量化、模型裁剪等模型压缩能力。本文提供相关能力的使用教程。

一、安装 PaddleSlim

在进行模型量化或者裁剪前,请先安装相关依赖:

pip install paddleslim==2.0.0

二、模型量化

模型量化是通过将模型中的参数计算,从浮点计算转成低比特定点计算的技术,可以有效的降低模型计算强度、参数大小和内存消耗。PaddleSeg 基于 PaddleSlim 库,提供了模型在线量化的能力。

注意:对于小模型而言,由于模型本身运行速度已经非常快,加入量化操作反而可能导致模型运行速度变慢

step 1. 模型训练

我们可以通过 PaddleSeg 提供的脚本对模型进行训练,请确保完成了 PaddleSeg 的安装工作,并且位于 PaddleSeg 目录下,执行以下脚本:

export CUDA_VISIBLE_DEVICES=0 	# 设置1张可用的卡
# set CUDA_VISIBLE_DEVICES=0	# windows下请执行此命令
python train.py \
       --config configs/quick_start/bisenet_optic_disc_512x512_1k.yml \
       --do_eval \
       --use_vdl \
       --save_interval 500 \
       --save_dir output

step 2. 模型量化并再次训练

加载上一步训练完成的模型,启动量化脚本,并配置对应的参数。

参数名用途是否必选项默认值
retraining_iters量化完成后的重训练迭代数
config配置文件
batch_size重训练时的单卡batch size配置文件中指定值
learning_rate重训练时的学习率配置文件中指定值
model_path预训练模型参数路径
num_workers重训练时用于异步读取数据的进程数量,大于等于1时开启子进程读取数据0
save_dir量化后模型的保存路径output
# 请在 PaddleSeg 根目录运行
export PYTHONPATH=`pwd`
# set PYTHONPATH=%cd%	# windows下请执行此命令

python slim/quant.py \
       --config configs/quick_start/bisenet_optic_disc_512x512_1k.yml \
       --retraining_iters 10 \
       --model_path output/best_model/model.pdparams \
       --save_dir quant_model

三、模型裁剪

模型裁剪,是指通过减少卷积层中卷积核的数量,来减小模型大小和降低模型计算复杂度的一种模型压缩方式。PaddleSeg基于PaddleSlim库,提供了基于敏感度的卷积通道剪裁脚本,能够快速地分析出模型中的冗余参数,按照用户指定的裁剪比例进行剪枝并重新训练,在精度和速度上取得一个较好的平衡。

注意:目前只有以下模型支持裁剪功能,更多模型正在支持中:
BiSeNetv2、FCN、Fast-SCNN、HardNet、UNet

step 1. 模型训练

我们可以通过PaddleSeg提供的脚本对模型进行训练,请确保完成了PaddleSeg的安装工作,并且位于PaddleSeg目录下,执行以下脚本:

export CUDA_VISIBLE_DEVICES=0 # 设置1张可用的卡
# windows下请执行以下命令
# set CUDA_VISIBLE_DEVICES=0
python train.py \
       --config configs/quick_start/bisenet_optic_disc_512x512_1k.yml \
       --do_eval \
       --use_vdl \
       --save_interval 500 \
       --save_dir output

step 2. 裁剪并保存模型

加载上一步训练完成的模型,指定裁剪率,并启动裁剪脚本。

注意:基于敏感度的卷积通道剪裁方式,需要不断的评估每个卷积核对于最终精度的影响,因此耗时会比较久

参数名用途是否必选项默认值
pruning_ratio卷积核裁剪比率
retraining_iters裁剪完成后的重训练迭代数
config配置文件
batch_size重训练时的单卡batch size配置文件中指定值
learning_rate重训练时的学习率配置文件中指定值
model_path预训练模型参数路径
num_workers重训练时用于异步读取数据的进程数量,大于等于1时开启子进程读取数据0
save_dir裁剪后模型的保存路径output
# 请在PaddleSeg根目录运行
export PYTHONPATH=`pwd`
# windows下请执行以下命令
# set PYTHONPATH=%cd%

python slim/prune.py \
       --config configs/quick_start/bisenet_optic_disc_512x512_1k.yml \
       --pruning_ratio 0.2 \
       --model_path output/best_model/model.pdparams \
       --retraining_iters 100 \
       --save_dir prune_model

四、部署

通过量化剪枝得到的模型,我们可以直接进行部署应用,相关教程请参考 模型部署

五、量化&剪枝加速比

    测试环境:
       GPU: V100
       CPU: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz
       CUDA: 10.2
       cuDNN: 7.6
       TensorRT: 6.0.1.5

    测试方法:
       1. 运行耗时为纯模型预测时间,测试图片cityspcaes(1024x2048)
       2. 预测10次作为热启动,连续预测50次取平均得到预测时间
       3. 使用GPU + TensorRT测试
模型未量化运行耗时(ms)量化运行耗时(ms)加速比
deeplabv3_resnet50_os8204.2150.126.49%
deeplabv3p_resnet50_os8147.289.539.20%
gcnet_resnet50_os8201.8126.137.51%
pspnet_resnet50_os8266.8206.822.49%
模型裁剪率运行耗时(ms)加速比
fastscnn-7.0-
0.15.915.71%
0.25.718.57%
0.35.620.00%
fcn_hrnetw18-43.28-
0.140.466.51%
0.240.416.63%
0.338.8410.25%
unet-76.04-
0.174.392.16%
0.272.105.18%
0.366.9611.94%

您可能感兴趣的与本文相关的镜像

PaddlePaddle-v3.3

PaddlePaddle-v3.3

PaddlePaddle

PaddlePaddle是由百度自主研发的深度学习平台,自 2016 年开源以来已广泛应用于工业界。作为一个全面的深度学习生态系统,它提供了核心框架、模型库、开发工具包等完整解决方案。目前已服务超过 2185 万开发者,67 万企业,产生了 110 万个模型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

libo-coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值