Skip to content

Commit

Permalink
First commit
Browse files Browse the repository at this point in the history
  • Loading branch information
nepeplwu committed Aug 26, 2019
1 parent f8e28e8 commit 951d342
Show file tree
Hide file tree
Showing 183 changed files with 11,059 additions and 1 deletion.
84 changes: 83 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,83 @@
# PaddleSeg
# PaddleSeg 语义分割库

## 简介

PaddleSeg是基于[PaddlePaddle](https://www.paddlepaddle.org.cn)开发的语义分割库,覆盖了DeepLabv3+, U-Net, ICNet三类主流的分割模型。通过统一的配置,帮助用户更便捷地完成从训练到部署的全流程图像分割应用。
具备高性能、丰富的数据增强、工业级部署、全流程应用的特点。



- **丰富的数据增强**

- 基于百度视觉技术部的实际业务经验,内置10+种数据增强策略,可结合实际业务场景进行定制组合,提升模型泛化能力和鲁棒性。

- **主流模型覆盖**

- 支持U-Net, DeepLabv3+, ICNet三类主流分割网络,结合预训练模型和可调节的骨干网络,满足不同性能和精度的要求。

- **高性能**

- PaddleSeg支持多进程IO、多卡并行、多卡Batch Norm, FP16混合精度等训练加速策略,通过飞桨核心框架的显存优化算法,可以大幅度节约分割模型的显存开销,更快完成分割模型训练。

- **工业级部署**

- 基于[Paddle Serving](https://github.com/PaddlePaddle/Serving)和PaddlePaddle高性能预测引擎, 结合百度开放的AI能力,轻松搭建人像分割和车道线分割服务。




更多模型信息与技术细节请查看[模型介绍](./docs/models.md)[预训练模型](./docs/mode_zoo.md)

## AI Studio教程

### 快速开始

通过 [PaddleSeg人像分割](https://aistudio.baidu.com/aistudio/projectDetail/100798) 教程可快速体验PaddleSeg人像分割模型的效果。

### 入门教程

入门教程以经典的U-Net模型为例, 结合Oxford-IIIT宠物数据集,快速熟悉PaddleSeg使用流程, 详情请点击[U-Net宠物分割](https://aistudio.baidu.com/aistudio/projectDetail/102889)

### 高级教程

高级教程以DeepLabv3+模型为例,结合Cityscapes数据集,快速了解ASPP, Backbone网络切换,多卡Batch Norm同步等策略,详情请点击[DeepLabv3+图像分割](https://aistudio.baidu.com/aistudio/projectDetail/101696)

### 垂类模型

更多特色垂类分割模型如LIP人体部件分割、人像分割、车道线分割模型可以参考[contrib](./contrib/README.md)

## 使用文档

* [安装说明](./docs/installation.md)
* [数据准备](./docs/data_prepare.md)
* [数据增强](./docs/data_aug.md)
* [预训练模型](./docs/model_zoo.md)
* [训练/评估/预测(可视化)](./docs/usage.md)
* [预测库集成](./inference/README.md)
* [服务端部署](./serving/README.md)
* [垂类分割模型](./contrib/README.md)


## FAQ

#### Q:图像分割的数据增强如何配置,unpadding, step scaling, range scaling的原理是什么?

A:数据增强的配置可以参考文档[数据增强](./docs/data_aug.md)

#### Q: 预测时图片过大,导致显存不足如何处理?

A: 降低Batch size,使用Group Norm策略等。

## 更新日志

### 2019.08.25

#### v0.1.0

* PaddleSeg分割库初始版本发布,包含DeepLabv3+, U-Net, ICNet三类分割模型, 其中DeepLabv3+支持Xception, MobileNet两种可调节的骨干网络。
* CVPR 19' LIP人体部件分割比赛冠军预测模型发布[ACE2P](./contrib/ACE2P)
* 预置基于DeepLabv3+网络的[人像分割](./contrib/HumanSeg/)[车道线分割](./contrib/RoadLine)预测模型发布

## 如何贡献代码

我们非常欢迎您为PaddleSeg贡献代码或者提供使用建议。
56 changes: 56 additions & 0 deletions configs/cityscape.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
EVAL_CROP_SIZE: (2049, 1025) # (width, height), for unpadding rangescaling and stepscaling
TRAIN_CROP_SIZE: (769, 769) # (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
RICH_CROP:
ENABLE: False
ASPECT_RATIO: 0.33
BLUR: True
BLUR_RATIO: 0.1
FLIP: True
FLIP_RATIO: 0.2
MAX_ROTATION: 15
MIN_AREA_RATIO: 0.5
BRIGHTNESS_JITTER_RATIO: 0.5
CONTRAST_JITTER_RATIO: 0.5
SATURATION_JITTER_RATIO: 0.5
BATCH_SIZE: 4
MEAN: [0.5, 0.5, 0.5]
STD: [0.5, 0.5, 0.5]
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:
DEFAULT_NORM_TYPE: "gn"
MODEL_NAME: "deeplabv3p"
DEEPLAB:
ASPP_WITH_SEP_CONV: True
DECODER_USE_SEP_CONV: True
TEST:
TEST_MODEL: "snapshots/cityscape_v5/final/"
TRAIN:
MODEL_SAVE_DIR: "snapshots/cityscape_v7/"
PRETRAINED_MODEL: u"pretrain/deeplabv3plus_gn_init"
RESUME: False
SNAPSHOT_EPOCH: 10
SOLVER:
LR: 0.001
LR_POLICY: "poly"
OPTIMIZER: "sgd"
NUM_EPOCHS: 700
55 changes: 55 additions & 0 deletions configs/coco.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
EVAL_CROP_SIZE: (513, 513) # (width, height), for unpadding rangescaling and stepscaling
TRAIN_CROP_SIZE: (513, 513) # (width, height), for unpadding rangescaling and stepscaling
AUG:
AUG_METHOD: u"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
RICH_CROP:
ENABLE: False
ASPECT_RATIO: 0.33
BLUR: True
BLUR_RATIO: 0.1
FLIP: True
FLIP_RATIO: 0.2
MAX_ROTATION: 15
MIN_AREA_RATIO: 0.5
BRIGHTNESS_JITTER_RATIO: 0.5
CONTRAST_JITTER_RATIO: 0.5
SATURATION_JITTER_RATIO: 0.5
BATCH_SIZE: 8
MEAN: [104.008, 116.669, 122.675]
STD: [1.0, 1.0, 1.0]
DATASET:
DATA_DIR: "./data/COCO2014/"
IMAGE_TYPE: "rgb" # choice rgb or rgba
NUM_CLASSES: 21
TEST_FILE_LIST: "data/COCO2014/VOC_ImageSets/val.txt"
TRAIN_FILE_LIST: "data/COCO2014/ImageSets/train.txt"
VAL_FILE_LIST: "data/COCO2014/VOC_ImageSets/val.txt"
SEPARATOR: " "
IGNORE_INDEX: 255
FREEZE:
MODEL_FILENAME: "model"
PARAMS_FILENAME: "params"
MODEL:
DEFAULT_NORM_TYPE: "bn"
MODEL_NAME: "deeplabv3p"
TEST:
TEST_MODEL: "snapshots/coco_v1/final"
TRAIN:
MODEL_SAVE_DIR: "snapshots/coco_v1/"
PRETRAINED_MODEL: "pretrain/xception65_pretrained/"
RESUME: False
SNAPSHOT_EPOCH: 5
SOLVER:
LR: 0.007
WEIGHT_DECAY: 0.00004
NUM_EPOCHS: 40
LR_POLICY: "poly"
OPTIMIZER: "SGD"
57 changes: 57 additions & 0 deletions configs/humanseg.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
TRAIN_CROP_SIZE: (513, 513) # (width, height), for unpadding rangescaling and stepscaling
EVAL_CROP_SIZE: (513, 513) # (width, height), for unpadding rangescaling and stepscaling
AUG:
AUG_METHOD: u"unpadding" # choice unpadding rangescaling and stepscaling
FIX_RESIZE_SIZE: (513, 513) # (width, height), for unpadding
INF_RESIZE_VALUE: 513 # for rangescaling
MAX_RESIZE_VALUE: 400 # for rangescaling
MIN_RESIZE_VALUE: 513 # 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
RICH_CROP:
ENABLE: True
ASPECT_RATIO: 0
BLUR: True
BLUR_RATIO: 0.1
FLIP: True
FLIP_RATIO: 0.2
MAX_ROTATION: 45
MIN_AREA_RATIO: 0
BRIGHTNESS_JITTER_RATIO: 0.5
CONTRAST_JITTER_RATIO: 0.5
SATURATION_JITTER_RATIO: 0.5
BATCH_SIZE: 24
MEAN: [104.008, 116.669, 122.675]
STD: [1.0, 1.0, 1.0]
DATASET:
DATA_DIR: u"./data/humanseg/"
IMAGE_TYPE: "rgb" # choice rgb or rgba
NUM_CLASSES: 2
TEST_FILE_LIST: u"data/humanseg/list/val.txt"
TRAIN_FILE_LIST: u"data/humanseg/list/train.txt"
VAL_FILE_LIST: u"data/humanseg/list/val.txt"
IGNORE_INDEX: 255
SEPARATOR: "|"
FREEZE:
MODEL_FILENAME: u"model"
PARAMS_FILENAME: u"params"
SAVE_DIR: u"human_freeze_model"
MODEL:
DEFAULT_NORM_TYPE: u"bn"
MODEL_NAME: "deeplabv3p"
DEEPLAB:
BACKBONE: "xception_65"
TEST:
TEST_MODEL: "snapshots/humanseg/aic_v2/final/"
TRAIN:
MODEL_SAVE_DIR: "snapshots/humanseg/aic_v2/"
PRETRAINED_MODEL: u"pretrain/xception65_pretrained/"
RESUME: False
SNAPSHOT_EPOCH: 5
SOLVER:
LR: 0.1
NUM_EPOCHS: 40
LR_POLICY: "poly"
OPTIMIZER: "sgd"
57 changes: 57 additions & 0 deletions configs/line.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
EVAL_CROP_SIZE: (1536, 576) # (width, height), for unpadding rangescaling and stepscaling
TRAIN_CROP_SIZE: (1536, 576) # (width, height), for unpadding rangescaling and stepscaling
AUG:
AUG_METHOD: u"unpadding" # choice unpadding rangescaling and stepscaling
FIX_RESIZE_SIZE: (1536, 576) # (width, height), for unpadding
INF_RESIZE_VALUE: 1280 # for rangescaling
MAX_RESIZE_VALUE: 1024 # for rangescaling
MIN_RESIZE_VALUE: 1536 # 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
RICH_CROP:
ENABLE: False
ASPECT_RATIO: 0.33
BLUR: True
BLUR_RATIO: 0.1
FLIP: True
FLIP_RATIO: 0.2
MAX_ROTATION: 15
MIN_AREA_RATIO: 0.5
BRIGHTNESS_JITTER_RATIO: 0.5
CONTRAST_JITTER_RATIO: 0.5
SATURATION_JITTER_RATIO: 0.5
BATCH_SIZE: 1
MEAN: [127.5, 127.5, 127.5]
STD: [127.5, 127.5, 127.5]
DATASET:
DATA_DIR: "./data/line/L4_lane_mask_dataset_app/L4_360_0_2class/"
IMAGE_TYPE: "rgb" # choice rgb or rgba
NUM_CLASSES: 2
TEST_FILE_LIST: "data/line/L4_lane_mask_dataset_app/L4_360_0_2class/val.txt"
TRAIN_FILE_LIST: "data/line/L4_lane_mask_dataset_app/L4_360_0_2class/train.txt"
VAL_FILE_LIST: "data/line/L4_lane_mask_dataset_app/L4_360_0_2class/val.txt"
SEPARATOR: " "
IGNORE_INDEX: 255
FREEZE:
MODEL_FILENAME: "__model__"
PARAMS_FILENAME: "__params__"
SAVE_DIR: "line_freeze_model"
MODEL:
DEFAULT_NORM_TYPE: "bn"
MODEL_NAME: "deeplabv3p"
DEEPLAB:
BACKBONE: "mobilenet"
TEST:
TEST_MODEL: "snapshots/line_v4/final/"
TRAIN:
MODEL_SAVE_DIR: "snapshots/line_v4/"
PRETRAINED_MODEL: u"pretrain/MobileNetV2_pretrained/"
RESUME: False
SNAPSHOT_EPOCH: 10
SOLVER:
LR: 0.01
LR_POLICY: "poly"
OPTIMIZER: "sgd"
NUM_EPOCHS: 40
57 changes: 57 additions & 0 deletions configs/unet_pet.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
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
RICH_CROP:
ENABLE: False
ASPECT_RATIO: 0.33
BLUR: True
BLUR_RATIO: 0.1
FLIP: True
FLIP_RATIO: 0.2
MAX_ROTATION: 15
MIN_AREA_RATIO: 0.5
BRIGHTNESS_JITTER_RATIO: 0.5
CONTRAST_JITTER_RATIO: 0.5
SATURATION_JITTER_RATIO: 0.5
BATCH_SIZE: 4
MEAN: [104.008, 116.669, 122.675]
STD: [1.0, 1.0, 1.0]
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: "./test/saved_model/unet_pet/final/"
TRAIN:
MODEL_SAVE_DIR: "./test/saved_models/unet_pet/"
PRETRAINED_MODEL: "./test/models/unet_coco/"
RESUME: False
SNAPSHOT_EPOCH: 10
SOLVER:
NUM_EPOCHS: 500
LR: 0.005
LR_POLICY: "poly"
OPTIMIZER: "adam"
Loading

0 comments on commit 951d342

Please sign in to comment.