diff --git a/README.md b/README.md index 22ecd0d02fdbf95f4d131583981f860e39de4bba..bac774b836b0648af8bd5d41a603f3ad2f9a7946 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,25 @@ PaddleSeg是基于[PaddlePaddle](https://www.paddlepaddle.org.cn)开发的语义分割库,覆盖了DeepLabv3+, U-Net, ICNet, PSPNet, HRNet等主流分割模型。通过统一的配置,帮助用户更便捷地完成从训练到部署的全流程图像分割应用。 -PaddleSeg具备高性能、丰富的数据增强、工业级部署、全流程应用的特点: +
+- [特点](#特点) +- [安装](#安装) +- [使用教程](#使用教程) + - [快速入门](#快速入门) + - [基础功能](#基础功能) + - [预测部署](#预测部署) + - [高级功能](#高级功能) +- [在线体验](#在线体验) +- [FAQ](#FAQ) +- [交流与反馈](#交流与反馈) +- [更新日志](#更新日志) +- [贡献代码](#贡献代码) + +
+ +## 特点 +PaddleSeg具备高性能、丰富的数据增强、工业级部署、全流程应用的特点: - **丰富的数据增强** @@ -27,21 +44,6 @@ PaddleSeg支持多进程IO、多卡并行、跨卡Batch Norm同步等训练加 基于[Paddle Serving](https://github.com/PaddlePaddle/Serving)和PaddlePaddle高性能预测引擎,结合百度开放的AI能力,轻松搭建人像分割和车道线分割服务。 -
- -- [安装](#安装) -- [使用教程](#使用教程) - - [快速入门](#快速入门) - - [基础功能](#基础功能) - - [预测部署](#预测部署) - - [高级功能](#高级功能) -- [在线体验](#在线体验) -- [FAQ](#FAQ) -- [交流与反馈](#交流与反馈) -- [更新日志](#更新日志) - -
- ## 安装 ### 1. 安装PaddlePaddle @@ -63,12 +65,12 @@ git clone https://github.com/PaddlePaddle/PaddleSeg ``` ### 3. 安装PaddleSeg依赖 - +通过以下命令安装python包依赖,请确保在该分支上至少执行过一次以下命令: ``` cd PaddleSeg pip install -r requirements.txt ``` -通过以下命令安装python包依赖,请确保在该分支上至少执行过一次以下命令。 + @@ -86,8 +88,8 @@ pip install -r requirements.txt ### 基础功能 -* [配置说明与准备](./docs/config.md) * [自定义数据的标注与准备](./docs/data_prepare.md) +* [配置说明与准备](./docs/config.md) * [数据和配置校验](./docs/check.md) * [分割模型介绍](./docs/models.md) * [预训练模型下载](./docs/model_zoo.md) @@ -196,4 +198,4 @@ A: 请将PaddlePaddle升级至1.5.2版本或以上。 ## 贡献代码 -我们非常欢迎您为PaddleSeg贡献代码或者提供使用建议。 +我们非常欢迎您为PaddleSeg贡献代码或者提供使用建议。如果您可以修复某个issue或者增加一个新功能,欢迎给我们提交pull requests. diff --git a/docs/annotation/jingling2seg.md b/docs/annotation/jingling2seg.md index 45aec0ff2f61f4766cfcf0c8449fcbe84ecd1c74..de36b5395bc599f83875c6732c1372bd86862c3c 100644 --- a/docs/annotation/jingling2seg.md +++ b/docs/annotation/jingling2seg.md @@ -44,7 +44,7 @@ **注意:导出的标注文件位于`保存位置`下的`outputs`目录。** -精灵标注产出的真值文件可参考我们给出的文件夹`docs/annotation/jingling_demo`。 +精灵标注产出的真值文件可参考我们给出的文件夹[docs/annotation/jingling_demo](jingling_demo)
@@ -85,13 +85,18 @@ pip install pillow * 运行以下代码,将标注后的数据转换成满足以上格式的数据集: ``` - python pdseg/tools/jingling2seg.py +python pdseg/tools/jingling2seg.py ``` -其中,``为精灵标注产出的json文件所在文件夹的目录,一般为精灵工具使用(3)中`保存位置`下的`outputs`目录。 +其中,``为精灵标注产出的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。
diff --git a/docs/annotation/jingling_demo/aa63d7e6db0d03137883772c246c6761fc201059.jpg b/docs/annotation/jingling_demo/jingling.jpg similarity index 100% rename from docs/annotation/jingling_demo/aa63d7e6db0d03137883772c246c6761fc201059.jpg rename to docs/annotation/jingling_demo/jingling.jpg diff --git a/docs/annotation/jingling_demo/outputs/aa63d7e6db0d03137883772c246c6761fc201059.json b/docs/annotation/jingling_demo/outputs/aa63d7e6db0d03137883772c246c6761fc201059.json deleted file mode 100644 index 69d80205de92afc9cffa304b32ff0e3e95502687..0000000000000000000000000000000000000000 --- a/docs/annotation/jingling_demo/outputs/aa63d7e6db0d03137883772c246c6761fc201059.json +++ /dev/null @@ -1 +0,0 @@ -{"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 diff --git a/docs/annotation/jingling_demo/outputs/annotations/aa63d7e6db0d03137883772c246c6761fc201059.png b/docs/annotation/jingling_demo/outputs/annotations/jingling.png similarity index 100% rename from docs/annotation/jingling_demo/outputs/annotations/aa63d7e6db0d03137883772c246c6761fc201059.png rename to docs/annotation/jingling_demo/outputs/annotations/jingling.png diff --git a/docs/annotation/jingling_demo/outputs/jingling.json b/docs/annotation/jingling_demo/outputs/jingling.json new file mode 100644 index 0000000000000000000000000000000000000000..0021522487a26f66dadc979a96ea631c0314adab --- /dev/null +++ b/docs/annotation/jingling_demo/outputs/jingling.json @@ -0,0 +1 @@ +{"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 diff --git a/docs/annotation/labelme2seg.md b/docs/annotation/labelme2seg.md index 5fe362274d54278af0ed8d8afb839e96609aa52a..235e3c41b6a79ece0b7512955aba04fe06faabe3 100644 --- a/docs/annotation/labelme2seg.md +++ b/docs/annotation/labelme2seg.md @@ -47,7 +47,7 @@ git clone https://github.com/wkentaro/labelme ​ (3) 图片中所有目标的标注都完成后,点击`Save`保存json文件,**请将json文件和图片放在同一个文件夹里**,点击`Next Image`标注下一张图片。 -LableMe产出的真值文件可参考我们给出的文件夹`docs/annotation/labelme_demo`。 +LableMe产出的真值文件可参考我们给出的文件夹[docs/annotation/labelme_demo](labelme_demo)。
@@ -95,12 +95,18 @@ pip install pillow * 运行以下代码,将标注后的数据转换成满足以上格式的数据集: ``` - python pdseg/tools/labelme2seg.py + python pdseg/tools/labelme2seg.py ``` -其中,``为图片以及LabelMe产出的json文件所在文件夹的目录,同时也是转换后的标注集所在文件夹的目录。 +其中,``为图片以及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。
diff --git a/docs/config.md b/docs/config.md index 387af4d4e18dc0e5b8cee7baa96ecf5b713f03ab..5419dde6664d088b92ae797b0e20c8b25e84693d 100644 --- a/docs/config.md +++ b/docs/config.md @@ -1,18 +1,245 @@ # PaddleSeg 分割库配置说明 -PaddleSeg提供了提供了统一的配置用于 训练/评估/可视化/导出模型 +PaddleSeg提供了统一的配置用于 训练/评估/可视化/导出模型。一共存在三套配置方案: +* 命令行窗口传递的参数。 +* configs目录下的yaml文件。 +* 默认参数,位于pdseg/utils/config.py。 + +三者的优先级顺序为 命令行窗口 > yaml > 默认配置。 配置包含以下Group: -* [通用](./configs/basic_group.md) -* [DATASET](./configs/dataset_group.md) -* [DATALOADER](./configs/dataloader_group.md) -* [FREEZE](./configs/freeze_group.md) -* [MODEL](./configs/model_group.md) -* [SOLVER](./configs/solver_group.md) -* [TRAIN](./configs/train_group.md) -* [TEST](./configs/test_group.md) - -`Note`: - - 代码详见pdseg/utils/config.py +|OPTIONS|用途|支持脚本| +|-|-|-| +|[BASIC](./configs/basic_group.md)|通用配置|ALL| +|[DATASET](./configs/dataset_group.md)|数据集相关|train/eval/vis| +|[MODEL](./configs/model_group.md)|模型相关|ALL| +|[TRAIN](./configs/train_group.md)|训练相关|train| +|[SOLVER](./configs/solver_group.md)|训练优化相关|train| +|[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' + +########################## 数据载入配置 ####################################### +DATALOADER: + # 数据载入时的并发数, 建议值8 + NUM_WORKERS: 8 + # 数据载入时缓存队列大小, 建议值256 + BUF_SIZE: 256 +``` + diff --git a/docs/configs/basic_group.md b/docs/configs/basic_group.md index c66752f38e153084601c89e0aeb0c9385f02885b..dbe22b91da0632ad6b0b435582495b784aa2b276 100644 --- a/docs/configs/basic_group.md +++ b/docs/configs/basic_group.md @@ -2,70 +2,58 @@ BASIC Group存放所有通用配置 -## `MEAN` +## `BATCH_SIZE` -图像预处理减去的均值(格式为 *[R, G, B]* ) +训练、评估、可视化时所用的BATCH大小 ### 默认值 -[0.5, 0.5, 0.5] +1(需要根据实际需求填写) -
-
+### 注意事项 -## `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

-## `EVAL_CROP_SIZE` +## `TRAIN_CROP_SIZE` -评估时所对图片裁剪的大小(格式为 *[宽, 高]* ) +训练时所对图片裁剪的大小(格式为 *[宽, 高]* ) ### 默认值 无(需要用户自己填写) ### 注意事项 -* 裁剪的大小不能小于原图,请将该字段的值填写为评估数据中最长的宽和高 +`TRAIN_CROP_SIZE`可以设置任意大小,具体如何设置根据数据集而定。

-## `TRAIN_CROP_SIZE` +## `EVAL_CROP_SIZE` -训练时所对图片裁剪的大小(格式为 *[宽, 高]* ) +评估时所对图片裁剪的大小(格式为 *[宽, 高]* ) ### 默认值 无(需要用户自己填写) -
-
- -## `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 +
+
-* 多卡运行时,请确保BATCH_SIZE可被dev_count整除 -* 增大BATCH_SIZE有利于模型训练时的收敛速度,但是会带来显存的开销。请根据实际情况评估后填写合适的值 -* 目前PaddleSeg提供的很多预训练模型都有BN层,如果BATCH SIZE设置为1,则此时训练可能不稳定导致nan -
-
diff --git a/docs/configs/model_group.md b/docs/configs/model_group.md index 91b586888e1c5e29b51a2284f90d24a4b01e37c7..ca8758cdf2e93337da9bcd4400d572e88f006445 100644 --- a/docs/configs/model_group.md +++ b/docs/configs/model_group.md @@ -21,7 +21,13 @@ MODEL Group存放所有和模型相关的配置,该Group还包含三个子Grou ## `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下取得一个较好的训练效果。 ### 默认值 diff --git a/docs/configs/train_group.md b/docs/configs/train_group.md index 6c8a0d79c79af665d8c7bf54a2b7555aa024bb8d..2fc8806c457d561978379589f6e05657e62a6e86 100644 --- a/docs/configs/train_group.md +++ b/docs/configs/train_group.md @@ -5,7 +5,7 @@ TRAIN Group存放所有和训练相关的配置 ## `MODEL_SAVE_DIR` 在训练周期内定期保存模型的主目录 -## 默认值 +### 默认值 无(需要用户自己填写)
@@ -14,10 +14,10 @@ TRAIN Group存放所有和训练相关的配置 ## `PRETRAINED_MODEL_DIR` 预训练模型路径 -## 默认值 +### 默认值 无 -## 注意事项 +### 注意事项 * 若未指定该字段,则模型会随机初始化所有的参数,从头开始训练 @@ -31,10 +31,10 @@ TRAIN Group存放所有和训练相关的配置 ## `RESUME_MODEL_DIR` 从指定路径中恢复参数并继续训练 -## 默认值 +### 默认值 无 -## 注意事项 +### 注意事项 * 当`RESUME_MODEL_DIR`存在时,PaddleSeg会恢复到上一次训练的最近一个epoch,并且恢复训练过程中的临时变量(如已经衰减过的学习率,Optimizer的动量数据等),`PRETRAINED_MODEL`路径的最后一个目录必须为int数值或者字符串final,PaddleSeg会将int数值作为当前起始EPOCH继续训练,若目录为final,则不会继续训练。若目录不满足上述条件,PaddleSeg会抛出错误。 @@ -42,12 +42,17 @@ TRAIN Group存放所有和训练相关的配置
## `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 -## 注意事项 +### 注意事项 * 打开该选项会带来一定的性能消耗(多卡间同步数据导致) diff --git a/docs/data_aug.md b/docs/data_aug.md index 97a1c8dba381dde0432500092a9b6248506c4cd9..ed1b5c3c2dc66fa94f6dc1067bdec19161cda431 100644 --- a/docs/data_aug.md +++ b/docs/data_aug.md @@ -109,6 +109,6 @@ Random crop过程分为3种情形: `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`的宽高应不小于缩放后图像中最大的宽高。 +- 当`AUG.AUG_METHOD`为stepscaling时,`EVAL_CROP_SIZE`的宽高应不小于原图中最长的宽高。 +- 当`AUG.AUG_METHOD`为rangescaling时,`EVAL_CROP_SIZE`的宽高应不小于缩放后图像中最长的宽高。 diff --git a/docs/data_prepare.md b/docs/data_prepare.md index c6d0d5e65932c54ee5d2a8231f51cd731172ecd7..6e14ee5f6e8fb98e6e7bf00e35ff8c7a1efdb51e 100644 --- a/docs/data_prepare.md +++ b/docs/data_prepare.md @@ -83,7 +83,9 @@ PaddleSeg采用通用的文件列表方式组织训练集、验证集和测试 不可在`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/)。 ### 数据集目录结构整理 diff --git a/docs/imgs/pspnet.png b/docs/imgs/pspnet.png new file mode 100644 index 0000000000000000000000000000000000000000..2963aeadb89aef05bfb19163f89d413d620c6564 Binary files /dev/null and b/docs/imgs/pspnet.png differ diff --git a/docs/imgs/pspnet2.png b/docs/imgs/pspnet2.png new file mode 100644 index 0000000000000000000000000000000000000000..401263a9b5fddc4c6ca77ef2dc172c7cb565c00f Binary files /dev/null and b/docs/imgs/pspnet2.png differ diff --git a/docs/models.md b/docs/models.md index 680dfe87356db9dd6be181e003598d3eb8967ffe..20352413f7c16fefc1222f64d26aa2acbdca0bc2 100644 --- a/docs/models.md +++ b/docs/models.md @@ -1,12 +1,12 @@ # PaddleSeg 分割模型介绍 ### U-Net -U-Net 起源于医疗图像分割,整个网络是标准的encoder-decoder网络,特点是参数少,计算快,应用性强,对于一般场景适应度很高。 +U-Net [1] 起源于医疗图像分割,整个网络是标准的encoder-decoder网络,特点是参数少,计算快,应用性强,对于一般场景适应度很高。 ![](./imgs/unet.png) ### DeepLabv3+ -DeepLabv3+ 是DeepLab系列的最后一篇文章,其前作有 DeepLabv1,DeepLabv2, DeepLabv3, +DeepLabv3+ [2] 是DeepLab系列的最后一篇文章,其前作有 DeepLabv1,DeepLabv2, DeepLabv3, 在最新作中,DeepLab的作者通过encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层, 其骨干网络使用了Xception模型,提高了语义分割的健壮性和运行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance,89.0mIOU。 @@ -23,34 +23,31 @@ DeepLabv3+原始实现的backbone网络,兼顾了精度和性能,适用于 ### ICNet -Image Cascade Network(ICNet)主要用于图像实时语义分割。相较于其它压缩计算的方法,ICNet即考虑了速度,也考虑了准确性。 ICNet的主要思想是将输入图像变换为不同的分辨率,然后用不同计算复杂度的子网络计算不同分辨率的输入,然后将结果合并。ICNet由三个子网络组成,计算复杂度高的网络处理低分辨率输入,计算复杂度低的网络处理分辨率高的网络,通过这种方式在高分辨率图像的准确性和低复杂度网络的效率之间获得平衡。 +Image Cascade Network(ICNet) [3] 主要用于图像实时语义分割。相较于其它压缩计算的方法,ICNet即考虑了速度,也考虑了准确性。 ICNet的主要思想是将输入图像变换为不同的分辨率,然后用不同计算复杂度的子网络计算不同分辨率的输入,然后将结果合并。ICNet由三个子网络组成,计算复杂度高的网络处理低分辨率输入,计算复杂度低的网络处理分辨率高的网络,通过这种方式在高分辨率图像的准确性和低复杂度网络的效率之间获得平衡。 整个网络结构如下: ![](./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) -关于Group Norm的介绍可以参考论文:https://arxiv.org/abs/1803.08494 +[1] [U-Net: Convolutional Networks for Biomedical Image Segmentation](https://arxiv.org/abs/1505.04597) -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) -论文中提出,在[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精度。 +[5] [Fully Convolutional Networks for Semantic Segmentation](https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf) diff --git a/pdseg/utils/config.py b/pdseg/utils/config.py index 5d66c2f076ca964fcdf23d1cfd427e61acf68876..3cb573ee0889244e2b7b75b528fd0be1d0e91599 100644 --- a/pdseg/utils/config.py +++ b/pdseg/utils/config.py @@ -72,17 +72,11 @@ cfg.DATASET.IGNORE_INDEX = 255 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的方式有三种: # 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最小尺度,非负 cfg.AUG.MIN_SCALE_FACTOR = 0.5 # 图像resize方式为stepscaling,resize最大尺度,不小于MIN_SCALE_FACTOR @@ -98,6 +92,13 @@ cfg.AUG.MAX_RESIZE_VALUE = 600 # 在MIN_RESIZE_VALUE到MAX_RESIZE_VALUE范围内 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数据增广开关,用于提升模型鲁棒性 cfg.AUG.RICH_CROP.ENABLE = False # 图像旋转最大角度,0-90 @@ -164,7 +165,7 @@ cfg.SOLVER.LR_WARMUP_STEPS = 2000 cfg.TEST.TEST_MODEL = '' ########################## 模型通用配置 ####################################### -# 模型名称, 支持deeplab, unet, icnet三种 +# 模型名称, 已支持deeplabv3p, unet, icnet,pspnet,hrnet cfg.MODEL.MODEL_NAME = '' # BatchNorm类型: bn、gn(group_norm) cfg.MODEL.DEFAULT_NORM_TYPE = 'bn' diff --git a/turtorial/finetune_deeplabv3plus.md b/turtorial/finetune_deeplabv3plus.md index 140e8e15605ed9a1f4635690cff99a1cbc39bdc0..89eee369bf8400bde977313948f82d0be72dd7b5 100644 --- a/turtorial/finetune_deeplabv3plus.md +++ b/turtorial/finetune_deeplabv3plus.md @@ -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
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 2.0
MODEL.DEFAULT_NORM_TYPE: bn| -|mobilenetv2-1-5_bn_imagenet|-|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.5
MODEL.DEFAULT_NORM_TYPE: bn| -|mobilenetv2-1-0_bn_imagenet|-|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.0
MODEL.DEFAULT_NORM_TYPE: bn| -|mobilenetv2-0-5_bn_imagenet|-|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 0.5
MODEL.DEFAULT_NORM_TYPE: bn| -|mobilenetv2-0-25_bn_imagenet|-|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 0.25
MODEL.DEFAULT_NORM_TYPE: bn| -|xception41_imagenet|-|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: xception_41
MODEL.DEFAULT_NORM_TYPE: bn| -|xception65_imagenet|-|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: xception_65
MODEL.DEFAULT_NORM_TYPE: bn| -|deeplabv3p_mobilenetv2-1-0_bn_coco|MobileNet V2|bn|COCO|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.0
MODEL.DEEPLAB.ENCODER_WITH_ASPP: False
MODEL.DEEPLAB.ENABLE_DECODER: False
MODEL.DEFAULT_NORM_TYPE: bn| -|**deeplabv3p_xception65_bn_coco**|Xception|bn|COCO|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: xception_65
MODEL.DEFAULT_NORM_TYPE: bn | -|deeplabv3p_mobilenetv2-1-0_bn_cityscapes|MobileNet V2|bn|Cityscapes|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.0
MODEL.DEEPLAB.ENCODER_WITH_ASPP: False
MODEL.DEEPLAB.ENABLE_DECODER: False
MODEL.DEFAULT_NORM_TYPE: bn| -|deeplabv3p_xception65_gn_cityscapes|Xception|gn|Cityscapes|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: xception_65
MODEL.DEFAULT_NORM_TYPE: gn| -|deeplabv3p_xception65_bn_cityscapes|Xception|bn|Cityscapes|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: xception_65
MODEL.DEFAULT_NORM_TYPE: bn| +|mobilenetv2-2-0_bn_imagenet|MobileNetV2|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 2.0
MODEL.DEFAULT_NORM_TYPE: bn| +|mobilenetv2-1-5_bn_imagenet|MobileNetV2|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.5
MODEL.DEFAULT_NORM_TYPE: bn| +|mobilenetv2-1-0_bn_imagenet|MobileNetV2|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.0
MODEL.DEFAULT_NORM_TYPE: bn| +|mobilenetv2-0-5_bn_imagenet|MobileNetV2|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 0.5
MODEL.DEFAULT_NORM_TYPE: bn| +|mobilenetv2-0-25_bn_imagenet|MobileNetV2|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 0.25
MODEL.DEFAULT_NORM_TYPE: bn| +|xception41_imagenet|Xception41|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: xception_41
MODEL.DEFAULT_NORM_TYPE: bn| +|xception65_imagenet|Xception65|bn|ImageNet|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: xception_65
MODEL.DEFAULT_NORM_TYPE: bn| +|deeplabv3p_mobilenetv2-1-0_bn_coco|MobileNetV2|bn|COCO|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.0
MODEL.DEEPLAB.ENCODER_WITH_ASPP: False
MODEL.DEEPLAB.ENABLE_DECODER: False
MODEL.DEFAULT_NORM_TYPE: bn| +|**deeplabv3p_xception65_bn_coco**|Xception65|bn|COCO|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: xception_65
MODEL.DEFAULT_NORM_TYPE: bn | +|deeplabv3p_mobilenetv2-1-0_bn_cityscapes|MobileNetV2|bn|Cityscapes|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: mobilenetv2
MODEL.DEEPLAB.DEPTH_MULTIPLIER: 1.0
MODEL.DEEPLAB.ENCODER_WITH_ASPP: False
MODEL.DEEPLAB.ENABLE_DECODER: False
MODEL.DEFAULT_NORM_TYPE: bn| +|deeplabv3p_xception65_gn_cityscapes|Xception65|gn|Cityscapes|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: xception_65
MODEL.DEFAULT_NORM_TYPE: gn| +|deeplabv3p_xception65_bn_cityscapes|Xception65|bn|Cityscapes|MODEL.MODEL_NAME: deeplabv3p
MODEL.DEEPLAB.BACKBONE: xception_65
MODEL.DEFAULT_NORM_TYPE: bn| diff --git a/turtorial/finetune_hrnet.md b/turtorial/finetune_hrnet.md index dc746b6b90256dc138ade72994937bdccecf1b37..b8897089e82ac2c054f84ba3333a15327e7185d1 100644 --- a/turtorial/finetune_hrnet.md +++ b/turtorial/finetune_hrnet.md @@ -118,14 +118,14 @@ python pdseg/eval.py --use_gpu --cfg ./configs/hrnet_w18_pet.yaml ## 模型组合 -|预训练模型名称|BackBone|Norm Type|数据集|配置| -|-|-|-|-|-| -|hrnet_w18_bn_cityscapes|-|bn| Cityscapes | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [18, 36]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [18, 36, 72]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [18, 36, 72, 144]
MODEL.DEFAULT_NORM_TYPE: bn| -| hrnet_w18_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [18, 36]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [18, 36, 72]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [18, 36, 72, 144]
MODEL.DEFAULT_NORM_TYPE: bn | -| hrnet_w30_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [30, 60]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [30, 60, 120]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [30, 60, 120, 240]
MODEL.DEFAULT_NORM_TYPE: bn | -| hrnet_w32_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [32, 64]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [32, 64, 128]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [32, 64, 128, 256]
MODEL.DEFAULT_NORM_TYPE: bn | -| hrnet_w40_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [40, 80]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [40, 80, 160]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [40, 80, 160, 320]
MODEL.DEFAULT_NORM_TYPE: bn | -| hrnet_w44_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [44, 88]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [44, 88, 176]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [44, 88, 176, 352]
MODEL.DEFAULT_NORM_TYPE: bn | -| hrnet_w48_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [48, 96]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [48, 96, 192]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [48, 96, 192, 384]
MODEL.DEFAULT_NORM_TYPE: bn | -| hrnet_w64_bn_imagenet |-|bn| ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [64, 128]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [64, 128, 256]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [64, 128, 256, 512]
MODEL.DEFAULT_NORM_TYPE: bn | +|预训练模型名称|Backbone|数据集|配置| +|-|-|-|-| +|hrnet_w18_bn_cityscapes|HRNet| Cityscapes | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [18, 36]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [18, 36, 72]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [18, 36, 72, 144]
MODEL.DEFAULT_NORM_TYPE: bn| +| hrnet_w18_bn_imagenet |HRNet| ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [18, 36]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [18, 36, 72]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [18, 36, 72, 144]
MODEL.DEFAULT_NORM_TYPE: bn | +| hrnet_w30_bn_imagenet |HRNet| ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [30, 60]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [30, 60, 120]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [30, 60, 120, 240]
MODEL.DEFAULT_NORM_TYPE: bn | +| hrnet_w32_bn_imagenet |HRNet|ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [32, 64]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [32, 64, 128]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [32, 64, 128, 256]
MODEL.DEFAULT_NORM_TYPE: bn | +| hrnet_w40_bn_imagenet |HRNet| ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [40, 80]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [40, 80, 160]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [40, 80, 160, 320]
MODEL.DEFAULT_NORM_TYPE: bn | +| hrnet_w44_bn_imagenet |HRNet| ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [44, 88]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [44, 88, 176]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [44, 88, 176, 352]
MODEL.DEFAULT_NORM_TYPE: bn | +| hrnet_w48_bn_imagenet |HRNet| ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [48, 96]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [48, 96, 192]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [48, 96, 192, 384]
MODEL.DEFAULT_NORM_TYPE: bn | +| hrnet_w64_bn_imagenet |HRNet| ImageNet | MODEL.MODEL_NAME: hrnet
MODEL.HRNET.STAGE2.NUM_CHANNELS: [64, 128]
MODEL.HRNET.STAGE3.NUM_CHANNELS: [64, 128, 256]
MODEL.HRNET.STAGE4.NUM_CHANNELS: [64, 128, 256, 512]
MODEL.DEFAULT_NORM_TYPE: bn | diff --git a/turtorial/finetune_icnet.md b/turtorial/finetune_icnet.md index 00caf4f87f206000bc2dde8440bdbe08ff03f555..1eceead531f7a1180120d89ada4fe59ac20df219 100644 --- a/turtorial/finetune_icnet.md +++ b/turtorial/finetune_icnet.md @@ -118,6 +118,6 @@ python pdseg/eval.py --use_gpu --cfg ./configs/icnet_pet.yaml ## 模型组合 -|预训练模型名称|BackBone|Norm|数据集|配置| -|-|-|-|-|-| -|icnet_bn_cityscapes|-|bn|Cityscapes|MODEL.MODEL_NAME: icnet
MODEL.DEFAULT_NORM_TYPE: bn
MODEL.MULTI_LOSS_WEIGHT: [1.0, 0.4, 0.16]| +|预训练模型名称|Backbone|数据集|配置| +|-|-|-|-| +|icnet_bn_cityscapes|ResNet50|Cityscapes|MODEL.MODEL_NAME: icnet
MODEL.DEFAULT_NORM_TYPE: bn
MODEL.MULTI_LOSS_WEIGHT: [1.0, 0.4, 0.16]| diff --git a/turtorial/finetune_pspnet.md b/turtorial/finetune_pspnet.md index 931c3c5f7515e2ebec3d4fccf3069ecc6d6c00fb..318d048a6a5f198b360abc7556e40845469aea3e 100644 --- a/turtorial/finetune_pspnet.md +++ b/turtorial/finetune_pspnet.md @@ -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 python pdseg/eval.py --use_gpu --cfg ./configs/test_pet.yaml ``` -## 模型组合 +## PSPNet预训练模型组合 -|预训练模型名称|BackBone|Norm|数据集|配置| -|-|-|-|-|-| -|pspnet50_bn_cityscapes|ResNet50|bn|Cityscapes|MODEL.MODEL_NAME: pspnet
MODEL.DEFAULT_NORM_TYPE: bn
MODEL.PSPNET.LAYERS: 50| -|pspnet101_bn_cityscapes|ResNet101|bn|Cityscapes|MODEL.MODEL_NAME: pspnet
MODEL.DEFAULT_NORM_TYPE: bn
MODEL.PSPNET.LAYERS: 101| +|模型|BackBone|数据集|配置| +|-|-|-|-| +|[pspnet50_cityscapes](https://paddleseg.bj.bcebos.com/models/pspnet50_cityscapes.tgz)|ResNet50|Cityscapes |MODEL.MODEL_NAME: pspnet
MODEL.DEFAULT_NORM_TYPE: bn
MODEL.PSPNET.LAYERS: 50| +|[pspnet101_cityscapes](https://paddleseg.bj.bcebos.com/models/pspnet101_cityscapes.tgz)|ResNet101|Cityscapes |MODEL.MODEL_NAME: pspnet
MODEL.DEFAULT_NORM_TYPE: bn
MODEL.PSPNET.LAYERS: 101| +| [pspnet50_coco](https://paddleseg.bj.bcebos.com/models/pspnet50_coco.tgz)|ResNet50|COCO |MODEL.MODEL_NAME: pspnet
MODEL.DEFAULT_NORM_TYPE: bn
MODEL.PSPNET.LAYERS: 50| +| [pspnet101_coco](https://paddleseg.bj.bcebos.com/models/pspnet101_coco.tgz) |ResNet101| COCO |MODEL.MODEL_NAME: pspnet
MODEL.DEFAULT_NORM_TYPE: bn
MODEL.PSPNET.LAYERS: 101| diff --git a/turtorial/finetune_unet.md b/turtorial/finetune_unet.md index f490b1012ea0cc5b35167e0f3adbfb7b1fc8b9d9..84a919c63e5625fe5b879db0b542d84c6e8dbcb2 100644 --- a/turtorial/finetune_unet.md +++ b/turtorial/finetune_unet.md @@ -115,6 +115,6 @@ PaddleSeg在AI Studio平台上提供了在线体验的U-Net宠物分割教程, ## 模型组合 -|预训练模型名称|BackBone|Norm|数据集|配置| -|-|-|-|-|-| -|unet_bn_coco|-|bn|COCO|MODEL.MODEL_NAME: unet
MODEL.DEFAULT_NORM_TYPE: bn| +|预训练模型名称|Backbone|数据集|配置| +|-|-|-|-| +|unet_bn_coco|VGG16|COCO|MODEL.MODEL_NAME: unet
MODEL.DEFAULT_NORM_TYPE: bn|