From 5c36523719aa66ecf3c43646454b6d0383129c21 Mon Sep 17 00:00:00 2001 From: yukavio <67678385+yukavio@users.noreply.github.com> Date: Wed, 3 Feb 2021 16:42:07 +0800 Subject: [PATCH] [cherry-pick] add pruning overeview (#655) --- .../tutorials/pruning/FPGM/weight_dist.png | Bin 0 -> 54875 bytes docs/zh_cn/tutorials/pruning/overeview.md | 126 ++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 docs/zh_cn/tutorials/pruning/FPGM/weight_dist.png create mode 100644 docs/zh_cn/tutorials/pruning/overeview.md diff --git a/docs/zh_cn/tutorials/pruning/FPGM/weight_dist.png b/docs/zh_cn/tutorials/pruning/FPGM/weight_dist.png new file mode 100644 index 0000000000000000000000000000000000000000..b5b6dee39688d2d4aa6881ecb801a11990f4be22 GIT binary patch literal 54875 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 K-ACncB<^2HZ@zl~ literal 0 HcmV?d00001 diff --git a/docs/zh_cn/tutorials/pruning/overeview.md b/docs/zh_cn/tutorials/pruning/overeview.md new file mode 100644 index 00000000..e972d61c --- /dev/null +++ b/docs/zh_cn/tutorials/pruning/overeview.md @@ -0,0 +1,126 @@ +# PaddleSlim模型裁剪方法总览 + +PaddleSlim裁剪模块针对动态图目前实现了两种裁剪相关算法,并提供对应的接口给用户来实现自身的裁剪算法。 + +## 1. 基于敏感度的模型分析算法 + +本节内容分为两部分:卷积层敏感度分析和基于敏感度的`Filters`剪裁,其中『卷积层敏感度分析』也可以被称作『卷积层重要度分析』。我们定义越重要的卷积层越敏感。 +PaddleSlim提供了工具类`Pruner`来进行重要性分析和剪裁操作,不同的`Pruner`的子类对应不同的分析和剪裁策略,本示例以`L1NormFilterPruner`为例说明。首先我们声明一个`L1NormFilterPruner`对象,如下所示: + +```python +from paddleslim.dygraph import L1NormFilterPruner +pruner = L1NormFilterPruner(net, [1, 3, 224, 224]) +``` + +如果本地文件系统已有一个存储敏感度信息(见1.1节)的文件,声明`L1NormFilterPruner`对象时,可以通过指定`sen_file`选项加载计算好的敏感度信息,如下: + +```python +#pruner = L1NormFilterPruner(net, [1, 3, 224, 224]), sen_file="./sen.pickle") +``` + +### 1.1 卷积重要性分析 + +在对卷积网络中的filters进行剪裁时,我们需要判断哪些`filters`不重要,然后优先剪掉不重要的`filters`。 +在一个卷积内,我们使用`filter`的`L1 Norm`来代表重要性,`L1 Norm`越大的`filters`越重要。在多个卷积间,我们通过敏感度代表卷积的重要性,越敏感的卷积越重要,重要的卷积会被剪掉相对较少的`filters`。 +单个卷积内的filters重要性计算会在剪裁时进行,无需用户关注。本小节,我们只介绍多个卷积间如何分析重要性,即『敏感度分析』。 + +#### 敏感度定义 + +如图4-1所示,某个卷积网络包含K个卷积层,每个卷积层有4个`filters`,原始网络精度为90。 + +第一步:从『卷积1』中剪裁掉25%的filters,也就是『卷积1』中第2个Filters,然后直接在测试集上评估精度结果为85,得到左边坐标图的第二个红点。恢复模型到初始状态。 +第二步:从『卷积1』中裁掉2个卷积,然后在测试集上评估精度为70,得到坐标图的第3个红点。恢复模型到初始状态。 +第三步:同理得到第4个红点。把『卷积1』对应的4个红点链接成曲线,即为『卷积1』的敏感度曲线。 +第四步:同理得到『卷积K』的敏感度曲线。 + +
+ +
+
+图1-1 敏感度计算过程示意图 +
+ +如图1-2所示,为VGG-16在CIFAR10分类任务上的敏感度曲线示意图: + +
+ +
+
+图1-2 VGG-16敏感度示例 +
+ + +考虑到不同的模型在不同的任务上的精度数值差别较大,甚至不在同一个量级,所以,PaddleSlim在计算和存储卷积层敏感度时,使用的是精度的损失比例。如图1-3所示,为PaddleSlim计算出的MobileNetV1-YOLOv3在VOC检测任务上的敏感度示意图,其中,纵轴为精度损失: + +
+ +
+
+图1-3 用精度损失表示的敏感度 +
+ + +#### 敏感度计算 + +调用`pruner`对象的`sensitive`方法进行敏感度分析,在调用`sensitive`之前,我们简单对`model.evaluate`进行包装,使其符合`sensitive`接口的规范。执行如下代码,会进行敏感度计算,并将计算结果存入本地文件系统: + +```python +def eval_fn(): + result = model.evaluate( + val_dataset, + batch_size=128) + return result['acc_top1'] +pruner.sensitive(eval_func=eval_fn, sen_file="./sen.pickle") +``` + +上述代码执行完毕后,敏感度信息会存放在pruner对象中,可以通过以下方式查看敏感度信息内容: + +```python +print(pruner.sensitive()) +``` + +### 1.2 根据敏感度数据对模型进行裁剪 + +选定模型的裁剪比例和需要跳过不裁剪的网络层,根据敏感度分析的数据对模型进行裁剪。 +```python +plan = pruner.sensitive_prune(pruned_flops=0.4, skip_vars=["conv2d_26.w_0"]) +``` + +### 2 基于几何中心(FPGM)的剪裁算法 + +在第1节中,我们采用了L1NormFilterPruner,在对一个卷积层进行裁剪的时候通过不同`filters`的`L1 Norm`来判定`filter`的重要性。然而这种方法基于两个前提: +1. 处于同一卷积网络层中的不同卷积核L1范数的标准差足够大,从而容易找到划分重要卷积核和非重要卷积核的阈值。 +2. 每一个卷积层中均存在部分卷积核的L1范数足够小,使得这些卷积核可以被安全的移除而不损害模型的表现。 +然而在很多情况下,网络模型的参数分布往往不满足上述两个前提: +
+ +
+
+ 卷积层中卷积核的参数分布 +
+针对这一问题PaddleSlim中提供了基于卷积层中卷积核的几何中心的判定方式(Filter Pruning via Geometric Median, FPGM)。通过同一卷积层中不同卷积核的权重向量与这些卷积核所构成高维空间几何中心的距离来判断其自身在所处卷积层中的重要程度。一个卷积核的权重向量与几何中心越近,说明其所含信息与其他卷积核的信息越近似,该卷积核的可替代性也就越强,因此可以被安全的从模型中移除。 +基于FPGM的裁剪算法可以与第1节中的敏感度分析算法共同使用,只需将第一节中的 + +```python +from paddleslim.dygraph import L1NormFilterPruner +pruner = L1NormFilterPruner(net, [1, 3, 224, 224]) +``` +更改为 + +```python +from paddleslim.dygraph import FPGMFilterPruner +pruner = FPGMFilterPruner(net, [1, 3, 224, 224]) +``` + +### 3 自定义裁剪方法 + +除了FPGM以外,PaddleSlim也提供了接口给用户来实现自己的裁剪算法。详细可参见:[自定义结构化裁剪](self_defined_filter_pruning.md) + +## 裁剪结果 +| 模型 | 压缩方法 | Top-1/Top-5 Acc | 模型体积(MB) | GFLOPs |PaddleLite推理耗时| 下载 | +|:--:|:---:|:--:|:--:|:--:|:--:|:--:| +| MobileNetV1 | Baseline | 70.99%/89.68% | 17 | 1.11 |66.052\35.8014\19.5762|[下载链接](http://paddle-imagenet-models-name.bj.bcebos.com/MobileNetV1_pretrained.tar) | +| MobileNetV1 | uniform -50% | 69.4%/88.66% (-1.59%/-1.02%) | 9 | 0.56 | 33.5636\18.6834\10.5076|[下载链接](https://paddlemodels.bj.bcebos.com/PaddleSlim/MobileNetV1_uniform-50.tar) | +| MobileNetV1 | sensitive -30% | 70.4%/89.3% (-0.59%/-0.38%) | 12 | 0.74 | 46.5958\25.3098\13.6982|[下载链接](https://paddlemodels.bj.bcebos.com/PaddleSlim/MobileNetV1_sensitive-30.tar) | +| MobileNetV1 | sensitive -50% | 69.8% / 88.9% (-1.19%/-0.78%) | 9 | 0.56 |37.9892\20.7882\11.3144|[下载链接](https://paddlemodels.bj.bcebos.com/PaddleSlim/MobileNetV1_sensitive-50.tar) | +| MobileNetV1 | uniform+FPGM -50% | 69.56% / 89.14% (-1.43%/-0.53%) | 9 | 0.56 |33.5636\18.6834\10.5076|[下载链接](https://paddlemodels.bj.bcebos.com/PaddleSlim/MobileNetV1_sensitive-50.tar) | -- GitLab