在阅读本教程前,请确保您已经了解过PaddleSeg使用说明等章节,以便对PaddleSeg有一定的了解
该文档介绍如何使用PaddleSlim的卷积通道剪裁接口对检测库中的模型的卷积层的通道数进行剪裁。
在分割库中,可以直接调用PaddleSeg/slim/prune/train_prune.py
脚本实现剪裁,在该脚本中调用了PaddleSlim的paddleslim.prune.Pruner接口。
该教程中所示操作,如无特殊说明,均在PaddleSeg/
路径下执行。
执行如下命令,下载cityscapes数据集
python dataset/download_cityscapes.py
参照预训练模型列表获取所需预训练模型
我们通过剪裁卷积层参数达到缩减卷积层通道数的目的,在剪裁之前,我们需要确定待裁卷积层的参数的名称。 通过以下命令查看当前模型的所有参数:
# 查看模型所有Paramters
for x in train_prog.list_vars():
if isinstance(x, fluid.framework.Parameter):
print(x.name, x.shape)
通过观察参数名称和参数的形状,筛选出所有卷积层参数,并确定要裁剪的卷积层参数。
使用train_prune.py
启动裁剪任务时,通过SLIM.PRUNE_PARAMS
选项指定待裁剪的参数名称列表,参数名之间用逗号分隔,通过SLIM.PRUNE_RATIOS
选项指定各个参数被裁掉的比例。
CUDA_VISIBLE_DEVICES=0
python -u ./slim/prune/train_prune.py --log_steps 10 --cfg configs/cityscape_fast_scnn.yaml --use_gpu --use_mpio \
SLIM.PRUNE_PARAMS 'learning_to_downsample/weights,learning_to_downsample/dsconv1/pointwise/weights,learning_to_downsample/dsconv2/pointwise/weights' \
SLIM.PRUNE_RATIOS '[0.1,0.1,0.1]'
这里我们选取三个参数,按0.1的比例剪裁。
CUDA_VISIBLE_DEVICES=0
python -u ./slim/prune/eval_prune.py --cfg configs/cityscape_fast_scnn.yaml --use_gpu \
TEST.TEST_MODEL your_trained_model \
模型 | 数据集合 | 下载地址 | 剪裁方法 | flops | mIoU on val |
---|---|---|---|---|---|
Fast-SCNN/bn | Cityscapes | fast_scnn_cityscapes.tar | 无 | 7.21g | 0.6964 |
Fast-SCNN/bn | Cityscapes | fast_scnn_cityscapes-uniform-51.tar | uniform | 3.54g | 0.6990 |