From 0a60a9ac6549e8c9c65168802ad573763c8be33a Mon Sep 17 00:00:00 2001
From: pennypm <34053581+pennypm@users.noreply.github.com>
Date: Thu, 12 Sep 2019 15:08:21 +0800
Subject: [PATCH] add pspnet turtorial (#24)
* add pspnet turtorial
* add model
---
README.md | 1 +
configs/pspnet.yaml | 9 ++-
docs/model_zoo.md | 1 +
pdseg/utils/config.py | 2 +-
pretrained_model/download_model.py | 4 +-
turtorial/finetune_pspnet.md | 121 +++++++++++++++++++++++++++++
6 files changed, 133 insertions(+), 5 deletions(-)
create mode 100644 turtorial/finetune_pspnet.md
diff --git a/README.md b/README.md
index 067fae93..4a321028 100644
--- a/README.md
+++ b/README.md
@@ -49,6 +49,7 @@ PaddleSeg支持多进程IO、多卡并行、跨卡Batch Norm同步等训练加
* [如何训练DeepLabv3+](./turtorial/finetune_deeplabv3plus.md)
* [如何训练U-Net](./turtorial/finetune_unet.md)
* [如何训练ICNet](./turtorial/finetune_icnet.md)
+* [如何训练PSPNet](./turtorial/finetune_pspnet.md)
### 预测部署
diff --git a/configs/pspnet.yaml b/configs/pspnet.yaml
index 10ad2949..fdc960d6 100644
--- a/configs/pspnet.yaml
+++ b/configs/pspnet.yaml
@@ -25,11 +25,14 @@ FREEZE:
MODEL:
MODEL_NAME: "pspnet"
DEFAULT_NORM_TYPE: "bn"
+ PSPNET:
+ DEPTH_MULTIPLIER: 1
+ LAYERS: 50
TEST:
- TEST_MODEL: "pretrained_model/pspnet50_ADE20K/"
+ TEST_MODEL: "snapshots/cityscapes_pspnet50/final"
TRAIN:
- MODEL_SAVE_DIR: "snapshots/cityscape_pspnet50/"
- PRETRAINED_MODEL_DIR: u"pretrained_model/pspnet50_ADE20K/"
+ MODEL_SAVE_DIR: "snapshots/cityscapes_pspnet50/"
+ PRETRAINED_MODEL_DIR: u"pretrained_model/pspnet50_bn_cityscapes/"
SNAPSHOT_EPOCH: 10
SOLVER:
LR: 0.001
diff --git a/docs/model_zoo.md b/docs/model_zoo.md
index 817acd5d..e82d6c6c 100644
--- a/docs/model_zoo.md
+++ b/docs/model_zoo.md
@@ -42,3 +42,4 @@ train数据集合为Cityscapes训练集合,测试为Cityscapes的验证集合
| DeepLabv3+/Xception65/gn | Cityscapes |[deeplabv3p_xception65_cityscapes.tgz](https://paddleseg.bj.bcebos.com/models/deeplabv3p_xception65_cityscapes.tgz) |16|false| 0.7804 |
| DeepLabv3+/Xception65/bn | Cityscapes |[Xception65_deeplab_cityscapes.tgz](https://paddleseg.bj.bcebos.com/models/xception65_bn_cityscapes.tgz) | 16 | false | 0.7715 |
| ICNet/bn | Cityscapes |[icnet_cityscapes.tgz](https://paddleseg.bj.bcebos.com/models/icnet6831.tar.gz) |16|false| 0.6831 |
+| PSPNet/bn | Cityscapes |[pspnet50_cityscapes.tgz](https://paddleseg.bj.bcebos.com/models/pspnet50_cityscapes.tgz) |16|false| 0.6968 |
diff --git a/pdseg/utils/config.py b/pdseg/utils/config.py
index 332a5143..12a3e1ba 100644
--- a/pdseg/utils/config.py
+++ b/pdseg/utils/config.py
@@ -201,7 +201,7 @@ cfg.MODEL.ICNET.LAYERS = 50
########################## PSPNET模型配置 ######################################
# RESNET backbone scale 设置
cfg.MODEL.PSPNET.DEPTH_MULTIPLIER = 1
-# RESNET 层数 设置 50或101
+# RESNET backbone 层数 设置
cfg.MODEL.PSPNET.LAYERS = 50
########################## 预测部署模型配置 ###################################
diff --git a/pretrained_model/download_model.py b/pretrained_model/download_model.py
index b175e17b..7b44c803 100644
--- a/pretrained_model/download_model.py
+++ b/pretrained_model/download_model.py
@@ -56,7 +56,9 @@ model_urls = {
"unet_bn_coco":
"https://paddleseg.bj.bcebos.com/models/unet_coco_v3.tgz",
"icnet_bn_cityscapes":
- "https://paddleseg.bj.bcebos.com/models/icnet_cityscapes.tar.gz"
+ "https://paddleseg.bj.bcebos.com/models/icnet_cityscapes.tar.gz",
+ "pspnet50_bn_cityscapes":
+ "https://paddleseg.bj.bcebos.com/models/pspnet50_cityscapes.tgz"
}
if __name__ == "__main__":
diff --git a/turtorial/finetune_pspnet.md b/turtorial/finetune_pspnet.md
new file mode 100644
index 00000000..931c3c5f
--- /dev/null
+++ b/turtorial/finetune_pspnet.md
@@ -0,0 +1,121 @@
+# PSPNET模型训练教程
+
+* 本教程旨在介绍如何通过使用PaddleSeg提供的 ***`PSPNET`*** 预训练模型在自定义数据集上进行训练
+
+* 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)和[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解
+
+* 本教程的所有命令都基于PaddleSeg主目录进行执行
+
+## 一. 准备待训练数据
+
+我们提前准备好了一份数据集,通过以下代码进行下载
+
+```shell
+python dataset/download_pet.py
+```
+
+## 二. 下载预训练模型
+
+关于PaddleSeg支持的所有预训练模型的列表,我们可以从[模型组合](#模型组合)中查看我们所需模型的名字和配置。
+
+接着下载对应的预训练模型
+
+```shell
+python pretrained_model/download_model.py pspnet50_bn_cityscapes
+```
+
+## 三. 准备配置
+
+接着我们需要确定相关配置,从本教程的角度,配置分为三部分:
+
+* 数据集
+ * 训练集主目录
+ * 训练集文件列表
+ * 测试集文件列表
+ * 评估集文件列表
+* 预训练模型
+ * 预训练模型名称
+ * 预训练模型的backbone网络
+ * 预训练模型的Normalization类型
+ * 预训练模型路径
+* 优化策略
+ * 学习率
+ * Batch Size
+ * ...
+
+在三者中,预训练模型的配置尤为重要,如果模型或者BACKBONE配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所示。
+
+数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/mini_pet`中
+
+其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为`configs/test_pet.yaml`
+
+```yaml
+# 数据集配置
+DATASET:
+ DATA_DIR: "./dataset/mini_pet/"
+ NUM_CLASSES: 3
+ TEST_FILE_LIST: "./dataset/mini_pet/file_list/test_list.txt"
+ TRAIN_FILE_LIST: "./dataset/mini_pet/file_list/train_list.txt"
+ VAL_FILE_LIST: "./dataset/mini_pet/file_list/val_list.txt"
+ VIS_FILE_LIST: "./dataset/mini_pet/file_list/test_list.txt"
+
+
+# 预训练模型配置
+MODEL:
+ MODEL_NAME: "pspnet"
+ DEFAULT_NORM_TYPE: "bn"
+ PSPNET:
+ DEPTH_MULTIPLIER: 1
+ LAYERS: 50
+
+# 其他配置
+TRAIN_CROP_SIZE: (512, 512)
+EVAL_CROP_SIZE: (512, 512)
+AUG:
+ AUG_METHOD: "unpadding"
+ FIX_RESIZE_SIZE: (512, 512)
+BATCH_SIZE: 4
+TRAIN:
+ PRETRAINED_MODEL_DIR: "./pretrained_model/pspnet50_bn_cityscapes/"
+ MODEL_SAVE_DIR: "./saved_model/pspnet_pet/"
+ SNAPSHOT_EPOCH: 10
+TEST:
+ TEST_MODEL: "./saved_model/pspnet_pet/final"
+SOLVER:
+ NUM_EPOCHS: 100
+ LR: 0.005
+ LR_POLICY: "poly"
+ OPTIMIZER: "sgd"
+```
+
+## 四. 配置/数据校验
+
+在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程
+
+```shell
+python pdseg/check.py --cfg ./configs/test_pet.yaml
+```
+
+
+## 五. 开始训练
+
+校验通过后,使用下述命令启动训练
+
+```shell
+python pdseg/train.py --use_gpu --cfg ./configs/test_pet.yaml
+```
+
+## 六. 进行评估
+
+模型训练完成,使用下述命令启动评估
+
+```shell
+python pdseg/eval.py --use_gpu --cfg ./configs/test_pet.yaml
+```
+
+## 模型组合
+
+|预训练模型名称|BackBone|Norm|数据集|配置|
+|-|-|-|-|-|
+|pspnet50_bn_cityscapes|ResNet50|bn|Cityscapes|MODEL.MODEL_NAME: pspnet
MODEL.DEFAULT_NORM_TYPE: bn
MODEL.PSPNET.LAYERS: 50|
+|pspnet101_bn_cityscapes|ResNet101|bn|Cityscapes|MODEL.MODEL_NAME: pspnet
MODEL.DEFAULT_NORM_TYPE: bn
MODEL.PSPNET.LAYERS: 101|
--
GitLab