From df59f0429107f39d70d4d7f9d0cebcfc24f88629 Mon Sep 17 00:00:00 2001 From: Bai Yifan Date: Wed, 16 Oct 2019 14:07:32 +0800 Subject: [PATCH] Slim doc add eval&infer usage (#3600) * doc add eval&infer usage * doc fix --- .../slim/distillation/README.md | 20 +++++++++++++ PaddleCV/PaddleDetection/slim/prune/README.md | 28 +++++++++++++++--- .../classification/distillation/README.md | 29 +++++++++++++++---- .../classification/distillation/compress.py | 1 - .../mobilenetv2_resnet50_distillation.yaml | 4 +-- PaddleSlim/classification/distillation/run.sh | 2 +- PaddleSlim/classification/pruning/README.md | 21 +++++++++++++- 7 files changed, 91 insertions(+), 14 deletions(-) diff --git a/PaddleCV/PaddleDetection/slim/distillation/README.md b/PaddleCV/PaddleDetection/slim/distillation/README.md index de6a1eef..88d753bb 100755 --- a/PaddleCV/PaddleDetection/slim/distillation/README.md +++ b/PaddleCV/PaddleDetection/slim/distillation/README.md @@ -87,6 +87,16 @@ strategies: 如果不需要保存评估模型,可以在定义Compressor对象时,将`save_eval_model`选项设置为False(默认为True)。 +运行命令为: +``` +python ../eval.py \ + --model_path ${checkpoint_path}/${epoch_id}/eval_model/ \ + --model_name __model__ \ + --params_name __params__ \ + -c ../../configs/yolov3_mobilenet_v1_voc.yml \ + -d "../../dataset/voc" +``` + ## 预测 如果在配置文件中设置了`checkpoint_path`,并且在定义Compressor对象时指定了`prune_infer_model`选项,则每个epoch都会 @@ -101,6 +111,16 @@ strategies: 在脚本slim/infer.py中展示了如何使用fluid python API加载使用预测模型进行预测。 +运行命令为: +``` +python ../infer.py \ + --model_path ${checkpoint_path}/${epoch_id}/eval_model/ \ + --model_name __model__ \ + --params_name __params__ \ + -c ../../configs/yolov3_mobilenet_v1_voc.yml \ + --infer_dir ../../demo +``` + ### PaddleLite 该示例中产出的预测(inference)模型可以直接用PaddleLite进行加载使用。 diff --git a/PaddleCV/PaddleDetection/slim/prune/README.md b/PaddleCV/PaddleDetection/slim/prune/README.md index 22ebbd62..ee987658 100644 --- a/PaddleCV/PaddleDetection/slim/prune/README.md +++ b/PaddleCV/PaddleDetection/slim/prune/README.md @@ -30,7 +30,7 @@ from paddle.fluid.framework import IrGraph from paddle.fluid import core graph = IrGraph(core.Graph(train_prog.desc), for_test=True) -marked_nodes = set() +marked_nodes = set() for op in graph.all_op_nodes(): print(op.name()) if op.name().find('conv') > -1: @@ -40,12 +40,12 @@ graph.draw('.', 'forward', marked_nodes) 该示例中MobileNetV1-YoloV3模型结构的可视化结果:MobileNetV1-YoloV3.pdf -同时通过以下命令观察目标卷积层的参数(parameters)的名称和shape: +同时通过以下命令观察目标卷积层的参数(parameters)的名称和shape: ``` for param in fluid.default_main_program().global_block().all_parameters(): if 'weights' in param.name: - print param.name, param.shape + print(param.name, param.shape) ``` @@ -121,7 +121,7 @@ python compress.py \ - **max_iters:** 一个`epoch`中batch的数量,需要设置为`total_num / batch_size`, 其中`total_num`为训练样本总数量,`batch_size`为多卡上总的batch size. - **YoloTrainFeed.batch_size:** 当使用DataLoader时,表示单张卡上的batch size; 当使用普通reader时,则表示多卡上的总的`batch_size`。`batch_size`受限于显存大小。 - **LeaningRate.base_lr:** 根据多卡的总`batch_size`调整`base_lr`,两者大小正相关,可以简单的按比例进行调整。 -- **LearningRate.schedulers.PiecewiseDecay.milestones:**请根据batch size的变化对其调整。 +- **LearningRate.schedulers.PiecewiseDecay.milestones:** 请根据batch size的变化对其调整。 - **LearningRate.schedulers.PiecewiseDecay.LinearWarmup.steps:** 请根据batch size的变化对其进行调整。 @@ -168,6 +168,16 @@ python compress.py \ 如果不需要保存评估模型,可以在定义Compressor对象时,将`save_eval_model`选项设置为False(默认为True)。 +运行命令为: +``` +python ../eval.py \ + --model_path ${checkpoint_path}/${epoch_id}/eval_model/ \ + --model_name __model__ \ + --params_name __params__ \ + -c ../../configs/yolov3_mobilenet_v1_voc.yml \ + -d "../../dataset/voc" +``` + ## 预测 如果在配置文件中设置了`checkpoint_path`,并且在定义Compressor对象时指定了`prune_infer_model`选项,则每个epoch都会 @@ -182,6 +192,16 @@ python compress.py \ 在脚本PaddleDetection/tools/infer.py中展示了如何使用fluid python API加载使用预测模型进行预测。 +运行命令为: +``` +python ../infer.py \ + --model_path ${checkpoint_path}/${epoch_id}/eval_model/ \ + --model_name __model__ \ + --params_name __params__ \ + -c ../../configs/yolov3_mobilenet_v1_voc.yml \ + --infer_dir ../../demo +``` + ### PaddleLite 该示例中产出的预测(inference)模型可以直接用PaddleLite进行加载使用。 diff --git a/PaddleSlim/classification/distillation/README.md b/PaddleSlim/classification/distillation/README.md index 1d500469..6a097851 100755 --- a/PaddleSlim/classification/distillation/README.md +++ b/PaddleSlim/classification/distillation/README.md @@ -34,12 +34,12 @@ ```python # 观察student model的Variable for v in fluid.default_main_program().list_vars(): - print v.name, v.shape + print(v.name, v.shape) ``` ```python # 观察teacher model的Variable for v in teacher_program.list_vars(): - print v.name, v.shape + print(v.name, v.shape) ``` 经过对比可以发现,`student model`和`teacher model`预测的输出分别为: @@ -111,6 +111,16 @@ strategies: 脚本PaddleSlim/classification/eval.py中为使用该模型在评估数据集上做评估的示例。 +运行命令示例: +```bash +python eval.py \ + --use_gpu True \ + --model_path ${save_path}/eval_model/ \ + --model_name __model__ \ + --params_name __params__ + +``` + ## 预测 如果在配置文件中设置了`checkpoint_path`,并且在定义Compressor对象时指定了`prune_infer_model`选项,则每个epoch都会 @@ -125,6 +135,15 @@ strategies: 在脚本PaddleSlim/classification/infer.py中展示了如何使用fluid python API加载使用预测模型进行预测。 +运行命令示例: +```bash +python infer.py \ + --use_gpu True \ + --model_path ${save_path}/eval_model/ \ + --model_name __model__ \ + --params_name __params__ +``` + ### PaddleLite 该示例中产出的预测(inference)模型可以直接用PaddleLite进行加载使用。 @@ -144,7 +163,7 @@ strategies: - batch size: 256 - lr_strategy: piecewise_decay - step_epochs: 30, 60, 90 -- num_epochs: 120 +- num_epochs: 130 - l2_decay: 4e-5 - init lr: 0.1 @@ -160,7 +179,7 @@ strategies: - batch size: 256 - lr_strategy: piecewise_decay - step_epochs: 30, 60, 90 -- num_epochs: 120 +- num_epochs: 130 - l2_decay: 4e-5 - init lr: 0.1 @@ -176,7 +195,7 @@ strategies: - batch size: 256 - lr_strategy: piecewise_decay - step_epochs: 30, 60, 90 -- num_epochs: 120 +- num_epochs: 130 - l2_decay: 4e-5 - init lr: 0.1 diff --git a/PaddleSlim/classification/distillation/compress.py b/PaddleSlim/classification/distillation/compress.py index 49a800f8..3cb8f2bc 100644 --- a/PaddleSlim/classification/distillation/compress.py +++ b/PaddleSlim/classification/distillation/compress.py @@ -95,7 +95,6 @@ def compress(args): train_fetch_list = [('loss', avg_cost.name)] teacher_programs = [] - distiller_optimizer = None teacher_model = models.__dict__[args.teacher_model](prefix_name='res50') # define teacher program diff --git a/PaddleSlim/classification/distillation/configs/mobilenetv2_resnet50_distillation.yaml b/PaddleSlim/classification/distillation/configs/mobilenetv2_resnet50_distillation.yaml index 079d9231..750cbae2 100644 --- a/PaddleSlim/classification/distillation/configs/mobilenetv2_resnet50_distillation.yaml +++ b/PaddleSlim/classification/distillation/configs/mobilenetv2_resnet50_distillation.yaml @@ -2,8 +2,8 @@ version: 1.0 distillers: l2_distiller: class: 'L2Distiller' - teacher_feature_map: 'res50_fc_0.tmp_1' - student_feature_map: 'fc_0.tmp_1' + teacher_feature_map: 'res50_fc_0.tmp_0' + student_feature_map: 'fc_0.tmp_0' distillation_loss_weight: 1 strategies: distillation_strategy: diff --git a/PaddleSlim/classification/distillation/run.sh b/PaddleSlim/classification/distillation/run.sh index c18e6eee..8668c5fb 100644 --- a/PaddleSlim/classification/distillation/run.sh +++ b/PaddleSlim/classification/distillation/run.sh @@ -58,7 +58,7 @@ tailf mobilenet_v1.log #--model "MobileNetV2" \ #--teacher_model "ResNet50" \ #--teacher_pretrained_model ../pretrain/ResNet50_pretrained \ -#--compress_config ./configs/mobilenetv2_resnet50_distillation.yaml\ +#--compress_config ./configs/mobilenetv2_resnet50_distillation.yaml \ #> mobilenet_v2.log 2>&1 & #tailf mobilenet_v2.log diff --git a/PaddleSlim/classification/pruning/README.md b/PaddleSlim/classification/pruning/README.md index 92082098..6c4035d5 100644 --- a/PaddleSlim/classification/pruning/README.md +++ b/PaddleSlim/classification/pruning/README.md @@ -37,7 +37,7 @@ PaddleSlim暂时无法对`depthwise convolution`直接进行剪裁, 因为`dep ``` for param in fluid.default_main_program().global_block().all_parameters(): if 'weights' in param.name: - print param.name, param.shape + print(param.name, param.shape) ``` 结果如下: @@ -100,6 +100,16 @@ fc10_weights (1280L, 1000L) 脚本PaddleSlim/classification/eval.py中为使用该模型在评估数据集上做评估的示例。 +运行命令示例: +```bash +python eval.py \ + --use_gpu True \ + --model_path ${save_path}/eval_model/ \ + --model_name __model__ \ + --params_name __params__ + +``` + ## 预测 如果在配置文件中设置了`checkpoint_path`,并且在定义Compressor对象时指定了`prune_infer_model`选项,则每个epoch都会 @@ -114,6 +124,15 @@ fc10_weights (1280L, 1000L) 在脚本PaddleSlim/classification/infer.py中展示了如何使用fluid python API加载使用预测模型进行预测。 +运行命令示例: +```bash +python infer.py \ + --use_gpu True \ + --model_path ${save_path}/eval_model/ \ + --model_name __model__ \ + --params_name __params__ +``` + ### PaddleLite 该示例中产出的预测(inference)模型可以直接用PaddleLite进行加载使用。 -- GitLab