diff --git a/contrib/LaneNet/README.md b/contrib/LaneNet/README.md index 1448951e900dbb8bb235be476698eb13d62f5e4c..cebc01f6c9faf23688e548500c80c9f26bda0960 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 1445e8803e638b2a44a7170c5020c4a0c56dcd67..8db59849f7a1843d1102ff129f6909244bd2077f 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 7b6a9b8b865f7c573c5e34bb0047ea28a57c52a4..ddebc7116a0e260215ef51f548d1e89e9fbeec40 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 d7af90beb3a7fd4fa6bb3775d45b0fd6aadc0133..efc41b6c52402e48bce904b7ea4edf914cb07ee1 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 25505606e3fcc8c8e7c6beba68cdb8d39c1c56b1..43c0aff34e3bba2f36ce1af60cf04d496167f3e9 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 \ ```