在前期的图像检测阶段,分割模型使用完全卷积的神经网络FCNN,其中掩模和边界被放置好,然后,输入通过一个非常深的网络进行处理,其中累积的卷积和池会导致图像的分辨率和质量显著降低,因此,结果是高信息丢失率的结果。DeepLab模型利用空洞卷积和空洞空间卷积池化金字塔(ASPP)架构解决了这一挑战。DeepLab系列发展历程:v1:修改经典分类网络(VGG16),将空洞卷积应用于模型中,试图解决分辨率过低及提取多尺度特征问题,用CRF做后处理v2:设计ASPP模块,将空洞卷积的性能发挥到最大,沿用VGG16作为主网络,尝试使用ResNet-101进行对比实验,用CRF做后处理v3:以ResNet为主网络,设计了一种串行和一种并行的DCNN网络,微调ASPP模块,取消CRF做后处理v3+:以ResNet或Xception为主网络,结合编解码结构设计了一种新的算法模型,以v3作为编码器结构,另行设计了解码器结构,取消CRF做后处理模型架构以ResNet-101为骨干,使用空洞卷积进行密集特征提取。
图片
Pascal VOC数据集PASCAL-VOC2012数据集下载链接:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11... [1.9G]和语义边界数据集(Semantic Boundaries Dataset,SBD)https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/gr...准备Backbone模型准备resnet101模型,点此下载(https://download.mindspore.cn/model_zoo/r1.2/resnet101_ascend...).通过运行脚本:python get_dataset_lst.py --data_root=/PATH/TO/DATA 来自动生成数据清单文件配置并运行build_data.sh,将数据集转换为MindRecords。scripts/build_data.sh中的参数:--data_root 训练数据的根路径
--data_lst 训练数据列表(如上准备)
--dst_path MindRecord所在路径
--num_shards MindRecord的分片数
--shuffle 是否混洗export DEVICE_ID=7
EXECUTE_PATH=$(pwd)

python ${EXECUTE_PATH}/../src/data/build_seg_data.py --data_root=/PATH/TO/DATA_ROOT \

                --data_lst=/PATH/TO/DATA_lst.txt  \
                --dst_path=/PATH/TO/MINDRECORED_NAME.mindrecord  \
                --num_shards=8  \
                --shuffle=True这个shell是写死在脚本里面的。此外我是windows上运行,只能自己把命令拿出来执行了。  dst_dir = '/'.join(args.dst_path.split('/')[:-1])
if not os.path.exists(dst_dir):
    os.makedirs(dst_dir)这是限定了只能linux执行,稍微修改下/ 修改成 \\因为后续我是单CPU训练,所以num_shards 设置为1

图片

图片

图片
进行训练,推荐Ascend 8卡进行训练。因为我没有Ascend环境,就用单台CPU进行训练。python train.py --data_file=D:\ai\vocaug_train.mindrecord --device_target=CPU --train_dir=D:\ai\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=deeplab_v3_s16 --ckpt_pre_trained=D:\ai\resnet101_ascend_v120_imagenet2012_official_cv_bs32_acc78.ckpt --save_steps=1500 --keep_checkpoint_max=200一开始忘记加 --device_target=CPU了
图片

图片

图片
cpu 训练内存占用50g,--save_steps=1500 训练1500 step 至少需要10小时。如果要训练完200 epoch 需要10*40 小时。就取保存的第一个ckpt。然后进行评估。
图片
这个上面的命令有问题python eval.py --device_target=CPU --data_root=D:\ai --data_lst=D:\ai\voc_val_lst.txt --batch_size=16 --crop_size=513 --ignore_label=255 --num_classes=21 --model=deeplab_v3_s16 --scales_type=0 --flip=True --freeze_bn=True --ckpt_path=D:\ai\ckpt\deeplab_v3_s16-5_180.ckpt
图片

图片
因为训练的epoch较少,所以IoU较大。然后是导出mindirpython export.py --device_target=CPU --ckpt_file=D:\ai\ckpt\deeplab_v3_s16-5_180.ckpt --file_name=deeplabv3.mindir --file_format="MINDIR"
图片
推理参照 MindSpore C++推理部署指南 进行环境变量设置。目前仅可处理batch_Size为1。bash run_infer_cpp.sh [MINDIR_PATH] [DATA_PATH] [DATA_ROOT] [DATA_LIST] [DEVICE_TYPE] [DEVICE_ID]DEVICE_TYPE 可以为Ascend, GPU, 或CPU。 DEVICE_ID 可选,默认值为 0。


文良_颜丑
1 声望0 粉丝