提交 ecdefbc6 编写于 作者: L LutaoChu 提交者: Zeyu Chen

Polish documents (#143)

* update all docs involving color label

* modify usage.md

* usage.md

* Update data_prepare.md

* Update jingling2seg.md

* Update jingling2seg.md

* Update labelme2seg.md

* Update jingling2seg.md

* a

* Update config.md

* Update config.md

* Update config.py

* Update config.py

* Update config.py

* Update config.md

* Update basic_group.md

* Update basic_group.md

* Update data_aug.md

* Update config.md

* Update finetune_pspnet.md

* Update finetune_pspnet.md

* Update finetune_unet.md

* Update finetune_unet.md

* Update finetune_icnet.md

* Update finetune_pspnet.md

* Update finetune_hrnet.md

* Update README.md

* Update finetune_deeplabv3plus.md

* Update finetune_deeplabv3plus.md

* Update README.md

* Update config.md

* Update train_group.md

* Update models.md

* Update model_group.md

* Update model_group.md

* Update train_group.md

* Update train_group.md

* Update model_group.md

* Update model_group.md

* Update README.md

* Update README.md

* Update models.md

* Add files via upload

* Add files via upload

* Update models.md

* Update models.md

* Add files via upload

* Update README.md

* Update models.md

* Update models.md

* Update models.md

* Update models.md

* Update models.md

* Update models.md

* Update models.md

* Update models.md

* Update models.md

* Add files via upload

* Update models.md

* Update models.md

* Update loss_select.md

* Update README.md

* Update loss_select.md

* Add files via upload

* Update loss_select.md

* Add files via upload

* Update loss_select.md

* Update README.md

* Add files via upload

* Update models.md

* Add files via upload

* Update models.md

* Update models.md

* Create 1

* Delete 1

* Create 1

* Add files via upload

* Delete 1

* Add files via upload

* Add files via upload

* Update README.md

* Add files via upload

* Update finetune_deeplabv3plus.md

* Update finetune_icnet.md

* Update finetune_pspnet.md

* Update finetune_hrnet.md

* Update finetune_unet.md

* Update config.md

* Update config.md

* Update usage.md

* Update usage.md

* Update usage.md

* Update usage.md

* Update usage.md

* Update usage.md

* Update usage.md

* Update usage.md

* Create download_optic.py

* Add files via upload

* Add files via upload

* Update usage.md

* Update README.md

* Update usage.md

* Update usage.md

* Update usage.md

* Add files via upload

* Delete deeplabv3p_xception65_pet.yaml

* Delete hrnet_w18_pet.yaml

* Delete icnet_pet.yaml

* Delete pspnet.yaml

* Delete unet_pet.yaml
上级 d506d5f5
...@@ -80,20 +80,20 @@ pip install -r requirements.txt ...@@ -80,20 +80,20 @@ pip install -r requirements.txt
### 快速入门 ### 快速入门
* [训练/评估/可视化](./docs/usage.md) * [PaddleSeg快速入门](./docs/usage.md)
### 基础功能 ### 基础功能
* [自定义数据的标注与准备](./docs/data_prepare.md) * [自定义数据的标注与准备](./docs/data_prepare.md)
* [配置说明与准备](./docs/config.md) * [脚本使用和配置说明](./docs/config.md)
* [数据和配置校验](./docs/check.md) * [数据和配置校验](./docs/check.md)
* [分割模型介绍](./docs/models.md) * [分割模型介绍](./docs/models.md)
* [预训练模型下载](./docs/model_zoo.md) * [预训练模型下载](./docs/model_zoo.md)
* [如何训练DeepLabv3+](./turtorial/finetune_deeplabv3plus.md) * [DeepLabv3+模型使用教程](./turtorial/finetune_deeplabv3plus.md)
* [如何训练U-Net](./turtorial/finetune_unet.md) * [U-Net模型使用教程](./turtorial/finetune_unet.md)
* [如何训练ICNet](./turtorial/finetune_icnet.md) * [ICNet模型使用教程](./turtorial/finetune_icnet.md)
* [如何训练PSPNet](./turtorial/finetune_pspnet.md) * [PSPNet模型使用教程](./turtorial/finetune_pspnet.md)
* [如何训练HRNet](./turtorial/finetune_hrnet.md) * [HRNet模型使用教程](./turtorial/finetune_hrnet.md)
### 预测部署 ### 预测部署
...@@ -117,7 +117,7 @@ pip install -r requirements.txt ...@@ -117,7 +117,7 @@ pip install -r requirements.txt
|在线教程|链接| |在线教程|链接|
|-|-| |-|-|
|快速开始|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/100798)| |快速开始|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/100798)|
|U-Net宠物分割|[点击体验](https://aistudio.baidu.com/aistudio/projectDetail/102889)| |U-Net图像分割|[点击体验](https://aistudio.baidu.com/aistudio/projectDetail/102889)|
|DeepLabv3+图像分割|[点击体验](https://aistudio.baidu.com/aistudio/projectDetail/226703)| |DeepLabv3+图像分割|[点击体验](https://aistudio.baidu.com/aistudio/projectDetail/226703)|
|工业质检(零件瑕疵检测)|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/184392)| |工业质检(零件瑕疵检测)|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/184392)|
|人像分割|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/188833)| |人像分割|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/188833)|
......
# 数据集配置
DATASET:
DATA_DIR: "./dataset/optic_disc_seg/"
NUM_CLASSES: 2
TEST_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
TRAIN_FILE_LIST: "./dataset/optic_disc_seg/train_list.txt"
VAL_FILE_LIST: "./dataset/optic_disc_seg/val_list.txt"
VIS_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
# 预训练模型配置
MODEL:
MODEL_NAME: "deeplabv3p"
DEFAULT_NORM_TYPE: "bn"
DEEPLAB:
BACKBONE: "xception_65"
# 其他配置
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/deeplabv3p_xception65_bn_coco/"
MODEL_SAVE_DIR: "./saved_model/deeplabv3p_xception65_bn_optic/"
SNAPSHOT_EPOCH: 5
TEST:
TEST_MODEL: "./saved_model/deeplabv3p_xception65_bn_optic/final"
SOLVER:
NUM_EPOCHS: 10
LR: 0.001
LR_POLICY: "poly"
OPTIMIZER: "adam"
\ No newline at end of file
TRAIN_CROP_SIZE: (512, 512) # (width, height), for unpadding rangescaling and stepscaling
EVAL_CROP_SIZE: (512, 512) # (width, height), for unpadding rangescaling and stepscaling
AUG:
AUG_METHOD: "unpadding" # choice unpadding rangescaling and stepscaling
FIX_RESIZE_SIZE: (512, 512) # (width, height), for unpadding
INF_RESIZE_VALUE: 500 # for rangescaling
MAX_RESIZE_VALUE: 600 # for rangescaling
MIN_RESIZE_VALUE: 400 # for rangescaling
MAX_SCALE_FACTOR: 1.25 # for stepscaling
MIN_SCALE_FACTOR: 0.75 # for stepscaling
SCALE_STEP_SIZE: 0.25 # for stepscaling
MIRROR: True
BATCH_SIZE: 4
DATASET:
DATA_DIR: "./dataset/mini_pet/"
IMAGE_TYPE: "rgb" # choice rgb or rgba
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"
IGNORE_INDEX: 255
SEPARATOR: " "
FREEZE:
MODEL_FILENAME: "__model__"
PARAMS_FILENAME: "__params__"
MODEL:
MODEL_NAME: "deeplabv3p"
DEFAULT_NORM_TYPE: "bn"
DEEPLAB:
BACKBONE: "xception_65"
TRAIN:
PRETRAINED_MODEL_DIR: "./pretrained_model/deeplabv3p_xception65_bn_coco/"
MODEL_SAVE_DIR: "./saved_model/deeplabv3p_xception65_bn_pet/"
SNAPSHOT_EPOCH: 10
TEST:
TEST_MODEL: "./saved_model/deeplabv3p_xception65_bn_pet/final"
SOLVER:
NUM_EPOCHS: 100
LR: 0.005
LR_POLICY: "poly"
OPTIMIZER: "sgd"
# 数据集配置
DATASET:
DATA_DIR: "./dataset/optic_disc_seg/"
NUM_CLASSES: 2
TEST_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
TRAIN_FILE_LIST: "./dataset/optic_disc_seg/train_list.txt"
VAL_FILE_LIST: "./dataset/optic_disc_seg/val_list.txt"
VIS_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
# 预训练模型配置
MODEL:
MODEL_NAME: "hrnet"
DEFAULT_NORM_TYPE: "bn"
HRNET:
STAGE2:
NUM_CHANNELS: [18, 36]
STAGE3:
NUM_CHANNELS: [18, 36, 72]
STAGE4:
NUM_CHANNELS: [18, 36, 72, 144]
# 其他配置
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/hrnet_w18_bn_cityscapes/"
MODEL_SAVE_DIR: "./saved_model/hrnet_optic/"
SNAPSHOT_EPOCH: 5
TEST:
TEST_MODEL: "./saved_model/hrnet_optic/final"
SOLVER:
NUM_EPOCHS: 10
LR: 0.001
LR_POLICY: "poly"
OPTIMIZER: "adam"
TRAIN_CROP_SIZE: (512, 512) # (width, height), for unpadding rangescaling and stepscaling
EVAL_CROP_SIZE: (512, 512) # (width, height), for unpadding rangescaling and stepscaling
AUG:
AUG_METHOD: "unpadding" # choice unpadding rangescaling and stepscaling
FIX_RESIZE_SIZE: (512, 512) # (width, height), for unpadding
INF_RESIZE_VALUE: 500 # for rangescaling
MAX_RESIZE_VALUE: 600 # for rangescaling
MIN_RESIZE_VALUE: 400 # for rangescaling
MAX_SCALE_FACTOR: 1.25 # for stepscaling
MIN_SCALE_FACTOR: 0.75 # for stepscaling
SCALE_STEP_SIZE: 0.25 # for stepscaling
MIRROR: True
BATCH_SIZE: 4
DATASET:
DATA_DIR: "./dataset/mini_pet/"
IMAGE_TYPE: "rgb" # choice rgb or rgba
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"
IGNORE_INDEX: 255
SEPARATOR: " "
FREEZE:
MODEL_FILENAME: "__model__"
PARAMS_FILENAME: "__params__"
MODEL:
MODEL_NAME: "hrnet"
DEFAULT_NORM_TYPE: "bn"
HRNET:
STAGE2:
NUM_CHANNELS: [18, 36]
STAGE3:
NUM_CHANNELS: [18, 36, 72]
STAGE4:
NUM_CHANNELS: [18, 36, 72, 144]
TRAIN:
PRETRAINED_MODEL_DIR: "./pretrained_model/hrnet_w18_bn_cityscapes/"
MODEL_SAVE_DIR: "./saved_model/hrnet_w18_bn_pet/"
SNAPSHOT_EPOCH: 10
TEST:
TEST_MODEL: "./saved_model/hrnet_w18_bn_pet/final"
SOLVER:
NUM_EPOCHS: 100
LR: 0.005
LR_POLICY: "poly"
OPTIMIZER: "sgd"
# 数据集配置
DATASET:
DATA_DIR: "./dataset/optic_disc_seg/"
NUM_CLASSES: 2
TEST_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
TRAIN_FILE_LIST: "./dataset/optic_disc_seg/train_list.txt"
VAL_FILE_LIST: "./dataset/optic_disc_seg/val_list.txt"
VIS_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
# 预训练模型配置
MODEL:
MODEL_NAME: "icnet"
DEFAULT_NORM_TYPE: "bn"
MULTI_LOSS_WEIGHT: "[1.0, 0.4, 0.16]"
ICNET:
DEPTH_MULTIPLIER: 0.5
# 其他配置
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/icnet_bn_cityscapes/"
MODEL_SAVE_DIR: "./saved_model/icnet_optic/"
SNAPSHOT_EPOCH: 5
TEST:
TEST_MODEL: "./saved_model/icnet_optic/final"
SOLVER:
NUM_EPOCHS: 10
LR: 0.001
LR_POLICY: "poly"
OPTIMIZER: "adam"
TRAIN_CROP_SIZE: (512, 512) # (width, height), for unpadding rangescaling and stepscaling
EVAL_CROP_SIZE: (512, 512) # (width, height), for unpadding rangescaling and stepscaling
AUG:
AUG_METHOD: "unpadding" # choice unpadding rangescaling and stepscaling
FIX_RESIZE_SIZE: (512, 512) # (width, height), for unpadding
INF_RESIZE_VALUE: 500 # for rangescaling
MAX_RESIZE_VALUE: 600 # for rangescaling
MIN_RESIZE_VALUE: 400 # for rangescaling
MAX_SCALE_FACTOR: 1.25 # for stepscaling
MIN_SCALE_FACTOR: 0.75 # for stepscaling
SCALE_STEP_SIZE: 0.25 # for stepscaling
MIRROR: True
BATCH_SIZE: 4
DATASET:
DATA_DIR: "./dataset/mini_pet/"
IMAGE_TYPE: "rgb" # choice rgb or rgba
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"
IGNORE_INDEX: 255
SEPARATOR: " "
FREEZE:
MODEL_FILENAME: "__model__"
PARAMS_FILENAME: "__params__"
MODEL:
MODEL_NAME: "icnet"
DEFAULT_NORM_TYPE: "bn"
MULTI_LOSS_WEIGHT: "[1.0, 0.4, 0.16]"
ICNET:
DEPTH_MULTIPLIER: 0.5
TRAIN:
PRETRAINED_MODEL_DIR: "./pretrained_model/icnet_bn_cityscapes/"
MODEL_SAVE_DIR: "./saved_model/icnet_pet/"
SNAPSHOT_EPOCH: 10
TEST:
TEST_MODEL: "./saved_model/icnet_pet/final"
SOLVER:
NUM_EPOCHS: 100
LR: 0.005
LR_POLICY: "poly"
OPTIMIZER: "sgd"
EVAL_CROP_SIZE: (2049, 1025) # (width, height), for unpadding rangescaling and stepscaling
TRAIN_CROP_SIZE: (713, 713) # (width, height), for unpadding rangescaling and stepscaling
AUG:
AUG_METHOD: "stepscaling" # choice unpadding rangescaling and stepscaling
FIX_RESIZE_SIZE: (640, 640) # (width, height), for unpadding
INF_RESIZE_VALUE: 500 # for rangescaling
MAX_RESIZE_VALUE: 600 # for rangescaling
MIN_RESIZE_VALUE: 400 # for rangescaling
MAX_SCALE_FACTOR: 2.0 # for stepscaling
MIN_SCALE_FACTOR: 0.5 # for stepscaling
SCALE_STEP_SIZE: 0.25 # for stepscaling
MIRROR: True
BATCH_SIZE: 4
DATASET:
DATA_DIR: "./dataset/cityscapes/"
IMAGE_TYPE: "rgb" # choice rgb or rgba
NUM_CLASSES: 19
TEST_FILE_LIST: "dataset/cityscapes/val.list"
TRAIN_FILE_LIST: "dataset/cityscapes/train.list"
VAL_FILE_LIST: "dataset/cityscapes/val.list"
IGNORE_INDEX: 255
FREEZE:
MODEL_FILENAME: "model"
PARAMS_FILENAME: "params"
MODEL:
MODEL_NAME: "pspnet"
DEFAULT_NORM_TYPE: "bn"
PSPNET:
DEPTH_MULTIPLIER: 1
LAYERS: 50
TEST:
TEST_MODEL: "snapshots/cityscapes_pspnet50/final"
TRAIN:
MODEL_SAVE_DIR: "snapshots/cityscapes_pspnet50/"
PRETRAINED_MODEL_DIR: u"pretrained_model/pspnet50_bn_cityscapes/"
SNAPSHOT_EPOCH: 10
SOLVER:
LR: 0.001
LR_POLICY: "poly"
OPTIMIZER: "sgd"
NUM_EPOCHS: 700
# 数据集配置
DATASET:
DATA_DIR: "./dataset/optic_disc_seg/"
NUM_CLASSES: 2
TEST_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
TRAIN_FILE_LIST: "./dataset/optic_disc_seg/train_list.txt"
VAL_FILE_LIST: "./dataset/optic_disc_seg/val_list.txt"
VIS_FILE_LIST: "./dataset/optic_disc_seg/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_optic/"
SNAPSHOT_EPOCH: 5
TEST:
TEST_MODEL: "./saved_model/pspnet_optic/final"
SOLVER:
NUM_EPOCHS: 10
LR: 0.001
LR_POLICY: "poly"
OPTIMIZER: "adam"
# 数据集配置
DATASET:
DATA_DIR: "./dataset/optic_disc_seg/"
NUM_CLASSES: 2
TEST_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
TRAIN_FILE_LIST: "./dataset/optic_disc_seg/train_list.txt"
VAL_FILE_LIST: "./dataset/optic_disc_seg/val_list.txt"
VIS_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
# 预训练模型配置
MODEL:
MODEL_NAME: "unet"
DEFAULT_NORM_TYPE: "bn"
# 其他配置
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/unet_bn_coco/"
MODEL_SAVE_DIR: "./saved_model/unet_optic/"
SNAPSHOT_EPOCH: 5
TEST:
TEST_MODEL: "./saved_model/unet_optic/final"
SOLVER:
NUM_EPOCHS: 10
LR: 0.001
LR_POLICY: "poly"
OPTIMIZER: "adam"
TRAIN_CROP_SIZE: (512, 512) # (width, height), for unpadding rangescaling and stepscaling
EVAL_CROP_SIZE: (512, 512) # (width, height), for unpadding rangescaling and stepscaling
AUG:
AUG_METHOD: "unpadding" # choice unpadding rangescaling and stepscaling
FIX_RESIZE_SIZE: (512, 512) # (width, height), for unpadding
INF_RESIZE_VALUE: 500 # for rangescaling
MAX_RESIZE_VALUE: 600 # for rangescaling
MIN_RESIZE_VALUE: 400 # for rangescaling
MAX_SCALE_FACTOR: 1.25 # for stepscaling
MIN_SCALE_FACTOR: 0.75 # for stepscaling
SCALE_STEP_SIZE: 0.25 # for stepscaling
MIRROR: True
BATCH_SIZE: 4
DATASET:
DATA_DIR: "./dataset/mini_pet/"
IMAGE_TYPE: "rgb" # choice rgb or rgba
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"
IGNORE_INDEX: 255
SEPARATOR: " "
FREEZE:
MODEL_FILENAME: "__model__"
PARAMS_FILENAME: "__params__"
MODEL:
MODEL_NAME: "unet"
DEFAULT_NORM_TYPE: "bn"
TEST:
TEST_MODEL: "./saved_model/unet_pet/final/"
TRAIN:
MODEL_SAVE_DIR: "./saved_model/unet_pet/"
PRETRAINED_MODEL_DIR: "./pretrained_model/unet_bn_coco/"
SNAPSHOT_EPOCH: 10
SOLVER:
NUM_EPOCHS: 100
LR: 0.005
LR_POLICY: "poly"
OPTIMIZER: "adam"
# Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import sys
import os
LOCAL_PATH = os.path.dirname(os.path.abspath(__file__))
TEST_PATH = os.path.join(LOCAL_PATH, "..", "test")
sys.path.append(TEST_PATH)
from test_utils import download_file_and_uncompress
def download_pet_dataset(savepath, extrapath):
url = "https://paddleseg.bj.bcebos.com/dataset/optic_disc_seg.zip"
download_file_and_uncompress(
url=url, savepath=savepath, extrapath=extrapath)
if __name__ == "__main__":
download_pet_dataset(LOCAL_PATH, LOCAL_PATH)
print("Dataset download finish!")
# PaddleSeg 分割库配置说明 # 脚本使用和配置说明
PaddleSeg提供了 **训练**/**评估**/**可视化**/**模型导出** 等4个功能的使用脚本。所有脚本都支持通过不同的Flags来开启特定功能,也支持通过Options来修改默认的训练配置。它们的使用方式非常接近,如下:
```shell
# 训练
python pdseg/train.py ${FLAGS} ${OPTIONS}
# 评估
python pdseg/eval.py ${FLAGS} ${OPTIONS}
# 可视化
python pdseg/vis.py ${FLAGS} ${OPTIONS}
# 模型导出
python pdseg/export_model.py ${FLAGS} ${OPTIONS}
```
**Note:** FLAGS必须位于OPTIONS之前,否会将会遇到报错,例如如下的例子:
```shell
# FLAGS "--cfg configs/unet_optic.yaml" 必须在 OPTIONS "BATCH_SIZE 1" 之前
python pdseg/train.py BATCH_SIZE 1 --cfg configs/unet_optic.yaml
```
## 命令行FLAGS
|FLAG|用途|支持脚本|默认值|备注|
|-|-|-|-|-|
|--cfg|配置文件路径|ALL|None||
|--use_gpu|是否使用GPU进行训练|train/eval/vis|False||
|--use_mpio|是否使用多进程进行IO处理|train/eval|False|打开该开关会占用一定量的CPU内存,但是可以提高训练速度。</br> **NOTE:** windows平台下不支持该功能, 建议使用自定义数据初次训练时不打开,打开会导致数据读取异常不可见。 |
|--use_tb|是否使用TensorBoard记录训练数据|train|False||
|--log_steps|训练日志的打印周期(单位为step)|train|10||
|--debug|是否打印debug信息|train|False|IOU等指标涉及到混淆矩阵的计算,会降低训练速度|
|--tb_log_dir &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|TensorBoard的日志路径|train|None||
|--do_eval|是否在保存模型时进行效果评估 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|train|False||
|--vis_dir|保存可视化图片的路径|vis|"visual"||
## OPTIONS
PaddleSeg提供了统一的配置用于 训练/评估/可视化/导出模型。一共存在三套配置方案: PaddleSeg提供了统一的配置用于 训练/评估/可视化/导出模型。一共存在三套配置方案:
* 命令行窗口传递的参数。 * 命令行窗口传递的参数。
......
docs/imgs/deeplabv3p.png

269.2 KB | W: | H:

docs/imgs/deeplabv3p.png

252.7 KB | W: | H:

docs/imgs/deeplabv3p.png
docs/imgs/deeplabv3p.png
docs/imgs/deeplabv3p.png
docs/imgs/deeplabv3p.png
  • 2-up
  • Swipe
  • Onion skin
docs/imgs/icnet.png

68.9 KB | W: | H:

docs/imgs/icnet.png

415.0 KB | W: | H:

docs/imgs/icnet.png
docs/imgs/icnet.png
docs/imgs/icnet.png
docs/imgs/icnet.png
  • 2-up
  • Swipe
  • Onion skin
docs/imgs/tensorboard_image.JPG

627.2 KB | W: | H:

docs/imgs/tensorboard_image.JPG

811.2 KB | W: | H:

docs/imgs/tensorboard_image.JPG
docs/imgs/tensorboard_image.JPG
docs/imgs/tensorboard_image.JPG
docs/imgs/tensorboard_image.JPG
  • 2-up
  • Swipe
  • Onion skin
docs/imgs/tensorboard_scalar.JPG

347.1 KB | W: | H:

docs/imgs/tensorboard_scalar.JPG

124.1 KB | W: | H:

docs/imgs/tensorboard_scalar.JPG
docs/imgs/tensorboard_scalar.JPG
docs/imgs/tensorboard_scalar.JPG
docs/imgs/tensorboard_scalar.JPG
  • 2-up
  • Swipe
  • Onion skin
docs/imgs/usage_vis_demo.jpg

1.9 MB | W: | H:

docs/imgs/usage_vis_demo.jpg

325.8 KB | W: | H:

docs/imgs/usage_vis_demo.jpg
docs/imgs/usage_vis_demo.jpg
docs/imgs/usage_vis_demo.jpg
docs/imgs/usage_vis_demo.jpg
  • 2-up
  • Swipe
  • Onion skin
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
- [U-Net](#U-Net) - [U-Net](#U-Net)
- [DeepLabv3+](#DeepLabv3) - [DeepLabv3+](#DeepLabv3)
- [ICNet](#ICNet)
- [PSPNet](#PSPNet) - [PSPNet](#PSPNet)
- [ICNet](#ICNet)
- [HRNet](#HRNet) - [HRNet](#HRNet)
## U-Net ## U-Net
...@@ -15,38 +15,38 @@ U-Net [1] 起源于医疗图像分割,整个网络是标准的encoder-decoder ...@@ -15,38 +15,38 @@ U-Net [1] 起源于医疗图像分割,整个网络是标准的encoder-decoder
## DeepLabv3+ ## DeepLabv3+
DeepLabv3+ [2] 是DeepLab系列的最后一篇文章,其前作有 DeepLabv1,DeepLabv2, DeepLabv3, DeepLabv3+ [2] 是DeepLab系列的最后一篇文章,其前作有 DeepLabv1, DeepLabv2, DeepLabv3.
在最新作中,DeepLab的作者通过encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层, 在最新作中,作者通过encoder-decoder进行多尺度信息的融合,以优化分割效果,尤其是目标边缘的效果。
其骨干网络使用了Xception模型,提高了语义分割的健壮性和运行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance,89.0mIOU。 并且其使用了Xception模型作为骨干网络,并将深度可分离卷积(depthwise separable convolution)应用到atrous spatial pyramid pooling(ASPP)中和decoder模块,提高了语义分割的健壮性和运行速率,在 PASCAL VOC 2012 和 Cityscapes 数据集上取得新的state-of-art performance.
![](./imgs/deeplabv3p.png) ![](./imgs/deeplabv3p.png)
在PaddleSeg当前实现中,支持两种分类Backbone网络的切换 在PaddleSeg当前实现中,支持两种分类Backbone网络的切换:
- MobileNetv2: - MobileNetv2
适用于移动设备的快速网络,如果对分割性能有较高的要求,请使用这一backbone网络。 适用于移动设备的快速网络,如果对分割性能有较高的要求,请使用这一backbone网络。
- Xception: - Xception
DeepLabv3+原始实现的backbone网络,兼顾了精度和性能,适用于服务端部署。 DeepLabv3+原始实现的backbone网络,兼顾了精度和性能,适用于服务端部署。
## PSPNet
## ICNet Pyramid Scene Parsing Network (PSPNet) [3] 起源于场景解析(Scene Parsing)领域。如下图所示,普通FCN [4] 面向复杂场景出现三种误分割现象:(1)关系不匹配。将船误分类成车,显然车一般不会出现在水面上。(2)类别混淆。摩天大厦和建筑物这两个类别相近,误将摩天大厦分类成建筑物。(3)类别不显著。枕头区域较小且纹理与床相近,误将枕头分类成床。
Image Cascade Network(ICNet) [3] 主要用于图像实时语义分割。相较于其它压缩计算的方法,ICNet即考虑了速度,也考虑了准确性。 ICNet的主要思想是将输入图像变换为不同的分辨率,然后用不同计算复杂度的子网络计算不同分辨率的输入,然后将结果合并。ICNet由三个子网络组成,计算复杂度高的网络处理低分辨率输入,计算复杂度低的网络处理分辨率高的网络,通过这种方式在高分辨率图像的准确性和低复杂度网络的效率之间获得平衡。 ![](./imgs/pspnet2.png)
整个网络结构如下: PSPNet的出发点是在算法中引入更多的上下文信息来解决上述问题。为了融合了图像中不同区域的上下文信息,PSPNet通过特殊设计的全局均值池化操作(global average pooling)和特征融合构造金字塔池化模块 (Pyramid Pooling Module)。PSPNet最终获得了2016年ImageNet场景解析挑战赛的冠军,并在PASCAL VOC 2012 和 Cityscapes 数据集上取得当时的最佳效果。整个网络结构如下:
![](./imgs/icnet.png) ![](./imgs/pspnet.png)
## PSPNet
Pyramid Scene Parsing Network (PSPNet) [4] 起源于场景解析(Scene Parsing)领域。如下图所示,普通FCN [5] 面向复杂场景出现三种误分割现象:(1)关系不匹配。将船误分类成车,显然车一般不会出现在水面上。(2)类别混淆。摩天大厦和建筑物这两个类别相近,误将摩天大厦分类成建筑物。(3)类别不显著。枕头区域较小且纹理与床相近,误将枕头分类成床。 ## ICNet
![](./imgs/pspnet2.png) Image Cascade Network(ICNet) [5] 是一个基于PSPNet的语义分割网络,设计目的是减少PSPNet推断时期的耗时。ICNet主要用于图像实时语义分割。ICNet由三个不同分辨率的子网络组成,将输入图像变换为不同的分辨率,随后使用计算复杂度高的网络处理低分辨率输入,计算复杂度低的网络处理分辨率高的网络,通过这种方式在高分辨率图像的准确性和低复杂度网络的效率之间获得平衡。并在PSPNet的基础上引入级联特征融合单元(cascade feature fusion unit),实现快速且高质量的分割模型。
PSPNet的出发点是在算法中引入更多的上下文信息来解决上述问题。为了融合了图像中不同区域的上下文信息,PSPNet通过特殊设计的全局均值池化操作(global average pooling)和特征融合构造金字塔池化模块 (Pyramid Pooling Module)。PSPNet最终获得了2016年ImageNet场景解析挑战赛的冠军,并在PASCAL VOC 2012 和 Cityscapes 数据集上取得当时的最佳效果。整个网络结构如下: 整个网络结构如下:
![](./imgs/pspnet.png) ![](./imgs/icnet.png)
### HRNet ### HRNet
...@@ -64,11 +64,11 @@ HRNet在人体姿态估计、语义分割和目标检测领域都取得了显著 ...@@ -64,11 +64,11 @@ HRNet在人体姿态估计、语义分割和目标检测领域都取得了显著
[2] [Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation](https://arxiv.org/abs/1802.02611) [2] [Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation](https://arxiv.org/abs/1802.02611)
[3] [ICNet for Real-Time Semantic Segmentation on High-Resolution Images](https://arxiv.org/abs/1704.08545) [3] [Pyramid Scene Parsing Network](https://arxiv.org/abs/1612.01105)
[4] [Pyramid Scene Parsing Network](https://arxiv.org/abs/1612.01105) [4] [Fully Convolutional Networks for Semantic Segmentation](https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf)
[5] [Fully Convolutional Networks for Semantic Segmentation](https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf) [5] [ICNet for Real-Time Semantic Segmentation on High-Resolution Images](https://arxiv.org/abs/1704.08545)
[6] [Deep High-Resolution Representation Learning for Visual Recognition](https://arxiv.org/abs/1908.07919) [6] [Deep High-Resolution Representation Learning for Visual Recognition](https://arxiv.org/abs/1908.07919)
# 训练/评估/可视化 # PaddleSeg快速入门
PaddleSeg提供了 **训练**/**评估**/**可视化** 等三个功能的使用脚本。三个脚本都支持通过不同的Flags来开启特定功能,也支持通过Options来修改默认的[训练配置](./config.md)。三者的使用方式非常接近,如下: 本教程通过一个简单的示例,说明如何基于PaddleSeg启动训练(训练可视化)、评估和可视化。我们选择基于COCO数据集预训练的unet模型作为预训练模型,以一个眼底医疗分割数据集为例。
```shell - [1.准备工作](#1准备工作)
# 训练 - [2.下载待训练数据](#2下载待训练数据)
python pdseg/train.py ${FLAGS} ${OPTIONS} - [3.下载预训练模型](#3下载预训练模型)
# 评估 - [4.模型训练](#4模型训练)
python pdseg/eval.py ${FLAGS} ${OPTIONS} - [5.训练过程可视化](#5训练过程可视化)
# 可视化 - [6.模型评估](#6模型评估)
python pdseg/vis.py ${FLAGS} ${OPTIONS} - [7.模型可视化](#7模型可视化)
``` - [在线体验](#在线体验)
**Note:**
* FLAGS必须位于OPTIONS之前,否会将会遇到报错,例如如下的例子:
```shell
# FLAGS "--cfg configs/unet_pet.yaml" 必须在 OPTIONS "BATCH_SIZE 1" 之前
python pdseg/train.py BATCH_SIZE 1 --cfg configs/unet_pet.yaml
```
## 命令行FLAGS列表
|FLAG|支持脚本|用途|默认值|备注|
|-|-|-|-|-|
|--cfg|ALL|配置文件路径|None||
|--use_gpu|ALL|是否使用GPU进行训练|False||
|--use_mpio|train/eval|是否使用多进程进行IO处理|False|打开该开关会占用一定量的CPU内存,但是可以提高训练速度。</br> **NOTE:** windows平台下不支持该功能, 建议使用自定义数据初次训练时不打开,打开会导致数据读取异常不可见。 </br> |
|--use_tb|train|是否使用TensorBoard记录训练数据|False||
|--log_steps|train|训练日志的打印周期(单位为step)|10||
|--debug|train|是否打印debug信息|False|IOU等指标涉及到混淆矩阵的计算,会降低训练速度|
|--tb_log_dir|train|TensorBoard的日志路径|None||
|--do_eval|train|是否在保存模型时进行效果评估|False||
|--vis_dir|vis|保存可视化图片的路径|"visual"||
## OPTIONS
详见[训练配置](./config.md)
## 使用示例
下面通过一个简单的示例,说明如何基于PaddleSeg提供的预训练模型启动训练。我们选择基于COCO数据集预训练的unet模型作为预训练模型,在一个Oxford-IIIT Pet数据集上进行训练。
**Note:** 为了快速体验,我们使用Oxford-IIIT Pet做了一个小型数据集,后续数据都使用该小型数据集。
### 准备工作 ## 1.准备工作
在开始教程前,请先确认准备工作已经完成: 在开始教程前,请先确认准备工作已经完成:
1. 正确安装了PaddlePaddle 1. 正确安装了PaddlePaddle
2. PaddleSeg相关依赖已经安装 2. PaddleSeg相关依赖已经安装
如果有不确认的地方,请参考[安装说明](./installation.md) 如果有不确认的地方,请参考[首页安装说明](../README.md#安装)
## 2.下载待训练数据
![](../turtorial/imgs/optic.png)
我们提前准备好了一份眼底医疗分割数据集--视盘分割(optic disc segmentation),包含267张训练图片、76张验证图片、38张测试图片。通过以下命令进行下载:
### 下载预训练模型
```shell ```shell
# 下载预训练模型并进行解压 # 下载待训练数据集
python pretrained_model/download_model.py unet_bn_coco python dataset/download_optic.py
``` ```
### 下载Oxford-IIIT Pet数据集
我们使用了Oxford-IIIT中的猫和狗两个类别数据制作了一个小数据集mini_pet,用于快速体验。
更多关于数据集的介绍情参考[Oxford-IIIT Pet](https://www.robots.ox.ac.uk/~vgg/data/pets/)
## 3.下载预训练模型
```shell ```shell
# 下载预训练模型并进行解压 # 下载预训练模型并进行解压
python dataset/download_pet.py python pretrained_model/download_model.py unet_bn_coco
``` ```
### 模型训练 ## 4.模型训练
为了方便体验,我们在configs目录下放置了mini_pet所对应的配置文件`unet_pet.yaml`,可以通过`--cfg`指向该文件来设置训练配置。 为了方便体验,我们在configs目录下放置了配置文件`unet_optic.yaml`,可以通过`--cfg`指向该文件来设置训练配置。
我们选择GPU 0号卡进行训练,这可以通过环境变量`CUDA_VISIBLE_DEVICES`来指定 可以通过环境变量`CUDA_VISIBLE_DEVICES`来指定GPU卡号
``` ```
# 指定GPU卡号(以0号卡为例)
export CUDA_VISIBLE_DEVICES=0 export CUDA_VISIBLE_DEVICES=0
python pdseg/train.py --use_gpu \ # 训练
python pdseg/train.py --cfg configs/unet_optic.yaml \
--use_gpu \
--do_eval \ --do_eval \
--use_tb \ --use_tb \
--tb_log_dir train_log \ --tb_log_dir train_log \
--cfg configs/unet_pet.yaml \
BATCH_SIZE 4 \ BATCH_SIZE 4 \
TRAIN.PRETRAINED_MODEL_DIR pretrained_model/unet_bn_coco \ SOLVER.LR 0.001
SOLVER.LR 5e-5
```
若需要使用多块GPU,以0、1、2号卡为例,可输入
```
export CUDA_VISIBLE_DEVICES=0,1,2
``` ```
**NOTE:** **NOTE:**
* 上述示例中,一共存在三套配置方案: PaddleSeg默认配置/unet_pet.yaml/OPTIONS,三者的优先级顺序为 OPTIONS > yaml > 默认配置。这个原则对于train.py/eval.py/vis.py都适用 * 如果发现因为内存不足而Crash。请适当调低`BATCH_SIZE`。如果本机GPU内存充足,则可以调高`BATCH_SIZE`的大小以获得更快的训练速度,`BATCH_SIZE`增大时,可以适当调高学习率`SOLVER.LR`.
* 如果发现因为内存不足而Crash。请适当调低BATCH_SIZE。如果本机GPU内存充足,则可以调高BATCH_SIZE的大小以获得更快的训练速度,BATCH_SIZE增大时,可以适当调高学习率。
* 如果在Linux系统下训练,可以使用`--use_mpio`使用多进程I/O,通过提升数据增强的处理速度进而大幅度提升GPU利用率。 * 如果在Linux系统下训练,可以使用`--use_mpio`使用多进程I/O,通过提升数据增强的处理速度进而大幅度提升GPU利用率。
### 训练过程可视化 ## 5.训练过程可视化
当打开do_eval和use_tb两个开关后,我们可以通过TensorBoard查看边训练边评估的效果。 当打开do_eval和use_tb两个开关后,我们可以通过TensorBoard查看边训练边评估的效果。
...@@ -100,41 +77,41 @@ tensorboard --logdir train_log --host {$HOST_IP} --port {$PORT} ...@@ -100,41 +77,41 @@ tensorboard --logdir train_log --host {$HOST_IP} --port {$PORT}
``` ```
NOTE: NOTE:
1. 上述示例中,$HOST\_IP为机器IP地址,请替换为实际IP,$PORT请替换为可访问的端口 1. 上述示例中,$HOST\_IP为机器IP地址,请替换为实际IP,$PORT请替换为可访问的端口
2. 数据量较大时,前端加载速度会比较慢,请耐心等待 2. 数据量较大时,前端加载速度会比较慢,请耐心等待
启动TensorBoard命令后,我们可以在浏览器中查看对应的训练数据 启动TensorBoard命令后,我们可以在浏览器中查看对应的训练数据
`SCALAR`这个tab中,查看训练loss、iou、acc的变化趋势 `SCALAR`这个tab中,查看训练loss、iou、acc的变化趋势
![](./imgs/tensorboard_scalar.JPG) ![](./imgs/tensorboard_scalar.JPG)
`IMAGE`这个tab中,查看样本的预测情况 `IMAGE`这个tab中,查看样本图片。
![](./imgs/tensorboard_image.JPG) ![](./imgs/tensorboard_image.JPG)
### 模型评估 ## 6.模型评估
训练完成后,我们可以通过eval.py来评估模型效果。由于我们设置的训练EPOCH数量为100,保存间隔为10,因此一共会产生10个定期保存的模型,加上最终保存的final模型,一共有11个模型。我们选择最后保存的模型进行效果的评估: 训练完成后,我们可以通过eval.py来评估模型效果。由于我们设置的训练EPOCH数量为10,保存间隔为5,因此一共会产生2个定期保存的模型,加上最终保存的final模型,一共有3个模型。我们选择最后保存的模型进行效果的评估:
```shell ```shell
python pdseg/eval.py --use_gpu \ python pdseg/eval.py --use_gpu \
--cfg configs/unet_pet.yaml \ --cfg configs/unet_optic.yaml \
TEST.TEST_MODEL saved_model/unet_pet/final TEST.TEST_MODEL saved_model/unet_optic/final
``` ```
可以看到,在经过训练后,模型在验证集上的mIoU指标达到了0.70+(由于随机种子等因素的影响,效果会有小范围波动,属于正常情况)。 可以看到,在经过训练后,模型在验证集上的mIoU指标达到了0.85+(由于随机种子等因素的影响,效果会有小范围波动,属于正常情况)。
### 模型可视化 ## 7.模型可视化
通过vis.py来评估模型效果,我们选择最后保存的模型进行效果的评估 通过vis.py进行测试和可视化,以选择最后保存的模型进行测试为例
```shell ```shell
python pdseg/vis.py --use_gpu \ python pdseg/vis.py --use_gpu \
--cfg configs/unet_pet.yaml \ --cfg configs/unet_optic.yaml \
TEST.TEST_MODEL saved_model/unet_pet/final TEST.TEST_MODEL saved_model/unet_optic/final
``` ```
执行上述脚本后,会在主目录下产生一个visual文件夹,里面存放着测试集图片的预测结果,我们选择其中几张图片进行查看,可以看到,在测试集中的图片上的预测效果已经很不错: 执行上述脚本后,会在主目录下产生一个visual文件夹,里面存放着测试集图片的预测结果,我们选择其中1张图片进行查看:
![](./imgs/usage_vis_demo.jpg) ![](./imgs/usage_vis_demo.jpg)
`NOTE` `NOTE`
1. 可视化的图片会默认保存在visual目录下,可以通过`--vis_dir`来指定输出目录 1. 可视化的图片会默认保存在visual目录下,可以通过`--vis_dir`来指定输出目录
2. 训练过程中会使用DATASET.VIS_FILE_LIST中的图片进行可视化显示,而vis.py则会使用DATASET.TEST_FILE_LIST 2. 训练过程中会使用`DATASET.VIS_FILE_LIST`中的图片进行可视化显示,而vis.py则会使用`DATASET.TEST_FILE_LIST`.
## 在线体验 ## 在线体验
......
# DeepLabv3+模型训练教程 # DeepLabv3+模型使用教程
* 本教程旨在介绍如何通过使用PaddleSeg提供的 ***`DeeplabV3+/Xception65/BatchNorm`*** 预训练模型在自定义数据集上进行训练。除了该配置之外,DeeplabV3+还支持以下不同[模型组合](#模型组合)的预训练模型,如果需要使用对应模型作为预训练模型,将下述内容中的Xception Backbone中的内容进行替换即可 本教程旨在介绍如何使用`DeepLabv3+`预训练模型在自定义数据集上进行训练、评估和可视化。我们以`DeeplabV3+/Xception65/BatchNorm`预训练模型为例。
* 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解 * 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解
* 本教程的所有命令都基于PaddleSeg主目录进行执行 * 本教程的所有命令都基于PaddleSeg主目录进行执行
## 一. 准备待训练数据 ## 一. 准备待训练数据
我们提前准备好了一份数据集,通过以下代码进行下载 ![](./imgs/optic.png)
我们提前准备好了一份眼底医疗分割数据集,包含267张训练图片、76张验证图片、38张测试图片。通过以下命令进行下载:
```shell ```shell
python dataset/download_pet.py python dataset/download_optic.py
``` ```
## 二. 下载预训练模型 ## 二. 下载预训练模型
关于PaddleSeg支持的所有预训练模型的列表,我们可以从[模型组合](#模型组合)中查看我们所需模型的名字和配置
接着下载对应的预训练模型 接着下载对应的预训练模型
```shell ```shell
python pretrained_model/download_model.py deeplabv3p_xception65_bn_coco python pretrained_model/download_model.py deeplabv3p_xception65_bn_coco
``` ```
关于已有的DeepLabv3+预训练模型的列表,请参见[模型组合](#模型组合)。如果需要使用其他预训练模型,下载该模型并将配置中的BACKBONE、NORM_TYPE等进行替换即可。
## 三. 准备配置 ## 三. 准备配置
接着我们需要确定相关配置,从本教程的角度,配置分为三部分: 接着我们需要确定相关配置,从本教程的角度,配置分为三部分:
...@@ -45,19 +48,19 @@ python pretrained_model/download_model.py deeplabv3p_xception65_bn_coco ...@@ -45,19 +48,19 @@ python pretrained_model/download_model.py deeplabv3p_xception65_bn_coco
在三者中,预训练模型的配置尤为重要,如果模型或者BACKBONE配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所展示。 在三者中,预训练模型的配置尤为重要,如果模型或者BACKBONE配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所展示。
数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/mini_pet` 数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/optic_disc_seg`中。
其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/deeplabv3p_xception65_pet.yaml** 其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/deeplabv3p_xception65_optic.yaml**
```yaml ```yaml
# 数据集配置 # 数据集配置
DATASET: DATASET:
DATA_DIR: "./dataset/mini_pet/" DATA_DIR: "./dataset/optic_disc_seg/"
NUM_CLASSES: 3 NUM_CLASSES: 2
TEST_FILE_LIST: "./dataset/mini_pet/file_list/test_list.txt" TEST_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
TRAIN_FILE_LIST: "./dataset/mini_pet/file_list/train_list.txt" TRAIN_FILE_LIST: "./dataset/optic_disc_seg/train_list.txt"
VAL_FILE_LIST: "./dataset/mini_pet/file_list/val_list.txt" VAL_FILE_LIST: "./dataset/optic_disc_seg/val_list.txt"
VIS_FILE_LIST: "./dataset/mini_pet/file_list/test_list.txt" VIS_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
# 预训练模型配置 # 预训练模型配置
MODEL: MODEL:
...@@ -75,15 +78,15 @@ AUG: ...@@ -75,15 +78,15 @@ AUG:
BATCH_SIZE: 4 BATCH_SIZE: 4
TRAIN: TRAIN:
PRETRAINED_MODEL_DIR: "./pretrained_model/deeplabv3p_xception65_bn_coco/" PRETRAINED_MODEL_DIR: "./pretrained_model/deeplabv3p_xception65_bn_coco/"
MODEL_SAVE_DIR: "./saved_model/deeplabv3p_xception65_bn_pet/" MODEL_SAVE_DIR: "./saved_model/deeplabv3p_xception65_bn_optic/"
SNAPSHOT_EPOCH: 10 SNAPSHOT_EPOCH: 5
TEST: TEST:
TEST_MODEL: "./saved_model/deeplabv3p_xception65_bn_pet/final" TEST_MODEL: "./saved_model/deeplabv3p_xception65_bn_optic/final"
SOLVER: SOLVER:
NUM_EPOCHS: 100 NUM_EPOCHS: 10
LR: 0.005 LR: 0.001
LR_POLICY: "poly" LR_POLICY: "poly"
OPTIMIZER: "sgd" OPTIMIZER: "adam"
``` ```
## 四. 配置/数据校验 ## 四. 配置/数据校验
...@@ -91,7 +94,7 @@ SOLVER: ...@@ -91,7 +94,7 @@ SOLVER:
在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程 在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程
```shell ```shell
python pdseg/check.py --cfg ./configs/deeplabv3p_xception65_pet.yaml python pdseg/check.py --cfg ./configs/deeplabv3p_xception65_optic.yaml
``` ```
...@@ -100,7 +103,10 @@ python pdseg/check.py --cfg ./configs/deeplabv3p_xception65_pet.yaml ...@@ -100,7 +103,10 @@ python pdseg/check.py --cfg ./configs/deeplabv3p_xception65_pet.yaml
校验通过后,使用下述命令启动训练 校验通过后,使用下述命令启动训练
```shell ```shell
python pdseg/train.py --use_gpu --cfg ./configs/deeplabv3p_xception65_pet.yaml # 指定GPU卡号(以0号卡为例)
export CUDA_VISIBLE_DEVICES=0
# 训练
python pdseg/train.py --use_gpu --cfg ./configs/deeplabv3p_xception65_optic.yaml
``` ```
## 六. 进行评估 ## 六. 进行评估
...@@ -108,8 +114,21 @@ python pdseg/train.py --use_gpu --cfg ./configs/deeplabv3p_xception65_pet.yaml ...@@ -108,8 +114,21 @@ python pdseg/train.py --use_gpu --cfg ./configs/deeplabv3p_xception65_pet.yaml
模型训练完成,使用下述命令启动评估 模型训练完成,使用下述命令启动评估
```shell ```shell
python pdseg/eval.py --use_gpu --cfg ./configs/deeplabv3p_xception65_pet.yaml python pdseg/eval.py --use_gpu --cfg ./configs/deeplabv3p_xception65_optic.yaml
```
## 七. 进行可视化
使用下述命令启动预测和可视化
```shell
python pdseg/vis.py --use_gpu --cfg ./configs/deeplabv3p_xception65_optic.yaml
``` ```
预测结果将保存在`visual`目录下,以下展示其中1张图片的预测效果:
![](imgs/optic_deeplab.png)
## 在线体验 ## 在线体验
PaddleSeg在AI Studio平台上提供了在线体验的DeepLabv3+图像分割教程,欢迎[点击体验](https://aistudio.baidu.com/aistudio/projectDetail/101696) PaddleSeg在AI Studio平台上提供了在线体验的DeepLabv3+图像分割教程,欢迎[点击体验](https://aistudio.baidu.com/aistudio/projectDetail/101696)
......
# HRNet模型训练教程 # HRNet模型使用教程
* 本教程旨在介绍如何通过使用PaddleSeg提供的 ***`HRNet`*** 预训练模型在自定义数据集上进行训练 本教程旨在介绍如何通过使用PaddleSeg提供的 ***`HRNet`*** 预训练模型在自定义数据集上进行训练、评估和可视化
* 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解 * 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解
* 本教程的所有命令都基于PaddleSeg主目录进行执行 * 本教程的所有命令都基于PaddleSeg主目录进行执行
## 一. 准备待训练数据 ## 一. 准备待训练数据
我们提前准备好了一份数据集,通过以下代码进行下载 ![](./imgs/optic.png)
我们提前准备好了一份眼底医疗分割数据集,包含267张训练图片、76张验证图片、38张测试图片。通过以下命令进行下载:
```shell ```shell
python dataset/download_pet.py python dataset/download_optic.py
``` ```
## 二. 下载预训练模型
关于PaddleSeg支持的所有预训练模型的列表,我们可以从[模型组合](#模型组合)中查看我们所需模型的名字和配置 ## 二. 下载预训练模型
接着下载对应的预训练模型 接着下载对应的预训练模型
...@@ -24,6 +25,8 @@ python dataset/download_pet.py ...@@ -24,6 +25,8 @@ python dataset/download_pet.py
python pretrained_model/download_model.py hrnet_w18_bn_cityscapes python pretrained_model/download_model.py hrnet_w18_bn_cityscapes
``` ```
关于已有的HRNet预训练模型的列表,请参见[模型组合](#模型组合)。如果需要使用其他预训练模型,下载该模型并将配置中的BACKBONE、NORM_TYPE等进行替换即可。
## 三. 准备配置 ## 三. 准备配置
接着我们需要确定相关配置,从本教程的角度,配置分为三部分: 接着我们需要确定相关配置,从本教程的角度,配置分为三部分:
...@@ -45,19 +48,19 @@ python pretrained_model/download_model.py hrnet_w18_bn_cityscapes ...@@ -45,19 +48,19 @@ python pretrained_model/download_model.py hrnet_w18_bn_cityscapes
在三者中,预训练模型的配置尤为重要,如果模型配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所展示。 在三者中,预训练模型的配置尤为重要,如果模型配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所展示。
数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/mini_pet` 数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/optic_disc_seg`
其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/hrnet_w18_pet.yaml** 其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/hrnet_optic.yaml**
```yaml ```yaml
# 数据集配置 # 数据集配置
DATASET: DATASET:
DATA_DIR: "./dataset/mini_pet/" DATA_DIR: "./dataset/optic_disc_seg/"
NUM_CLASSES: 3 NUM_CLASSES: 2
TEST_FILE_LIST: "./dataset/mini_pet/file_list/test_list.txt" TEST_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
TRAIN_FILE_LIST: "./dataset/mini_pet/file_list/train_list.txt" TRAIN_FILE_LIST: "./dataset/optic_disc_seg/train_list.txt"
VAL_FILE_LIST: "./dataset/mini_pet/file_list/val_list.txt" VAL_FILE_LIST: "./dataset/optic_disc_seg/val_list.txt"
VIS_FILE_LIST: "./dataset/mini_pet/file_list/test_list.txt" VIS_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
# 预训练模型配置 # 预训练模型配置
MODEL: MODEL:
...@@ -80,15 +83,15 @@ AUG: ...@@ -80,15 +83,15 @@ AUG:
BATCH_SIZE: 4 BATCH_SIZE: 4
TRAIN: TRAIN:
PRETRAINED_MODEL_DIR: "./pretrained_model/hrnet_w18_bn_cityscapes/" PRETRAINED_MODEL_DIR: "./pretrained_model/hrnet_w18_bn_cityscapes/"
MODEL_SAVE_DIR: "./saved_model/hrnet_w18_bn_pet/" MODEL_SAVE_DIR: "./saved_model/hrnet_optic/"
SNAPSHOT_EPOCH: 10 SNAPSHOT_EPOCH: 5
TEST: TEST:
TEST_MODEL: "./saved_model/hrnet_w18_bn_pet/final" TEST_MODEL: "./saved_model/hrnet_optic/final"
SOLVER: SOLVER:
NUM_EPOCHS: 100 NUM_EPOCHS: 10
LR: 0.005 LR: 0.001
LR_POLICY: "poly" LR_POLICY: "poly"
OPTIMIZER: "sgd" OPTIMIZER: "adam"
``` ```
## 四. 配置/数据校验 ## 四. 配置/数据校验
...@@ -96,7 +99,7 @@ SOLVER: ...@@ -96,7 +99,7 @@ SOLVER:
在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程 在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程
```shell ```shell
python pdseg/check.py --cfg ./configs/hrnet_w18_pet.yaml python pdseg/check.py --cfg ./configs/hrnet_optic.yaml
``` ```
...@@ -105,7 +108,10 @@ python pdseg/check.py --cfg ./configs/hrnet_w18_pet.yaml ...@@ -105,7 +108,10 @@ python pdseg/check.py --cfg ./configs/hrnet_w18_pet.yaml
校验通过后,使用下述命令启动训练 校验通过后,使用下述命令启动训练
```shell ```shell
python pdseg/train.py --use_gpu --cfg ./configs/hrnet_w18_pet.yaml # 指定GPU卡号(以0号卡为例)
export CUDA_VISIBLE_DEVICES=0
# 训练
python pdseg/train.py --use_gpu --cfg ./configs/hrnet_optic.yaml
``` ```
## 六. 进行评估 ## 六. 进行评估
...@@ -113,9 +119,20 @@ python pdseg/train.py --use_gpu --cfg ./configs/hrnet_w18_pet.yaml ...@@ -113,9 +119,20 @@ python pdseg/train.py --use_gpu --cfg ./configs/hrnet_w18_pet.yaml
模型训练完成,使用下述命令启动评估 模型训练完成,使用下述命令启动评估
```shell ```shell
python pdseg/eval.py --use_gpu --cfg ./configs/hrnet_w18_pet.yaml python pdseg/eval.py --use_gpu --cfg ./configs/hrnet_optic.yaml
```
## 七. 进行可视化
使用下述命令启动预测和可视化
```shell
python pdseg/vis.py --use_gpu --cfg ./configs/hrnet_optic.yaml
``` ```
预测结果将保存在visual目录下,以下展示其中1张图片的预测效果:
![](imgs/optic_hrnet.png)
## 模型组合 ## 模型组合
|预训练模型名称|Backbone|数据集|配置| |预训练模型名称|Backbone|数据集|配置|
......
# ICNet模型训练教程 # ICNet模型使用教程
* 本教程旨在介绍如何通过使用PaddleSeg提供的 ***`ICNet`*** 预训练模型在自定义数据集上进行训练 本教程旨在介绍如何通过使用PaddleSeg提供的 ***`ICNet`*** 预训练模型在自定义数据集上进行训练、评估和可视化。
* 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解 * 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解
* 本教程的所有命令都基于PaddleSeg主目录进行执行 * 本教程的所有命令都基于PaddleSeg主目录进行执行
* 注意 ***`ICNet`*** 不支持在cpu环境上训练和评估 * 注意 ***`ICNet`*** 不支持在cpu环境上训练和评估
## 一. 准备待训练数据 ## 一. 准备待训练数据
我们提前准备好了一份数据集,通过以下代码进行下载 ![](./imgs/optic.png)
我们提前准备好了一份眼底医疗分割数据集,包含267张训练图片、76张验证图片、38张测试图片。通过以下命令进行下载:
```shell ```shell
python dataset/download_pet.py python dataset/download_optic.py
``` ```
## 二. 下载预训练模型 ## 二. 下载预训练模型
关于PaddleSeg支持的所有预训练模型的列表,我们可以从[模型组合](#模型组合)中查看我们所需模型的名字和配置。
接着下载对应的预训练模型 接着下载对应的预训练模型
```shell ```shell
python pretrained_model/download_model.py icnet_bn_cityscapes python pretrained_model/download_model.py icnet_bn_cityscapes
``` ```
关于已有的ICNet预训练模型的列表,请参见[模型组合](#模型组合)。如果需要使用其他预训练模型,下载该模型并将配置中的BACKBONE、NORM_TYPE等进行替换即可。
## 三. 准备配置 ## 三. 准备配置
接着我们需要确定相关配置,从本教程的角度,配置分为三部分: 接着我们需要确定相关配置,从本教程的角度,配置分为三部分:
...@@ -48,20 +50,19 @@ python pretrained_model/download_model.py icnet_bn_cityscapes ...@@ -48,20 +50,19 @@ python pretrained_model/download_model.py icnet_bn_cityscapes
在三者中,预训练模型的配置尤为重要,如果模型或者BACKBONE配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所示。 在三者中,预训练模型的配置尤为重要,如果模型或者BACKBONE配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所示。
数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/mini_pet` 数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/optic_disc_seg`
其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/icnet_pet.yaml** 其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/icnet_optic.yaml**
```yaml ```yaml
# 数据集配置 # 数据集配置
DATASET: DATASET:
DATA_DIR: "./dataset/mini_pet/" DATA_DIR: "./dataset/optic_disc_seg/"
NUM_CLASSES: 3 NUM_CLASSES: 2
TEST_FILE_LIST: "./dataset/mini_pet/file_list/test_list.txt" TEST_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
TRAIN_FILE_LIST: "./dataset/mini_pet/file_list/train_list.txt" TRAIN_FILE_LIST: "./dataset/optic_disc_seg/train_list.txt"
VAL_FILE_LIST: "./dataset/mini_pet/file_list/val_list.txt" VAL_FILE_LIST: "./dataset/optic_disc_seg/val_list.txt"
VIS_FILE_LIST: "./dataset/mini_pet/file_list/test_list.txt" VIS_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
# 预训练模型配置 # 预训练模型配置
MODEL: MODEL:
...@@ -80,15 +81,15 @@ AUG: ...@@ -80,15 +81,15 @@ AUG:
BATCH_SIZE: 4 BATCH_SIZE: 4
TRAIN: TRAIN:
PRETRAINED_MODEL_DIR: "./pretrained_model/icnet_bn_cityscapes/" PRETRAINED_MODEL_DIR: "./pretrained_model/icnet_bn_cityscapes/"
MODEL_SAVE_DIR: "./saved_model/icnet_pet/" MODEL_SAVE_DIR: "./saved_model/icnet_optic/"
SNAPSHOT_EPOCH: 10 SNAPSHOT_EPOCH: 5
TEST: TEST:
TEST_MODEL: "./saved_model/icnet_pet/final" TEST_MODEL: "./saved_model/icnet_optic/final"
SOLVER: SOLVER:
NUM_EPOCHS: 100 NUM_EPOCHS: 10
LR: 0.005 LR: 0.001
LR_POLICY: "poly" LR_POLICY: "poly"
OPTIMIZER: "sgd" OPTIMIZER: "adam"
``` ```
## 四. 配置/数据校验 ## 四. 配置/数据校验
...@@ -96,7 +97,7 @@ SOLVER: ...@@ -96,7 +97,7 @@ SOLVER:
在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程 在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程
```shell ```shell
python pdseg/check.py --cfg ./configs/icnet_pet.yaml python pdseg/check.py --cfg ./configs/icnet_optic.yaml
``` ```
...@@ -105,7 +106,10 @@ python pdseg/check.py --cfg ./configs/icnet_pet.yaml ...@@ -105,7 +106,10 @@ python pdseg/check.py --cfg ./configs/icnet_pet.yaml
校验通过后,使用下述命令启动训练 校验通过后,使用下述命令启动训练
```shell ```shell
python pdseg/train.py --use_gpu --cfg ./configs/icnet_pet.yaml # 指定GPU卡号(以0号卡为例)
export CUDA_VISIBLE_DEVICES=0
# 训练
python pdseg/train.py --use_gpu --cfg ./configs/icnet_optic.yaml
``` ```
## 六. 进行评估 ## 六. 进行评估
...@@ -113,9 +117,20 @@ python pdseg/train.py --use_gpu --cfg ./configs/icnet_pet.yaml ...@@ -113,9 +117,20 @@ python pdseg/train.py --use_gpu --cfg ./configs/icnet_pet.yaml
模型训练完成,使用下述命令启动评估 模型训练完成,使用下述命令启动评估
```shell ```shell
python pdseg/eval.py --use_gpu --cfg ./configs/icnet_pet.yaml python pdseg/eval.py --use_gpu --cfg ./configs/icnet_optic.yaml
```
## 七. 进行可视化
使用下述命令启动预测和可视化
```shell
python pdseg/vis.py --use_gpu --cfg ./configs/icnet_optic.yaml
``` ```
预测结果将保存在visual目录下,以下展示其中1张图片的预测效果:
![](imgs/optic_icnet.png)
## 模型组合 ## 模型组合
|预训练模型名称|Backbone|数据集|配置| |预训练模型名称|Backbone|数据集|配置|
......
# PSPNET模型训练教程 # PSPNET模型训练教程
* 本教程旨在介绍如何通过使用PaddleSeg提供的 ***`PSPNET`*** 预训练模型在自定义数据集上进行训练 本教程旨在介绍如何通过使用PaddleSeg提供的 ***`PSPNET`*** 预训练模型在自定义数据集上进行训练。
* 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解 * 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解
* 本教程的所有命令都基于PaddleSeg主目录进行执行 * 本教程的所有命令都基于PaddleSeg主目录进行执行
## 一. 准备待训练数据 ## 一. 准备待训练数据
我们提前准备好了一份数据集,通过以下代码进行下载 ![](./imgs/optic.png)
我们提前准备好了一份眼底医疗分割数据集,包含267张训练图片、76张验证图片、38张测试图片。通过以下命令进行下载:
```shell ```shell
python dataset/download_pet.py python dataset/download_optic.py
``` ```
## 二. 下载预训练模型 ## 二. 下载预训练模型
关于PaddleSeg支持的所有预训练模型的列表,我们可以从[PSPNet预训练模型组合](#PSPNet预训练模型组合)中查看我们所需模型的配置和下载链接。
接着下载对应的预训练模型 接着下载对应的预训练模型
```shell ```shell
python pretrained_model/download_model.py pspnet50_bn_cityscapes python pretrained_model/download_model.py pspnet50_bn_cityscapes
``` ```
关于已有的PSPNet预训练模型的列表,请参见[PSPNet预训练模型组合](#PSPNet预训练模型组合)。如果需要使用其他预训练模型,下载该模型并将配置中的BACKBONE、NORM_TYPE等进行替换即可。
## 三. 准备配置 ## 三. 准备配置
接着我们需要确定相关配置,从本教程的角度,配置分为三部分: 接着我们需要确定相关配置,从本教程的角度,配置分为三部分:
...@@ -45,20 +47,19 @@ python pretrained_model/download_model.py pspnet50_bn_cityscapes ...@@ -45,20 +47,19 @@ python pretrained_model/download_model.py pspnet50_bn_cityscapes
在三者中,预训练模型的配置尤为重要,如果模型或者BACKBONE配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所示。 在三者中,预训练模型的配置尤为重要,如果模型或者BACKBONE配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所示。
数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/mini_pet` 数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/optic_disc_seg`
其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为`configs/test_pet.yaml` 其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为`configs/pspnet_optic.yaml`
```yaml ```yaml
# 数据集配置 # 数据集配置
DATASET: DATASET:
DATA_DIR: "./dataset/mini_pet/" DATA_DIR: "./dataset/optic_disc_seg/"
NUM_CLASSES: 3 NUM_CLASSES: 2
TEST_FILE_LIST: "./dataset/mini_pet/file_list/test_list.txt" TEST_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
TRAIN_FILE_LIST: "./dataset/mini_pet/file_list/train_list.txt" TRAIN_FILE_LIST: "./dataset/optic_disc_seg/train_list.txt"
VAL_FILE_LIST: "./dataset/mini_pet/file_list/val_list.txt" VAL_FILE_LIST: "./dataset/optic_disc_seg/val_list.txt"
VIS_FILE_LIST: "./dataset/mini_pet/file_list/test_list.txt" VIS_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
# 预训练模型配置 # 预训练模型配置
MODEL: MODEL:
...@@ -77,15 +78,15 @@ AUG: ...@@ -77,15 +78,15 @@ AUG:
BATCH_SIZE: 4 BATCH_SIZE: 4
TRAIN: TRAIN:
PRETRAINED_MODEL_DIR: "./pretrained_model/pspnet50_bn_cityscapes/" PRETRAINED_MODEL_DIR: "./pretrained_model/pspnet50_bn_cityscapes/"
MODEL_SAVE_DIR: "./saved_model/pspnet_pet/" MODEL_SAVE_DIR: "./saved_model/pspnet_optic/"
SNAPSHOT_EPOCH: 10 SNAPSHOT_EPOCH: 5
TEST: TEST:
TEST_MODEL: "./saved_model/pspnet_pet/final" TEST_MODEL: "./saved_model/pspnet_optic/final"
SOLVER: SOLVER:
NUM_EPOCHS: 100 NUM_EPOCHS: 10
LR: 0.005 LR: 0.001
LR_POLICY: "poly" LR_POLICY: "poly"
OPTIMIZER: "sgd" OPTIMIZER: "adam"
``` ```
## 四. 配置/数据校验 ## 四. 配置/数据校验
...@@ -93,7 +94,7 @@ SOLVER: ...@@ -93,7 +94,7 @@ SOLVER:
在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程 在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程
```shell ```shell
python pdseg/check.py --cfg ./configs/test_pet.yaml python pdseg/check.py --cfg ./configs/pspnet_optic.yaml
``` ```
...@@ -102,7 +103,10 @@ python pdseg/check.py --cfg ./configs/test_pet.yaml ...@@ -102,7 +103,10 @@ python pdseg/check.py --cfg ./configs/test_pet.yaml
校验通过后,使用下述命令启动训练 校验通过后,使用下述命令启动训练
```shell ```shell
python pdseg/train.py --use_gpu --cfg ./configs/test_pet.yaml # 指定GPU卡号(以0号卡为例)
export CUDA_VISIBLE_DEVICES=0
# 训练
python pdseg/train.py --use_gpu --cfg ./configs/pspnet_optic.yaml
``` ```
## 六. 进行评估 ## 六. 进行评估
...@@ -110,9 +114,20 @@ python pdseg/train.py --use_gpu --cfg ./configs/test_pet.yaml ...@@ -110,9 +114,20 @@ python pdseg/train.py --use_gpu --cfg ./configs/test_pet.yaml
模型训练完成,使用下述命令启动评估 模型训练完成,使用下述命令启动评估
```shell ```shell
python pdseg/eval.py --use_gpu --cfg ./configs/test_pet.yaml python pdseg/eval.py --use_gpu --cfg ./configs/pspnet_optic.yaml
```
## 七. 进行可视化
使用下述命令启动预测和可视化
```shell
python pdseg/vis.py --use_gpu --cfg ./configs/pspnet_optic.yaml
``` ```
预测结果将保存在visual目录下,以下展示其中1张图片的预测效果:
![](imgs/optic_pspnet.png)
## PSPNet预训练模型组合 ## PSPNet预训练模型组合
|模型|BackBone|数据集|配置| |模型|BackBone|数据集|配置|
......
# U-Net模型训练教程 # U-Net模型使用教程
* 本教程旨在介绍如何通过使用PaddleSeg提供的 ***`U-Net`*** 预训练模型在自定义数据集上进行训练 本教程旨在介绍如何通过使用PaddleSeg提供的 ***`U-Net`*** 预训练模型在自定义数据集上进行训练、评估和可视化。
* 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解 * 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解
* 本教程的所有命令都基于PaddleSeg主目录进行执行 * 本教程的所有命令都基于PaddleSeg主目录进行执行
## 一. 准备待训练数据 ## 一. 准备待训练数据
我们提前准备好了一份数据集,通过以下代码进行下载 ![](./imgs/optic.png)
我们提前准备好了一份眼底医疗分割数据集,包含267张训练图片、76张验证图片、38张测试图片。通过以下命令进行下载:
```shell ```shell
python dataset/download_pet.py python dataset/download_optic.py
``` ```
## 二. 下载预训练模型 ## 二. 下载预训练模型
关于PaddleSeg支持的所有预训练模型的列表,我们可以从[模型组合](#模型组合)中查看我们所需模型的名字和配置。
接着下载对应的预训练模型 接着下载对应的预训练模型
```shell ```shell
python pretrained_model/download_model.py unet_bn_coco python pretrained_model/download_model.py unet_bn_coco
``` ```
关于已有的U-Net预训练模型的列表,请参见[模型组合](#模型组合)。如果需要使用其他预训练模型,下载该模型并将配置中的BACKBONE、NORM_TYPE等进行替换即可。
## 三. 准备配置 ## 三. 准备配置
接着我们需要确定相关配置,从本教程的角度,配置分为三部分: 接着我们需要确定相关配置,从本教程的角度,配置分为三部分:
...@@ -45,20 +47,19 @@ python pretrained_model/download_model.py unet_bn_coco ...@@ -45,20 +47,19 @@ python pretrained_model/download_model.py unet_bn_coco
在三者中,预训练模型的配置尤为重要,如果模型或者BACKBONE配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所展示。 在三者中,预训练模型的配置尤为重要,如果模型或者BACKBONE配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所展示。
数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/mini_pet` 数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/optic_disc_seg`
其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/unet_pet.yaml** 其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/unet_optic.yaml**
```yaml ```yaml
# 数据集配置 # 数据集配置
DATASET: DATASET:
DATA_DIR: "./dataset/mini_pet/" DATA_DIR: "./dataset/optic_disc_seg/"
NUM_CLASSES: 3 NUM_CLASSES: 2
TEST_FILE_LIST: "./dataset/mini_pet/file_list/test_list.txt" TEST_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
TRAIN_FILE_LIST: "./dataset/mini_pet/file_list/train_list.txt" TRAIN_FILE_LIST: "./dataset/optic_disc_seg/train_list.txt"
VAL_FILE_LIST: "./dataset/mini_pet/file_list/val_list.txt" VAL_FILE_LIST: "./dataset/optic_disc_seg/val_list.txt"
VIS_FILE_LIST: "./dataset/mini_pet/file_list/test_list.txt" VIS_FILE_LIST: "./dataset/optic_disc_seg/test_list.txt"
# 预训练模型配置 # 预训练模型配置
MODEL: MODEL:
...@@ -74,13 +75,13 @@ AUG: ...@@ -74,13 +75,13 @@ AUG:
BATCH_SIZE: 4 BATCH_SIZE: 4
TRAIN: TRAIN:
PRETRAINED_MODEL_DIR: "./pretrained_model/unet_bn_coco/" PRETRAINED_MODEL_DIR: "./pretrained_model/unet_bn_coco/"
MODEL_SAVE_DIR: "./saved_model/unet_pet/" MODEL_SAVE_DIR: "./saved_model/unet_optic/"
SNAPSHOT_EPOCH: 10 SNAPSHOT_EPOCH: 5
TEST: TEST:
TEST_MODEL: "./saved_model/unet_pet/final" TEST_MODEL: "./saved_model/unet_optic/final"
SOLVER: SOLVER:
NUM_EPOCHS: 100 NUM_EPOCHS: 10
LR: 0.005 LR: 0.001
LR_POLICY: "poly" LR_POLICY: "poly"
OPTIMIZER: "adam" OPTIMIZER: "adam"
``` ```
...@@ -90,7 +91,7 @@ SOLVER: ...@@ -90,7 +91,7 @@ SOLVER:
在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程 在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程
```shell ```shell
python pdseg/check.py --cfg ./configs/unet_pet.yaml python pdseg/check.py --cfg ./configs/unet_optic.yaml
``` ```
...@@ -99,7 +100,10 @@ python pdseg/check.py --cfg ./configs/unet_pet.yaml ...@@ -99,7 +100,10 @@ python pdseg/check.py --cfg ./configs/unet_pet.yaml
校验通过后,使用下述命令启动训练 校验通过后,使用下述命令启动训练
```shell ```shell
python pdseg/train.py --use_gpu --cfg ./configs/unet_pet.yaml # 指定GPU卡号(以0号卡为例)
export CUDA_VISIBLE_DEVICES=0
# 训练
python pdseg/train.py --use_gpu --cfg ./configs/unet_optic.yaml
``` ```
## 六. 进行评估 ## 六. 进行评估
...@@ -107,11 +111,23 @@ python pdseg/train.py --use_gpu --cfg ./configs/unet_pet.yaml ...@@ -107,11 +111,23 @@ python pdseg/train.py --use_gpu --cfg ./configs/unet_pet.yaml
模型训练完成,使用下述命令启动评估 模型训练完成,使用下述命令启动评估
```shell ```shell
python pdseg/eval.py --use_gpu --cfg ./configs/unet_pet.yaml python pdseg/eval.py --use_gpu --cfg ./configs/unet_optic.yaml
``` ```
## 七. 进行可视化
使用下述命令启动预测和可视化
```shell
python pdseg/vis.py --use_gpu --cfg ./configs/unet_optic.yaml
```
预测结果将保存在visual目录下,以下展示其中1张图片的预测效果:
![](imgs/optic_unet.png)
## 在线体验 ## 在线体验
PaddleSeg在AI Studio平台上提供了在线体验的U-Net宠物分割教程,欢迎[点击体验](https://aistudio.baidu.com/aistudio/projectDetail/102889) PaddleSeg在AI Studio平台上提供了在线体验的U-Net分割教程,欢迎[点击体验](https://aistudio.baidu.com/aistudio/projectDetail/102889)
## 模型组合 ## 模型组合
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册