图像分割-Fast-SCNN

## Fast-SCNN(图像分割/Pytorch) ## 1. 概述 此模型基于[Fast-SCNN: Fast Semantic Segmentation Network](https://arxiv.org/abs/1902.04502)中提出的模型结构实现,该算法会载入在[Cityscape](https://www.cityscapes-dataset.com/)上的预训练模型,在用户数据集上做迁移学习。我们提供了训练代码和可用于训练的模型,用于实际场景的微调训练。训练后生成的模型可直接在ModelArts平台部署成在线服务。 图像分割的评估手段一般使用mIOU指标,详细说明请参考:[https://github.com/mcordts/cityscapesScripts#evaluation](https://github.com/mcordts/cityscapesScripts#evaluation) 本算法的其他信息如下表所示: | 项目 | 说明 | | -------------- | ------------------------------------------------------------ | | 参考论文 | Fast-SCNN: Fast Semantic Segmentation Network | | 使用框架 | Pytorch-1.4.0 | | 训练集 | Cityscapes leftImg8bit_trainvaltest.zip中的train set | | 训练总epoch数 | 1200 | | 训练batch_size | 使用6卡训练,每张卡TRAIN_BATCH_SIZE = 2,相当于总batch_size为12 | | 训练硬件及耗时 | 6*v100,11.7小时 | | 测试集 | Cityscapes leftImg8bit_trainvaltest.zip中的test set | | 推理硬件及速度 | CPU,2.6s/pic | | 输入图像尺寸 | 1024\*2048\*3 | | 原论文准确率 | mIOU=68.62 | | 本算法准确率 | mIOU=68.668 | ## 2、训练 ### 2.1. 算法基本信息 - 任务类型:图像分割 - 支持的框架引擎:PyTorch-1.4.0-python3.6 - 算法输入: - 存储在OBS上的数据集,必须按照Cityscape数据集的格式进行存储,详情请查看下文第4节案例指导 - Cityscape预训练模型,在Cityscape上的mIOU是68.668 - 算法输出: - 用于Pytorch推理的pth模型,CPU推理速度:2.6s/pic - 代码结构 ``` src |- pre-trained_weights |- Fast-SCNN无预训练模型,此文件夹为空 |- trained_model |- model |- segmentron |- ... |- config.yaml |- config.json |- customize_service.py |- best_model.pth |- configs # 配置文件,包含除fast-scnn外的其他算法 |- cityscapes_fast_scnn.yaml |- ... |- segmentron # 开源包、模型构建、数据集加载等文件 |- ... |- tools |- train.py # 执行训练 |- eval.py # 在验证集上验证,输出伪彩色结果图像和评估结果 |- eval_txt.py # 在验证集上验证,输出结果保存为txt |- run.py # 启动文件,根据超参数启动train或eval |- demo.py ``` ### 2.2. 训练参数说明 | 名称 | 默认值 | 类型 | 是否必填 | 是否可修改 | 描述 | | ----------------- | ---------------------------------- | ------ | -------- | ---------- | ------------------------------------------------------------ | | num_nodes | 1 | int | 是 | 是 | 训练使用 GPU 数 | | cuda_visiable | 0 | string | 是 | 是 | GPU 编号,如果选择多卡,则需要按照“0,1,2,3”的格式填写 | | config_file | configs/cityscapes_fast_scnn.yaml | string | 否 | 是 | 配置文件路径,支持配置为OBS上的某个路径,不配置时,默认路径为本算法代码内的路径 | | train_epochs | 10 | int | 是 | 是 | 总训练轮数(cityscape数据集上建议设置为1000以上);设置为0时,不进行训练,直接将本算法mIOU达到68.668的模型保存到输出路径。 | | train_batch_size | 12 | int | 是 | 是 | 训练时每块GPU指定的图片数(例如默认使用单卡时设置为12,而使用6卡时应当设置为2以保证总batchsize=2*6=12)。 | | solver_lr | 0.045 | string | 否 | 是 | base 学习率 | | solver_aux | True | string | 否 | 是 | 是否使用辅助训练 | | solver_aux_weight | 0.4 | string | 否 | 是 | 辅助训练权重 | | load_weight | trained_model/model/best_model.pth | string | 否 | 是 | pth模型文件路径,支持加载OBS上的pth模型进行训练,默认路径时支持加载本算法达到mIOU=68.668的模型作为初始化参数;支持设置为中间过程保存的模型进行断点续训;设置为None时直接进行训练(train from scratch). | | eval | False | string | 否 | 是 | 是否进行模型评估,默认为False,如果设为True,则必须设定load_weight参数,加载指定的pth模型,在创建训练作业时指定的数据存储位置验证集上进行预测,所有预测结果pred_results及模型评估结果eval_result.txt将保存到创建训练作业时指定的训练输出位置上 | 注1:设置load_weight时,支持两种保存形式的模型 - ``` 训练完成后保存的最佳模型best_model.pth,只保存模型参数 |- learning_to_downsample.conv.conv.weight |- ... |- learning_to_downsample.conv.bn.weight |- ... |- learning_to_downsample.conv.bn.bias |- ... |- learning_to_downsample.conv.bn.running_mean |- ... |- learning_to_downsample.conv.bn.running_mean |- ... |- learning_to_downsample.conv.bn.num_batches_tracked |- ... |- ... ``` - ``` 中间过程保存的模型,除模型参数外,保存优化器、学习率、epoch等参数; 例如 2.pth |- epoch # 此模型文件保存时已训练的epoch数 |- state_dict # 模型参数,与上文best_model.pth结构一致 |-... |- optimizer # 优化器参数 |- lr_scheduler # 学习率参数(包含学习率衰减) 加载该模型时,会从该模型所属的epoch开始训练,设置的epoch数应与原来一致。 例如:2.pth为某次总epoch数为10时训练过程中第2个epoch保存的模型,则load_weight设置为2.pth时,训练将从第2个epoch开始,且此时epoch也应设置为10。该功能用于断点续训。 ``` 注2:自定义config文件时,可先设定epoch为0将本算法model文件夹保存至自己的OBS,然后按照该文件夹里的config.yaml格式进行编写。其中TEST.TEST_MODEL_PATH请设置为'./best_model.pth'用于部署。 ### 2.3. 训练输出文件 训练完成后的输出文件如下: ``` |- model |- segmentron |- ... |- config.yaml # 模型配置文件,和训练使用的配置文件一致;自定义配置文件可参考该文件 |- config.json |- customize_service.py |- best_model.pth |- xxxx.pth |- xxxx.pth |- ... ``` 如果设置eval为True,输出文件如下: ``` |- model |- segmentron |-... |- config.yaml |- config.json |- customize_service.py |- best_model.pth |- eval_results |- eval_results.txt |- frankfurt_000000_000294_leftImg8bit.png |- frankfurt_000000_000576_leftImg8bit.png |- ... |- ... ``` ## 3. GPU/CPU推理 元模型来源 选择 从训练中选择,选择训练作业及版本。 **注意**:推理配置文件model/config.json中的runtime字段为pytorch1.4-python3.7,表示该模型可同时在CPU或GPU运行。 ## 4. 案例指导 本算法的详细使用方法,请查看[《ModelArts AI Gallery算法Fast-SCNN使用指导》](https://marketplace.huaweicloud.com/markets/aihub/article/detail/?content_id=fcea3af6-fbdc-4750-aefa-4b350229cd6f)。
Fast-SCNN(图像分割/Pytorch)
1. 概述
此模型基于Fast-SCNN: Fast Semantic Segmentation Network中提出的模型结构实现,该算法会载入在Cityscape上的预训练模型,在用户数据集上做迁移学习。我们提供了训练代码和可用于训练的模型,用于实际场景的微调训练。训练后生成的模型可直接在ModelArts平台部署成在线服务。
图像分割的评估手段一般使用mIOU指标,详细说明请参考:https://github.com/mcordts/cityscapesScripts#evaluation
本算法的其他信息如下表所示:
项目 | 说明 |
---|---|
参考论文 | Fast-SCNN: Fast Semantic Segmentation Network |
使用框架 | Pytorch-1.4.0 |
训练集 | Cityscapes leftImg8bit_trainvaltest.zip中的train set |
训练总epoch数 | 1200 |
训练batch_size | 使用6卡训练,每张卡TRAIN_BATCH_SIZE = 2,相当于总batch_size为12 |
训练硬件及耗时 | 6*v100,11.7小时 |
测试集 | Cityscapes leftImg8bit_trainvaltest.zip中的test set |
推理硬件及速度 | CPU,2.6s/pic |
输入图像尺寸 | 1024*2048*3 |
原论文准确率 | mIOU=68.62 |
本算法准确率 | mIOU=68.668 |
2、训练
2.1. 算法基本信息
-
任务类型:图像分割
-
支持的框架引擎:PyTorch-1.4.0-python3.6
-
算法输入:
- 存储在OBS上的数据集,必须按照Cityscape数据集的格式进行存储,详情请查看下文第4节案例指导
- Cityscape预训练模型,在Cityscape上的mIOU是68.668
-
算法输出:
- 用于Pytorch推理的pth模型,CPU推理速度:2.6s/pic
-
代码结构
src |- pre-trained_weights |- Fast-SCNN无预训练模型,此文件夹为空 |- trained_model |- model |- segmentron |- ... |- config.yaml |- config.json |- customize_service.py |- best_model.pth |- configs # 配置文件,包含除fast-scnn外的其他算法 |- cityscapes_fast_scnn.yaml |- ... |- segmentron # 开源包、模型构建、数据集加载等文件 |- ... |- tools |- train.py # 执行训练 |- eval.py # 在验证集上验证,输出伪彩色结果图像和评估结果 |- eval_txt.py # 在验证集上验证,输出结果保存为txt |- run.py # 启动文件,根据超参数启动train或eval |- demo.py
2.2. 训练参数说明
名称 | 默认值 | 类型 | 是否必填 | 是否可修改 | 描述 |
---|---|---|---|---|---|
num_nodes | 1 | int | 是 | 是 | 训练使用 GPU 数 |
cuda_visiable | 0 | string | 是 | 是 | GPU 编号,如果选择多卡,则需要按照“0,1,2,3”的格式填写 |
config_file | configs/cityscapes_fast_scnn.yaml | string | 否 | 是 | 配置文件路径,支持配置为OBS上的某个路径,不配置时,默认路径为本算法代码内的路径 |
train_epochs | 10 | int | 是 | 是 | 总训练轮数(cityscape数据集上建议设置为1000以上);设置为0时,不进行训练,直接将本算法mIOU达到68.668的模型保存到输出路径。 |
train_batch_size | 12 | int | 是 | 是 | 训练时每块GPU指定的图片数(例如默认使用单卡时设置为12,而使用6卡时应当设置为2以保证总batchsize=2*6=12)。 |
solver_lr | 0.045 | string | 否 | 是 | base 学习率 |
solver_aux | True | string | 否 | 是 | 是否使用辅助训练 |
solver_aux_weight | 0.4 | string | 否 | 是 | 辅助训练权重 |
load_weight | trained_model/model/best_model.pth | string | 否 | 是 | pth模型文件路径,支持加载OBS上的pth模型进行训练,默认路径时支持加载本算法达到mIOU=68.668的模型作为初始化参数;支持设置为中间过程保存的模型进行断点续训;设置为None时直接进行训练(train from scratch). |
eval | False | string | 否 | 是 | 是否进行模型评估,默认为False,如果设为True,则必须设定load_weight参数,加载指定的pth模型,在创建训练作业时指定的数据存储位置验证集上进行预测,所有预测结果pred_results及模型评估结果eval_result.txt将保存到创建训练作业时指定的训练输出位置上 |
注1:设置load_weight时,支持两种保存形式的模型
-
训练完成后保存的最佳模型best_model.pth,只保存模型参数 |- learning_to_downsample.conv.conv.weight |- ... |- learning_to_downsample.conv.bn.weight |- ... |- learning_to_downsample.conv.bn.bias |- ... |- learning_to_downsample.conv.bn.running_mean |- ... |- learning_to_downsample.conv.bn.running_mean |- ... |- learning_to_downsample.conv.bn.num_batches_tracked |- ... |- ...
-
中间过程保存的模型,除模型参数外,保存优化器、学习率、epoch等参数; 例如 2.pth |- epoch # 此模型文件保存时已训练的epoch数 |- state_dict # 模型参数,与上文best_model.pth结构一致 |-... |- optimizer # 优化器参数 |- lr_scheduler # 学习率参数(包含学习率衰减) 加载该模型时,会从该模型所属的epoch开始训练,设置的epoch数应与原来一致。 例如:2.pth为某次总epoch数为10时训练过程中第2个epoch保存的模型,则load_weight设置为2.pth时,训练将从第2个epoch开始,且此时epoch也应设置为10。该功能用于断点续训。
注2:自定义config文件时,可先设定epoch为0将本算法model文件夹保存至自己的OBS,然后按照该文件夹里的config.yaml格式进行编写。其中TEST.TEST_MODEL_PATH请设置为’./best_model.pth’用于部署。
2.3. 训练输出文件
训练完成后的输出文件如下:
|- model
|- segmentron
|- ...
|- config.yaml # 模型配置文件,和训练使用的配置文件一致;自定义配置文件可参考该文件
|- config.json
|- customize_service.py
|- best_model.pth
|- xxxx.pth
|- xxxx.pth
|- ...
如果设置eval为True,输出文件如下:
|- model
|- segmentron
|-...
|- config.yaml
|- config.json
|- customize_service.py
|- best_model.pth
|- eval_results
|- eval_results.txt
|- frankfurt_000000_000294_leftImg8bit.png
|- frankfurt_000000_000576_leftImg8bit.png
|- ...
|- ...
3. GPU/CPU推理
元模型来源 选择 从训练中选择,选择训练作业及版本。
注意:推理配置文件model/config.json中的runtime字段为pytorch1.4-python3.7,表示该模型可同时在CPU或GPU运行。
4. 案例指导
本算法的详细使用方法,请查看《ModelArts AI Gallery算法Fast-SCNN使用指导》。
Fast-SCNN(图像分割/Pytorch)
1. 概述
此模型基于Fast-SCNN: Fast Semantic Segmentation Network中提出的模型结构实现,该算法会载入在Cityscape上的预训练模型,在用户数据集上做迁移学习。我们提供了训练代码和可用于训练的模型,用于实际场景的微调训练。训练后生成的模型可直接在ModelArts平台部署成在线服务。
图像分割的评估手段一般使用mIOU指标,详细说明请参考:https://github.com/mcordts/cityscapesScripts#evaluation
本算法的其他信息如下表所示:
项目 | 说明 |
---|---|
参考论文 | Fast-SCNN: Fast Semantic Segmentation Network |
使用框架 | Pytorch-1.4.0 |
训练集 | Cityscapes leftImg8bit_trainvaltest.zip中的train set |
训练总epoch数 | 1200 |
训练batch_size | 使用6卡训练,每张卡TRAIN_BATCH_SIZE = 2,相当于总batch_size为12 |
训练硬件及耗时 | 6*v100,11.7小时 |
测试集 | Cityscapes leftImg8bit_trainvaltest.zip中的test set |
推理硬件及速度 | CPU,2.6s/pic |
输入图像尺寸 | 1024*2048*3 |
原论文准确率 | mIOU=68.62 |
本算法准确率 | mIOU=68.668 |
2、训练
2.1. 算法基本信息
-
任务类型:图像分割
-
支持的框架引擎:PyTorch-1.4.0-python3.6
-
算法输入:
- 存储在OBS上的数据集,必须按照Cityscape数据集的格式进行存储,详情请查看下文第4节案例指导
- Cityscape预训练模型,在Cityscape上的mIOU是68.668
-
算法输出:
- 用于Pytorch推理的pth模型,CPU推理速度:2.6s/pic
-
代码结构
src |- pre-trained_weights |- Fast-SCNN无预训练模型,此文件夹为空 |- trained_model |- model |- segmentron |- ... |- config.yaml |- config.json |- customize_service.py |- best_model.pth |- configs # 配置文件,包含除fast-scnn外的其他算法 |- cityscapes_fast_scnn.yaml |- ... |- segmentron # 开源包、模型构建、数据集加载等文件 |- ... |- tools |- train.py # 执行训练 |- eval.py # 在验证集上验证,输出伪彩色结果图像和评估结果 |- eval_txt.py # 在验证集上验证,输出结果保存为txt |- run.py # 启动文件,根据超参数启动train或eval |- demo.py
2.2. 训练参数说明
名称 | 默认值 | 类型 | 是否必填 | 是否可修改 | 描述 |
---|---|---|---|---|---|
num_nodes | 1 | int | 是 | 是 | 训练使用 GPU 数 |
cuda_visiable | 0 | string | 是 | 是 | GPU 编号,如果选择多卡,则需要按照“0,1,2,3”的格式填写 |
config_file | configs/cityscapes_fast_scnn.yaml | string | 否 | 是 | 配置文件路径,支持配置为OBS上的某个路径,不配置时,默认路径为本算法代码内的路径 |
train_epochs | 10 | int | 是 | 是 | 总训练轮数(cityscape数据集上建议设置为1000以上);设置为0时,不进行训练,直接将本算法mIOU达到68.668的模型保存到输出路径。 |
train_batch_size | 12 | int | 是 | 是 | 训练时每块GPU指定的图片数(例如默认使用单卡时设置为12,而使用6卡时应当设置为2以保证总batchsize=2*6=12)。 |
solver_lr | 0.045 | string | 否 | 是 | base 学习率 |
solver_aux | True | string | 否 | 是 | 是否使用辅助训练 |
solver_aux_weight | 0.4 | string | 否 | 是 | 辅助训练权重 |
load_weight | trained_model/model/best_model.pth | string | 否 | 是 | pth模型文件路径,支持加载OBS上的pth模型进行训练,默认路径时支持加载本算法达到mIOU=68.668的模型作为初始化参数;支持设置为中间过程保存的模型进行断点续训;设置为None时直接进行训练(train from scratch). |
eval | False | string | 否 | 是 | 是否进行模型评估,默认为False,如果设为True,则必须设定load_weight参数,加载指定的pth模型,在创建训练作业时指定的数据存储位置验证集上进行预测,所有预测结果pred_results及模型评估结果eval_result.txt将保存到创建训练作业时指定的训练输出位置上 |
注1:设置load_weight时,支持两种保存形式的模型
-
训练完成后保存的最佳模型best_model.pth,只保存模型参数 |- learning_to_downsample.conv.conv.weight |- ... |- learning_to_downsample.conv.bn.weight |- ... |- learning_to_downsample.conv.bn.bias |- ... |- learning_to_downsample.conv.bn.running_mean |- ... |- learning_to_downsample.conv.bn.running_mean |- ... |- learning_to_downsample.conv.bn.num_batches_tracked |- ... |- ...
-
中间过程保存的模型,除模型参数外,保存优化器、学习率、epoch等参数; 例如 2.pth |- epoch # 此模型文件保存时已训练的epoch数 |- state_dict # 模型参数,与上文best_model.pth结构一致 |-... |- optimizer # 优化器参数 |- lr_scheduler # 学习率参数(包含学习率衰减) 加载该模型时,会从该模型所属的epoch开始训练,设置的epoch数应与原来一致。 例如:2.pth为某次总epoch数为10时训练过程中第2个epoch保存的模型,则load_weight设置为2.pth时,训练将从第2个epoch开始,且此时epoch也应设置为10。该功能用于断点续训。
注2:自定义config文件时,可先设定epoch为0将本算法model文件夹保存至自己的OBS,然后按照该文件夹里的config.yaml格式进行编写。其中TEST.TEST_MODEL_PATH请设置为’./best_model.pth’用于部署。
2.3. 训练输出文件
训练完成后的输出文件如下:
|- model
|- segmentron
|- ...
|- config.yaml # 模型配置文件,和训练使用的配置文件一致;自定义配置文件可参考该文件
|- config.json
|- customize_service.py
|- best_model.pth
|- xxxx.pth
|- xxxx.pth
|- ...
如果设置eval为True,输出文件如下:
|- model
|- segmentron
|-...
|- config.yaml
|- config.json
|- customize_service.py
|- best_model.pth
|- eval_results
|- eval_results.txt
|- frankfurt_000000_000294_leftImg8bit.png
|- frankfurt_000000_000576_leftImg8bit.png
|- ...
|- ...
3. GPU/CPU推理
元模型来源 选择 从训练中选择,选择训练作业及版本。
注意:推理配置文件model/config.json中的runtime字段为pytorch1.4-python3.7,表示该模型可同时在CPU或GPU运行。
4. 案例指导
本算法的详细使用方法,请查看《ModelArts AI Gallery算法Fast-SCNN使用指导》。