未验证 提交 df59f042 编写于 作者: B Bai Yifan 提交者: GitHub

Slim doc add eval&infer usage (#3600)

* doc add eval&infer usage

* doc fix
上级 8abe35ee
...@@ -87,6 +87,16 @@ strategies: ...@@ -87,6 +87,16 @@ strategies:
如果不需要保存评估模型,可以在定义Compressor对象时,将`save_eval_model`选项设置为False(默认为True)。 如果不需要保存评估模型,可以在定义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都会 如果在配置文件中设置了`checkpoint_path`,并且在定义Compressor对象时指定了`prune_infer_model`选项,则每个epoch都会
...@@ -101,6 +111,16 @@ strategies: ...@@ -101,6 +111,16 @@ strategies:
在脚本<a href="../infer.py">slim/infer.py</a>中展示了如何使用fluid python API加载使用预测模型进行预测。 在脚本<a href="../infer.py">slim/infer.py</a>中展示了如何使用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 ### PaddleLite
该示例中产出的预测(inference)模型可以直接用PaddleLite进行加载使用。 该示例中产出的预测(inference)模型可以直接用PaddleLite进行加载使用。
......
...@@ -30,7 +30,7 @@ from paddle.fluid.framework import IrGraph ...@@ -30,7 +30,7 @@ from paddle.fluid.framework import IrGraph
from paddle.fluid import core from paddle.fluid import core
graph = IrGraph(core.Graph(train_prog.desc), for_test=True) graph = IrGraph(core.Graph(train_prog.desc), for_test=True)
marked_nodes = set() marked_nodes = set()
for op in graph.all_op_nodes(): for op in graph.all_op_nodes():
print(op.name()) print(op.name())
if op.name().find('conv') > -1: if op.name().find('conv') > -1:
...@@ -40,12 +40,12 @@ graph.draw('.', 'forward', marked_nodes) ...@@ -40,12 +40,12 @@ graph.draw('.', 'forward', marked_nodes)
该示例中MobileNetV1-YoloV3模型结构的可视化结果:<a href="./images/MobileNetV1-YoloV3.pdf">MobileNetV1-YoloV3.pdf</a> 该示例中MobileNetV1-YoloV3模型结构的可视化结果:<a href="./images/MobileNetV1-YoloV3.pdf">MobileNetV1-YoloV3.pdf</a>
同时通过以下命令观察目标卷积层的参数(parameters)的名称和shape: 同时通过以下命令观察目标卷积层的参数(parameters)的名称和shape:
``` ```
for param in fluid.default_main_program().global_block().all_parameters(): for param in fluid.default_main_program().global_block().all_parameters():
if 'weights' in param.name: if 'weights' in param.name:
print param.name, param.shape print(param.name, param.shape)
``` ```
...@@ -121,7 +121,7 @@ python compress.py \ ...@@ -121,7 +121,7 @@ python compress.py \
- **max_iters:** 一个`epoch`中batch的数量,需要设置为`total_num / batch_size`, 其中`total_num`为训练样本总数量,`batch_size`为多卡上总的batch size. - **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`受限于显存大小。 - **YoloTrainFeed.batch_size:** 当使用DataLoader时,表示单张卡上的batch size; 当使用普通reader时,则表示多卡上的总的`batch_size``batch_size`受限于显存大小。
- **LeaningRate.base_lr:** 根据多卡的总`batch_size`调整`base_lr`,两者大小正相关,可以简单的按比例进行调整。 - **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的变化对其进行调整。 - **LearningRate.schedulers.PiecewiseDecay.LinearWarmup.steps:** 请根据batch size的变化对其进行调整。
...@@ -168,6 +168,16 @@ python compress.py \ ...@@ -168,6 +168,16 @@ python compress.py \
如果不需要保存评估模型,可以在定义Compressor对象时,将`save_eval_model`选项设置为False(默认为True)。 如果不需要保存评估模型,可以在定义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都会 如果在配置文件中设置了`checkpoint_path`,并且在定义Compressor对象时指定了`prune_infer_model`选项,则每个epoch都会
...@@ -182,6 +192,16 @@ python compress.py \ ...@@ -182,6 +192,16 @@ python compress.py \
在脚本<a href="../infer.py">PaddleDetection/tools/infer.py</a>中展示了如何使用fluid python API加载使用预测模型进行预测。 在脚本<a href="../infer.py">PaddleDetection/tools/infer.py</a>中展示了如何使用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 ### PaddleLite
该示例中产出的预测(inference)模型可以直接用PaddleLite进行加载使用。 该示例中产出的预测(inference)模型可以直接用PaddleLite进行加载使用。
......
...@@ -34,12 +34,12 @@ ...@@ -34,12 +34,12 @@
```python ```python
# 观察student model的Variable # 观察student model的Variable
for v in fluid.default_main_program().list_vars(): for v in fluid.default_main_program().list_vars():
print v.name, v.shape print(v.name, v.shape)
``` ```
```python ```python
# 观察teacher model的Variable # 观察teacher model的Variable
for v in teacher_program.list_vars(): for v in teacher_program.list_vars():
print v.name, v.shape print(v.name, v.shape)
``` ```
经过对比可以发现,`student model``teacher model`预测的输出分别为: 经过对比可以发现,`student model``teacher model`预测的输出分别为:
...@@ -111,6 +111,16 @@ strategies: ...@@ -111,6 +111,16 @@ strategies:
脚本<a href="../eval.py">PaddleSlim/classification/eval.py</a>中为使用该模型在评估数据集上做评估的示例。 脚本<a href="../eval.py">PaddleSlim/classification/eval.py</a>中为使用该模型在评估数据集上做评估的示例。
运行命令示例:
```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都会 如果在配置文件中设置了`checkpoint_path`,并且在定义Compressor对象时指定了`prune_infer_model`选项,则每个epoch都会
...@@ -125,6 +135,15 @@ strategies: ...@@ -125,6 +135,15 @@ strategies:
在脚本<a href="../infer.py">PaddleSlim/classification/infer.py</a>中展示了如何使用fluid python API加载使用预测模型进行预测。 在脚本<a href="../infer.py">PaddleSlim/classification/infer.py</a>中展示了如何使用fluid python API加载使用预测模型进行预测。
运行命令示例:
```bash
python infer.py \
--use_gpu True \
--model_path ${save_path}/eval_model/ \
--model_name __model__ \
--params_name __params__
```
### PaddleLite ### PaddleLite
该示例中产出的预测(inference)模型可以直接用PaddleLite进行加载使用。 该示例中产出的预测(inference)模型可以直接用PaddleLite进行加载使用。
...@@ -144,7 +163,7 @@ strategies: ...@@ -144,7 +163,7 @@ strategies:
- batch size: 256 - batch size: 256
- lr_strategy: piecewise_decay - lr_strategy: piecewise_decay
- step_epochs: 30, 60, 90 - step_epochs: 30, 60, 90
- num_epochs: 120 - num_epochs: 130
- l2_decay: 4e-5 - l2_decay: 4e-5
- init lr: 0.1 - init lr: 0.1
...@@ -160,7 +179,7 @@ strategies: ...@@ -160,7 +179,7 @@ strategies:
- batch size: 256 - batch size: 256
- lr_strategy: piecewise_decay - lr_strategy: piecewise_decay
- step_epochs: 30, 60, 90 - step_epochs: 30, 60, 90
- num_epochs: 120 - num_epochs: 130
- l2_decay: 4e-5 - l2_decay: 4e-5
- init lr: 0.1 - init lr: 0.1
...@@ -176,7 +195,7 @@ strategies: ...@@ -176,7 +195,7 @@ strategies:
- batch size: 256 - batch size: 256
- lr_strategy: piecewise_decay - lr_strategy: piecewise_decay
- step_epochs: 30, 60, 90 - step_epochs: 30, 60, 90
- num_epochs: 120 - num_epochs: 130
- l2_decay: 4e-5 - l2_decay: 4e-5
- init lr: 0.1 - init lr: 0.1
......
...@@ -95,7 +95,6 @@ def compress(args): ...@@ -95,7 +95,6 @@ def compress(args):
train_fetch_list = [('loss', avg_cost.name)] train_fetch_list = [('loss', avg_cost.name)]
teacher_programs = [] teacher_programs = []
distiller_optimizer = None
teacher_model = models.__dict__[args.teacher_model](prefix_name='res50') teacher_model = models.__dict__[args.teacher_model](prefix_name='res50')
# define teacher program # define teacher program
......
...@@ -2,8 +2,8 @@ version: 1.0 ...@@ -2,8 +2,8 @@ version: 1.0
distillers: distillers:
l2_distiller: l2_distiller:
class: 'L2Distiller' class: 'L2Distiller'
teacher_feature_map: 'res50_fc_0.tmp_1' teacher_feature_map: 'res50_fc_0.tmp_0'
student_feature_map: 'fc_0.tmp_1' student_feature_map: 'fc_0.tmp_0'
distillation_loss_weight: 1 distillation_loss_weight: 1
strategies: strategies:
distillation_strategy: distillation_strategy:
......
...@@ -58,7 +58,7 @@ tailf mobilenet_v1.log ...@@ -58,7 +58,7 @@ tailf mobilenet_v1.log
#--model "MobileNetV2" \ #--model "MobileNetV2" \
#--teacher_model "ResNet50" \ #--teacher_model "ResNet50" \
#--teacher_pretrained_model ../pretrain/ResNet50_pretrained \ #--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 & #> mobilenet_v2.log 2>&1 &
#tailf mobilenet_v2.log #tailf mobilenet_v2.log
......
...@@ -37,7 +37,7 @@ PaddleSlim暂时无法对`depthwise convolution`直接进行剪裁, 因为`dep ...@@ -37,7 +37,7 @@ PaddleSlim暂时无法对`depthwise convolution`直接进行剪裁, 因为`dep
``` ```
for param in fluid.default_main_program().global_block().all_parameters(): for param in fluid.default_main_program().global_block().all_parameters():
if 'weights' in param.name: if 'weights' in param.name:
print param.name, param.shape print(param.name, param.shape)
``` ```
结果如下: 结果如下:
...@@ -100,6 +100,16 @@ fc10_weights (1280L, 1000L) ...@@ -100,6 +100,16 @@ fc10_weights (1280L, 1000L)
脚本<a href="../eval.py">PaddleSlim/classification/eval.py</a>中为使用该模型在评估数据集上做评估的示例。 脚本<a href="../eval.py">PaddleSlim/classification/eval.py</a>中为使用该模型在评估数据集上做评估的示例。
运行命令示例:
```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都会 如果在配置文件中设置了`checkpoint_path`,并且在定义Compressor对象时指定了`prune_infer_model`选项,则每个epoch都会
...@@ -114,6 +124,15 @@ fc10_weights (1280L, 1000L) ...@@ -114,6 +124,15 @@ fc10_weights (1280L, 1000L)
在脚本<a href="../infer.py">PaddleSlim/classification/infer.py</a>中展示了如何使用fluid python API加载使用预测模型进行预测。 在脚本<a href="../infer.py">PaddleSlim/classification/infer.py</a>中展示了如何使用fluid python API加载使用预测模型进行预测。
运行命令示例:
```bash
python infer.py \
--use_gpu True \
--model_path ${save_path}/eval_model/ \
--model_name __model__ \
--params_name __params__
```
### PaddleLite ### PaddleLite
该示例中产出的预测(inference)模型可以直接用PaddleLite进行加载使用。 该示例中产出的预测(inference)模型可以直接用PaddleLite进行加载使用。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册