MindSpore(Ascend)训练DeepLabV3+

MindSpore(Ascend)训练DeepLabV3+

说明:本文记录了使用MindSpore框架在Atlas 300T训练卡上训练DeepLabV3+的过程,参考:https://gitee.com/mindspore/models/tree/master/official/cv/deeplabv3plus

1. 描述

DeepLab是一系列图像语义分割模型,DeepLabv3+通过encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层, 其骨干网络使用了Resnet模型,提高了语义分割的健壮性和运行速率。

2. 前提条件

3. 数据集

4. 模型训练

4.1 获取源代码

克隆MindSpore Gitee仓库开源代码:https://gitee.com/mindspore/models/tree/master/official/cv/deeplabv3plus

4.2 数据集预处理

数据集目录:

└─Dataset
    ├─VOC2012
    │   ├──Annotations
    │   ├──...
    │
    └─benchmark_RELEASE
        ├──dataset
        ├──...

根据readme提示处理数据集:

  • 进入tools目录:

    cd /deeplabv3plus/src/tools
    
  • 获取训练数据清单:

    python3 get_dataset_list.py --data_dir=Dataset
    #执行完成后会在Dadaset目录下生成voc_train_lst.txt、voc_val_lst.txt、vocaug_train_lst.txt三个文件
    
  • 将数据集转换为MindRecord:

    #三个数据清单都需要执行一次
    python3 get_dataset_mindrecord.py --data_root=/home/wesley/dataset/VOC2012/ \
    --data_lst=/home/wesley/dataset/voc_train_lst.txt \
    --dst_path=../../mindrecord/voc_train.mindrecord \
    --num_shards=1 \
    --shuffle=True
    

4.3 开始训练

4.3.1 准备预训练Backbone:

resnet101_ascend_v120_imagenet2012_official_cv_bs32_acc78.ckpt

4.3.2 单卡训练:

执行train.py脚本即可,命令如下,参数(在train.py中查看描述)可根据实际情况修改:

	python3 train.py --data_file=./mindrecord/vocaug_train.mindrecord \
	--train_dir=./ckpt/ \
	--train_epochs=200 \
	--batch_size=32 \
	--crop_size=513 \
	--base_lr=0.015 \
	--lr_type=cos \
	--min_scale=0.5 \
	--max_scale=2.0 \
	--ignore_label=255 \
	--num_classes=21 \
	--model=DeepLabV3plus_s16 \
	--ckpt_pre_trained=./resnet101_bs32_acc78.ckpt \
	--save_steps=1500 \
	--keep_checkpoint_max=200 >log 2>&1 &

训练日志信息:
日志

4.3.3 多卡训练:

通过script目录下的脚本启动8卡训练(由于多卡没有环境,未做测试)
1、使用vocaug_train数据集训练s16,微调ResNet-101预训练模型,修改run_distribute_train_s16_r1.sh脚本参数部分如下,然后执行:bash run_distribute_train_s16_r1.sh

train_path=../deeplabv3plus/train/ #训练结果输出路径
train_code_path=../deeplabv3plus/ #代码路径

python3 ${train_code_path}/train.py --train_dir=${train_path}/ckpt  \
--data_file=./mindrecord/vocaug_train.mindrecord  \
--train_epochs=300  \
--batch_size=32  \
--crop_size=513  \
--base_lr=0.08  \
--lr_type=cos  \
--min_scale=0.5  \
--max_scale=2.0  \
--ignore_label=255  \
--num_classes=21  \
--model=DeepLabV3plus_s16  \
--ckpt_pre_trained=./resnet101_bs32_acc78.ckpt  \
--is_distributed  \
--save_steps=410  \
--keep_checkpoint_max=200 >8p_log_1 2>&1 &

2、 使用vocaug_train数据集训练s8,微调上一步的模型,修改run_distribute_train_s8_r1.sh脚本参数部分如下,然后执行:bash run_distribute_train_s8_r1.sh

train_path=../deeplabv3plus/train2/
train_code_path=../deeplabv3plus/

python3 ${train_code_path}/train.py --train_dir=${train_path}/ckpt  \
--data_file=./mindrecord/vocaug_train.mindrecord  \
--train_epochs=800  \
--batch_size=16  \
--crop_size=513  \
--base_lr=0.02  \
--lr_type=cos  \
--min_scale=0.5  \
--max_scale=2.0  \
--ignore_label=255  \
--num_classes=21  \
--model=DeepLabV3plus_s8  \
--loss_scale=2048  \
--ckpt_pre_trained=./train/ckpt/DeepLabV3plus_s16-34_45.ckpt
--is_distributed  \
--save_steps=820  \
--keep_checkpoint_max=200 >8p_log_2 2>&1 &

3、使用voc_train数据集训练s8,微调上一步的模型,修改run_distribute_train_s8_r2.sh脚本参数部分如下,然后执行:bash run_distribute_train_s8_r2.sh

train_path=../deeplabv3plus/train2/
train_code_path=../deeplabv3plus/

python3 ${train_code_path}/train.py --train_dir=${train_path}/ckpt  \
--data_file=./mindrecord/voc_train.mindrecord  \
--train_epochs=300  \
--batch_size=16  \
--crop_size=513  \
--base_lr=0.008  \
--lr_type=cos  \
--min_scale=0.5  \
--max_scale=2.0  \
--ignore_label=255  \
--num_classes=21  \
--model=DeepLabV3plus_s8  \
--loss_scale=2048  \
--ckpt_pre_trained=./train/ckpt/DeepLabV3plus_s8-34_45.ckpt  \
--is_distributed  \
--save_steps=110  \
--keep_checkpoint_max=200 >8p_log_3 2>&1 &

5. 模型评估

通过eval.py脚本和训练保存的ckpt文件进行模型评估:

python3 eval.py --data_root=/home/wesley/dataset  \
--data_lst=/home/wesley/dataset/voc_val_lst.txt  \
--batch_size=32  \
--crop_size=513  \
--ignore_label=255  \
--num_classes=21  \
--model=DeepLabV3plus_s16  \
--scales=1.0  \
--freeze_bn  \
--ckpt_path=./train/ckpt/DeepLabV3plus_s16-34_45.ckpt >./eval_log 2>&1 &

评估结果(单卡训练200 epochs):


版权声明:本文为HsiehVe原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。