diff --git a/README.md b/README.md index 799c05ea9f8ff8dc8064706b7441abd2a54c8c77..ab654768f09d13a8e130bc0284d21912a0e6248d 100644 --- a/README.md +++ b/README.md @@ -80,20 +80,20 @@ pip install -r requirements.txt ### 快速入门 -* [训练/评估/可视化](./docs/usage.md) +* [PaddleSeg快速入门](./docs/usage.md) ### 基础功能 * [自定义数据的标注与准备](./docs/data_prepare.md) -* [配置说明与准备](./docs/config.md) +* [脚本使用和配置说明](./docs/config.md) * [数据和配置校验](./docs/check.md) * [分割模型介绍](./docs/models.md) * [预训练模型下载](./docs/model_zoo.md) -* [如何训练DeepLabv3+](./turtorial/finetune_deeplabv3plus.md) -* [如何训练U-Net](./turtorial/finetune_unet.md) -* [如何训练ICNet](./turtorial/finetune_icnet.md) -* [如何训练PSPNet](./turtorial/finetune_pspnet.md) -* [如何训练HRNet](./turtorial/finetune_hrnet.md) +* [DeepLabv3+模型使用教程](./turtorial/finetune_deeplabv3plus.md) +* [U-Net模型使用教程](./turtorial/finetune_unet.md) +* [ICNet模型使用教程](./turtorial/finetune_icnet.md) +* [PSPNet模型使用教程](./turtorial/finetune_pspnet.md) +* [HRNet模型使用教程](./turtorial/finetune_hrnet.md) ### 预测部署 @@ -117,7 +117,7 @@ pip install -r requirements.txt |在线教程|链接| |-|-| |快速开始|[点击体验](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)| |工业质检(零件瑕疵检测)|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/184392)| |人像分割|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/188833)| diff --git a/configs/deeplabv3p_xception65_optic.yaml b/configs/deeplabv3p_xception65_optic.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7ec86926db355c53439802a5d891d9e736a1bba0 --- /dev/null +++ b/configs/deeplabv3p_xception65_optic.yaml @@ -0,0 +1,34 @@ +# 数据集配置 +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 diff --git a/configs/deeplabv3p_xception65_pet.yaml b/configs/deeplabv3p_xception65_pet.yaml deleted file mode 100644 index 1b574497ea882c86c7e5785e16de976e5b33a50f..0000000000000000000000000000000000000000 --- a/configs/deeplabv3p_xception65_pet.yaml +++ /dev/null @@ -1,44 +0,0 @@ -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" diff --git a/configs/hrnet_optic.yaml b/configs/hrnet_optic.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7154bceeeaf99ec1962a4ac6e5ac79a9d78d3f4a --- /dev/null +++ b/configs/hrnet_optic.yaml @@ -0,0 +1,39 @@ +# 数据集配置 +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" diff --git a/configs/hrnet_w18_pet.yaml b/configs/hrnet_w18_pet.yaml deleted file mode 100644 index b1bfb9215e7f204444613fd9f6c78eba9c1c1432..0000000000000000000000000000000000000000 --- a/configs/hrnet_w18_pet.yaml +++ /dev/null @@ -1,49 +0,0 @@ -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" diff --git a/configs/icnet_optic.yaml b/configs/icnet_optic.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0f2742e6cf3626ed82c1f379749c24ee6200fa3c --- /dev/null +++ b/configs/icnet_optic.yaml @@ -0,0 +1,35 @@ +# 数据集配置 +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" diff --git a/configs/icnet_pet.yaml b/configs/icnet_pet.yaml deleted file mode 100644 index 0398d131ca12aea7902ec7be6542650377201c25..0000000000000000000000000000000000000000 --- a/configs/icnet_pet.yaml +++ /dev/null @@ -1,45 +0,0 @@ -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" diff --git a/configs/pspnet.yaml b/configs/pspnet.yaml deleted file mode 100644 index fdc960d6af81bcba30128e972f260da05b33b0e8..0000000000000000000000000000000000000000 --- a/configs/pspnet.yaml +++ /dev/null @@ -1,41 +0,0 @@ -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 diff --git a/configs/pspnet_optic.yaml b/configs/pspnet_optic.yaml new file mode 100644 index 0000000000000000000000000000000000000000..589e2b53cc640f124ad868f59a412e36fd7ced85 --- /dev/null +++ b/configs/pspnet_optic.yaml @@ -0,0 +1,35 @@ +# 数据集配置 +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" diff --git a/configs/unet_optic.yaml b/configs/unet_optic.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cd564817c7147c18ceaf360993042735019ec16d --- /dev/null +++ b/configs/unet_optic.yaml @@ -0,0 +1,32 @@ +# 数据集配置 +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" diff --git a/configs/unet_pet.yaml b/configs/unet_pet.yaml deleted file mode 100644 index a1781c5e8c4963ac269c4850f1012cc3d9ad8d15..0000000000000000000000000000000000000000 --- a/configs/unet_pet.yaml +++ /dev/null @@ -1,42 +0,0 @@ -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" diff --git a/dataset/download_optic.py b/dataset/download_optic.py new file mode 100644 index 0000000000000000000000000000000000000000..2fd66be11ef2e0bca483ecf6d7bcec2b01bebd7a --- /dev/null +++ b/dataset/download_optic.py @@ -0,0 +1,33 @@ +# 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!") diff --git a/docs/config.md b/docs/config.md index 5419dde6664d088b92ae797b0e20c8b25e84693d..67e1353a7d88994b584d5bd3da4dd36d81430a59 100644 --- a/docs/config.md +++ b/docs/config.md @@ -1,4 +1,40 @@ -# 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内存,但是可以提高训练速度。
**NOTE:** windows平台下不支持该功能, 建议使用自定义数据初次训练时不打开,打开会导致数据读取异常不可见。 | +|--use_tb|是否使用TensorBoard记录训练数据|train|False|| +|--log_steps|训练日志的打印周期(单位为step)|train|10|| +|--debug|是否打印debug信息|train|False|IOU等指标涉及到混淆矩阵的计算,会降低训练速度| +|--tb_log_dir                      |TensorBoard的日志路径|train|None|| +|--do_eval|是否在保存模型时进行效果评估                                                        |train|False|| +|--vis_dir|保存可视化图片的路径|vis|"visual"|| + +## OPTIONS PaddleSeg提供了统一的配置用于 训练/评估/可视化/导出模型。一共存在三套配置方案: * 命令行窗口传递的参数。 diff --git a/docs/imgs/deeplabv3p.png b/docs/imgs/deeplabv3p.png index c0f12db6474e28f68ea45aa498026ef5261bcbe9..ba754f3e8b75c49630a96d4cd9fcb4aa45d6e5bd 100644 Binary files a/docs/imgs/deeplabv3p.png and b/docs/imgs/deeplabv3p.png differ diff --git a/docs/imgs/icnet.png b/docs/imgs/icnet.png index 7d9659db01bfb7a887f94b36fdaad303284deab7..125889691edcc5857d8e1322704dda652412d33f 100644 Binary files a/docs/imgs/icnet.png and b/docs/imgs/icnet.png differ diff --git a/docs/imgs/tensorboard_image.JPG b/docs/imgs/tensorboard_image.JPG index b38aeef080ece4fc0e6506ad6ad6e0b5b7751a67..140aa2a0ed6a9b1a2d0a98477685b9e6d434a113 100644 Binary files a/docs/imgs/tensorboard_image.JPG and b/docs/imgs/tensorboard_image.JPG differ diff --git a/docs/imgs/tensorboard_scalar.JPG b/docs/imgs/tensorboard_scalar.JPG index 06723b925e243ecc54a9baf054be870c1e0916e1..322c98dc8ba7e5ca96477f3dbe193a70a8cf4609 100644 Binary files a/docs/imgs/tensorboard_scalar.JPG and b/docs/imgs/tensorboard_scalar.JPG differ diff --git a/docs/imgs/usage_vis_demo.jpg b/docs/imgs/usage_vis_demo.jpg index fc0974359e74e7746b29c7c5a64e3180c3250964..40b35f13418e7c68e0bfaabf992d8411bd87bc77 100644 Binary files a/docs/imgs/usage_vis_demo.jpg and b/docs/imgs/usage_vis_demo.jpg differ diff --git a/docs/models.md b/docs/models.md index 48ed910771597308d95498723ed11f76269faa66..a452aa3639c3901d8f75d1aa4f5f1b7f393ce0b7 100644 --- a/docs/models.md +++ b/docs/models.md @@ -1,9 +1,9 @@ # PaddleSeg 分割模型介绍 - [U-Net](#U-Net) -- [DeepLabv3+](#DeepLabv3) -- [ICNet](#ICNet) +- [DeepLabv3+](#DeepLabv3) - [PSPNet](#PSPNet) +- [ICNet](#ICNet) - [HRNet](#HRNet) ## U-Net @@ -15,38 +15,38 @@ U-Net [1] 起源于医疗图像分割,整个网络是标准的encoder-decoder ## DeepLabv3+ -DeepLabv3+ [2] 是DeepLab系列的最后一篇文章,其前作有 DeepLabv1,DeepLabv2, DeepLabv3, -在最新作中,DeepLab的作者通过encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层, -其骨干网络使用了Xception模型,提高了语义分割的健壮性和运行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance,89.0mIOU。 +DeepLabv3+ [2] 是DeepLab系列的最后一篇文章,其前作有 DeepLabv1, DeepLabv2, DeepLabv3. +在最新作中,作者通过encoder-decoder进行多尺度信息的融合,以优化分割效果,尤其是目标边缘的效果。 +并且其使用了Xception模型作为骨干网络,并将深度可分离卷积(depthwise separable convolution)应用到atrous spatial pyramid pooling(ASPP)中和decoder模块,提高了语义分割的健壮性和运行速率,在 PASCAL VOC 2012 和 Cityscapes 数据集上取得新的state-of-art performance. ![](./imgs/deeplabv3p.png) -在PaddleSeg当前实现中,支持两种分类Backbone网络的切换 +在PaddleSeg当前实现中,支持两种分类Backbone网络的切换: -- MobileNetv2: +- MobileNetv2 适用于移动设备的快速网络,如果对分割性能有较高的要求,请使用这一backbone网络。 -- Xception: +- Xception 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 @@ -64,11 +64,11 @@ HRNet在人体姿态估计、语义分割和目标检测领域都取得了显著 [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) diff --git a/docs/usage.md b/docs/usage.md index 67d9c81af564400157341e76a903b341344ace07..6da85a2de7b8be220e955a9e20a351c2d306b489 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -1,97 +1,74 @@ -# 训练/评估/可视化 +# PaddleSeg快速入门 -PaddleSeg提供了 **训练**/**评估**/**可视化** 等三个功能的使用脚本。三个脚本都支持通过不同的Flags来开启特定功能,也支持通过Options来修改默认的[训练配置](./config.md)。三者的使用方式非常接近,如下: +本教程通过一个简单的示例,说明如何基于PaddleSeg启动训练(训练可视化)、评估和可视化。我们选择基于COCO数据集预训练的unet模型作为预训练模型,以一个眼底医疗分割数据集为例。 -```shell -# 训练 -python pdseg/train.py ${FLAGS} ${OPTIONS} -# 评估 -python pdseg/eval.py ${FLAGS} ${OPTIONS} -# 可视化 -python pdseg/vis.py ${FLAGS} ${OPTIONS} -``` - -**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内存,但是可以提高训练速度。
**NOTE:** windows平台下不支持该功能, 建议使用自定义数据初次训练时不打开,打开会导致数据读取异常不可见。
| -|--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 +- [1.准备工作](#1准备工作) +- [2.下载待训练数据](#2下载待训练数据) +- [3.下载预训练模型](#3下载预训练模型) +- [4.模型训练](#4模型训练) +- [5.训练过程可视化](#5训练过程可视化) +- [6.模型评估](#6模型评估) +- [7.模型可视化](#7模型可视化) +- [在线体验](#在线体验) -详见[训练配置](./config.md) -## 使用示例 -下面通过一个简单的示例,说明如何基于PaddleSeg提供的预训练模型启动训练。我们选择基于COCO数据集预训练的unet模型作为预训练模型,在一个Oxford-IIIT Pet数据集上进行训练。 -**Note:** 为了快速体验,我们使用Oxford-IIIT Pet做了一个小型数据集,后续数据都使用该小型数据集。 - -### 准备工作 +## 1.准备工作 在开始教程前,请先确认准备工作已经完成: 1. 正确安装了PaddlePaddle 2. PaddleSeg相关依赖已经安装 -如果有不确认的地方,请参考[安装说明](./installation.md) +如果有不确认的地方,请参考[首页安装说明](../README.md#安装) + +## 2.下载待训练数据 + +![](../turtorial/imgs/optic.png) + +我们提前准备好了一份眼底医疗分割数据集--视盘分割(optic disc segmentation),包含267张训练图片、76张验证图片、38张测试图片。通过以下命令进行下载: -### 下载预训练模型 ```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 # 下载预训练模型并进行解压 -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 -python pdseg/train.py --use_gpu \ +# 训练 +python pdseg/train.py --cfg configs/unet_optic.yaml \ + --use_gpu \ --do_eval \ --use_tb \ --tb_log_dir train_log \ - --cfg configs/unet_pet.yaml \ BATCH_SIZE 4 \ - TRAIN.PRETRAINED_MODEL_DIR pretrained_model/unet_bn_coco \ - SOLVER.LR 5e-5 + SOLVER.LR 0.001 + +``` +若需要使用多块GPU,以0、1、2号卡为例,可输入 +``` +export CUDA_VISIBLE_DEVICES=0,1,2 ``` **NOTE:** -* 上述示例中,一共存在三套配置方案: PaddleSeg默认配置/unet_pet.yaml/OPTIONS,三者的优先级顺序为 OPTIONS > yaml > 默认配置。这个原则对于train.py/eval.py/vis.py都适用 - -* 如果发现因为内存不足而Crash。请适当调低BATCH_SIZE。如果本机GPU内存充足,则可以调高BATCH_SIZE的大小以获得更快的训练速度,BATCH_SIZE增大时,可以适当调高学习率。 +* 如果发现因为内存不足而Crash。请适当调低`BATCH_SIZE`。如果本机GPU内存充足,则可以调高`BATCH_SIZE`的大小以获得更快的训练速度,`BATCH_SIZE`增大时,可以适当调高学习率`SOLVER.LR`. * 如果在Linux系统下训练,可以使用`--use_mpio`使用多进程I/O,通过提升数据增强的处理速度进而大幅度提升GPU利用率。 -### 训练过程可视化 +## 5.训练过程可视化 当打开do_eval和use_tb两个开关后,我们可以通过TensorBoard查看边训练边评估的效果。 @@ -100,41 +77,41 @@ tensorboard --logdir train_log --host {$HOST_IP} --port {$PORT} ``` NOTE: -1. 上述示例中,$HOST\_IP为机器IP地址,请替换为实际IP,$PORT请替换为可访问的端口 -2. 数据量较大时,前端加载速度会比较慢,请耐心等待 +1. 上述示例中,$HOST\_IP为机器IP地址,请替换为实际IP,$PORT请替换为可访问的端口。 +2. 数据量较大时,前端加载速度会比较慢,请耐心等待。 -启动TensorBoard命令后,我们可以在浏览器中查看对应的训练数据 -在`SCALAR`这个tab中,查看训练loss、iou、acc的变化趋势 +启动TensorBoard命令后,我们可以在浏览器中查看对应的训练数据。 +在`SCALAR`这个tab中,查看训练loss、iou、acc的变化趋势。 ![](./imgs/tensorboard_scalar.JPG) -在`IMAGE`这个tab中,查看样本的预测情况 +在`IMAGE`这个tab中,查看样本图片。 ![](./imgs/tensorboard_image.JPG) -### 模型评估 -训练完成后,我们可以通过eval.py来评估模型效果。由于我们设置的训练EPOCH数量为100,保存间隔为10,因此一共会产生10个定期保存的模型,加上最终保存的final模型,一共有11个模型。我们选择最后保存的模型进行效果的评估: +## 6.模型评估 +训练完成后,我们可以通过eval.py来评估模型效果。由于我们设置的训练EPOCH数量为10,保存间隔为5,因此一共会产生2个定期保存的模型,加上最终保存的final模型,一共有3个模型。我们选择最后保存的模型进行效果的评估: ```shell python pdseg/eval.py --use_gpu \ - --cfg configs/unet_pet.yaml \ - TEST.TEST_MODEL saved_model/unet_pet/final + --cfg configs/unet_optic.yaml \ + TEST.TEST_MODEL saved_model/unet_optic/final ``` -可以看到,在经过训练后,模型在验证集上的mIoU指标达到了0.70+(由于随机种子等因素的影响,效果会有小范围波动,属于正常情况)。 +可以看到,在经过训练后,模型在验证集上的mIoU指标达到了0.85+(由于随机种子等因素的影响,效果会有小范围波动,属于正常情况)。 -### 模型可视化 -通过vis.py来评估模型效果,我们选择最后保存的模型进行效果的评估: +## 7.模型可视化 +通过vis.py进行测试和可视化,以选择最后保存的模型进行测试为例: ```shell python pdseg/vis.py --use_gpu \ - --cfg configs/unet_pet.yaml \ - TEST.TEST_MODEL saved_model/unet_pet/final + --cfg configs/unet_optic.yaml \ + TEST.TEST_MODEL saved_model/unet_optic/final ``` -执行上述脚本后,会在主目录下产生一个visual文件夹,里面存放着测试集图片的预测结果,我们选择其中几张图片进行查看,可以看到,在测试集中的图片上的预测效果已经很不错: +执行上述脚本后,会在主目录下产生一个visual文件夹,里面存放着测试集图片的预测结果,我们选择其中1张图片进行查看: ![](./imgs/usage_vis_demo.jpg) `NOTE` -1. 可视化的图片会默认保存在visual目录下,可以通过`--vis_dir`来指定输出目录 -2. 训练过程中会使用DATASET.VIS_FILE_LIST中的图片进行可视化显示,而vis.py则会使用DATASET.TEST_FILE_LIST +1. 可视化的图片会默认保存在visual目录下,可以通过`--vis_dir`来指定输出目录。 +2. 训练过程中会使用`DATASET.VIS_FILE_LIST`中的图片进行可视化显示,而vis.py则会使用`DATASET.TEST_FILE_LIST`. ## 在线体验 diff --git a/turtorial/finetune_deeplabv3plus.md b/turtorial/finetune_deeplabv3plus.md index 89eee369bf8400bde977313948f82d0be72dd7b5..89d4c801bfc7c21c2a26aa1ba1c6e41f419d6bbe 100644 --- a/turtorial/finetune_deeplabv3plus.md +++ b/turtorial/finetune_deeplabv3plus.md @@ -1,29 +1,32 @@ -# 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 -python dataset/download_pet.py +python dataset/download_optic.py ``` ## 二. 下载预训练模型 -关于PaddleSeg支持的所有预训练模型的列表,我们可以从[模型组合](#模型组合)中查看我们所需模型的名字和配置 - 接着下载对应的预训练模型 ```shell 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 在三者中,预训练模型的配置尤为重要,如果模型或者BACKBONE配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所展示。 -数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/mini_pet`中 +数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/optic_disc_seg`中。 -其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/deeplabv3p_xception65_pet.yaml** +其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/deeplabv3p_xception65_optic.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" + 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: @@ -75,15 +78,15 @@ AUG: BATCH_SIZE: 4 TRAIN: PRETRAINED_MODEL_DIR: "./pretrained_model/deeplabv3p_xception65_bn_coco/" - MODEL_SAVE_DIR: "./saved_model/deeplabv3p_xception65_bn_pet/" - SNAPSHOT_EPOCH: 10 + MODEL_SAVE_DIR: "./saved_model/deeplabv3p_xception65_bn_optic/" + SNAPSHOT_EPOCH: 5 TEST: - TEST_MODEL: "./saved_model/deeplabv3p_xception65_bn_pet/final" + TEST_MODEL: "./saved_model/deeplabv3p_xception65_bn_optic/final" SOLVER: - NUM_EPOCHS: 100 - LR: 0.005 + NUM_EPOCHS: 10 + LR: 0.001 LR_POLICY: "poly" - OPTIMIZER: "sgd" + OPTIMIZER: "adam" ``` ## 四. 配置/数据校验 @@ -91,7 +94,7 @@ SOLVER: 在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程 ```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 校验通过后,使用下述命令启动训练 ```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 模型训练完成,使用下述命令启动评估 ```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)。 diff --git a/turtorial/finetune_hrnet.md b/turtorial/finetune_hrnet.md index b8897089e82ac2c054f84ba3333a15327e7185d1..9475a8aab8386364ab6be7e976ac30dae73d4645 100644 --- a/turtorial/finetune_hrnet.md +++ b/turtorial/finetune_hrnet.md @@ -1,22 +1,23 @@ -# 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 -python dataset/download_pet.py +python dataset/download_optic.py ``` -## 二. 下载预训练模型 -关于PaddleSeg支持的所有预训练模型的列表,我们可以从[模型组合](#模型组合)中查看我们所需模型的名字和配置 +## 二. 下载预训练模型 接着下载对应的预训练模型 @@ -24,6 +25,8 @@ python dataset/download_pet.py 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 在三者中,预训练模型的配置尤为重要,如果模型配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所展示。 -数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/mini_pet`中 +数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/optic_disc_seg`中 -其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/hrnet_w18_pet.yaml** +其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/hrnet_optic.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" + 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: @@ -80,15 +83,15 @@ AUG: BATCH_SIZE: 4 TRAIN: PRETRAINED_MODEL_DIR: "./pretrained_model/hrnet_w18_bn_cityscapes/" - MODEL_SAVE_DIR: "./saved_model/hrnet_w18_bn_pet/" - SNAPSHOT_EPOCH: 10 + MODEL_SAVE_DIR: "./saved_model/hrnet_optic/" + SNAPSHOT_EPOCH: 5 TEST: - TEST_MODEL: "./saved_model/hrnet_w18_bn_pet/final" + TEST_MODEL: "./saved_model/hrnet_optic/final" SOLVER: - NUM_EPOCHS: 100 - LR: 0.005 + NUM_EPOCHS: 10 + LR: 0.001 LR_POLICY: "poly" - OPTIMIZER: "sgd" + OPTIMIZER: "adam" ``` ## 四. 配置/数据校验 @@ -96,7 +99,7 @@ SOLVER: 在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程 ```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 校验通过后,使用下述命令启动训练 ```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 模型训练完成,使用下述命令启动评估 ```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|数据集|配置| diff --git a/turtorial/finetune_icnet.md b/turtorial/finetune_icnet.md index 1eceead531f7a1180120d89ada4fe59ac20df219..57adc200d9d4857768d5055d8160b7b729332389 100644 --- a/turtorial/finetune_icnet.md +++ b/turtorial/finetune_icnet.md @@ -1,32 +1,34 @@ -# ICNet模型训练教程 +# ICNet模型使用教程 -* 本教程旨在介绍如何通过使用PaddleSeg提供的 ***`ICNet`*** 预训练模型在自定义数据集上进行训练 +本教程旨在介绍如何通过使用PaddleSeg提供的 ***`ICNet`*** 预训练模型在自定义数据集上进行训练、评估和可视化。 -* 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)和[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解 +* 在阅读本教程前,请确保您已经了解过PaddleSeg的[快速入门](../README.md#快速入门)和[基础功能](../README.md#基础功能)等章节,以便对PaddleSeg有一定的了解。 -* 本教程的所有命令都基于PaddleSeg主目录进行执行 +* 本教程的所有命令都基于PaddleSeg主目录进行执行。 * 注意 ***`ICNet`*** 不支持在cpu环境上训练和评估 ## 一. 准备待训练数据 -我们提前准备好了一份数据集,通过以下代码进行下载 +![](./imgs/optic.png) + +我们提前准备好了一份眼底医疗分割数据集,包含267张训练图片、76张验证图片、38张测试图片。通过以下命令进行下载: ```shell -python dataset/download_pet.py +python dataset/download_optic.py ``` ## 二. 下载预训练模型 -关于PaddleSeg支持的所有预训练模型的列表,我们可以从[模型组合](#模型组合)中查看我们所需模型的名字和配置。 - 接着下载对应的预训练模型 ```shell 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 在三者中,预训练模型的配置尤为重要,如果模型或者BACKBONE配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所示。 -数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/mini_pet`中 +数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/optic_disc_seg`中 -其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/icnet_pet.yaml** +其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/icnet_optic.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" - + 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: @@ -80,15 +81,15 @@ AUG: BATCH_SIZE: 4 TRAIN: PRETRAINED_MODEL_DIR: "./pretrained_model/icnet_bn_cityscapes/" - MODEL_SAVE_DIR: "./saved_model/icnet_pet/" - SNAPSHOT_EPOCH: 10 + MODEL_SAVE_DIR: "./saved_model/icnet_optic/" + SNAPSHOT_EPOCH: 5 TEST: - TEST_MODEL: "./saved_model/icnet_pet/final" + TEST_MODEL: "./saved_model/icnet_optic/final" SOLVER: - NUM_EPOCHS: 100 - LR: 0.005 + NUM_EPOCHS: 10 + LR: 0.001 LR_POLICY: "poly" - OPTIMIZER: "sgd" + OPTIMIZER: "adam" ``` ## 四. 配置/数据校验 @@ -96,7 +97,7 @@ SOLVER: 在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程 ```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 校验通过后,使用下述命令启动训练 ```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 模型训练完成,使用下述命令启动评估 ```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|数据集|配置| diff --git a/turtorial/finetune_pspnet.md b/turtorial/finetune_pspnet.md index 318d048a6a5f198b360abc7556e40845469aea3e..794508a454f52fb511fd8d44e1c0ac1c60e14677 100644 --- a/turtorial/finetune_pspnet.md +++ b/turtorial/finetune_pspnet.md @@ -1,29 +1,31 @@ # 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 -python dataset/download_pet.py +python dataset/download_optic.py ``` ## 二. 下载预训练模型 -关于PaddleSeg支持的所有预训练模型的列表,我们可以从[PSPNet预训练模型组合](#PSPNet预训练模型组合)中查看我们所需模型的配置和下载链接。 - 接着下载对应的预训练模型 ```shell 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 在三者中,预训练模型的配置尤为重要,如果模型或者BACKBONE配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所示。 -数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/mini_pet`中 +数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/optic_disc_seg`中 -其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为`configs/test_pet.yaml` +其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为`configs/pspnet_optic.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" - + 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: @@ -77,15 +78,15 @@ AUG: BATCH_SIZE: 4 TRAIN: PRETRAINED_MODEL_DIR: "./pretrained_model/pspnet50_bn_cityscapes/" - MODEL_SAVE_DIR: "./saved_model/pspnet_pet/" - SNAPSHOT_EPOCH: 10 + MODEL_SAVE_DIR: "./saved_model/pspnet_optic/" + SNAPSHOT_EPOCH: 5 TEST: - TEST_MODEL: "./saved_model/pspnet_pet/final" + TEST_MODEL: "./saved_model/pspnet_optic/final" SOLVER: - NUM_EPOCHS: 100 - LR: 0.005 + NUM_EPOCHS: 10 + LR: 0.001 LR_POLICY: "poly" - OPTIMIZER: "sgd" + OPTIMIZER: "adam" ``` ## 四. 配置/数据校验 @@ -93,7 +94,7 @@ SOLVER: 在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程 ```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 校验通过后,使用下述命令启动训练 ```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 模型训练完成,使用下述命令启动评估 ```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预训练模型组合 |模型|BackBone|数据集|配置| diff --git a/turtorial/finetune_unet.md b/turtorial/finetune_unet.md index 84a919c63e5625fe5b879db0b542d84c6e8dbcb2..dd2945cf587fc18ed760639a56ad7b8edebc0087 100644 --- a/turtorial/finetune_unet.md +++ b/turtorial/finetune_unet.md @@ -1,29 +1,31 @@ -# 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 -python dataset/download_pet.py +python dataset/download_optic.py ``` ## 二. 下载预训练模型 -关于PaddleSeg支持的所有预训练模型的列表,我们可以从[模型组合](#模型组合)中查看我们所需模型的名字和配置。 - 接着下载对应的预训练模型 ```shell 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 在三者中,预训练模型的配置尤为重要,如果模型或者BACKBONE配置错误,会导致预训练的参数没有加载,进而影响收敛速度。预训练模型相关的配置如第二步所展示。 -数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/mini_pet`中 +数据集的配置和数据路径有关,在本教程中,数据存放在`dataset/optic_disc_seg`中 -其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/unet_pet.yaml** +其他配置则根据数据集和机器环境的情况进行调节,最终我们保存一个如下内容的yaml配置文件,存放路径为**configs/unet_optic.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" - + 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: @@ -74,13 +75,13 @@ AUG: BATCH_SIZE: 4 TRAIN: PRETRAINED_MODEL_DIR: "./pretrained_model/unet_bn_coco/" - MODEL_SAVE_DIR: "./saved_model/unet_pet/" - SNAPSHOT_EPOCH: 10 + MODEL_SAVE_DIR: "./saved_model/unet_optic/" + SNAPSHOT_EPOCH: 5 TEST: - TEST_MODEL: "./saved_model/unet_pet/final" + TEST_MODEL: "./saved_model/unet_optic/final" SOLVER: - NUM_EPOCHS: 100 - LR: 0.005 + NUM_EPOCHS: 10 + LR: 0.001 LR_POLICY: "poly" OPTIMIZER: "adam" ``` @@ -90,7 +91,7 @@ SOLVER: 在开始训练和评估之前,我们还需要对配置和数据进行一次校验,确保数据和配置是正确的。使用下述命令启动校验流程 ```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 校验通过后,使用下述命令启动训练 ```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 模型训练完成,使用下述命令启动评估 ```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)。 ## 模型组合 diff --git a/turtorial/imgs/optic.png b/turtorial/imgs/optic.png new file mode 100644 index 0000000000000000000000000000000000000000..34acaae49303e71e6b59db26202a9079965f05eb Binary files /dev/null and b/turtorial/imgs/optic.png differ diff --git a/turtorial/imgs/optic_deeplab.png b/turtorial/imgs/optic_deeplab.png new file mode 100644 index 0000000000000000000000000000000000000000..8edc957362715bb742042d6f0f6e6c36fd7aec52 Binary files /dev/null and b/turtorial/imgs/optic_deeplab.png differ diff --git a/turtorial/imgs/optic_hrnet.png b/turtorial/imgs/optic_hrnet.png new file mode 100644 index 0000000000000000000000000000000000000000..8d19190aa5a057fe5aa72cd800c1c9fed642d9ef Binary files /dev/null and b/turtorial/imgs/optic_hrnet.png differ diff --git a/turtorial/imgs/optic_icnet.png b/turtorial/imgs/optic_icnet.png new file mode 100644 index 0000000000000000000000000000000000000000..a4d36b7ab0f086af46840a5c1e8f1624054048be Binary files /dev/null and b/turtorial/imgs/optic_icnet.png differ diff --git a/turtorial/imgs/optic_pspnet.png b/turtorial/imgs/optic_pspnet.png new file mode 100644 index 0000000000000000000000000000000000000000..44fd2795d6edfdc95378046da906949ad01431d9 Binary files /dev/null and b/turtorial/imgs/optic_pspnet.png differ diff --git a/turtorial/imgs/optic_unet.png b/turtorial/imgs/optic_unet.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca439ebc76427516127d56aac56b5d09dd68263 Binary files /dev/null and b/turtorial/imgs/optic_unet.png differ