内容简介:DeepLab是谷歌使用
介绍
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 ,全连接条件随机场等技术。
以上所述就是小编给大家介绍的《使用DeepLab进行语义分割》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 语义分割领域开山之作:Google提出用神经网络搜索实现语义分割
- 语义分割:GSCNN 提高边缘和小目标的分割性能
- 超强语义分割算法!基于语义流的快速而准确的场景解析
- MMSegmentation:标准统一的语义分割框架
- PyTorch语义分割开源库semseg
- 一文带你读懂 SegNet(语义分割)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Types and Programming Languages
Benjamin C. Pierce / The MIT Press / 2002-2-1 / USD 95.00
A type system is a syntactic method for automatically checking the absence of certain erroneous behaviors by classifying program phrases according to the kinds of values they compute. The study of typ......一起来看看 《Types and Programming Languages》 这本书的介绍吧!