From 84eb98dfbc6cfc10a245d459666b7fe81f013219 Mon Sep 17 00:00:00 2001 From: Guanghua Yu <742925032@qq.com> Date: Fri, 13 May 2022 20:26:46 +0800 Subject: [PATCH] update auto compression docs (#1104) * update auto compression docs * fix readme * fix title --- demo/auto_compression/README.md | 158 +++++------------ .../configs/CV/mbv2_ptq_hpo.yaml | 22 --- .../configs/CV/mbv2_qat_dis.yaml | 63 ------- .../configs/NLP/bert_asp_dis.yaml | 44 ----- .../configs/NLP/bert_ptq_hpo.yaml | 22 --- .../configs/NLP/bert_qat_dis.yaml | 53 ------ demo/auto_compression/detection/README.md | 8 +- .../detection/{run_main.py => run.py} | 0 .../hyperparameter_tutorial.md | 77 ++++++++ .../run.py} | 2 +- .../{demo_glue.py => nlp/run.py} | 0 demo/auto_compression/pp-humanseg/README.md | 164 ------------------ demo/auto_compression/run_gelu.sh | 9 - demo/auto_compression/run_imagenet.sh | 9 - .../semantic_segmentation/README.md | 91 ++++++++++ .../configs/pp_humanseg_quant_dis.yaml} | 22 +-- .../configs/pp_humanseg_sparse_dis.yaml} | 0 .../run.py | 0 docs/images/dis_node.png | Bin 0 -> 100616 bytes 19 files changed, 231 insertions(+), 513 deletions(-) delete mode 100644 demo/auto_compression/configs/CV/mbv2_ptq_hpo.yaml delete mode 100644 demo/auto_compression/configs/CV/mbv2_qat_dis.yaml delete mode 100644 demo/auto_compression/configs/NLP/bert_asp_dis.yaml delete mode 100644 demo/auto_compression/configs/NLP/bert_ptq_hpo.yaml delete mode 100644 demo/auto_compression/configs/NLP/bert_qat_dis.yaml rename demo/auto_compression/detection/{run_main.py => run.py} (100%) create mode 100644 demo/auto_compression/hyperparameter_tutorial.md rename demo/auto_compression/{demo_imagenet.py => image_classification/run.py} (98%) rename demo/auto_compression/{demo_glue.py => nlp/run.py} (100%) delete mode 100644 demo/auto_compression/pp-humanseg/README.md delete mode 100644 demo/auto_compression/run_gelu.sh delete mode 100644 demo/auto_compression/run_imagenet.sh create mode 100644 demo/auto_compression/semantic_segmentation/README.md rename demo/auto_compression/{pp-humanseg/configs/humanseg_quant_dis.yaml => semantic_segmentation/configs/pp_humanseg_quant_dis.yaml} (73%) rename demo/auto_compression/{pp-humanseg/configs/humanseg_sparse_dis.yaml => semantic_segmentation/configs/pp_humanseg_sparse_dis.yaml} (100%) rename demo/auto_compression/{pp-humanseg => semantic_segmentation}/run.py (100%) create mode 100644 docs/images/dis_node.png diff --git a/demo/auto_compression/README.md b/demo/auto_compression/README.md index e780ee03..ff26dc29 100644 --- a/demo/auto_compression/README.md +++ b/demo/auto_compression/README.md @@ -1,126 +1,62 @@ -# 使用预测模型进行量化训练示例 +# 自动压缩工具ACT(Auto Compression Tookit) -预测模型保存接口: -动态图使用``paddle.jit.save``保存; -静态图使用``paddle.static.save_inference_model``保存。 +## 简介 +PaddleSlim推出全新自动压缩工具(ACT),旨在通过Source-Free的方式,自动对预测模型进行压缩,压缩后模型可直接部署应用。ACT自动压缩工具主要特性如下: +- **『更便捷』**:开发者无需了解或修改模型源码,直接使用导出的预测模型进行压缩; +- **『更智能』**:开发者简单配置即可启动压缩,ACT工具会自动优化得到最好预测模型; +- **『更丰富』**:ACT中提供了量化训练、蒸馏、结构化剪枝、非结构化剪枝、多种离线量化方法及超参搜索等等,可任意搭配使用。 -本示例将介绍如何使用预测模型进行蒸馏量化训练, -首先使用接口``paddleslim.quant.quant_aware_with_infermodel``训练量化模型, -训练完成后,使用接口``paddleslim.quant.export_quant_infermodel``将训好的量化模型导出为预测模型。 -## 分类模型量化训练流程 +## 环境准备 -### 1. 准备数据 +- 安装PaddlePaddle >= 2.3版本 (从[Paddle官网](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html)下载安装) +- 安装PaddleSlim >= 2.3 或者适当develop版本 -在``demo``文件夹下创建``data``文件夹,将``ImageNet``数据集解压在``data``文件夹下,解压后``data/ILSVRC2012``文件夹下应包含以下文件: -- ``'train'``文件夹,训练图片 -- ``'train_list.txt'``文件 -- ``'val'``文件夹,验证图片 -- ``'val_list.txt'``文件 +## 快速上手 -### 2. 准备需要量化的模型 - -飞桨图像识别套件PaddleClas是飞桨为工业界和学术界所准备的一个图像识别任务的工具集,本示例使用该套件产出imagenet分类模型。 -#### 2.1 下载PaddleClas release/2.3分支代码 - -解压后,进入PaddleClas目录 -``` -cd PaddleClas-release-2.3 -``` -#### 2.2 下载MobileNetV2预训练模型 -在PaddleClas根目录创建``pretrained``文件夹: -``` -mkdir pretrained +```python +# 导入依赖包 +from paddleslim.auto_compression.config_helpers import load_config +from paddleslim.auto_compression import AutoCompression +from paddleslim.common.imagenet_reader import reader +# 加载配置文件 +compress_config, train_config = load_slim_config("./image_classification/mobilenetv1_qat_dis.yaml") +# 定义DataLoader +train_loader = reader(mode='test') # DataLoader +# 开始自动压缩 +ac = AutoCompression( + model_dir="./mobilenetv1_infer", + model_filename="model.pdmodel", + params_filename="model.pdiparams", + save_dir="output", + strategy_config=compress_config, + train_config=train_config, + train_dataloader=train_loader, + eval_callback=None) # eval_function to verify accuracy +ac.compress() ``` -下载预训练模型 -分类预训练模型库地址 -MobileNetV2预训练模型地址 -执行下载命令: -``` -wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_pretrained.pdparams -O ./pretrained/MobileNetV2_pretrained.pdparams -``` +**提示:** +- DataLoader传入的数据集是待压缩模型所用的数据集,DataLoader继承自`paddle.io.DataLoader`。 +- 如无需验证自动压缩过程中模型的精度,`eval_callback`可不传入function,程序会自动根据损失来选择最优模型。 +- 自动压缩Config中定义量化、蒸馏、剪枝等压缩算法会合并执行,压缩策略有:量化+蒸馏,剪枝+蒸馏等等。 -#### 2.3 导出预测模型 -PaddleClas代码库根目录执行如下命令,导出预测模型 -``` -python tools/export_model.py \ - -c ppcls/configs/ImageNet/MobileNetV2/MobileNetV2.yaml \ - -o Global.pretrained_model=pretrained/MobileNetV2_pretrained \ - -o Global.save_inference_dir=infermodel_mobilenetv2 -``` -#### 2.4 测试模型精度 -拷贝``infermodel_mobilenetv2``文件夹到``PaddleSlim/demo/auto_compression/``文件夹。 -``` -cd PaddleSlim/demo/auto_compression/ -``` -使用[eval.py](../quant/quant_post/eval.py)脚本得到模型的分类精度,压缩后的模型也可以使用同一个脚本测试精度: -``` -python ../quant/quant_post/eval.py --model_path infermodel_mobilenetv2 --model_name inference.pdmodel --params_name inference.pdiparams -``` -精度输出为: -``` -top1_acc/top5_acc= [0.71918 0.90568] -``` +## 应用示例 -### 3. 进行多策略融合压缩 +#### [图像分类](./image_classification) -每一个小章节代表一种多策略融合压缩,不代表需要串行执行。 +#### [目标检测](./detection) -### 3.1 进行量化蒸馏压缩 -蒸馏量化训练示例脚本为[demo_imagenet.py](./demo_imagenet.py),使用接口``paddleslim.auto_compression.AutoCompression``对模型进行量化训练。运行命令为: -``` -python demo_imagenet.py \ - --model_dir='infermodel_mobilenetv2' \ - --model_filename='inference.pdmodel' \ - --params_filename='./inference.pdiparams' \ - --save_dir='./save_qat_mbv2/' \ - --devices='gpu' \ - --batch_size=64 \ - --data_dir='../data/ILSVRC2012/' \ - --config_path='./configs/CV/mbv2_qat_dis.yaml' -``` +#### [语义分割](./semantic_segmentation) -### 3.2 进行离线量化超参搜索压缩 -离线量化超参搜索压缩示例脚本为[demo_imagenet.py](./demo_imagenet.py),使用接口``paddleslim.auto_compression.AutoCompression``对模型进行压缩。运行命令为: -``` -python demo_imagenet.py \ - --model_dir='infermodel_mobilenetv2' \ - --model_filename='inference.pdmodel' \ - --params_filename='./inference.pdiparams' \ - --save_dir='./save_ptq_mbv2/' \ - --devices='gpu' \ - --batch_size=64 \ - --data_dir='../data/ILSVRC2012/' \ - --config_path='./configs/CV/mbv2_ptq_hpo.yaml' -``` +#### [NLP](./nlp) -### 3.3 进行剪枝蒸馏策略融合压缩 -注意:本示例为对BERT模型进行ASP稀疏。 -首先参考[脚本](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/language_model/bert#%E9%A2%84%E6%B5%8B)得到可部署的模型,或者下载SST-2数据集上的示例模型[SST-2-BERT](https://paddle-qa.bj.bcebos.com/PaddleSlim_datasets/static_bert_models.tar.gz)。 -剪枝蒸馏压缩示例脚本为[demo_glue.py](./demo_glue.py),使用接口``paddleslim.auto_compression.AutoCompression``对模型进行压缩。运行命令为: -``` -python demo_glue.py \ - --model_dir='./static_bert_models/' \ - --model_filename='bert.pdmodel' \ - --params_filename='bert.pdiparams' \ - --save_dir='./save_asp_bert/' \ - --devices='gpu' \ - --batch_size=32 \ - --task='sst-2' \ - --config_path='./configs/NLP/bert_asp_dis.yaml' -``` +#### 即将发布 +- [ ] 更多自动压缩应用示例 +- [ ] X2Paddle模型自动压缩示例 -### 3.4 进行非结构化稀疏蒸馏策略融合压缩 -非结构化稀疏蒸馏压缩示例脚本为[demo_imagenet.py](./demo_imagenet.py),使用接口``paddleslim.auto_compression.AutoCompression``对模型进行压缩。运行命令为: -``` -python demo_imagenet.py \ - --model_dir='infermodel_mobilenetv2' \ - --model_filename='inference.pdmodel' \ - --params_filename='./inference.pdiparams' \ - --save_dir='./save_asp_mbv2/' \ - --devices='gpu' \ - --batch_size=64 \ - --data_dir='../data/ILSVRC2012/' \ - --config_path='./configs/CV/xxx.yaml' -``` +## 其他 + +- ACT可以自动处理常见的预测模型,如果有更特殊的改造需求,可以参考[ACT超参配置教程](./hyperparameter_tutorial.md)来进行单独配置压缩策略。 + +- 如果你发现任何关于ACT自动压缩工具的问题或者是建议, 欢迎通过[GitHub Issues](https://github.com/PaddlePaddle/PaddleSlim/issues)给我们提issues。同时欢迎贡献更多优秀模型,共建开源生态。 diff --git a/demo/auto_compression/configs/CV/mbv2_ptq_hpo.yaml b/demo/auto_compression/configs/CV/mbv2_ptq_hpo.yaml deleted file mode 100644 index 02962a91..00000000 --- a/demo/auto_compression/configs/CV/mbv2_ptq_hpo.yaml +++ /dev/null @@ -1,22 +0,0 @@ -HyperParameterOptimization: - batch_num: - - 4 - - 16 - bias_correct: - - true - hist_percent: - - 0.999 - - 0.99999 - max_quant_count: 20 - ptq_algo: - - KL - - hist - weight_quantize_type: - - channel_wise_abs_max -Quantization: - activation_bits: 8 - quantize_op_types: - - conv2d - - depthwise_conv2d - - mul - weight_bits: 8 diff --git a/demo/auto_compression/configs/CV/mbv2_qat_dis.yaml b/demo/auto_compression/configs/CV/mbv2_qat_dis.yaml deleted file mode 100644 index e1b3702e..00000000 --- a/demo/auto_compression/configs/CV/mbv2_qat_dis.yaml +++ /dev/null @@ -1,63 +0,0 @@ -Distillation: - distill_lambda: 1.0 - distill_loss: l2_loss - distill_node_pair: - - teacher_conv2d_54.tmp_0 - - conv2d_54.tmp_0 - - teacher_conv2d_55.tmp_0 - - conv2d_55.tmp_0 - - teacher_conv2d_57.tmp_0 - - conv2d_57.tmp_0 - - teacher_elementwise_add_0 - - elementwise_add_0 - - teacher_conv2d_61.tmp_0 - - conv2d_61.tmp_0 - - teacher_elementwise_add_1 - - elementwise_add_1 - - teacher_elementwise_add_2 - - elementwise_add_2 - - teacher_conv2d_67.tmp_0 - - conv2d_67.tmp_0 - - teacher_elementwise_add_3 - - elementwise_add_3 - - teacher_elementwise_add_4 - - elementwise_add_4 - - teacher_elementwise_add_5 - - elementwise_add_5 - - teacher_conv2d_75.tmp_0 - - conv2d_75.tmp_0 - - teacher_elementwise_add_6 - - elementwise_add_6 - - teacher_elementwise_add_7 - - elementwise_add_7 - - teacher_conv2d_81.tmp_0 - - conv2d_81.tmp_0 - - teacher_elementwise_add_8 - - elementwise_add_8 - - teacher_elementwise_add_9 - - elementwise_add_9 - - teacher_conv2d_87.tmp_0 - - conv2d_87.tmp_0 - - teacher_linear_1.tmp_0 - - linear_1.tmp_0 - merge_feed: true - teacher_model_dir: ./infermodel_mobilenetv2 - teacher_model_filename: inference.pdmodel - teacher_params_filename: inference.pdiparams -Quantization: - activation_bits: 8 - is_full_quantize: false - not_quant_pattern: - - skip_quant - quantize_op_types: - - conv2d - - depthwise_conv2d - weight_bits: 8 -TrainConfig: - epochs: 1 - eval_iter: 1000 - learning_rate: 0.0001 - optimizer: SGD - optim_args: - weight_decay: 4.0e-05 - origin_metric: 0.765 diff --git a/demo/auto_compression/configs/NLP/bert_asp_dis.yaml b/demo/auto_compression/configs/NLP/bert_asp_dis.yaml deleted file mode 100644 index c6d998b5..00000000 --- a/demo/auto_compression/configs/NLP/bert_asp_dis.yaml +++ /dev/null @@ -1,44 +0,0 @@ -Distillation: - distill_lambda: 1.0 - distill_loss: l2_loss - distill_node_pair: - - teacher_tmp_9 - - tmp_9 - - teacher_tmp_12 - - tmp_12 - - teacher_tmp_15 - - tmp_15 - - teacher_tmp_18 - - tmp_18 - - teacher_tmp_21 - - tmp_21 - - teacher_tmp_24 - - tmp_24 - - teacher_tmp_27 - - tmp_27 - - teacher_tmp_30 - - tmp_30 - - teacher_tmp_33 - - tmp_33 - - teacher_tmp_36 - - tmp_36 - - teacher_tmp_39 - - tmp_39 - - teacher_tmp_42 - - tmp_42 - - teacher_linear_147.tmp_1 - - linear_147.tmp_1 - merge_feed: true - teacher_model_dir: static_bert_models - teacher_model_filename: bert.pdmodel - teacher_params_filename: bert.pdiparams -Prune: - prune_algo: asp -TrainConfig: - epochs: 3 - eval_iter: 1000 - learning_rate: 2.0e-05 - optim_args: - weight_decay: 0.0 - optimizer: AdamW - origin_metric: 0.93 diff --git a/demo/auto_compression/configs/NLP/bert_ptq_hpo.yaml b/demo/auto_compression/configs/NLP/bert_ptq_hpo.yaml deleted file mode 100644 index 02962a91..00000000 --- a/demo/auto_compression/configs/NLP/bert_ptq_hpo.yaml +++ /dev/null @@ -1,22 +0,0 @@ -HyperParameterOptimization: - batch_num: - - 4 - - 16 - bias_correct: - - true - hist_percent: - - 0.999 - - 0.99999 - max_quant_count: 20 - ptq_algo: - - KL - - hist - weight_quantize_type: - - channel_wise_abs_max -Quantization: - activation_bits: 8 - quantize_op_types: - - conv2d - - depthwise_conv2d - - mul - weight_bits: 8 diff --git a/demo/auto_compression/configs/NLP/bert_qat_dis.yaml b/demo/auto_compression/configs/NLP/bert_qat_dis.yaml deleted file mode 100644 index bb268748..00000000 --- a/demo/auto_compression/configs/NLP/bert_qat_dis.yaml +++ /dev/null @@ -1,53 +0,0 @@ -Distillation: - distill_lambda: 1.0 - distill_loss: l2_loss - distill_node_pair: - - teacher_tmp_9 - - tmp_9 - - teacher_tmp_12 - - tmp_12 - - teacher_tmp_15 - - tmp_15 - - teacher_tmp_18 - - tmp_18 - - teacher_tmp_21 - - tmp_21 - - teacher_tmp_24 - - tmp_24 - - teacher_tmp_27 - - tmp_27 - - teacher_tmp_30 - - tmp_30 - - teacher_tmp_33 - - tmp_33 - - teacher_tmp_36 - - tmp_36 - - teacher_tmp_39 - - tmp_39 - - teacher_tmp_42 - - tmp_42 - - teacher_linear_147.tmp_1 - - linear_147.tmp_1 - merge_feed: true - teacher_model_dir: ../auto-compression_origin/static_bert_models - teacher_model_filename: bert.pdmodel - teacher_params_filename: bert.pdiparams -Quantization: - activation_bits: 8 - is_full_quantize: false - not_quant_pattern: - - skip_quant - quantize_op_types: - - conv2d - - depthwise_conv2d - - mul - - matmul - weight_bits: 8 -TrainConfig: - epochs: 3 - eval_iter: 1000 - learning_rate: 0.0001 - optimizer: SGD - optim_args: - weight_decay: 4.0e-05 - origin_metric: 0.93 diff --git a/demo/auto_compression/detection/README.md b/demo/auto_compression/detection/README.md index 9830a6ab..2cc064a3 100644 --- a/demo/auto_compression/detection/README.md +++ b/demo/auto_compression/detection/README.md @@ -61,9 +61,9 @@ tar -xf ppyoloe_crn_l_300e_coco.tar ### 4. 测试模型精度 -使用[run_main.py](run_main.py)脚本得到模型的mAP: +使用[run.py](run.py)脚本得到模型的mAP: ``` -python3.7 run_main.py --config_path=./configs/ppyoloe_l_qat_dist.yaml --eval=True +python run.py --config_path=./configs/ppyoloe_l_qat_dist.yaml --eval=True ``` **注意**:TinyPose模型暂不支持精度测试。 @@ -71,9 +71,9 @@ python3.7 run_main.py --config_path=./configs/ppyoloe_l_qat_dist.yaml --eval=Tru ## 开始自动压缩 ### 进行量化蒸馏自动压缩 -蒸馏量化自动压缩示例通过[run_main.py](run_main.py)脚本启动,会使用接口``paddleslim.auto_compression.AutoCompression``对模型进行量化训练。具体运行命令为: +蒸馏量化自动压缩示例通过[run.py](run.py)脚本启动,会使用接口``paddleslim.auto_compression.AutoCompression``对模型进行量化训练。具体运行命令为: ``` -python run_main.py --config_path=./configs/ppyoloe_l_qat_dist.yaml --save_dir='./output/' --devices='gpu' +python run.py --config_path=./configs/ppyoloe_l_qat_dist.yaml --save_dir='./output/' --devices='gpu' ``` diff --git a/demo/auto_compression/detection/run_main.py b/demo/auto_compression/detection/run.py similarity index 100% rename from demo/auto_compression/detection/run_main.py rename to demo/auto_compression/detection/run.py diff --git a/demo/auto_compression/hyperparameter_tutorial.md b/demo/auto_compression/hyperparameter_tutorial.md new file mode 100644 index 00000000..c86dcfe7 --- /dev/null +++ b/demo/auto_compression/hyperparameter_tutorial.md @@ -0,0 +1,77 @@ + +# ACT超参详细教程 + +## 各压缩方法超参解析 + +#### 配置定制量化方案 + +量化参数主要设置量化比特数和量化op类型,其中量化op包含卷积层(conv2d, depthwise_conv2d)和全连接层(mul, matmul_v2)。以下为只量化卷积层的示例: +```yaml +Quantization: + use_pact: true # 量化训练是否使用PACT方法 + activation_bits: 8 # 激活量化比特数 + weight_bits: 8 # 权重量化比特数 + activation_quantize_type: 'range_abs_max' # 激活量化方式 + weight_quantize_type: 'channel_wise_abs_max' # 权重量化方式 + is_full_quantize: false # 是否全量化 + not_quant_pattern: [skip_quant] # 跳过量化层的name_scpoe命名(保持默认即可) + quantize_op_types: [conv2d, depthwise_conv2d] # 量化OP列表 +``` + +#### 配置定制蒸馏策略 + +蒸馏参数主要设置蒸馏节点(`distill_node_pair`)和教师预测模型路径。蒸馏节点需包含教师网络节点和对应的学生网络节点,其中教师网络节点名称将在程序中自动添加 “teacher_” 前缀,如下所示: +```yaml +Distillation: + distill_lambda: 1.0 + distill_loss: l2_loss + distill_node_pair: + - teacher_relu_30.tmp_0 + - relu_30.tmp_0 + merge_feed: true + teacher_model_dir: ./inference_model + teacher_model_filename: model.pdmodel + teacher_params_filename: model.pdiparams +``` + +#### 配置定制非结构化稀疏策略 + +非结构化稀疏参数设置如下所示,其中参数含义详见[非结构化稀疏API文档](https://github.com/PaddlePaddle/PaddleSlim/blob/develop/docs/zh_cn/api_cn/dygraph/pruners/unstructured_pruner.rst): +```yaml +UnstructurePrune: + prune_strategy: gmp + prune_mode: ratio + pruned_ratio: 0.75 + gmp_config: + stable_iterations: 0 + pruning_iterations: 4500 + tunning_iterations: 4500 + resume_iteration: -1 + pruning_steps: 100 + initial_ratio: 0.15 + prune_params_type: conv1x1_only + local_sparsity: True +``` + +#### 配置训练超参 + +训练参数主要设置学习率、训练次数(epochs)和优化器等。 +```yaml +TrainConfig: + epochs: 14 + eval_iter: 400 + learning_rate: 5.0e-03 + optimizer: SGD + optim_args: + weight_decay: 0.0005 +``` + +## 其他参数配置 + +#### 1.自动蒸馏效果不理想,怎么自主选择蒸馏节点? + +首先使用[Netron工具](https://netron.app/) 可视化`model.pdmodel`模型文件,选择模型中某些层输出Tensor名称,对蒸馏节点进行配置。(一般选择Backbone或网络的输出等层进行蒸馏) + +
+ +
diff --git a/demo/auto_compression/demo_imagenet.py b/demo/auto_compression/image_classification/run.py similarity index 98% rename from demo/auto_compression/demo_imagenet.py rename to demo/auto_compression/image_classification/run.py index aaa8a0a9..86c16692 100644 --- a/demo/auto_compression/demo_imagenet.py +++ b/demo/auto_compression/image_classification/run.py @@ -107,6 +107,6 @@ if __name__ == '__main__': train_config=train_config, train_dataloader=train_dataloader, eval_callback=eval_function, - eval_dataloader=eader_wrapper(eval_reader(data_dir, 64))) + eval_dataloader=reader_wrapper(eval_reader(data_dir, 64))) ac.compress() diff --git a/demo/auto_compression/demo_glue.py b/demo/auto_compression/nlp/run.py similarity index 100% rename from demo/auto_compression/demo_glue.py rename to demo/auto_compression/nlp/run.py diff --git a/demo/auto_compression/pp-humanseg/README.md b/demo/auto_compression/pp-humanseg/README.md deleted file mode 100644 index 38de8450..00000000 --- a/demo/auto_compression/pp-humanseg/README.md +++ /dev/null @@ -1,164 +0,0 @@ -# 使用预测模型进行自动压缩示例 - -本示例将介绍如何使用PaddleSeg中预测模型进行自动压缩训练。 - -以[PP-HumanSeg-Lite](https://github.com/PaddlePaddle/PaddleSeg/tree/develop/contrib/PP-HumanSeg#portrait-segmentation)模型为例,使用自动压缩接口分别进行了蒸馏稀疏训练和蒸馏量化训练实验,并在SD710上使用单线程测试加速效果,其压缩结果和测速结果如下所示: -| 压缩方式 | Total IoU | 耗时(ms)
thread=1 | 加速比 | -|:-----:|:----------:|:---------:| :------:| -| Baseline | 0.9287 | 56.363 | - | -| 非结构化稀疏 | 0.9235 | 37.712 | 49.456% | -| 量化 | 0.9284 | 49.656 | 13.506% | - -## 自动压缩训练流程 - -### 1. 准备数据集 - -参考[PaddleSeg数据准备文档](https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.5/docs/data/marker/marker_cn.md) - -### 2. 准备待压缩模型 - -PaddleSeg 是基于飞桨 PaddlePaddle 开发的端到端图像分割开发套件,涵盖了高精度和轻量级等不同方向的大量高质量分割模型。 -安装 PaddleSeg 指令如下: -``` -pip install paddleseg -``` -PaddleSeg 环境依赖详见[安装文档](https://github.com/PaddlePaddle/PaddleSeg/blob/develop/docs/install_cn.md)。 - -#### 2.1 下载代码 -``` -git clone https://github.com/PaddlePaddle/PaddleSeg.git -``` -#### 2.2 准备预训练模型 - -在 PaddleSeg 目录下执行如下指令,下载预训练模型。 -``` shell -wget https://paddleseg.bj.bcebos.com/dygraph/ppseg/ppseg_lite_portrait_398x224.tar.gz -tar -xzf ppseg_lite_portrait_398x224.tar.gz -``` -#### 2.3 导出预测模型 - -在 PaddleSeg 目录下执行如下命令,则预测模型会保存在 inference_model 文件夹。 -```shell -# 设置1张可用的卡 -export CUDA_VISIBLE_DEVICES=0 -# windows下请执行以下命令 -# set CUDA_VISIBLE_DEVICES=0 -python export.py \ - --config configs/pp_humanseg_lite/pp_humanseg_lite_export_398x224.yml \ - --model_path ppseg_lite_portrait_398x224/model.pdparams \ - --save_dir inference_model - --with_softmax -``` -或直接下载 PP-HumanSeg-Lite 的预测模型: -```shell -wegt https://paddleseg.bj.bcebos.com/dygraph/ppseg/ppseg_lite_portrait_398x224_with_softmax.tar.gz -tar -xzf ppseg_lite_portrait_398x224_with_softmax.tar.gz -``` - -### 3. 多策略融合压缩 - -每一个小章节代表一种多策略融合压缩方式。 - -### 3.1 进行蒸馏稀疏压缩 -自动压缩训练需要准备 config 文件、数据集 dataloader 以及测试函数(``eval_function``)。 -#### 3.1.1 配置config - -使用自动压缩进行蒸馏和非结构化稀疏的联合训练,首先要配置 config 文件,包含蒸馏、稀疏和训练三部分参数。 - -- 蒸馏参数 - -蒸馏参数主要设置蒸馏节点(``distill_node_pair``)和教师网络测预测模型路径。蒸馏节点需包含教师网络节点和对应的学生网络节点,其中教师网络节点名称将在程序中自动添加 “teacher_” 前缀,如下所示。 -```yaml -Distillation: - distill_lambda: 1.0 - distill_loss: l2_loss - distill_node_pair: - - teacher_relu_30.tmp_0 - - relu_30.tmp_0 - merge_feed: true - teacher_model_dir: ./inference_model - teacher_model_filename: model.pdmodel - teacher_params_filename: model.pdiparams -``` -- 稀疏参数 - -稀疏参数设置如下所示,其中参数含义详见[非结构化稀疏API文档](https://github.com/PaddlePaddle/PaddleSlim/blob/develop/docs/zh_cn/api_cn/dygraph/pruners/unstructured_pruner.rst)。 -```yaml -UnstructurePrune: - prune_strategy: gmp - prune_mode: ratio - pruned_ratio: 0.75 - gmp_config: - stable_iterations: 0 - pruning_iterations: 4500 - tunning_iterations: 4500 - resume_iteration: -1 - pruning_steps: 100 - initial_ratio: 0.15 - prune_params_type: conv1x1_only - local_sparsity: True -``` - -- 训练参数 - -训练参数主要设置学习率、训练次数(epochs)和优化器等。 -```yaml -TrainConfig: - epochs: 14 - eval_iter: 400 - learning_rate: 5.0e-03 - optimizer: SGD - optim_args: - weight_decay: 0.0005 -``` -#### 3.1.2 准备 dataloader 和测试函数 -准备好数据集后,需将训练数据封装成 dict 类型传入自动压缩接口,可参考以下函数进行封装。测试函数用于测试模型精度,需在静态图模式下实现。 -```python -def reader_wrapper(reader): - def gen(): - for i, data in enumerate(reader()): - imgs = np.array(data[0]) - yield {"x": imgs} - return gen -``` -> 注:该dict类型的key值要和保存预测模型时的输入名称保持一致。 - -#### 3.1.3 开启训练 - -将训练数据集 dataloader 和测试函数传入接口 ``paddleslim.auto_compression.AutoCompression``,对模型进行非结构化稀疏训练。运行指令如下: -```shell -python run.py \ - --model_dir='inference_model' \ - --model_filename='inference.pdmodel' \ - --params_filename='./inference.pdiparams' \ - --save_dir='./save_model' \ - --config_path='configs/humanseg_sparse_dis.yaml' -``` - -### 3.2 进行蒸馏量化压缩 -#### 3.2.1 配置config -使用自动压缩进行量化训练,首先要配置config文件,包含蒸馏、量化和训练三部分参数。其中蒸馏和训练参数与稀疏训练类似,下面主要介绍量化参数的设置。 -- 量化参数 - -量化参数主要设置量化比特数和量化op类型,其中量化op包含卷积层(conv2d, depthwise_conv2d)和全连接层(matmul)。以下为只量化卷积层的示例: -```yaml -Quantization: - activation_bits: 8 - weight_bits: 8 - is_full_quantize: false - not_quant_pattern: - - skip_quant - quantize_op_types: - - conv2d - - depthwise_conv2d -``` -#### 3.2.2 开启训练 -将数据集 dataloader 和测试函数(``eval_function``)传入接口``paddleslim.auto_compression.AutoCompression``,对模型进行量化训练。运行指令如下: -``` -python run.py \ - --model_dir='inference_model' \ - --model_filename='inference.pdmodel' \ - --params_filename='./inference.pdiparams' \ - --save_dir='./save_model' \ - --config_path='configs/humanseg_quant_dis.yaml' -``` diff --git a/demo/auto_compression/run_gelu.sh b/demo/auto_compression/run_gelu.sh deleted file mode 100644 index 8391fe73..00000000 --- a/demo/auto_compression/run_gelu.sh +++ /dev/null @@ -1,9 +0,0 @@ -python3.7 demo_glue.py \ - --model_dir='./static_bert_models/' \ - --model_filename='bert.pdmodel' \ - --params_filename='bert.pdiparams' \ - --save_dir='./save_asp_bert/' \ - --devices='cpu' \ - --batch_size=32 \ - --task='sst-2' \ - --config_path='./configs/NLP/bert_asp_dis.yaml' diff --git a/demo/auto_compression/run_imagenet.sh b/demo/auto_compression/run_imagenet.sh deleted file mode 100644 index 376554f3..00000000 --- a/demo/auto_compression/run_imagenet.sh +++ /dev/null @@ -1,9 +0,0 @@ -python3.7 demo_imagenet.py \ - --model_dir='infermodel_mobilenetv2' \ - --model_filename='inference.pdmodel' \ - --params_filename='./inference.pdiparams' \ - --save_dir='./save_qat_mbv2/' \ - --devices='cpu' \ - --batch_size=2 \ - --data_dir='../data/ILSVRC2012/' \ - --config_path='./configs/CV/mbv2_ptq_hpo.yaml' diff --git a/demo/auto_compression/semantic_segmentation/README.md b/demo/auto_compression/semantic_segmentation/README.md new file mode 100644 index 00000000..1a829ccf --- /dev/null +++ b/demo/auto_compression/semantic_segmentation/README.md @@ -0,0 +1,91 @@ +# 语义分割自动压缩 + +目录: +- [1.简介](#1简介) +- [2.Benchmark](#2Benchmark) +- [3.开始自动压缩](#开始自动压缩) + - [3.1 环境准备](#31-环境准备) + - [3.2 准备数据集](#32-准备数据集) + - [3.3 准备预测模型](#33-准备预测模型) + - [3.4 自动压缩并产出模型](#34-自动压缩并产出模型) +- [4.预测部署](#4预测部署) +- [5.FAQ](5FAQ) + +## 1.简介 + +语义分割是计算机视觉领域重要的一个研究方向,在很多场景中均有应用落地,语义分割模型的部署落地的性能也倍受关注,自动压缩工具(ACT)致力于更便捷的自动压缩优化模型,达到压缩模型体积、加速模型预测的效果。 + +## 2.Benchmark + +- [PP-HumanSeg-Lite](https://github.com/PaddlePaddle/PaddleSeg/tree/develop/contrib/PP-HumanSeg#portrait-segmentation) + +| 模型 | 策略 | Total IoU | 耗时(ms)
thread=1 | 配置文件 | Inference模型 | +|:-----:|:-----:|:----------:|:---------:| :------:| :------:| +| PP-HumanSeg-Lite | Baseline | 0.9287 | 56.363 | - | [model](https://paddleseg.bj.bcebos.com/dygraph/ppseg/ppseg_lite_portrait_398x224_with_softmax.tar.gz) | +| PP-HumanSeg-Lite | 非结构化稀疏+蒸馏 | 0.9235 | 37.712 | [config](./configs/pp_human_sparse_dis.yaml)| - | +| PP-HumanSeg-Lite | 量化+蒸馏 | 0.9284 | 49.656 | [config](./configs/pp_human_sparse_dis.yaml) | - | + +- 测试环境:`SDM710 2*A75(2.2GHz) 6*A55(1.7GHz)`; +- 测试数据集:AISegment + PP-HumanSeg14K + 内部自建数据集。 + +下面将以开源数据集为例介绍如何进行自动压缩。 + +## 3.开始自动压缩 + +#### 3.1 环境准备 + +- PaddlePaddle >= 2.2 (从[Paddle官网](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html)下载安装) +- PaddleSlim >= 2.3 或者适当develop版本 +- PaddleSeg >= 2.5 + +```shell +pip install paddleslim +pip install paddleseg +``` + +注:安装[PaddleSeg](https://github.com/PaddlePaddle/PaddleSeg)的目的只是为了直接使用PaddleSeg中的Dataloader组件,不涉及模型组网等。 + +#### 3.2 准备数据集 + +开发者可下载开源数据集或自定义语义分割数据集,例如PP-HumanSeg-Lite模型中使用的语义分割数据集[PP-HumanSeg14K](https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.5/contrib/PP-HumanSeg/paper.md#pp-humanseg14k-a-large-scale-teleconferencing-video-dataset)可从官方渠道下载。 + +如果是自定义数据,请参考[PaddleSeg数据准备文档](https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.5/docs/data/marker/marker_cn.md)来检查对齐数据格式即可。 + +#### 3.3 准备预测模型 + +预测模型的格式为:`model.pdmodel` 和 `model.pdiparams`两个,带`pdmodel`的是模型文件,带`pdiparams`后缀的是权重文件。 + +注:其他像`__model__`和`__params__`分别对应`model.pdmodel` 和 `model.pdiparams`文件。 + +- 如果想快速体验,可直接下载PP-HumanSeg-Lite 的预测模型: + +```shell +wegt https://paddleseg.bj.bcebos.com/dygraph/ppseg/ppseg_lite_portrait_398x224_with_softmax.tar.gz +tar -xzf ppseg_lite_portrait_398x224_with_softmax.tar.gz +``` + +也可进入[PaddleSeg](https://github.com/PaddlePaddle/PaddleSeg) 中导出所需预测模型。 + +#### 3.4 自动压缩并产出模型 + +首先要配置config文件中模型路径、数据集路径、蒸馏、量化、稀疏化和训练等部分的参数,配置完成后便可开始自动压缩。 + +```shell +python run.py \ + --model_dir='inference_model' \ + --model_filename='inference.pdmodel' \ + --params_filename='./inference.pdiparams' \ + --save_dir='./save_model' \ + --config_path='configs/humanseg_sparse_dis.yaml' +``` + +压缩完成后会在`save_dir`中产出压缩好的预测模型,可直接预测部署。 + + +## 4.预测部署 + +- [Paddle Inference Python部署](https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.5/docs/deployment/inference/python_inference.md) +- [Paddle Inference C++部署](https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.5/docs/deployment/inference/cpp_inference.md) +- [Paddle Lite部署](https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.5/docs/deployment/lite/lite.md) + +## 5.FAQ diff --git a/demo/auto_compression/pp-humanseg/configs/humanseg_quant_dis.yaml b/demo/auto_compression/semantic_segmentation/configs/pp_humanseg_quant_dis.yaml similarity index 73% rename from demo/auto_compression/pp-humanseg/configs/humanseg_quant_dis.yaml rename to demo/auto_compression/semantic_segmentation/configs/pp_humanseg_quant_dis.yaml index ba05eff4..0f38f9dc 100644 --- a/demo/auto_compression/pp-humanseg/configs/humanseg_quant_dis.yaml +++ b/demo/auto_compression/semantic_segmentation/configs/pp_humanseg_quant_dis.yaml @@ -2,33 +2,33 @@ Distillation: distill_lambda: 1.0 distill_loss: l2_loss distill_node_pair: - - teacher_reshape2_1.tmp_0 # + - teacher_reshape2_1.tmp_0 - reshape2_1.tmp_0 - - teacher_reshape2_3.tmp_0 # + - teacher_reshape2_3.tmp_0 - reshape2_3.tmp_0 - - teacher_reshape2_5.tmp_0 # + - teacher_reshape2_5.tmp_0 - reshape2_5.tmp_0 - teacher_reshape2_7.tmp_0 #block1 - reshape2_7.tmp_0 - - teacher_reshape2_9.tmp_0 # + - teacher_reshape2_9.tmp_0 - reshape2_9.tmp_0 - - teacher_reshape2_11.tmp_0 # + - teacher_reshape2_11.tmp_0 - reshape2_11.tmp_0 - - teacher_reshape2_13.tmp_0 # + - teacher_reshape2_13.tmp_0 - reshape2_13.tmp_0 - - teacher_reshape2_15.tmp_0 # + - teacher_reshape2_15.tmp_0 - reshape2_15.tmp_0 - - teacher_reshape2_17.tmp_0 # + - teacher_reshape2_17.tmp_0 - reshape2_17.tmp_0 - - teacher_reshape2_19.tmp_0 # + - teacher_reshape2_19.tmp_0 - reshape2_19.tmp_0 - - teacher_reshape2_21.tmp_0 # + - teacher_reshape2_21.tmp_0 - reshape2_21.tmp_0 - teacher_depthwise_conv2d_14.tmp_0 # block2 - depthwise_conv2d_14.tmp_0 - teacher_depthwise_conv2d_15.tmp_0 - depthwise_conv2d_15.tmp_0 - - teacher_reshape2_23.tmp_0 #block1 + - teacher_reshape2_23.tmp_0 #block3 - reshape2_23.tmp_0 - teacher_relu_30.tmp_0 # final_conv - relu_30.tmp_0 diff --git a/demo/auto_compression/pp-humanseg/configs/humanseg_sparse_dis.yaml b/demo/auto_compression/semantic_segmentation/configs/pp_humanseg_sparse_dis.yaml similarity index 100% rename from demo/auto_compression/pp-humanseg/configs/humanseg_sparse_dis.yaml rename to demo/auto_compression/semantic_segmentation/configs/pp_humanseg_sparse_dis.yaml diff --git a/demo/auto_compression/pp-humanseg/run.py b/demo/auto_compression/semantic_segmentation/run.py similarity index 100% rename from demo/auto_compression/pp-humanseg/run.py rename to demo/auto_compression/semantic_segmentation/run.py diff --git a/docs/images/dis_node.png b/docs/images/dis_node.png new file mode 100644 index 0000000000000000000000000000000000000000..897000505f6acdeac7e8ebeab19cb7ff17672892 GIT binary patch literal 100616 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ⓈlL;j$-xwM`D0e#dHRW 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

_Dl6(eEs;?c`~ z&RCz13odRpCN7m8r9SSV>Ju~4g^oii%K759kh-9$S33f2;<N`lFPb z`TD%Qb+cDNlXZVunRW9#MKQFGB7zAOMKjZ~o>-OEd4QwXa)JaD%b#2NS#ntJP>0kt zbXFFILb|$r=Z@pzNFzFL=xs9aO7vO>wV*y3QuY}2^id)$33z@|Q&h0Ydwz><(zc)s z{voG)CTmN?q49-M$Z=5id~kQX%ZCff^Ak$szw5n0KVT8eVQrsX@I0q%A{GxIQ8!d# zBpqX?NuUyl1u(_Z*OP$y(zdGlXZl5tzo4y4SM)TLn$ztw@eL`S=WM>7v-#jvYxO2g zNiMRkR}tZ?3lg|qWtIYdlLA{b&gFw!cj|nyUo11Pfc+%4wOV5oA`c*WKAiLuX#1DO9 zS(|bc8}=XUQ%^X<-YHpOxSA;SB`v*@lg6;-rG|5n?yLmso}d$Il;@gHcmLeG(eh$< z{aYa*7{rKF5$BWr{W#)HCsUK6_U@K~@@7tXd7o$BL+%Zi1r15!UmRuB_n{)dv8MT_ zu_s8~ZH%1C#!sMa%>Zz$R1mcMV2mRB;K*_kknx1ubsuYD4g|6qeIdftwiH(x3ht9E zKMeFOqME>ARsCXZ@4VkYi7sIlxaaxh)bD~F zWZ=royd8p~Wj@F@2ufiTJWI9#V{2+Elh*7w1)L2UAu=l{J;SdkNe<8)K}AG-G7gR* zGJ|8uBw)Roh8ilw3CN;pMg!Py59lf8)!EqsYmSL`^4UwWkofIBfEoj0mD5q0a2X!b zC}?1tb+r~M{5o$19I2B}oLuAd<$23SlaAn*9TR0$(%T9l>VL4{2!2y=lXSvpbNy=79?d>IJ9nND;^#3u$x;A5<Z!6$6`vtF zV;oY`&hPdr8iv#2zu70j1R0str}pIYliecMAi zd~3SJ%6%j~**RqlDKK;Ch=`Q?u;3$k2y)f0g1S0jr+;`BsM2d*Rfm|YrJ6U?0At;s zRZ-9adx)vwJ>l8LP80bckV3o+lV3N8Q$YA4KU0W#(C@%vbBID=u}3Ynk3Vgdm|;hK zD+8UllUT~%gwy8ugp(9;c;2QnP6~$25QVH$Gv!2*@V_HQC9aPAjgY@KaDBin<)7SPRde z2=~xUg6XTR)f=-N2T;Yg^zOn$JsA71*dy|EAd=eN3!d$uinGi$upKWkbHp*}(LP%8 zWlx<=i%I1+bD$sgyU_IDgSA_3O;fLu-VW`2Um^iZNe&2j}+-x3KlCfuB zsszqvQ$eA0b~q}*E0j5>w;77-+kzd=>x`-6?5V5YV9D+oG~`62`Mot;t^L@dqj!yQ zO}o~oD)c1&*4kx^zd*NmFJ`ea-5)D1uL|&xD?8g`0U=m$?)AW{5!hj<`%YS-iJ)NZE?Apiay;Vs zBzmg+yeQn)0gHW5&88G9V-+ss7}3>ecDUXEA#__jls5e36Y7erifl8MII+?*XFrOj zQP8XGR~|gA&<*0Zwctqml?fzCQjs6^`Jy?rg~DjZFI$`WzM>aGt5ncGht-KTr_Q2d zARIDfwTrX-cfA;wS2#kDN$%6PSPdS%S=-GvG^39)>y!!eZiFJuJuKsqk+WB7 z(^{k9%qDupx=dOOhE}y#Mup0*n6UZfC)4}d$fc;VwXo%Vfwo=}aWbBL&zkLj&HkQy}>83z?^4e!N~fikzjY6{$5v^IMrq%p<3WJYiYp|6H6 z_S*qas_&K{*gzZ-kwxw9sIgw`(NU8dOgrKaxh@9duABo%8F4$V1yGd@rHfj7t3j5Z z6VBLON!%|=RtYX2tO4-Yv@yr2()us?pSsIWUSmb~Q1nove2fW_%rxuDQ=okojX@z` zbY!{C_KT1lkI|b{)`Pr*Jvq7UVgApVX;^F4P^}abWiP@@&U(=Ino?lg-pWXP#HW_h z{!wV2x7!4^STq36>3G>m9*{3)XFuf6)m z8zm1dI-m8oh1u8O>`45?;`{90#x(+uQ`O)+$iM5OWxvywn2z!d=8#jRD(eA*KnF%yKc zhHJS6pe$UW0J2QoDgAdngzTu4NMmq{c1N2HP z)0U5yizJ&xN?!2%9{I~ z>^`V;CAihy6g}1v5RNl7?cy|Nn-zuYlRqb?nK{`0slli~_>kolg~GA`_=`Db>-gqs zLm$H{vNG$CwfoS(V*jRlze*UR-DUm$0Y7I<7H4%ao7${(DtEk1j+bIS9>cnXV!wLt z3h$=n+IvPj6WMici<}TkdJI{lJn76!`w&bviA^wM<)#v`7RtgW3oFql5OnV7QXQ3_ zRISUI@ZOAUOr<-v{Uo6=sTPBToKy~}9iH(xGeZShdmMCMT4MAp#3sM<{X0AQ-(I;ntAK95f?tAw1K!^ zh5Hs&xzsG7sljUbxVvn59?CEbBFMwVxgJz^yu_!FAqopaMv5D&RY~TBxb=)PZ(^&3 z$?NV{l!imL1vb;#W2%`JdsRbSLNIPlyVpxb5mG$KPoW=1m_FOz z)gfH5wQwg$b>9s#(BwY2GM~e|7rStt`--M@?Q;*+WP`Y+2hjtr2~6150&If zjeWaR57&)v?fZ1GR4!rsyoW1;E!nKkhZNm9GK!U7rLmXYtmK+Y=gDZ0lg;@0xPa`@ zn2Z%UL?Z>~pDKTanhm)AS^rU@#-I>-&Ae6~>02-gEOPn?5eFHZ`{|-tj;-hSP> z?>ZW+QcR`zNf(f7Xl%a5wdJLU3oD#7+(E%gAF@|}#Y;i9){H+&5R3~OpPhl<hCAir@YC-+vO*fcGS~(@0b!-?VwW>==waB z2egk=m|U9|YaGFxa97)N1Eipl9l9$Kklfc(IvO9KwOPYJi-UC`#j-1b3U@$XW5W?k zyj-nL_22CzSMuDy?Y~Ap_y`m21$FhK`z|V zuC<{jDW)3Ro(|4EOVSJbf$k|2QE2?#z$)VgZWGwneZmFFh0)_IN0BXd5dK_;xwZ=Y ztDTDq-<90<#iJ~eJAErTc72n2(p&Oz9*q`y z$0Cw>4r5~Ocn;>Z#kNUEMmN4rnU~KN@P2Dv+R8507cpvV(uIe2;-1sTk-4NjKdHVUW+GBBdLQZfse@a@ep+zb797gQ_hgb&WP*ie ze`?gNFA|fApv`K`d98&S)RH~~k*{a8>cKMQ>*Nb3q#f~0Bxlhxf=Wc9tZ5E9sUS?F zxQzLbeuw^!{`xe4%S=kcZSWNi+09#I0ZtzK<_GX4OR?wNPmAOZKOc>WAYUqx2pr6mHpwG;E?V^)MUNE z)$s6FTis(GD~PF(a&vMJXHe3)Q^N?X)m zWnj9Po5QPO%qp&9eJutjLyO4m5!Z}aSFp{cqumbY{z_aJo#XB&`SrZH#rl#--PxAK z?P_f{J>OT2{@!*^_y9UHz;WCyoG^~)rhi*Eu-Z7A{0`#Y3)9d?yCrWu+I%$rIr`MW z-@#d$lKAF9=e9Zh{?}Cf-v&nOzt@e2%QIr`Zpa&5D9!$8TfF6&_5`zIH{AKk*U5ZN zsHPX%m$qk;VcYrv|7i0)em$cb>G1%O6|k+4(fPQlwS4pGz|*hzj0pkU2tD;^Oo5k#)4+FpH%TeFyAHVfuC5(Qn(NIjXc7I+k5f7)>4s?a3hiw9uB}C(jwTEgAvlk%H$PS~ zyL9KV3sJaRP685&&`xp!xF{hvNgtz`G14>z8SKxzktLuFH*f|q-r*H{zmp7hU~^kv z8o_LnfSGPF^#CPMtZWH9k@#3!FAJcVK2UoCC0^&zYX1+W9xV!`*&9&gc5U@gaI^R< z$O&S{W2sxJpA|-Rf9=q<&Z8zP_`xoTe;&86QgG}OuknfE%{@@=3}_Yp9~E9`_3Lgi zqS!mzgZ6i7_M1zYf~bL`uind-Khl1P!>Rd=DtY71hELj`BKh$?HkFtQYCf%UmA*Vz zl*?D-;WyL3hn!mYEu(PPOA0R8OPjK{#W|ctw?_9y71V9i%$K~ZJlESzeaLyO9CtXF0(T>2gM-M`^tAUx3?BmeF$e})pcGu<~24r!OD^0YS%=~>g!fc zF^8x7eD$YQP%oMh`r4O>`d$CTs-GFZyO8`$t=}Ij=J2on&YV z-g&;WdH=Nkha*fK8&qzbG z6AfJxyP0^DBM%d&Yd!w-lcf=!lc+a#Y%h5hQhfLBM~2EjL1QJptwMph5j!&F&nRR9$ut&OU=) zVa2}60!D6!k_Wh*d4$y{bx8H1&S%jbK~E{e?=2Gnth(#V0qI{nE7g5HBhOx1?FY(mME$_Wc3w}LaXOtOxmTPaZzMwt7U15zJ z(V6X_0*McIw%G_YAC}tEy~H$Q2enJbS+51wxNxZjo`<+HJ-)>}o9ir~a8;k+z5Fmn zQ~;O=>+FmKeG9t5{6j}F4dc$v-((P{Ws58(8m!$jl`)Z{GbPRyJ={vGu zR3VljK$sWMSCZBcfUz~l9kscZ7U$&3xZeGoX;o*MZg_R2R%#HQ6s*E$;8#mUS4!M| zJXPmgoym0LYDfh@g9-H;UXphoPzh!Tjbd3M{g^>3uxBcSOh3-;lD=%B1IqS$W94a3 zk!HzVSVvj%co+q}Aw6C2HHV#bW!H1;T&I)!t!N5hHM+cWT2bL>&z&3gr?gvd>< zcnU6HSvL3O#>3Yy_4?;VsayPwG>#kNv1sIo_m)P~_Ta@z7Cvpizw)2@lr3H^=W3EW zdiy5LhUJ&%g|4%bo9c}$2-i=){-il_^;iD|9tO zT~%8G9>~|PtC9HeN7{iROsR+InveE~W};b57{>p-(dM=5o5{{!$)Y}aN8p_1dL}k- zr5z=&tNF2&8i+Ps7L{SYZR45bmzkoUi$74mlu=mgy+Zo-nTQr$ggb?Abidsg9ho>P zHK0Yh%(STU#Nf;9!ImsChZB^CTdH+M;-iO??t-*&?)kES+{%sh(F%TXY(8T1vq9Pz zgR?&CntOFUm198qODwuVad+@&%zW^k#svU7e`rj!V}MRkab|U=?!R__rm=sH#GCHR zQwP-3VuLPN-~5$r<`*3*?P6;PaW-*$Jr?$KMq9FR-OlNP-t%)^*dC}%UPONBb{-oG zc_n~Fkf*2#H+Uj423b)fl$#n`n!hxxs^~4oq8>&QNI>2c*vt}`!Ko5cm1~D3iI+ce zs0|0y&yJ2-zoBJ(D7Wt$vf4k8vp`Kqq+vsuK}x2atKO^X%|zx8PBphjYaGH9M#v-T zZ9{lYow4h*n2f6ut8*x8W2v%;Kv!@W8ZTIV+UaAd+PqvyFm+M3>)%;e%kA!x<$027 zo{vG&9XVz0JB31)m$#ZR3WGXy`2{VJZNS*du1l^t>5i^E8yJLfbjD_KRPZ_$#F!a{TuN7(Mm<{{q_B^5HJDpC=r*DSv2&Fp-I!)D*4&Ov5 zngeqb4Wxc;7&Sc92}`tgdi>S$-a`l^X07CHn3<*CR-lWLq))Mgs^G`=_13H6p3i>mEqBV4zMeg( zZWcPo7o=oUhiNvd6Mab){e0d=`BAa}2+SZzK` z@bKAk+p2A$d5M5rqJ+(tAv(5n?0!;1vv{ic`s91d6$O7ncDwb<<{cX4Ly%|+TGU%h zcB|#w%jRxxR#?FMBuV#0RX1vA?##yiy9;W4+M4okXw!4fy|gC@qKu5Pv-uGvgZ#B0 zM+kx?1K;r!Mou$}Jf*hg=|)L5+THCdMdv^G%}eW-h)dT}V6)LP4E&?2u%_}kGsX;U zJ*TT^V&d&q{bL$yMj-zchR8@LK(d(*XgUFE`6FT_MSX;Q9|)n2U=tUptT{@A79=%MpLO~kh32ay!x2-#(ms>v4 z9j!4bV*Kh{r6VG5ddEmZ*<8L!*chWirPo`tPW)c(k{V3IH)f)|2bc+0lAk^gANdR` z=Oc>(ZO;+}Tr)Umm9HWBgg|xM#@ll$#<#*jx%lG1(ukf@N&ryLfNaEsSIr0p&v{Ta z4@-2u9YklhfU345aCa;+GEr2~4Zl7tTt22UX{f=fdslAhx>T!T8Q2Yf=D82AQIU`J z2uGBEMl_uZE|uqXQ{G=9De^&L>pj9_U3eURV?d6*px06NB}{~s*Y}A8!K73rA z_yPcfI?LSd)4o9OZ?^I&Y-t5NgpnLQm(Znzsmd}*5=J}c`yfG`@x-i4YswSbYk8}~ zJQ*?zf&Gs2O-9+XyU8KcEd@s=R!hPYKD-NSHgMmmYO!v80r6%&1jXb!ZgFvSdx?c) zSKqZh=(p25;=h*nfHdn@s%jYZ7vYWjq4naK)4%{bM#DGV`ialVTTIx8f>4P+tPs2bw+w6%|GB<=+4-0Tb&2f+O&nd7JYfHb}19Bjs_-jD_WHCblmOQr*Uoj@*4vu8E*$iNw^y-18h;v5Q?-2 z`#M@{>s_(kFL%ZmFA5pbmVmT@E)KINIB0(VF^g#8e*0dmENa!dBx6eYt7@YCuzTIb*^GrX3ii*W=sqW8 zZOx)g#t+o$8y4Zip?^qURbcL%2eA zAaQ!)xWVI?9G~?srpKCIJ#k{|5)Ool1jpsBX8OlO0&L_jIPV103tGn7I0RX>uAV%E zA?n9lK%v3?*>~<@71yWi3xzay$qgI4H6)oh4w`q9#$JKCQQSkP&phnLLy@&vh7Er$ zN$x9ZZug4%=RnUsl_Je53zcT0K8_c%I$nsZi(jHG%)j>IFM2`OJ&}-jM6oI|d!%WE zUf_fktIcU+ytG^D755_?Q4;;r&Ju6ZHl7#wn9)i&>jug67>oFlR9O!W`L(7f^S(PR zcnZxcW;i#*E)aWxQT6pvo|=8oat&+(9sEAXIo*ZA>Jit?7pR!@+V_k?!BM@EIb8YF z&!9(o@jYtFq-|vL=o*TcMRyEeJm?ajK{7D9<^ucTIuc0N2Ra27(2T6eJSU=lk_MF! zBs#8qS}X~XWu1?FjbqU3(4!gz_I*vggtc*jT?23uvqvG~vo7Z?yx+|l83)~GdtY;S zDbtHEBV|WOR()}KakY>WPg6EmWxE6Zai|&*14u+S`GX8epZbduUGP;3QGE1Z|C+%4 zrJu=awyv^s?{oBR?jKz?Mqd0Gl|jgQ9E+yY^8KxNKs@3ZjnUeMC5?4Inw|{A_`L6@ zxD5!&G}Z14*ky?de%-+X1;$)@&%NYV+goX`{V&Z*G$tJ1j?coD2^ltB7+950TG(;X zQmBldo`qgVIy~LIDc_WP(y#p-)gUrO*yNnXUV9PNBJ1LFr}V=FnPr49FmR7DN$P9K z^xxd^FRq#iPINlhFFPY?57J_3g2ntHac7g#j{9Kw$09L{jhu3WXG!OYvTQlW6+6nVKj>3UO2OXFBuaZ}sQw(1h$ zsiQ+_s;bbT^|)Zc(~oKAnoR7&DzmFpZ&Yi!?cEnu3%mq31Q1p%k(4gUT!6_d?2UMr zoAxA*+MH;c^(MQ#33}!-UBl-wSXXRo)*ZB?JD`oVk)Lkxa>8@%6C!)8lIg~H(UOEX z(U>(ZxlmnJ>2yTWsyn=`AHU?W-9_8WnbC$0T#;+4q$Fa60;1uNFBt zLaPE0p5tkX+mJZKT2P}Ku$*Zh4bgVX6o@H73aDq+nySVGI zwZlB6@w!+jhm#|yH zuM4_9vJTVcjH}vbpQQ0B!MxfS%HPtIH+N)!+8qwYAfQag6vn@E$!@Q5k-WoD!-%S4 z*?piNZ?iIXKYfO?#tjh?6g*NayD^jWVFfym*i3x2VOqj=@V?^3yqj>|us39j)27^< z>4QP!$1Xmt9<824#Wjm;qTAB0u!5w~>Veu#bwNhz?0Mw?WtPI!Ln3O_3sa4OnUQqk zqD(G$Im6~-S`&}7Y2k*??{BLeZ|l+s$Z4F5iO(_a$47~G>nLN@jf6I>WG39V(=C%_ zsxs|l2_=YLJ$;elg4pWGHIx$?eO=9)-NU5i(1!i1hmc}>_H^8`RiDoCwU~|3w05UE zga|}RVG)(+Z$-~tsdb??8)ZmWcMB4Y4hsIP`*;&u+-KYT)RDK}duVLG2scva zN^k0oyS;wawtoT4_3d+n#R%>M|w7EWm&?{{wlg!nVHw!u?+g$L_es66FOz5>dRv+ zn4_!Ze~oGabQBA~MLzn9FmgOTU=16!;muMf5u?Z!v@ zNgt*P8RL%1;m_Y1zioHKf9De zjxzJeu0W$=jLAE~cwbTiX+Ry_iYvYRJ!U zUfO0i+F|F+e*mw2e%tng?XY8B>Nnu4u>ClzN^zm`yO1sbhWK4O__wp z-oFl4oZ%(k>o1RKc|&vQPS?YCIi6XCMxW|Mt)XWL-RCbUAMIe0h$X>78~(Ju3!$G% ztWcJeUFZO0_Vo-6?GDm06ak>rm-%v%kP*;poCC!H2P(C%=l<7E>Zk-06Gw=v zg5Mhf(sTI~r6(XxH&-nl0i+)K07wyJc`U(=zu5!70sDW?RMQ<$E%ou~JLRrIqjTQ! zuNTKXfxm1B zrdm3O&z<|-nEUsYzwM@$`ymW$U4!mi>iDR}DCM{O<7+01)Q+5D7{Fds5I0&G{#BU= zyc-Al>mNHE7z4>aSG?6dfRbWaB6`%*NDjEDl%(K{e_Y!Ez}sx#%uy!7^rsv6_m_%S zC;=)~;lg{4^OVv2_+4DQc#sNC&tEHN(-waOZ?~IE@t0;-0Rv|b7;`xO3wQTxjt&L_ zwSgceG1a&(;DIwlkOu&^C-JQ*v{=l_Bs2sGvUtVtt~h8Lj-dKhfF0hW(_ri%02+ z&qFzq;E!nCjm_umPCyE;j|hY?EdclmivZ;q4ZSGXC23%{AjmG~oi7heGKB15%1(2M z|LX@T%~8MWV;$c*aog(0)?wqm;Jhv-3gWT(!3PlwWCB=mVV^*C6ALuFB~NQEAB3Qa z)hAp(E@967M%^C>jO6La@|gJ;Yvk0K6o2hgzQ~&E#LwHy^|qb5aR0XacHf?v`k-tc z;Ays@yBo~45Ay^W#IyjIbSlMXVqUlVJ-6oF-YVr4iYOXT1b4Y~g{enxUHrFX$Im-& z$NHj3sKEB2ONrUm>|b|#b*;67hI{?i?!>pt{ymswV=fut4AuR)sLVGHh~wJr&QxxP zMM|E$Z#wrEjSeHsO#IKFDR<|1palNP&Sq6?kk76{NNzvj{JTiM3YXR(YX-_V9{FdU}T5=&L;uLs?t5?PUpD8>;IEv=z7=uW6piX>GzB+H;&NXhU=u6wi*8# zlRDQn&Y3WUig!d3TThDE;qU``6lz zG%(+wvL-oJ{uO8OOZVePLal2;YnU|u!t;dbCx=CB_-+LJduqWpQ3N^v?3uOA(JMxd zp+$t`3xAKwM_3C#G+Rj$=(32ZRE*eW0J{g`n!tbQtQedRe6iPb*0qG#Xe8X}X~6b# zB!QL33{oqI9XkSD^4^WL_d9?-jUeR9*K>cbwZErQNeoI6qj7QuTtNHADh&GZu@}{1 z!0b`hl2H{GOeJ>X?{Ri9cR+d%hKcvX145Ws(<}6bHpb2c_yjhA_28#TC3_jOVo@e`!*_1 zd@^Onfi%~@x1P5qfj2Kc!1Hga82?$1P4-lFB9m*=mW%&><)6g?*5W!~`T}Jo`9ERC zf4$I05N!T=nw&xZHI;wXDTW)oz;Au_@45VSYyWkp!4SaFgV;VL_aCGEXAE!U!3&7M z1n9rM`S*`Xrt|=&M(X}D@*n5LKi?EMOJQvOm*CMqzow#DHUz7|G*N-}&9B1m?~nfd zqm?Fj0T9L$`@e=r04Kr9_UaYy|G0<$oUuT2i6$Cc!iWEBh?SHOn2`Ra?*E!+B84w4 z@3;PclAVh|yR1?HaRewf|7&*t+=gRKAHWM{!94!&zgFVP1J&{We<}QbFNKkPs&^dH V6XBj0