From cd51ed6c4fd5622c87b1618914dc1fa16d49de4d Mon Sep 17 00:00:00 2001
From: LutaoChu <30695251+LutaoChu@users.noreply.github.com>
Date: Fri, 17 Apr 2020 15:40:16 +0800
Subject: [PATCH] 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
---
contrib/LaneNet/README.md | 21 +++++++++++----------
contrib/LaneNet/configs/lanenet.yaml | 2 +-
contrib/README.md | 10 +++++-----
slim/distillation/README.md | 18 +++++++++---------
slim/prune/README.md | 8 ++++----
5 files changed, 30 insertions(+), 29 deletions(-)
diff --git a/contrib/LaneNet/README.md b/contrib/LaneNet/README.md
index 1448951e..cebc01f6 100644
--- a/contrib/LaneNet/README.md
+++ b/contrib/LaneNet/README.md
@@ -1,8 +1,9 @@
-# LaneNet 模型训练教程
+# LaneNet 模型使用教程
-* 本教程旨在介绍如何通过使用PaddleSeg进行车道线检测
+本教程旨在介绍如何使用LaneNet进行车道线检测。
-* 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)和[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解
+* 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../../README.md#快速入门)和[基础功能](../../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解。
+* 本教程所有命令都基于当前目录`PaddleSeg/contrib/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 -
模型训练完成,使用下述命令启动评估
```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
-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/
```
可视化结果示例:
- 预测结果:
+ (1)预测结果:
![](imgs/0005_pred_lane.png)
- 分割结果:
+ (2)语义分割结果:
![](imgs/0005_pred_binary.png)
- 车道线实例预测结果:
+ (3)实例分割结果:
![](imgs/0005_pred_instance.png)
diff --git a/contrib/LaneNet/configs/lanenet.yaml b/contrib/LaneNet/configs/lanenet.yaml
index 1445e880..8db59849 100644
--- a/contrib/LaneNet/configs/lanenet.yaml
+++ b/contrib/LaneNet/configs/lanenet.yaml
@@ -42,7 +42,7 @@ TEST:
TRAIN:
MODEL_SAVE_DIR: "./saved_model/lanenet/"
PRETRAINED_MODEL_DIR: "./pretrained_models/VGG16_pretrained"
- SNAPSHOT_EPOCH: 1
+ SNAPSHOT_EPOCH: 5
SOLVER:
NUM_EPOCHS: 100
LR: 0.0005
diff --git a/contrib/README.md b/contrib/README.md
index 7b6a9b8b..ddebc711 100644
--- a/contrib/README.md
+++ b/contrib/README.md
@@ -3,8 +3,9 @@
提供基于PaddlePaddle最新的分割特色模型:
- [人像分割](#人像分割)
-- [人体解析](#人体解析)
-- [车道线分割](#车道线分割)
+- [人体解析--ACE2P](#人体解析--ACE2P)
+- [车道线分割--LaneNet](LaneNet/README.md)
+- [车道线分割--DeepLabv3+](#车道线分割--DeepLabv3)
- [工业用表分割](#工业用表分割)
- [在线体验](#在线体验)
@@ -59,7 +60,7 @@ python -u infer.py --example HumanSeg
-## 人体解析
+## 人体解析--ACE2P
![](ACE2P/imgs/result.jpg)
@@ -126,8 +127,7 @@ python -u infer.py --example ACE2P
-
-## 车道线分割
+## 车道线分割--DeepLabv3+
**Note:** 本章节所有命令均在`contrib/RoadLine`目录下执行。
diff --git a/slim/distillation/README.md b/slim/distillation/README.md
index d7af90be..efc41b6c 100644
--- a/slim/distillation/README.md
+++ b/slim/distillation/README.md
@@ -2,10 +2,10 @@
# PaddleSeg蒸馏教程
-在阅读本教程前,请确保您已经了解过[PaddleSeg使用说明](../../docs/usage.md)等章节,以便对PaddleSeg有一定的了解
-
该文档介绍如何使用[PaddleSlim](https://paddlepaddle.github.io/PaddleSlim)对分割库中的模型进行蒸馏。
+在阅读本教程前,请确保您已经了解过[PaddleSeg使用说明](../../docs/usage.md)等章节,以便对PaddleSeg有一定的了解。
+
该教程中所示操作,如无特殊说明,均在`PaddleSeg/`路径下执行。
## 概述
@@ -16,11 +16,11 @@
- [PaddleSlim蒸馏API文档](https://paddlepaddle.github.io/PaddleSlim/api/single_distiller_api/)
## 安装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)的名称和形状:
@@ -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
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
## 训练
根据[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)中预训练模型的路径:
```
TRAIN:
@@ -84,7 +84,7 @@ SLIM:
执行如下命令启动训练,每间隔```cfg.TRAIN.SNAPSHOT_EPOCH```会进行一次评估。
```shell
-CUDA_VISIBLE_DEVICES=0,1
+CUDA_VISIBLE_DEVICES=0,1 \
python -m paddle.distributed.launch ./slim/distillation/train_distill.py \
--log_steps 10 --cfg ./slim/distillation/cityscape.yaml \
--teacher_cfg ./slim/distillation/cityscape_teacher.yaml \
@@ -96,4 +96,4 @@ python -m paddle.distributed.launch ./slim/distillation/train_distill.py \
## 评估预测
-训练完成后的评估和预测请参考PaddleSeg的[快速入门](../../README.md#快速入门)和[基础功能](../../README.md#基础功能)等章节
+训练完成后的评估和预测请参考PaddleSeg的[快速入门](../../README.md#快速入门)和[基础功能](../../README.md#基础功能)等章节。
diff --git a/slim/prune/README.md b/slim/prune/README.md
index 25505606..43c0aff3 100644
--- a/slim/prune/README.md
+++ b/slim/prune/README.md
@@ -9,11 +9,11 @@
该教程中所示操作,如无特殊说明,均在`PaddleSeg/`路径下执行。
## 1. 数据与预训练模型准备
-执行如下命令,下载cityscapes数据集
+(1)执行如下命令,下载cityscapes数据集
```
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. 确定待分析参数
@@ -35,7 +35,7 @@ for x in train_prog.list_vars():
使用`train_prune.py`启动裁剪任务时,通过`SLIM.PRUNE_PARAMS`选项指定待裁剪的参数名称列表,参数名之间用逗号分隔,通过`SLIM.PRUNE_RATIOS`选项指定各个参数被裁掉的比例。
```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 \
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]'
@@ -45,7 +45,7 @@ SLIM.PRUNE_RATIOS '[0.1,0.1,0.1]'
## 4. 评估
```shell
-CUDA_VISIBLE_DEVICES=0
+CUDA_VISIBLE_DEVICES=0 \
python -u ./slim/prune/eval_prune.py --cfg configs/cityscape_fast_scnn.yaml --use_gpu \
TEST.TEST_MODEL your_trained_model \
```
--
GitLab