未验证 提交 cd51ed6c 编写于 作者: L LutaoChu 提交者: GitHub

Polish LaneNet and Slim documents (#222)

* Update README.md

* fix lanenet.yaml error

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md
上级 f48739b1
# LaneNet 模型训练教程 # LaneNet 模型使用教程
* 本教程旨在介绍如何通过使用PaddleSeg进行车道线检测 本教程旨在介绍如何使用LaneNet进行车道线检测。
* 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解 * 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../../README.md#快速入门)[基础功能](../../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解。
* 本教程所有命令都基于当前目录`PaddleSeg/contrib/LaneNet/`下执行。
## 环境依赖 ## 环境依赖
...@@ -36,7 +37,7 @@ LaneNet ...@@ -36,7 +37,7 @@ LaneNet
``` ```
## 二. 下载预训练模型 ## 二. 下载预训练模型
下载[vgg预训练模型](https://paddle-imagenet-models-name.bj.bcebos.com/VGG16_pretrained.tar),放在```pretrained_models```文件夹下。 下载[vgg预训练模型](https://paddle-imagenet-models-name.bj.bcebos.com/VGG16_pretrained.tar),放在```pretrained_models```文件夹下并解压
## 三. 准备配置 ## 三. 准备配置
...@@ -116,23 +117,23 @@ CUDA_VISIBLE_DEVICES=0 python -u train.py --cfg configs/lanenet.yaml --use_gpu - ...@@ -116,23 +117,23 @@ CUDA_VISIBLE_DEVICES=0 python -u train.py --cfg configs/lanenet.yaml --use_gpu -
模型训练完成,使用下述命令启动评估 模型训练完成,使用下述命令启动评估
```shell ```shell
CUDA_VISIBLE_DEVICES=0 python -u eval.py --use_gpu --cfg configs/lanenet.yaml CUDA_VISIBLE_DEVICES=0 python -u eval.py --cfg configs/lanenet.yaml --use_gpu
``` ```
## 七. 可视化 ## 七. 可视化
需要先下载一个车前视角和鸟瞰图视角转换所需文件,点击[链接](https://paddleseg.bj.bcebos.com/resources/tusimple_ipm_remap.tar),下载后放在```./utils```。同时我们提供了一个训练好的模型,点击[链接](https://paddleseg.bj.bcebos.com/models/lanenet_vgg_tusimple.tar),下载后放在```./pretrained_models/```,使用如下命令进行可视化 需要先下载一个车前视角和鸟瞰图视角转换所需文件,点击[链接](https://paddleseg.bj.bcebos.com/resources/tusimple_ipm_remap.tar),下载后放在```./utils```并解压。同时我们提供了一个训练好的模型,点击[链接](https://paddleseg.bj.bcebos.com/models/lanenet_vgg_tusimple.tar),下载后放在```./pretrained_models/```下并解压,使用如下命令进行可视化
```shell ```shell
CUDA_VISIBLE_DEVICES=0 python -u ./vis.py --cfg configs/lanenet.yaml --use_gpu --vis_dir vis_result \ CUDA_VISIBLE_DEVICES=0 python -u vis.py --cfg configs/lanenet.yaml --use_gpu --vis_dir vis_result \
TEST.TEST_MODEL pretrained_models/LaneNet_vgg_tusimple/ TEST.TEST_MODEL pretrained_models/LaneNet_vgg_tusimple/
``` ```
可视化结果示例: 可视化结果示例:
预测结果:<br/> (1)预测结果:<br/>
![](imgs/0005_pred_lane.png) ![](imgs/0005_pred_lane.png)
分割结果:<br/> (2)语义分割结果:<br/>
![](imgs/0005_pred_binary.png)<br/> ![](imgs/0005_pred_binary.png)<br/>
车道线实例预测结果:<br/> (3)实例分割结果:<br/>
![](imgs/0005_pred_instance.png) ![](imgs/0005_pred_instance.png)
...@@ -42,7 +42,7 @@ TEST: ...@@ -42,7 +42,7 @@ TEST:
TRAIN: TRAIN:
MODEL_SAVE_DIR: "./saved_model/lanenet/" MODEL_SAVE_DIR: "./saved_model/lanenet/"
PRETRAINED_MODEL_DIR: "./pretrained_models/VGG16_pretrained" PRETRAINED_MODEL_DIR: "./pretrained_models/VGG16_pretrained"
SNAPSHOT_EPOCH: 1 SNAPSHOT_EPOCH: 5
SOLVER: SOLVER:
NUM_EPOCHS: 100 NUM_EPOCHS: 100
LR: 0.0005 LR: 0.0005
......
...@@ -3,8 +3,9 @@ ...@@ -3,8 +3,9 @@
提供基于PaddlePaddle最新的分割特色模型: 提供基于PaddlePaddle最新的分割特色模型:
- [人像分割](#人像分割) - [人像分割](#人像分割)
- [人体解析](#人体解析) - [人体解析--ACE2P](#人体解析--ACE2P)
- [车道线分割](#车道线分割) - [车道线分割--LaneNet](LaneNet/README.md)
- [车道线分割--DeepLabv3+](#车道线分割--DeepLabv3)
- [工业用表分割](#工业用表分割) - [工业用表分割](#工业用表分割)
- [在线体验](#在线体验) - [在线体验](#在线体验)
...@@ -59,7 +60,7 @@ python -u infer.py --example HumanSeg ...@@ -59,7 +60,7 @@ python -u infer.py --example HumanSeg
## 人体解析 ## 人体解析--ACE2P
![](ACE2P/imgs/result.jpg) ![](ACE2P/imgs/result.jpg)
...@@ -126,8 +127,7 @@ python -u infer.py --example ACE2P ...@@ -126,8 +127,7 @@ python -u infer.py --example ACE2P
## 车道线分割--DeepLabv3+
## 车道线分割
**Note:** 本章节所有命令均在`contrib/RoadLine`目录下执行。 **Note:** 本章节所有命令均在`contrib/RoadLine`目录下执行。
......
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
# PaddleSeg蒸馏教程 # PaddleSeg蒸馏教程
在阅读本教程前,请确保您已经了解过[PaddleSeg使用说明](../../docs/usage.md)等章节,以便对PaddleSeg有一定的了解
该文档介绍如何使用[PaddleSlim](https://paddlepaddle.github.io/PaddleSlim)对分割库中的模型进行蒸馏。 该文档介绍如何使用[PaddleSlim](https://paddlepaddle.github.io/PaddleSlim)对分割库中的模型进行蒸馏。
在阅读本教程前,请确保您已经了解过[PaddleSeg使用说明](../../docs/usage.md)等章节,以便对PaddleSeg有一定的了解。
该教程中所示操作,如无特殊说明,均在`PaddleSeg/`路径下执行。 该教程中所示操作,如无特殊说明,均在`PaddleSeg/`路径下执行。
## 概述 ## 概述
...@@ -16,11 +16,11 @@ ...@@ -16,11 +16,11 @@
- [PaddleSlim蒸馏API文档](https://paddlepaddle.github.io/PaddleSlim/api/single_distiller_api/) - [PaddleSlim蒸馏API文档](https://paddlepaddle.github.io/PaddleSlim/api/single_distiller_api/)
## 安装PaddleSlim ## 安装PaddleSlim
可按照[PaddleSlim使用文档](https://paddlepaddle.github.io/PaddleSlim/)中的步骤安装PaddleSlim 可按照[PaddleSlim使用文档](https://paddlepaddle.github.io/PaddleSlim/)中的步骤安装PaddleSlim.
## 蒸馏策略说明 ## 蒸馏策略说明
关于蒸馏API如何使用您可以参考PaddleSlim蒸馏API文档 关于蒸馏API如何使用您可以参考PaddleSlim蒸馏API文档
这里以Deeplabv3-xception蒸馏训练Deeplabv3-mobilenet模型为例,首先,为了对`student model``teacher model`有个总体的认识,进一步确认蒸馏的对象,我们通过以下命令分别观察两个网络变量(Variables)的名称和形状: 这里以Deeplabv3-xception蒸馏训练Deeplabv3-mobilenet模型为例,首先,为了对`student model``teacher model`有个总体的认识,进一步确认蒸馏的对象,我们通过以下命令分别观察两个网络变量(Variables)的名称和形状:
...@@ -55,7 +55,7 @@ bilinear_interp_2.tmp_0 ...@@ -55,7 +55,7 @@ bilinear_interp_2.tmp_0
``` ```
它们形状两两相同,且分别处于两个网络的输出部分。所以,我们用`l2_loss`对这几个特征图两两对应添加蒸馏loss。需要注意的是,teacher的Variable在merge过程中被自动添加了一个`name_prefix`,所以这里也需要加上这个前缀`"teacher_"`,merge过程请参考[蒸馏API文档](https://paddlepaddle.github.io/PaddleSlim/api/single_distiller_api/#merge) 它们形状两两相同,且分别处于两个网络的输出部分。所以,我们用`l2_loss`对这几个特征图两两对应添加蒸馏loss。需要注意的是,teacher的Variable在merge过程中被自动添加了一个`name_prefix`,所以这里也需要加上这个前缀`"teacher_"`,merge过程请参考[蒸馏API文档](https://paddlepaddle.github.io/PaddleSlim/api/single_distiller_api/#merge)
```python ```python
distill_loss = l2_loss('teacher_bilinear_interp_2.tmp_0', 'bilinear_interp_0.tmp_0') distill_loss = l2_loss('teacher_bilinear_interp_2.tmp_0', 'bilinear_interp_0.tmp_0')
...@@ -66,11 +66,11 @@ distill_loss = l2_loss('teacher_bilinear_interp_2.tmp_0', 'bilinear_interp_0.tmp ...@@ -66,11 +66,11 @@ distill_loss = l2_loss('teacher_bilinear_interp_2.tmp_0', 'bilinear_interp_0.tmp
## 训练 ## 训练
根据[PaddleSeg/pdseg/train.py](../../pdseg/train.py)编写压缩脚本`train_distill.py` 根据[PaddleSeg/pdseg/train.py](../../pdseg/train.py)编写压缩脚本`train_distill.py`
在该脚本中定义了teacher_model和student_model,用teacher_model的输出指导student_model的训练 在该脚本中定义了teacher_model和student_model,用teacher_model的输出指导student_model的训练
### 执行示例 ### 执行示例
下载teacher的预训练模型([deeplabv3p_xception65_bn_cityscapes.tgz](https://paddleseg.bj.bcebos.com/models/xception65_bn_cityscapes.tgz))和student的预训练模型([mobilenet_cityscapes.tgz](https://paddleseg.bj.bcebos.com/models/mobilenet_cityscapes.tgz)), 下载并解压teacher的预训练模型([deeplabv3p_xception65_bn_cityscapes.tgz](https://paddleseg.bj.bcebos.com/models/xception65_bn_cityscapes.tgz))和student的预训练模型([mobilenet_cityscapes.tgz](https://paddleseg.bj.bcebos.com/models/mobilenet_cityscapes.tgz)),
修改student config file(./slim/distillation/cityscape.yaml)中预训练模型的路径: 修改student config file(./slim/distillation/cityscape.yaml)中预训练模型的路径:
``` ```
TRAIN: TRAIN:
...@@ -84,7 +84,7 @@ SLIM: ...@@ -84,7 +84,7 @@ SLIM:
执行如下命令启动训练,每间隔```cfg.TRAIN.SNAPSHOT_EPOCH```会进行一次评估。 执行如下命令启动训练,每间隔```cfg.TRAIN.SNAPSHOT_EPOCH```会进行一次评估。
```shell ```shell
CUDA_VISIBLE_DEVICES=0,1 CUDA_VISIBLE_DEVICES=0,1 \
python -m paddle.distributed.launch ./slim/distillation/train_distill.py \ python -m paddle.distributed.launch ./slim/distillation/train_distill.py \
--log_steps 10 --cfg ./slim/distillation/cityscape.yaml \ --log_steps 10 --cfg ./slim/distillation/cityscape.yaml \
--teacher_cfg ./slim/distillation/cityscape_teacher.yaml \ --teacher_cfg ./slim/distillation/cityscape_teacher.yaml \
...@@ -96,4 +96,4 @@ python -m paddle.distributed.launch ./slim/distillation/train_distill.py \ ...@@ -96,4 +96,4 @@ python -m paddle.distributed.launch ./slim/distillation/train_distill.py \
## 评估预测 ## 评估预测
训练完成后的评估和预测请参考PaddleSeg的[快速入门](../../README.md#快速入门)[基础功能](../../README.md#基础功能)等章节 训练完成后的评估和预测请参考PaddleSeg的[快速入门](../../README.md#快速入门)[基础功能](../../README.md#基础功能)等章节
...@@ -9,11 +9,11 @@ ...@@ -9,11 +9,11 @@
该教程中所示操作,如无特殊说明,均在`PaddleSeg/`路径下执行。 该教程中所示操作,如无特殊说明,均在`PaddleSeg/`路径下执行。
## 1. 数据与预训练模型准备 ## 1. 数据与预训练模型准备
执行如下命令,下载cityscapes数据集 (1)执行如下命令,下载cityscapes数据集
``` ```
python dataset/download_cityscapes.py python dataset/download_cityscapes.py
``` ```
参照[预训练模型列表](../../docs/model_zoo.md)获取所需预训练模型 (2)预训练模型以fast scnn为例,点击获取fast scnn的预训练模型[fast_scnn_cityscapes.tar](#5-模型),并在`configs/cityscape_fast_scnn.yaml`文件中将配置项`TRAIN.PRETRAINED_MODEL_DIR`设置为预训练模型所在路径。其他所需模型可参照[预训练模型列表](../../docs/model_zoo.md)获取。
## 2. 确定待分析参数 ## 2. 确定待分析参数
...@@ -35,7 +35,7 @@ for x in train_prog.list_vars(): ...@@ -35,7 +35,7 @@ for x in train_prog.list_vars():
使用`train_prune.py`启动裁剪任务时,通过`SLIM.PRUNE_PARAMS`选项指定待裁剪的参数名称列表,参数名之间用逗号分隔,通过`SLIM.PRUNE_RATIOS`选项指定各个参数被裁掉的比例。 使用`train_prune.py`启动裁剪任务时,通过`SLIM.PRUNE_PARAMS`选项指定待裁剪的参数名称列表,参数名之间用逗号分隔,通过`SLIM.PRUNE_RATIOS`选项指定各个参数被裁掉的比例。
```shell ```shell
CUDA_VISIBLE_DEVICES=0 CUDA_VISIBLE_DEVICES=0 \
python -u ./slim/prune/train_prune.py --log_steps 10 --cfg configs/cityscape_fast_scnn.yaml --use_gpu --use_mpio \ 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_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]' SLIM.PRUNE_RATIOS '[0.1,0.1,0.1]'
...@@ -45,7 +45,7 @@ SLIM.PRUNE_RATIOS '[0.1,0.1,0.1]' ...@@ -45,7 +45,7 @@ SLIM.PRUNE_RATIOS '[0.1,0.1,0.1]'
## 4. 评估 ## 4. 评估
```shell ```shell
CUDA_VISIBLE_DEVICES=0 CUDA_VISIBLE_DEVICES=0 \
python -u ./slim/prune/eval_prune.py --cfg configs/cityscape_fast_scnn.yaml --use_gpu \ python -u ./slim/prune/eval_prune.py --cfg configs/cityscape_fast_scnn.yaml --use_gpu \
TEST.TEST_MODEL your_trained_model \ TEST.TEST_MODEL your_trained_model \
``` ```
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册