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

Polish document and update default config (#129)

* 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
上级 63741630
...@@ -8,8 +8,25 @@ ...@@ -8,8 +8,25 @@
PaddleSeg是基于[PaddlePaddle](https://www.paddlepaddle.org.cn)开发的语义分割库,覆盖了DeepLabv3+, U-Net, ICNet, PSPNet, HRNet等主流分割模型。通过统一的配置,帮助用户更便捷地完成从训练到部署的全流程图像分割应用。 PaddleSeg是基于[PaddlePaddle](https://www.paddlepaddle.org.cn)开发的语义分割库,覆盖了DeepLabv3+, U-Net, ICNet, PSPNet, HRNet等主流分割模型。通过统一的配置,帮助用户更便捷地完成从训练到部署的全流程图像分割应用。
PaddleSeg具备高性能、丰富的数据增强、工业级部署、全流程应用的特点: </br>
- [特点](#特点)
- [安装](#安装)
- [使用教程](#使用教程)
- [快速入门](#快速入门)
- [基础功能](#基础功能)
- [预测部署](#预测部署)
- [高级功能](#高级功能)
- [在线体验](#在线体验)
- [FAQ](#FAQ)
- [交流与反馈](#交流与反馈)
- [更新日志](#更新日志)
- [贡献代码](#贡献代码)
</br>
## 特点
PaddleSeg具备高性能、丰富的数据增强、工业级部署、全流程应用的特点:
- **丰富的数据增强** - **丰富的数据增强**
...@@ -27,21 +44,6 @@ PaddleSeg支持多进程IO、多卡并行、跨卡Batch Norm同步等训练加 ...@@ -27,21 +44,6 @@ PaddleSeg支持多进程IO、多卡并行、跨卡Batch Norm同步等训练加
基于[Paddle Serving](https://github.com/PaddlePaddle/Serving)和PaddlePaddle高性能预测引擎,结合百度开放的AI能力,轻松搭建人像分割和车道线分割服务。 基于[Paddle Serving](https://github.com/PaddlePaddle/Serving)和PaddlePaddle高性能预测引擎,结合百度开放的AI能力,轻松搭建人像分割和车道线分割服务。
</br>
- [安装](#安装)
- [使用教程](#使用教程)
- [快速入门](#快速入门)
- [基础功能](#基础功能)
- [预测部署](#预测部署)
- [高级功能](#高级功能)
- [在线体验](#在线体验)
- [FAQ](#FAQ)
- [交流与反馈](#交流与反馈)
- [更新日志](#更新日志)
</br>
## 安装 ## 安装
### 1. 安装PaddlePaddle ### 1. 安装PaddlePaddle
...@@ -63,12 +65,12 @@ git clone https://github.com/PaddlePaddle/PaddleSeg ...@@ -63,12 +65,12 @@ git clone https://github.com/PaddlePaddle/PaddleSeg
``` ```
### 3. 安装PaddleSeg依赖 ### 3. 安装PaddleSeg依赖
通过以下命令安装python包依赖,请确保在该分支上至少执行过一次以下命令:
``` ```
cd PaddleSeg cd PaddleSeg
pip install -r requirements.txt pip install -r requirements.txt
``` ```
通过以下命令安装python包依赖,请确保在该分支上至少执行过一次以下命令。
...@@ -86,8 +88,8 @@ pip install -r requirements.txt ...@@ -86,8 +88,8 @@ pip install -r requirements.txt
### 基础功能 ### 基础功能
* [配置说明与准备](./docs/config.md)
* [自定义数据的标注与准备](./docs/data_prepare.md) * [自定义数据的标注与准备](./docs/data_prepare.md)
* [配置说明与准备](./docs/config.md)
* [数据和配置校验](./docs/check.md) * [数据和配置校验](./docs/check.md)
* [分割模型介绍](./docs/models.md) * [分割模型介绍](./docs/models.md)
* [预训练模型下载](./docs/model_zoo.md) * [预训练模型下载](./docs/model_zoo.md)
...@@ -196,4 +198,4 @@ A: 请将PaddlePaddle升级至1.5.2版本或以上。 ...@@ -196,4 +198,4 @@ A: 请将PaddlePaddle升级至1.5.2版本或以上。
## 贡献代码 ## 贡献代码
我们非常欢迎您为PaddleSeg贡献代码或者提供使用建议。 我们非常欢迎您为PaddleSeg贡献代码或者提供使用建议。如果您可以修复某个issue或者增加一个新功能,欢迎给我们提交pull requests.
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
**注意:导出的标注文件位于`保存位置`下的`outputs`目录。** **注意:导出的标注文件位于`保存位置`下的`outputs`目录。**
精灵标注产出的真值文件可参考我们给出的文件夹`docs/annotation/jingling_demo` 精灵标注产出的真值文件可参考我们给出的文件夹[docs/annotation/jingling_demo](jingling_demo)
<div align="center"> <div align="center">
<img src="../imgs/annotation/jingling-4.png" width="300px"/> <img src="../imgs/annotation/jingling-4.png" width="300px"/>
...@@ -85,13 +85,18 @@ pip install pillow ...@@ -85,13 +85,18 @@ pip install pillow
* 运行以下代码,将标注后的数据转换成满足以上格式的数据集: * 运行以下代码,将标注后的数据转换成满足以上格式的数据集:
``` ```
python pdseg/tools/jingling2seg.py <path/to/label_json_file> python pdseg/tools/jingling2seg.py <PATH/TO/LABEL_JSON_FILE>
``` ```
其中,`<path/to/label_json_files>`为精灵标注产出的json文件所在文件夹的目录,一般为精灵工具使用(3)中`保存位置`下的`outputs`目录。 其中,`<PATH/TO/LABEL_JSON_FILE>`为精灵标注产出的json文件所在文件夹的目录,一般为精灵工具使用(3)中`保存位置`下的`outputs`目录。
我们已内置了一个标注的示例,可运行以下代码进行体验:
转换得到的数据集可参考我们给出的文件夹`docs/annotation/jingling_demo`。其中,文件`class_names.txt`是数据集中所有标注类别的名称,包含背景类;文件夹`annotations`保存的是各图片的像素级别的真值信息,背景类`_background_`对应为0,其它目标类别从1开始递增,至多为255。 ```
python pdseg/tools/jingling2seg.py docs/annotation/jingling_demo/outputs/
```
转换得到的数据集可参考我们给出的文件夹[docs/annotation/jingling_demo](jingling_demo)。其中,文件`class_names.txt`是数据集中所有标注类别的名称,包含背景类;文件夹`annotations`保存的是各图片的像素级别的真值信息,背景类`_background_`对应为0,其它目标类别从1开始递增,至多为255。
<div align="center"> <div align="center">
<img src="../imgs/annotation/jingling-5.png" width="600px"/> <img src="../imgs/annotation/jingling-5.png" width="600px"/>
......
{"path":"/Users/dataset/aa63d7e6db0d03137883772c246c6761fc201059.jpg","outputs":{"object":[{"name":"person","polygon":{"x1":321.99,"y1":63,"x2":293,"y2":98.00999999999999,"x3":245.01,"y3":141.01,"x4":221,"y4":194,"x5":231.99,"y5":237,"x6":231.99,"y6":348.01,"x7":191,"y7":429,"x8":197,"y8":465.01,"x9":193,"y9":586,"x10":151,"y10":618.01,"x11":124,"y11":622,"x12":100,"y12":703,"x13":121.99,"y13":744,"x14":141.99,"y14":724,"x15":163,"y15":658.01,"x16":238.01,"y16":646,"x17":259,"y17":627,"x18":313,"y18":618.01,"x19":416,"y19":639,"x20":464,"y20":606,"x21":454,"y21":555.01,"x22":404,"y22":508.01,"x23":430,"y23":489,"x24":407,"y24":464,"x25":397,"y25":365.01,"x26":407,"y26":290,"x27":361.99,"y27":252,"x28":376,"y28":215.01,"x29":391.99,"y29":189,"x30":388.01,"y30":135.01,"x31":340,"y31":120,"x32":313,"y32":161.01,"x33":307,"y33":188.01,"x34":311,"y34":207,"x35":277,"y35":186,"x36":293,"y36":137,"x37":308.01,"y37":117,"x38":361,"y38":93}}]},"time_labeled":1568101256852,"labeled":true,"size":{"width":706,"height":1000,"depth":3}}
\ No newline at end of file
{"path":"/Users/dataset/jingling.jpg","outputs":{"object":[{"name":"person","polygon":{"x1":321.99,"y1":63,"x2":293,"y2":98.00999999999999,"x3":245.01,"y3":141.01,"x4":221,"y4":194,"x5":231.99,"y5":237,"x6":231.99,"y6":348.01,"x7":191,"y7":429,"x8":197,"y8":465.01,"x9":193,"y9":586,"x10":151,"y10":618.01,"x11":124,"y11":622,"x12":100,"y12":703,"x13":121.99,"y13":744,"x14":141.99,"y14":724,"x15":163,"y15":658.01,"x16":238.01,"y16":646,"x17":259,"y17":627,"x18":313,"y18":618.01,"x19":416,"y19":639,"x20":464,"y20":606,"x21":454,"y21":555.01,"x22":404,"y22":508.01,"x23":430,"y23":489,"x24":407,"y24":464,"x25":397,"y25":365.01,"x26":407,"y26":290,"x27":361.99,"y27":252,"x28":376,"y28":215.01,"x29":391.99,"y29":189,"x30":388.01,"y30":135.01,"x31":340,"y31":120,"x32":313,"y32":161.01,"x33":307,"y33":188.01,"x34":311,"y34":207,"x35":277,"y35":186,"x36":293,"y36":137,"x37":308.01,"y37":117,"x38":361,"y38":93}}]},"time_labeled":1568101256852,"labeled":true,"size":{"width":706,"height":1000,"depth":3}}
\ No newline at end of file
...@@ -47,7 +47,7 @@ git clone https://github.com/wkentaro/labelme ...@@ -47,7 +47,7 @@ git clone https://github.com/wkentaro/labelme
​ (3) 图片中所有目标的标注都完成后,点击`Save`保存json文件,**请将json文件和图片放在同一个文件夹里**,点击`Next Image`标注下一张图片。 ​ (3) 图片中所有目标的标注都完成后,点击`Save`保存json文件,**请将json文件和图片放在同一个文件夹里**,点击`Next Image`标注下一张图片。
LableMe产出的真值文件可参考我们给出的文件夹`docs/annotation/labelme_demo` LableMe产出的真值文件可参考我们给出的文件夹[docs/annotation/labelme_demo](labelme_demo)
<div align="center"> <div align="center">
<img src="../imgs/annotation/image-5.png" width="600px"/> <img src="../imgs/annotation/image-5.png" width="600px"/>
...@@ -95,12 +95,18 @@ pip install pillow ...@@ -95,12 +95,18 @@ pip install pillow
* 运行以下代码,将标注后的数据转换成满足以上格式的数据集: * 运行以下代码,将标注后的数据转换成满足以上格式的数据集:
``` ```
python pdseg/tools/labelme2seg.py <path/to/label_json_file> python pdseg/tools/labelme2seg.py <PATH/TO/LABEL_JSON_FILE>
``` ```
其中,`<path/to/label_json_files>`为图片以及LabelMe产出的json文件所在文件夹的目录,同时也是转换后的标注集所在文件夹的目录。 其中,`<PATH/TO/LABEL_JSON_FILE>`为图片以及LabelMe产出的json文件所在文件夹的目录,同时也是转换后的标注集所在文件夹的目录。
转换得到的数据集可参考我们给出的文件夹`docs/annotation/labelme_demo`。其中,文件`class_names.txt`是数据集中所有标注类别的名称,包含背景类;文件夹`annotations`保存的是各图片的像素级别的真值信息,背景类`_background_`对应为0,其它目标类别从1开始递增,至多为255。 我们已内置了一个标注的示例,可运行以下代码进行体验:
```
python pdseg/tools/labelme2seg.py docs/annotation/labelme_demo/
```
转换得到的数据集可参考我们给出的文件夹[docs/annotation/labelme_demo](labelme_demo)。其中,文件`class_names.txt`是数据集中所有标注类别的名称,包含背景类;文件夹`annotations`保存的是各图片的像素级别的真值信息,背景类`_background_`对应为0,其它目标类别从1开始递增,至多为255。
<div align="center"> <div align="center">
<img src="../imgs/annotation/image-7.png" width="600px"/> <img src="../imgs/annotation/image-7.png" width="600px"/>
......
# PaddleSeg 分割库配置说明 # PaddleSeg 分割库配置说明
PaddleSeg提供了提供了统一的配置用于 训练/评估/可视化/导出模型 PaddleSeg提供了统一的配置用于 训练/评估/可视化/导出模型。一共存在三套配置方案:
* 命令行窗口传递的参数。
* configs目录下的yaml文件。
* 默认参数,位于pdseg/utils/config.py。
三者的优先级顺序为 命令行窗口 > yaml > 默认配置。
配置包含以下Group: 配置包含以下Group:
* [通用](./configs/basic_group.md) |OPTIONS|用途|支持脚本|
* [DATASET](./configs/dataset_group.md) |-|-|-|
* [DATALOADER](./configs/dataloader_group.md) |[BASIC](./configs/basic_group.md)|通用配置|ALL|
* [FREEZE](./configs/freeze_group.md) |[DATASET](./configs/dataset_group.md)|数据集相关|train/eval/vis|
* [MODEL](./configs/model_group.md) |[MODEL](./configs/model_group.md)|模型相关|ALL|
* [SOLVER](./configs/solver_group.md) |[TRAIN](./configs/train_group.md)|训练相关|train|
* [TRAIN](./configs/train_group.md) |[SOLVER](./configs/solver_group.md)|训练优化相关|train|
* [TEST](./configs/test_group.md) |[TEST](./configs/test_group.md)|测试模型相关|eval/vis/export_model|
|[AUG](./data_aug.md)|数据增强|ALL|
[FREEZE](./configs/freeze_group.md)|模型导出相关|export_model|
|[DATALOADER](./configs/dataloader_group.md)|数据加载相关|ALL|
在进行自定义的分割任务之前,您需要准备一份yaml文件,建议参照[configs目录下的示例yaml](../configs)进行修改。
以下是PaddleSeg的默认配置,供查询使用。
```yaml
########################## 基本配置 ###########################################
# 批处理大小
BATCH_SIZE: 1
# 验证时图像裁剪尺寸(宽,高)
EVAL_CROP_SIZE: tuple()
# 训练时图像裁剪尺寸(宽,高)
TRAIN_CROP_SIZE: tuple()
########################## 数据集配置 #########################################
DATASET:
# 数据主目录目录
DATA_DIR: './dataset/cityscapes/'
# 训练集列表
TRAIN_FILE_LIST: './dataset/cityscapes/train.list'
# 验证集列表
VAL_FILE_LIST: './dataset/cityscapes/val.list'
# 测试数据列表
TEST_FILE_LIST: './dataset/cityscapes/test.list'
# Tensorboard 可视化的数据集
VIS_FILE_LIST: None
# 类别数(需包括背景类)
NUM_CLASSES: 19
# 输入图像类型, 支持三通道'rgb',四通道'rgba',单通道灰度图'gray'
IMAGE_TYPE: 'rgb'
# 输入图片的通道数
DATA_DIM: 3
# 数据列表分割符, 默认为空格
SEPARATOR: ' '
# 忽略的像素标签值, 默认为255,一般无需改动
IGNORE_INDEX: 255
########################## 模型通用配置 #######################################
MODEL:
# 模型名称, 已支持deeplabv3p, unet, icnet,pspnet,hrnet
MODEL_NAME: ''
# BatchNorm类型: bn、gn(group_norm)
DEFAULT_NORM_TYPE: 'bn'
# 多路损失加权值
MULTI_LOSS_WEIGHT: [1.0]
# DEFAULT_NORM_TYPE为gn时group数
DEFAULT_GROUP_NUMBER: 32
# 极小值, 防止分母除0溢出,一般无需改动
DEFAULT_EPSILON: 1e-5
# BatchNorm动量, 一般无需改动
BN_MOMENTUM: 0.99
# 是否使用FP16训练
FP16: False
########################## DeepLab模型配置 ####################################
DEEPLAB:
# DeepLab backbone 配置, 可选项xception_65, mobilenetv2
BACKBONE: "xception_65"
# DeepLab output stride
OUTPUT_STRIDE: 16
# MobileNet v2 backbone scale 设置
DEPTH_MULTIPLIER: 1.0
# MobileNet v2 backbone scale 设置
ENCODER_WITH_ASPP: True
# MobileNet v2 backbone scale 设置
ENABLE_DECODER: True
# ASPP是否使用可分离卷积
ASPP_WITH_SEP_CONV: True
# 解码器是否使用可分离卷积
DECODER_USE_SEP_CONV: True
########################## UNET模型配置 #######################################
UNET:
# 上采样方式, 默认为双线性插值
UPSAMPLE_MODE: 'bilinear'
########################## ICNET模型配置 ######################################
ICNET:
# RESNET backbone scale 设置
DEPTH_MULTIPLIER: 0.5
# RESNET 层数 设置
LAYERS: 50
########################## PSPNET模型配置 ######################################
PSPNET:
# RESNET backbone scale 设置
DEPTH_MULTIPLIER: 1
# RESNET backbone 层数 设置
LAYERS: 50
########################## HRNET模型配置 ######################################
HRNET:
# HRNET STAGE2 设置
STAGE2:
NUM_MODULES: 1
NUM_CHANNELS: [40, 80]
# HRNET STAGE3 设置
STAGE3:
NUM_MODULES: 4
NUM_CHANNELS: [40, 80, 160]
# HRNET STAGE4 设置
STAGE4:
NUM_MODULES: 3
NUM_CHANNELS: [40, 80, 160, 320]
########################### 训练配置 ##########################################
TRAIN:
# 模型保存路径
MODEL_SAVE_DIR: ''
# 预训练模型路径
PRETRAINED_MODEL_DIR: ''
# 是否resume,继续训练
RESUME_MODEL_DIR: ''
# 是否使用多卡间同步BatchNorm均值和方差
SYNC_BATCH_NORM: False
# 模型参数保存的epoch间隔数,可用来继续训练中断的模型
SNAPSHOT_EPOCH: 10
########################### 模型优化相关配置 ##################################
SOLVER:
# 初始学习率
LR: 0.1
# 学习率下降方法, 支持poly piecewise cosine 三种
LR_POLICY: "poly"
# 优化算法, 支持SGD和Adam两种算法
OPTIMIZER: "sgd"
# 动量参数
MOMENTUM: 0.9
# 二阶矩估计的指数衰减率
MOMENTUM2: 0.999
# 学习率Poly下降指数
POWER: 0.9
# step下降指数
GAMMA: 0.1
# step下降间隔
DECAY_EPOCH: [10, 20]
# 学习率权重衰减,0-1
WEIGHT_DECAY: 0.00004
# 训练开始epoch数,默认为1
BEGIN_EPOCH: 1
# 训练epoch数,正整数
NUM_EPOCHS: 30
# loss的选择,支持softmax_loss, bce_loss, dice_loss
LOSS: ["softmax_loss"]
# 是否开启warmup学习策略
LR_WARMUP: False
# warmup的迭代次数
LR_WARMUP_STEPS: 2000
########################## 测试配置 ###########################################
TEST:
# 测试模型路径
TEST_MODEL: ''
########################### 数据增强配置 ######################################
AUG:
# 图像resize的方式有三种:
# unpadding(固定尺寸),stepscaling(按比例resize),rangescaling(长边对齐)
AUG_METHOD: 'unpadding'
# 图像resize的固定尺寸(宽,高),非负
FIX_RESIZE_SIZE: (500, 500)
# 图像resize方式为stepscaling,resize最小尺度,非负
MIN_SCALE_FACTOR: 0.5
# 图像resize方式为stepscaling,resize最大尺度,不小于MIN_SCALE_FACTOR
MAX_SCALE_FACTOR: 2.0
# 图像resize方式为stepscaling,resize尺度范围间隔,非负
SCALE_STEP_SIZE: 0.25
# 图像resize方式为rangescaling,训练时长边resize的范围最小值,非负
MIN_RESIZE_VALUE: 400
# 图像resize方式为rangescaling,训练时长边resize的范围最大值,
# 不小于MIN_RESIZE_VALUE
MAX_RESIZE_VALUE: 600
# 图像resize方式为rangescaling, 测试验证可视化模式下长边resize的长度,
# 在MIN_RESIZE_VALUE到MAX_RESIZE_VALUE范围内
INF_RESIZE_VALUE: 500
# 图像镜像左右翻转
MIRROR: True
# 图像上下翻转开关,True/False
FLIP: False
# 图像启动上下翻转的概率,0-1
FLIP_RATIO: 0.5
RICH_CROP:
# RichCrop数据增广开关,用于提升模型鲁棒性
ENABLE: False
# 图像旋转最大角度,0-90
MAX_ROTATION: 15
# 裁取图像与原始图像面积比,0-1
MIN_AREA_RATIO: 0.5
# 裁取图像宽高比范围,非负
ASPECT_RATIO: 0.33
# 亮度调节范围,0-1
BRIGHTNESS_JITTER_RATIO: 0.5
# 饱和度调节范围,0-1
SATURATION_JITTER_RATIO: 0.5
# 对比度调节范围,0-1
CONTRAST_JITTER_RATIO: 0.5
# 图像模糊开关,True/False
BLUR: False
# 图像启动模糊百分比,0-1
BLUR_RATIO: 0.1
########################## 预测部署模型配置 ###################################
FREEZE:
# 预测保存的模型名称
MODEL_FILENAME: '__model__'
# 预测保存的参数名称
PARAMS_FILENAME: '__params__'
# 预测模型参数保存的路径
SAVE_DIR: 'freeze_model'
`Note`: ########################## 数据载入配置 #######################################
DATALOADER:
# 数据载入时的并发数, 建议值8
NUM_WORKERS: 8
# 数据载入时缓存队列大小, 建议值256
BUF_SIZE: 256
```
代码详见pdseg/utils/config.py
...@@ -2,70 +2,58 @@ ...@@ -2,70 +2,58 @@
BASIC Group存放所有通用配置 BASIC Group存放所有通用配置
## `MEAN` ## `BATCH_SIZE`
图像预处理减去的均值(格式为 *[R, G, B]* 训练、评估、可视化时所用的BATCH大小
### 默认值 ### 默认值
[0.5, 0.5, 0.5] 1(需要根据实际需求填写)
<br/> ### 注意事项
<br/>
## `STD` * 当指定了多卡运行时,PaddleSeg会将数据平分到每张卡上运行,因此每张卡单次运行的数量为 BATCH_SIZE // dev_count
图像预处理所除的标准差(格式为 *[R, G, B]* * 多卡运行时,请确保BATCH_SIZE可被dev_count整除
### 默认 * 增大BATCH_SIZE有利于模型训练时的收敛速度,但是会带来显存的开销。请根据实际情况评估后填写合适的
[0.5, 0.5, 0.5] * 目前PaddleSeg提供的很多预训练模型都有BN层,如果BATCH SIZE设置为1,则此时训练可能不稳定导致nan
<br/> <br/>
<br/> <br/>
## `EVAL_CROP_SIZE` ## `TRAIN_CROP_SIZE`
评估时所对图片裁剪的大小(格式为 *[宽, 高]* 训练时所对图片裁剪的大小(格式为 *[宽, 高]*
### 默认值 ### 默认值
无(需要用户自己填写) 无(需要用户自己填写)
### 注意事项 ### 注意事项
* 裁剪的大小不能小于原图,请将该字段的值填写为评估数据中最长的宽和高 `TRAIN_CROP_SIZE`可以设置任意大小,具体如何设置根据数据集而定。
<br/> <br/>
<br/> <br/>
## `TRAIN_CROP_SIZE` ## `EVAL_CROP_SIZE`
训练时所对图片裁剪的大小(格式为 *[宽, 高]* 评估时所对图片裁剪的大小(格式为 *[宽, 高]*
### 默认值 ### 默认值
无(需要用户自己填写) 无(需要用户自己填写)
<br/>
<br/>
## `BATCH_SIZE`
训练、评估、可视化时所用的BATCH大小
### 默认值
1(需要根据实际需求填写)
### 注意事项 ### 注意事项
`EVAL_CROP_SIZE`的设置需要满足以下条件,共有3种情形:
-`AUG.AUG_METHOD`为unpadding时,`EVAL_CROP_SIZE`的宽高应不小于`AUG.FIX_RESIZE_SIZE`的宽高。
-`AUG.AUG_METHOD`为stepscaling时,`EVAL_CROP_SIZE`的宽高应不小于原图中最长的宽高。
-`AUG.AUG_METHOD`为rangescaling时,`EVAL_CROP_SIZE`的宽高应不小于缩放后图像中最长的宽高。
* 当指定了多卡运行时,PaddleSeg会将数据平分到每张卡上运行,因此每张卡单次运行的数量为 BATCH_SIZE // dev_count <br/>
<br/>
* 多卡运行时,请确保BATCH_SIZE可被dev_count整除
* 增大BATCH_SIZE有利于模型训练时的收敛速度,但是会带来显存的开销。请根据实际情况评估后填写合适的值
* 目前PaddleSeg提供的很多预训练模型都有BN层,如果BATCH SIZE设置为1,则此时训练可能不稳定导致nan
<br/>
<br/>
...@@ -21,7 +21,13 @@ MODEL Group存放所有和模型相关的配置,该Group还包含三个子Grou ...@@ -21,7 +21,13 @@ MODEL Group存放所有和模型相关的配置,该Group还包含三个子Grou
## `DEFAULT_NORM_TYPE` ## `DEFAULT_NORM_TYPE`
模型所用norm类型,支持`bn` `gn` 模型所用norm类型,支持`bn`(Batch Norm)、`gn`(Group Norm)
![](../imgs/gn.png)
关于Group Norm的介绍可以参考论文:https://arxiv.org/abs/1803.08494
GN 把通道分为组,并计算每一组之内的均值和方差,以进行归一化。GN 的计算与批量大小无关,其精度也在各种批量大小下保持稳定。适应于网络参数很重的模型,比如deeplabv3+这种,可以在一个小batch下取得一个较好的训练效果。
### 默认值 ### 默认值
......
...@@ -5,7 +5,7 @@ TRAIN Group存放所有和训练相关的配置 ...@@ -5,7 +5,7 @@ TRAIN Group存放所有和训练相关的配置
## `MODEL_SAVE_DIR` ## `MODEL_SAVE_DIR`
在训练周期内定期保存模型的主目录 在训练周期内定期保存模型的主目录
## 默认值 ### 默认值
无(需要用户自己填写) 无(需要用户自己填写)
<br/> <br/>
...@@ -14,10 +14,10 @@ TRAIN Group存放所有和训练相关的配置 ...@@ -14,10 +14,10 @@ TRAIN Group存放所有和训练相关的配置
## `PRETRAINED_MODEL_DIR` ## `PRETRAINED_MODEL_DIR`
预训练模型路径 预训练模型路径
## 默认值 ### 默认值
## 注意事项 ### 注意事项
* 若未指定该字段,则模型会随机初始化所有的参数,从头开始训练 * 若未指定该字段,则模型会随机初始化所有的参数,从头开始训练
...@@ -31,10 +31,10 @@ TRAIN Group存放所有和训练相关的配置 ...@@ -31,10 +31,10 @@ TRAIN Group存放所有和训练相关的配置
## `RESUME_MODEL_DIR` ## `RESUME_MODEL_DIR`
从指定路径中恢复参数并继续训练 从指定路径中恢复参数并继续训练
## 默认值 ### 默认值
## 注意事项 ### 注意事项
*`RESUME_MODEL_DIR`存在时,PaddleSeg会恢复到上一次训练的最近一个epoch,并且恢复训练过程中的临时变量(如已经衰减过的学习率,Optimizer的动量数据等),`PRETRAINED_MODEL`路径的最后一个目录必须为int数值或者字符串final,PaddleSeg会将int数值作为当前起始EPOCH继续训练,若目录为final,则不会继续训练。若目录不满足上述条件,PaddleSeg会抛出错误。 *`RESUME_MODEL_DIR`存在时,PaddleSeg会恢复到上一次训练的最近一个epoch,并且恢复训练过程中的临时变量(如已经衰减过的学习率,Optimizer的动量数据等),`PRETRAINED_MODEL`路径的最后一个目录必须为int数值或者字符串final,PaddleSeg会将int数值作为当前起始EPOCH继续训练,若目录为final,则不会继续训练。若目录不满足上述条件,PaddleSeg会抛出错误。
...@@ -42,12 +42,17 @@ TRAIN Group存放所有和训练相关的配置 ...@@ -42,12 +42,17 @@ TRAIN Group存放所有和训练相关的配置
<br/> <br/>
## `SYNC_BATCH_NORM` ## `SYNC_BATCH_NORM`
是否在多卡间同步BN的均值和方差 是否在多卡间同步BN的均值和方差
## 默认值 Synchronized Batch Norm跨GPU批归一化策略最早在[MegDet: A Large Mini-Batch Object Detector](https://arxiv.org/abs/1711.07240)
论文中提出,在[Bag of Freebies for Training Object Detection Neural Networks](https://arxiv.org/pdf/1902.04103.pdf)论文中以Yolov3验证了这一策略的有效性,[PaddleCV/yolov3](https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/yolov3)实现了这一系列策略并比Darknet框架版本在COCO17数据上mAP高5.9.
PaddleSeg基于PaddlePaddle框架的sync_batch_norm策略,可以支持通过多卡实现大batch size的分割模型训练,可以得到更高的mIoU精度。
### 默认值
False False
## 注意事项 ### 注意事项
* 打开该选项会带来一定的性能消耗(多卡间同步数据导致) * 打开该选项会带来一定的性能消耗(多卡间同步数据导致)
......
...@@ -109,6 +109,6 @@ Random crop过程分为3种情形: ...@@ -109,6 +109,6 @@ Random crop过程分为3种情形:
`EVAL_CROP_SIZE`的设置需要满足以下条件,共有3种情形: `EVAL_CROP_SIZE`的设置需要满足以下条件,共有3种情形:
-`AUG.AUG_METHOD`为unpadding时,`EVAL_CROP_SIZE`的宽高应不小于`AUG.FIX_RESIZE_SIZE`的宽高。 -`AUG.AUG_METHOD`为unpadding时,`EVAL_CROP_SIZE`的宽高应不小于`AUG.FIX_RESIZE_SIZE`的宽高。
-`AUG.AUG_METHOD`为stepscaling时,`EVAL_CROP_SIZE`的宽高应不小于原图中最的宽高。 -`AUG.AUG_METHOD`为stepscaling时,`EVAL_CROP_SIZE`的宽高应不小于原图中最的宽高。
-`AUG.AUG_METHOD`为rangescaling时,`EVAL_CROP_SIZE`的宽高应不小于缩放后图像中最的宽高。 -`AUG.AUG_METHOD`为rangescaling时,`EVAL_CROP_SIZE`的宽高应不小于缩放后图像中最的宽高。
...@@ -83,7 +83,9 @@ PaddleSeg采用通用的文件列表方式组织训练集、验证集和测试 ...@@ -83,7 +83,9 @@ PaddleSeg采用通用的文件列表方式组织训练集、验证集和测试
不可在`DATASET.TRAIN_FILE_LIST``DATASET.VAL_FILE_LIST`配置项中使用。 不可在`DATASET.TRAIN_FILE_LIST``DATASET.VAL_FILE_LIST`配置项中使用。
完整的配置信息可以参考[`./docs/annotation/cityscapes_demo`](../docs/annotation/cityscapes_demo/)目录下的yaml和文件列表。 **符合规范的文件列表是什么样的呢?**
请参考目录[`./docs/annotation/cityscapes_demo`](../docs/annotation/cityscapes_demo/)
### 数据集目录结构整理 ### 数据集目录结构整理
......
# PaddleSeg 分割模型介绍 # PaddleSeg 分割模型介绍
### U-Net ### U-Net
U-Net 起源于医疗图像分割,整个网络是标准的encoder-decoder网络,特点是参数少,计算快,应用性强,对于一般场景适应度很高。 U-Net [1] 起源于医疗图像分割,整个网络是标准的encoder-decoder网络,特点是参数少,计算快,应用性强,对于一般场景适应度很高。
![](./imgs/unet.png) ![](./imgs/unet.png)
### DeepLabv3+ ### DeepLabv3+
DeepLabv3+ 是DeepLab系列的最后一篇文章,其前作有 DeepLabv1,DeepLabv2, DeepLabv3, DeepLabv3+ [2] 是DeepLab系列的最后一篇文章,其前作有 DeepLabv1,DeepLabv2, DeepLabv3,
在最新作中,DeepLab的作者通过encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层, 在最新作中,DeepLab的作者通过encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层,
其骨干网络使用了Xception模型,提高了语义分割的健壮性和运行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance,89.0mIOU。 其骨干网络使用了Xception模型,提高了语义分割的健壮性和运行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance,89.0mIOU。
...@@ -23,34 +23,31 @@ DeepLabv3+原始实现的backbone网络,兼顾了精度和性能,适用于 ...@@ -23,34 +23,31 @@ DeepLabv3+原始实现的backbone网络,兼顾了精度和性能,适用于
### ICNet ### ICNet
Image Cascade Network(ICNet)主要用于图像实时语义分割。相较于其它压缩计算的方法,ICNet即考虑了速度,也考虑了准确性。 ICNet的主要思想是将输入图像变换为不同的分辨率,然后用不同计算复杂度的子网络计算不同分辨率的输入,然后将结果合并。ICNet由三个子网络组成,计算复杂度高的网络处理低分辨率输入,计算复杂度低的网络处理分辨率高的网络,通过这种方式在高分辨率图像的准确性和低复杂度网络的效率之间获得平衡。 Image Cascade Network(ICNet) [3] 主要用于图像实时语义分割。相较于其它压缩计算的方法,ICNet即考虑了速度,也考虑了准确性。 ICNet的主要思想是将输入图像变换为不同的分辨率,然后用不同计算复杂度的子网络计算不同分辨率的输入,然后将结果合并。ICNet由三个子网络组成,计算复杂度高的网络处理低分辨率输入,计算复杂度低的网络处理分辨率高的网络,通过这种方式在高分辨率图像的准确性和低复杂度网络的效率之间获得平衡。
整个网络结构如下: 整个网络结构如下:
![](./imgs/icnet.png) ![](./imgs/icnet.png)
## 参考 ### PSPNet
- [Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation](https://arxiv.org/abs/1802.02611) Pyramid Scene Parsing Network (PSPNet) [4] 起源于场景解析(Scene Parsing)领域。如下图所示,普通FCN [5] 面向复杂场景出现三种误分割现象:(1)关系不匹配。将船误分类成车,显然车一般不会出现在水面上。(2)类别混淆。摩天大厦和建筑物这两个类别相近,误将摩天大厦分类成建筑物。(3)类别不显著。枕头区域较小且纹理与床相近,误将枕头分类成床。
- [U-Net: Convolutional Networks for Biomedical Image Segmentation](https://arxiv.org/abs/1505.04597) ![](./imgs/pspnet2.png)
- [ICNet for Real-Time Semantic Segmentation on High-Resolution Images](https://arxiv.org/abs/1704.08545) PSPNet的出发点是在算法中引入更多的上下文信息来解决上述问题。为了融合了图像中不同区域的上下文信息,PSPNet通过特殊设计的全局均值池化操作(global average pooling)和特征融合构造金字塔池化模块 (Pyramid Pooling Module)。PSPNet最终获得了2016年ImageNet场景解析挑战赛的冠军,并在PASCAL VOC 2012 和 Cityscapes 数据集上取得当时的最佳效果。整个网络结构如下:
# PaddleSeg特殊网络结构介绍 ![](./imgs/pspnet.png)
### Group Norm ## 参考文献
![](./imgs/gn.png) [1] [U-Net: Convolutional Networks for Biomedical Image Segmentation](https://arxiv.org/abs/1505.04597)
关于Group Norm的介绍可以参考论文:https://arxiv.org/abs/1803.08494
GN 把通道分为组,并计算每一组之内的均值和方差,以进行归一化。GN 的计算与批量大小无关,其精度也在各种批量大小下保持稳定。适应于网络参数很重的模型,比如deeplabv3+这种,可以在一个小batch下取得一个较好的训练效果。 [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)
### Synchronized Batch Norm [4] [Pyramid Scene Parsing Network](https://arxiv.org/abs/1612.01105)
Synchronized Batch Norm跨GPU批归一化策略最早在[MegDet: A Large Mini-Batch Object Detector](https://arxiv.org/abs/1711.07240) [5] [Fully Convolutional Networks for Semantic Segmentation](https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf)
论文中提出,在[Bag of Freebies for Training Object Detection Neural Networks](https://arxiv.org/pdf/1902.04103.pdf)论文中以Yolov3验证了这一策略的有效性,[PaddleCV/yolov3](https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/yolov3)实现了这一系列策略并比Darknet框架版本在COCO17数据上mAP高5.9.
PaddleSeg基于PaddlePaddle框架的sync_batch_norm策略,可以支持通过多卡实现大batch size的分割模型训练,可以得到更高的mIoU精度。
...@@ -72,17 +72,11 @@ cfg.DATASET.IGNORE_INDEX = 255 ...@@ -72,17 +72,11 @@ cfg.DATASET.IGNORE_INDEX = 255
cfg.DATASET.PADDING_VALUE = [127.5, 127.5, 127.5] cfg.DATASET.PADDING_VALUE = [127.5, 127.5, 127.5]
########################### 数据增强配置 ###################################### ########################### 数据增强配置 ######################################
# 图像镜像左右翻转
cfg.AUG.MIRROR = True
# 图像上下翻转开关,True/False
cfg.AUG.FLIP = False
# 图像启动上下翻转的概率,0-1
cfg.AUG.FLIP_RATIO = 0.5
# 图像resize的固定尺寸(宽,高),非负
cfg.AUG.FIX_RESIZE_SIZE = tuple()
# 图像resize的方式有三种: # 图像resize的方式有三种:
# unpadding(固定尺寸),stepscaling(按比例resize),rangescaling(长边对齐) # unpadding(固定尺寸),stepscaling(按比例resize),rangescaling(长边对齐)
cfg.AUG.AUG_METHOD = 'rangescaling' cfg.AUG.AUG_METHOD = 'unpadding'
# 图像resize的固定尺寸(宽,高),非负
cfg.AUG.FIX_RESIZE_SIZE = (512, 512)
# 图像resize方式为stepscaling,resize最小尺度,非负 # 图像resize方式为stepscaling,resize最小尺度,非负
cfg.AUG.MIN_SCALE_FACTOR = 0.5 cfg.AUG.MIN_SCALE_FACTOR = 0.5
# 图像resize方式为stepscaling,resize最大尺度,不小于MIN_SCALE_FACTOR # 图像resize方式为stepscaling,resize最大尺度,不小于MIN_SCALE_FACTOR
...@@ -98,6 +92,13 @@ cfg.AUG.MAX_RESIZE_VALUE = 600 ...@@ -98,6 +92,13 @@ cfg.AUG.MAX_RESIZE_VALUE = 600
# 在MIN_RESIZE_VALUE到MAX_RESIZE_VALUE范围内 # 在MIN_RESIZE_VALUE到MAX_RESIZE_VALUE范围内
cfg.AUG.INF_RESIZE_VALUE = 500 cfg.AUG.INF_RESIZE_VALUE = 500
# 图像镜像左右翻转
cfg.AUG.MIRROR = True
# 图像上下翻转开关,True/False
cfg.AUG.FLIP = False
# 图像启动上下翻转的概率,0-1
cfg.AUG.FLIP_RATIO = 0.5
# RichCrop数据增广开关,用于提升模型鲁棒性 # RichCrop数据增广开关,用于提升模型鲁棒性
cfg.AUG.RICH_CROP.ENABLE = False cfg.AUG.RICH_CROP.ENABLE = False
# 图像旋转最大角度,0-90 # 图像旋转最大角度,0-90
...@@ -164,7 +165,7 @@ cfg.SOLVER.LR_WARMUP_STEPS = 2000 ...@@ -164,7 +165,7 @@ cfg.SOLVER.LR_WARMUP_STEPS = 2000
cfg.TEST.TEST_MODEL = '' cfg.TEST.TEST_MODEL = ''
########################## 模型通用配置 ####################################### ########################## 模型通用配置 #######################################
# 模型名称, 支持deeplab, unet, icnet三种 # 模型名称, 已支持deeplabv3p, unet, icnet,pspnet,hrnet
cfg.MODEL.MODEL_NAME = '' cfg.MODEL.MODEL_NAME = ''
# BatchNorm类型: bn、gn(group_norm) # BatchNorm类型: bn、gn(group_norm)
cfg.MODEL.DEFAULT_NORM_TYPE = 'bn' cfg.MODEL.DEFAULT_NORM_TYPE = 'bn'
......
...@@ -117,17 +117,17 @@ PaddleSeg在AI Studio平台上提供了在线体验的DeepLabv3+图像分割教 ...@@ -117,17 +117,17 @@ PaddleSeg在AI Studio平台上提供了在线体验的DeepLabv3+图像分割教
## 模型组合 ## 模型组合
|预训练模型名称|BackBone|Norm Type|数据集|配置| |预训练模型名称|Backbone|Norm Type|数据集|配置|
|-|-|-|-|-| |-|-|-|-|-|
|mobilenetv2-2-0_bn_imagenet|-|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 2.0 <br> MODEL.DEFAULT_NORM_TYPE: bn| |mobilenetv2-2-0_bn_imagenet|MobileNetV2|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 2.0 <br> MODEL.DEFAULT_NORM_TYPE: bn|
|mobilenetv2-1-5_bn_imagenet|-|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.5 <br> MODEL.DEFAULT_NORM_TYPE: bn| |mobilenetv2-1-5_bn_imagenet|MobileNetV2|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.5 <br> MODEL.DEFAULT_NORM_TYPE: bn|
|mobilenetv2-1-0_bn_imagenet|-|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.0 <br> MODEL.DEFAULT_NORM_TYPE: bn| |mobilenetv2-1-0_bn_imagenet|MobileNetV2|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.0 <br> MODEL.DEFAULT_NORM_TYPE: bn|
|mobilenetv2-0-5_bn_imagenet|-|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 0.5 <br> MODEL.DEFAULT_NORM_TYPE: bn| |mobilenetv2-0-5_bn_imagenet|MobileNetV2|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 0.5 <br> MODEL.DEFAULT_NORM_TYPE: bn|
|mobilenetv2-0-25_bn_imagenet|-|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 0.25 <br> MODEL.DEFAULT_NORM_TYPE: bn| |mobilenetv2-0-25_bn_imagenet|MobileNetV2|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 0.25 <br> MODEL.DEFAULT_NORM_TYPE: bn|
|xception41_imagenet|-|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: xception_41 <br> MODEL.DEFAULT_NORM_TYPE: bn| |xception41_imagenet|Xception41|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: xception_41 <br> MODEL.DEFAULT_NORM_TYPE: bn|
|xception65_imagenet|-|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: xception_65 <br> MODEL.DEFAULT_NORM_TYPE: bn| |xception65_imagenet|Xception65|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: xception_65 <br> MODEL.DEFAULT_NORM_TYPE: bn|
|deeplabv3p_mobilenetv2-1-0_bn_coco|MobileNet V2|bn|COCO|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.0 <br> MODEL.DEEPLAB.ENCODER_WITH_ASPP: False <br> MODEL.DEEPLAB.ENABLE_DECODER: False <br> MODEL.DEFAULT_NORM_TYPE: bn| |deeplabv3p_mobilenetv2-1-0_bn_coco|MobileNetV2|bn|COCO|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.0 <br> MODEL.DEEPLAB.ENCODER_WITH_ASPP: False <br> MODEL.DEEPLAB.ENABLE_DECODER: False <br> MODEL.DEFAULT_NORM_TYPE: bn|
|**deeplabv3p_xception65_bn_coco**|Xception|bn|COCO|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: xception_65 <br> MODEL.DEFAULT_NORM_TYPE: bn | |**deeplabv3p_xception65_bn_coco**|Xception65|bn|COCO|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: xception_65 <br> MODEL.DEFAULT_NORM_TYPE: bn |
|deeplabv3p_mobilenetv2-1-0_bn_cityscapes|MobileNet V2|bn|Cityscapes|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.0 <br> MODEL.DEEPLAB.ENCODER_WITH_ASPP: False <br> MODEL.DEEPLAB.ENABLE_DECODER: False <br> MODEL.DEFAULT_NORM_TYPE: bn| |deeplabv3p_mobilenetv2-1-0_bn_cityscapes|MobileNetV2|bn|Cityscapes|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: mobilenetv2 <br> MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.0 <br> MODEL.DEEPLAB.ENCODER_WITH_ASPP: False <br> MODEL.DEEPLAB.ENABLE_DECODER: False <br> MODEL.DEFAULT_NORM_TYPE: bn|
|deeplabv3p_xception65_gn_cityscapes|Xception|gn|Cityscapes|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: xception_65 <br> MODEL.DEFAULT_NORM_TYPE: gn| |deeplabv3p_xception65_gn_cityscapes|Xception65|gn|Cityscapes|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: xception_65 <br> MODEL.DEFAULT_NORM_TYPE: gn|
|deeplabv3p_xception65_bn_cityscapes|Xception|bn|Cityscapes|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: xception_65 <br> MODEL.DEFAULT_NORM_TYPE: bn| |deeplabv3p_xception65_bn_cityscapes|Xception65|bn|Cityscapes|MODEL.MODEL_NAME: deeplabv3p <br> MODEL.DEEPLAB.BACKBONE: xception_65 <br> MODEL.DEFAULT_NORM_TYPE: bn|
...@@ -118,14 +118,14 @@ python pdseg/eval.py --use_gpu --cfg ./configs/hrnet_w18_pet.yaml ...@@ -118,14 +118,14 @@ python pdseg/eval.py --use_gpu --cfg ./configs/hrnet_w18_pet.yaml
## 模型组合 ## 模型组合
|预训练模型名称|BackBone|Norm Type|数据集|配置| |预训练模型名称|Backbone|数据集|配置|
|-|-|-|-|-| |-|-|-|-|
|hrnet_w18_bn_cityscapes|-|bn| Cityscapes | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [18, 36] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [18, 36, 72] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [18, 36, 72, 144] <br> MODEL.DEFAULT_NORM_TYPE: bn| |hrnet_w18_bn_cityscapes|HRNet| Cityscapes | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [18, 36] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [18, 36, 72] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [18, 36, 72, 144] <br> MODEL.DEFAULT_NORM_TYPE: bn|
| hrnet_w18_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [18, 36] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [18, 36, 72] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [18, 36, 72, 144] <br> MODEL.DEFAULT_NORM_TYPE: bn | | hrnet_w18_bn_imagenet |HRNet| ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [18, 36] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [18, 36, 72] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [18, 36, 72, 144] <br> MODEL.DEFAULT_NORM_TYPE: bn |
| hrnet_w30_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [30, 60] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [30, 60, 120] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [30, 60, 120, 240] <br> MODEL.DEFAULT_NORM_TYPE: bn | | hrnet_w30_bn_imagenet |HRNet| ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [30, 60] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [30, 60, 120] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [30, 60, 120, 240] <br> MODEL.DEFAULT_NORM_TYPE: bn |
| hrnet_w32_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [32, 64] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [32, 64, 128] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [32, 64, 128, 256] <br> MODEL.DEFAULT_NORM_TYPE: bn | | hrnet_w32_bn_imagenet |HRNet|ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [32, 64] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [32, 64, 128] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [32, 64, 128, 256] <br> MODEL.DEFAULT_NORM_TYPE: bn |
| hrnet_w40_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [40, 80] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [40, 80, 160] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [40, 80, 160, 320] <br> MODEL.DEFAULT_NORM_TYPE: bn | | hrnet_w40_bn_imagenet |HRNet| ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [40, 80] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [40, 80, 160] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [40, 80, 160, 320] <br> MODEL.DEFAULT_NORM_TYPE: bn |
| hrnet_w44_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [44, 88] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [44, 88, 176] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [44, 88, 176, 352] <br> MODEL.DEFAULT_NORM_TYPE: bn | | hrnet_w44_bn_imagenet |HRNet| ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [44, 88] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [44, 88, 176] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [44, 88, 176, 352] <br> MODEL.DEFAULT_NORM_TYPE: bn |
| hrnet_w48_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [48, 96] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [48, 96, 192] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [48, 96, 192, 384] <br> MODEL.DEFAULT_NORM_TYPE: bn | | hrnet_w48_bn_imagenet |HRNet| ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [48, 96] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [48, 96, 192] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [48, 96, 192, 384] <br> MODEL.DEFAULT_NORM_TYPE: bn |
| hrnet_w64_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [64, 128] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [64, 128, 256] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [64, 128, 256, 512] <br> MODEL.DEFAULT_NORM_TYPE: bn | | hrnet_w64_bn_imagenet |HRNet| ImageNet | MODEL.MODEL_NAME: hrnet <br> MODEL.HRNET.STAGE2.NUM_CHANNELS: [64, 128] <br> MODEL.HRNET.STAGE3.NUM_CHANNELS: [64, 128, 256] <br> MODEL.HRNET.STAGE4.NUM_CHANNELS: [64, 128, 256, 512] <br> MODEL.DEFAULT_NORM_TYPE: bn |
...@@ -118,6 +118,6 @@ python pdseg/eval.py --use_gpu --cfg ./configs/icnet_pet.yaml ...@@ -118,6 +118,6 @@ python pdseg/eval.py --use_gpu --cfg ./configs/icnet_pet.yaml
## 模型组合 ## 模型组合
|预训练模型名称|BackBone|Norm|数据集|配置| |预训练模型名称|Backbone|数据集|配置|
|-|-|-|-|-| |-|-|-|-|
|icnet_bn_cityscapes|-|bn|Cityscapes|MODEL.MODEL_NAME: icnet <br> MODEL.DEFAULT_NORM_TYPE: bn <br> MODEL.MULTI_LOSS_WEIGHT: [1.0, 0.4, 0.16]| |icnet_bn_cityscapes|ResNet50|Cityscapes|MODEL.MODEL_NAME: icnet <br> MODEL.DEFAULT_NORM_TYPE: bn <br> MODEL.MULTI_LOSS_WEIGHT: [1.0, 0.4, 0.16]|
...@@ -16,7 +16,7 @@ python dataset/download_pet.py ...@@ -16,7 +16,7 @@ python dataset/download_pet.py
## 二. 下载预训练模型 ## 二. 下载预训练模型
关于PaddleSeg支持的所有预训练模型的列表,我们可以从[模型组合](#模型组合)中查看我们所需模型的名字和配置 关于PaddleSeg支持的所有预训练模型的列表,我们可以从[PSPNet预训练模型组合](#PSPNet预训练模型组合)中查看我们所需模型的配置和下载链接
接着下载对应的预训练模型 接着下载对应的预训练模型
...@@ -113,9 +113,11 @@ python pdseg/train.py --use_gpu --cfg ./configs/test_pet.yaml ...@@ -113,9 +113,11 @@ python pdseg/train.py --use_gpu --cfg ./configs/test_pet.yaml
python pdseg/eval.py --use_gpu --cfg ./configs/test_pet.yaml python pdseg/eval.py --use_gpu --cfg ./configs/test_pet.yaml
``` ```
## 模型组合 ## PSPNet预训练模型组合
|预训练模型名称|BackBone|Norm|数据集|配置| |模型|BackBone|数据集|配置|
|-|-|-|-|-| |-|-|-|-|
|pspnet50_bn_cityscapes|ResNet50|bn|Cityscapes|MODEL.MODEL_NAME: pspnet <br> MODEL.DEFAULT_NORM_TYPE: bn <br> MODEL.PSPNET.LAYERS: 50| |[pspnet50_cityscapes](https://paddleseg.bj.bcebos.com/models/pspnet50_cityscapes.tgz)|ResNet50|Cityscapes |MODEL.MODEL_NAME: pspnet <br> MODEL.DEFAULT_NORM_TYPE: bn <br> MODEL.PSPNET.LAYERS: 50|
|pspnet101_bn_cityscapes|ResNet101|bn|Cityscapes|MODEL.MODEL_NAME: pspnet <br> MODEL.DEFAULT_NORM_TYPE: bn <br> MODEL.PSPNET.LAYERS: 101| |[pspnet101_cityscapes](https://paddleseg.bj.bcebos.com/models/pspnet101_cityscapes.tgz)|ResNet101|Cityscapes |MODEL.MODEL_NAME: pspnet <br> MODEL.DEFAULT_NORM_TYPE: bn <br> MODEL.PSPNET.LAYERS: 101|
| [pspnet50_coco](https://paddleseg.bj.bcebos.com/models/pspnet50_coco.tgz)|ResNet50|COCO |MODEL.MODEL_NAME: pspnet <br> MODEL.DEFAULT_NORM_TYPE: bn <br> MODEL.PSPNET.LAYERS: 50|
| [pspnet101_coco](https://paddleseg.bj.bcebos.com/models/pspnet101_coco.tgz) |ResNet101| COCO |MODEL.MODEL_NAME: pspnet <br> MODEL.DEFAULT_NORM_TYPE: bn <br> MODEL.PSPNET.LAYERS: 101|
...@@ -115,6 +115,6 @@ PaddleSeg在AI Studio平台上提供了在线体验的U-Net宠物分割教程, ...@@ -115,6 +115,6 @@ PaddleSeg在AI Studio平台上提供了在线体验的U-Net宠物分割教程,
## 模型组合 ## 模型组合
|预训练模型名称|BackBone|Norm|数据集|配置| |预训练模型名称|Backbone|数据集|配置|
|-|-|-|-|-| |-|-|-|-|
|unet_bn_coco|-|bn|COCO|MODEL.MODEL_NAME: unet <br> MODEL.DEFAULT_NORM_TYPE: bn| |unet_bn_coco|VGG16|COCO|MODEL.MODEL_NAME: unet <br> MODEL.DEFAULT_NORM_TYPE: bn|
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册