资讯专栏INFORMATION COLUMN

使用DeepLab进行语义分割

sunsmell / 3000人阅读

摘要:介绍是谷歌使用基于开发的语义分割模型,至今已更新个版本。最新版本是,在此模型中进一步将深度可分离卷积应用到孔空间金字塔池化和解码器模块,从而形成更快,更强大的语义分割编码器解码器网络。

介绍

DeepLab是谷歌使用tensorflow基于CNN开发的语义分割模型,至今已更新4个版本。最新版本是DeepLabv3+,在此模型中进一步将深度可分离卷积应用到孔空间金字塔池化和解码器模块,从而形成更快,更强大的语义分割编码器-解码器网络。本文从官方案例出发,介绍如何训练以及使用DeepLabv3+模型。

模型安装

1,下载tensorflow model,然后将解压后的文件重命名为”models“并移动到tensorflow文件夹下。

2,添加环境变量

cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

3,测试是否安装成功

cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research
python deeplab/model_test.py

结果出现如下错误:

解决方法如下:


准备数据

下载数据:

cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research/deeplab/datasets/
sh download_and_convert_voc2012.sh

具体执行步骤:

下载并解压VOC2012数据集

移除colormap

在数据集中创建TFRecord文件

下载预训练模型

官方提供了多种模型,可以根据自己的实际需求下载安装。

使用PASCAL VOC2012数据集训练

文件结构:

tensorflow deeplab文件夹:

训练:

cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research

填写相关路径,执行训练

python deeplab/train.py 
    --logtostderr 
    --training_number_of_steps=30000 
    --train_split="train" 
    --model_variant="xception_65" 
    --atrous_rates=6 
    --atrous_rates=12 
    --atrous_rates=18 
    --output_stride=16 
    --decoder_output_stride=4 
    --train_crop_size=513 
    --train_crop_size=513 
    --train_batch_size=1 
    --dataset="pascal_voc_seg" 
    --tf_initial_checkpoint=${PATH_TO_INITIAL_CHECKPOINT} 
    --train_logdir=${PATH_TO_TRAIN_DIR} 
    --dataset_dir=${PATH_TO_DATASET}

PATH_TO_INITIAL_CHECKPOINT:初始checkpoint文件路径(迁移学习)
PATH_TO_TRAIN_DIR:训练模型保存路径
PATH_TO_DATASET:数据集路径

需要注意的问题:

当GPU显存不够,使用迁移学习方式进行训练并减少学习率大小,设置”fine_tune_batch_norm=False“

当设置”output_stride=8“,”atrous_rates“取值区间应由[6,12,18]改为[12,24,36]。

当不想使用解码器结构,需要注释掉”decoder_output_stride“。

验证
cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research
python deeplab/eval.py 
    --logtostderr 
    --eval_split="val" 
    --model_variant="xception_65" 
    --atrous_rates=6 
    --atrous_rates=12 
    --atrous_rates=18 
    --output_stride=16 
    --decoder_output_stride=4 
    --eval_crop_size=513 
    --eval_crop_size=513 
    --dataset="pascal_voc_seg" 
    --checkpoint_dir=${PATH_TO_CHECKPOINT} 
    --eval_logdir=${PATH_TO_EVAL_DIR} 
    --dataset_dir=${PATH_TO_DATASET}

PATH_TO_CHECKPOINT:训练阶段checkpoint文件路径
PATH_TO_EVAL_DIR:评估模型保存路径
PATH_TO_DATASET:数据集路径

可视化模型输出
cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research
python deeplab/vis.py 
    --logtostderr 
    --vis_split="val" 
    --model_variant="xception_65" 
    --atrous_rates=6 
    --atrous_rates=12 
    --atrous_rates=18 
    --output_stride=16 
    --decoder_output_stride=4 
    --vis_crop_size=513 
    --vis_crop_size=513 
    --dataset="pascal_voc_seg" 
    --checkpoint_dir=${PATH_TO_CHECKPOINT} 
    --vis_logdir=${PATH_TO_VIS_DIR} 
    --dataset_dir=${PATH_TO_DATASET}

PATH_TO_CHECKPOINT:训练阶段checkpoint文件路径
PATH_TO_VIS_DIR:评估模型保存路径
PATH_TO_DATASET:数据集路径
需要注意的问题:
当需要保存分割结果时,需要设置”also_save_raw_predictions = True“

Tensorboard
tensorboard --logdir=${PATH_TO_LOG_DIRECTORY}

将同时显示”train“,”eval“,”vis“结果,如需要多带带显示一类,可以指定显示类别,如:

tensorboard --logdir train/

对于voc2012这样的数据集,Tensorboard显示数据可能需要几分钟的时间。

模型导出
cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research
python deeplab/export_model.py 
    --logtostderr 
    --checkpoint_path="${PATH_TO_CHECKPOINT}" 
    --export_path="${PATH_TO_EXPORT_PD}" 
    --model_variant="xception_65" 
    --atrous_rates=6 
    --atrous_rates=12 
    --atrous_rates=18 
    --output_stride=16 
    --decoder_output_stride=4 
    --num_classes=21 
    --crop_size=513 
    --crop_size=513 
    --inference_scales=1.0

PATH_TO_CHECKPOINT:checkpoint文件路径
PATH_TO_EXPORT_PD:导出PD文件路径(加后缀.pd)

案例
cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research/deeplab
sh local_test.sh

Google Colab在线测试地址,可选择预训练模型,测试分割照片来查看模型输出结果。

总结

基于深度学习的语义分割与传统基于随机森林的方法相比有了很大的进步,虽然目前基于深度学习的方法有多种思路,不过基本都是基于全卷积(FCN)衍变而来。FCN将网络全连接层使用卷积替代,因此可以接受任意大小的输入并且针对下采样存在位置信息丢失等问题,采用转置卷积用于恢复图片尺寸,方便后续进行逐像素预测。
DeepLab模型为了改善分割效果,使用atrous卷积(空洞卷积),ASPP,全连接条件随机场等技术。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20502.html

相关文章

  • 语义分割浅析

    摘要:是针对语义分割任务提出的模型,主要使用深度卷积网络条件随机场,空洞卷积做像素级预测。在语义分割中存在两个主要问题下采样带来的分辨率下降,细节信息丢失平移不变性,限制了定位精度针对以上问题,采用空洞卷积扩大感受野,获取更多的上下文信息。 showImg(https://segmentfault.com/img/bVbrls5?w=2040&h=1016); 背景 对图像而言,常见的任务是...

    RaoMeng 评论0 收藏0
  • 语义分割浅析

    摘要:是针对语义分割任务提出的模型,主要使用深度卷积网络条件随机场,空洞卷积做像素级预测。在语义分割中存在两个主要问题下采样带来的分辨率下降,细节信息丢失平移不变性,限制了定位精度针对以上问题,采用空洞卷积扩大感受野,获取更多的上下文信息。 showImg(https://segmentfault.com/img/bVbrls5?w=2040&h=1016); 背景 对图像而言,常见的任务是...

    CHENGKANG 评论0 收藏0
  • 语义分割浅析

    摘要:是针对语义分割任务提出的模型,主要使用深度卷积网络条件随机场,空洞卷积做像素级预测。在语义分割中存在两个主要问题下采样带来的分辨率下降,细节信息丢失平移不变性,限制了定位精度针对以上问题,采用空洞卷积扩大感受野,获取更多的上下文信息。 showImg(https://segmentfault.com/img/bVbrls5?w=2040&h=1016); 背景 对图像而言,常见的任务是...

    daydream 评论0 收藏0
  • 使用DeepLab进行语义分割

    摘要:介绍是谷歌使用基于开发的语义分割模型,至今已更新个版本。最新版本是,在此模型中进一步将深度可分离卷积应用到孔空间金字塔池化和解码器模块,从而形成更快,更强大的语义分割编码器解码器网络。 介绍 showImg(https://segmentfault.com/img/bVbnw9d?w=1860&h=398); DeepLab是谷歌使用tensorflow基于CNN开发的语义分割模型,至...

    lavnFan 评论0 收藏0
  • 使用DeepLab进行语义分割

    摘要:介绍是谷歌使用基于开发的语义分割模型,至今已更新个版本。最新版本是,在此模型中进一步将深度可分离卷积应用到孔空间金字塔池化和解码器模块,从而形成更快,更强大的语义分割编码器解码器网络。 介绍 showImg(https://segmentfault.com/img/bVbnw9d?w=1860&h=398); DeepLab是谷歌使用tensorflow基于CNN开发的语义分割模型,至...

    clasnake 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<