部署DeepLab-v3-plus Semantic Segmentation in TensorFlow

DeepLab-v3-plus Semantic Segmentation in TensorFlow

在TensorFlow中的DeepLab-v3-plus语义分割

This repo attempts to reproduce Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation (DeepLabv3+) in TensorFlow for semantic image segmentation on the PASCAL VOC dataset. The implementation is largely based on my DeepLabv3 implementation, which was originally based on DrSleep's DeepLab v2 implemantation and tensorflow models Resnet implementation.

尝试在PASCAL VOC数据集的语义图像分割(DeepLabv3 +)的TensorFlow中,使用Atrous可分卷积来重现用于语义图像分割(DeepLabv3 +)的编码器-解码器。该实现主要基于DeepLabv3实现,它最初基于DrSleep的DeepLab v2以及tensorflow模型Resnet实现。

Tensorflow/model下面的源码 

Note: tensorflow 1.0版本以后models模块已经删除掉了,都整合到examples下面,需要重新下载或者安装低版本的

  • 安装pillow,Numpy,Jupyter,Matplotlib,Tensorflow,tf Slim (which is included in the "tensorflow/models/research/" checkout)
  • 下载源码models-master。
  • 找到models-master/research/deeplab。
  • 把models-master/research/slim拷贝到deeplab文件夹。
  • 把models-master/research/slim/nets拷贝到deeplab文件夹。
  • 测试环境:

Add Libraries to PYTHONPATH

在本地运行时,tensorflow/models/research/目录应该附加到PYTHONPATH中。这可以通过运行以下tensorflow/models/research/来实现:

# From tensorflow/models/research/
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

# [Optional] for panoptic evaluation, you might need panopticapi:
# https://github.com/cocodataset/panopticapi
# Please clone it to a local directory ${PANOPTICAPI_DIR}
touch ${PANOPTICAPI_DIR}/panopticapi/__init__.py
export PYTHONPATH=$PYTHONPATH:${PANOPTICAPI_DIR}/panopticapi

if you are in WINDOES you can use the following command (from the research directory):

SET PYTHONPATH=%cd%:%cd%\slim

if working with editors (like PyCharm) you can add path to PYTHONPATH variable from the software

注意:此命令需要在启动的每个新终端上运行。如果希望避免手动运行,可以将其作为~/结尾的新行添加~/.bashrc 文件。

Testing the Installation

您可以通过运行以下命令来测试是否成功安装了Tensorflow DeepLab:

通过运行model_test.py快速测试:

# From tensorflow/models/research/
python deeplab/model_test.py

在deeplab文件夹:
创建文件夹deeplab/datasets/pascal_voc_seg,在该文件夹下载PASCAL VOC 2012数据集,并产生4个文件夹。然后执行训练、验证、可视化

在PASCAL VOC 2012数据集上快速运行全部代码:

# From tensorflow/models/research/deeplab
sh local_test.sh

说明:执行sh local_test.sh生成的数据与项目路径有关,所以项目路径更改后要删除文件夹deeplab/datasets/pascal_voc_seg,并重新生成。

设置

安装最新版本的TensorFlow (r1.6)并使用Python 3。

  • 我下载的是最新的TensorFlow(r2.0.0)所以在运行过程中可能有些属性会因为有变动而报错(要改的太多了,改爆炸,建议装1.6算了orz)——我之后改成了tensorflow1.15.0+cuda10.0+cudnn7.4.2+python3.7+win10(tensorflow在1.15中GPU和cpu在一起了,可以一起安装gpu需要配置cuda和cudnn需要适配电脑的显卡)
  • 我使用的集成环境是PyCharm 2018,类似集成环境在训练过程中可能会出现一些问题
  • 其中有一些我在这里整理了一下解决方法

 

  • 下载并提取PASCAL VOC training/validation data(2GB),使用--data_dir(直接解压到dataset文件夹内即可)
  • 下载和提取augmented segmentation data (感谢DrSleep)到指定位置,使用--data_dir和指定位置 --label_data_dir (namely, $data_dir/$label_data_dir).(解压到\dataset\VOCdevkit\VOC2012文件夹里面即可)
  • 为了进行推理,在Pascal VOC 2012验证数据集上使用77.31% mloU的训练模型可在这里获得。下载并解压缩到--model_dir.(解压到./model文件夹即可)
  • 对于训练,您需要下载和提取 pre-trained Resnet v2 101 model从slim指定位置 --pre_trained_model(需要按照路径参数创建./ini_checkpoints/resnet_v2_101/目录,然后解压)
  • 其中2和3的数据国内网络可能无法下载

训练

对于训练模型,首先需要将原始数据转换为TensorFlow TFRecord格式。这可以加速训练渗透。

python create_pascal_tf_record.py --data_dir DATA_DIR \
                                  --image_data_dir IMAGE_DATA_DIR \
                                  --label_data_dir LABEL_DATA_DIR 

部署DeepLab-v3-plus Semantic Segmentation in TensorFlow_第1张图片

这会生成dataset/voc_train.record和dataset/voc_val.record。

一旦您为PASCAL VOC的培训和验证数据创建了TFrecord,您就可以按照以下方式开始培训模型:

python train.py --model_dir MODEL_DIR --pre_trained_model PRE_TRAINED_MODEL

这里,--pre_trained_model包含预训练的Resnet模型,而 --model_dir包含训练过的DeepLabv3+检查点。如果--model_dir 包含有效的检查点,则从--model_dir.中的指定检查点训练模型。

你可以看到其他选项与以下命令:

python train.py --help

使用Tensor Board可以将训练过程可视化如下:

tensorboard --logdir MODEL_DIR

评价

要评估模型的执行情况,可以使用以下命令:

python evaluate.py --help

目前通过该实现构建的最佳模型在Pascal VOC 2012验证数据集上达到了77.31% mIoU。

Network Backbone train OS eval OS SC mIOU paper mIOU repo
Resnet101 16 16   78.85% 77.31%

在这里,对上述模型进行了9.5小时左右的训练(使用Tesla V100和r1.6),参数如下:

python train.py --train_epochs 43 --batch_size 15 --weight_decay 2e-4 --model_dir models/ba=15,wd=2e-4,max_iter=30k 

Inference 推理

要应用语义分割到您的图像,可以使用以下命令:

python inference.py --data_dir DATA_DIR --infer_data_list INFER_DATA_LIST --model_dir MODEL_DIR 

The trained model is available here. One can find the detailed explanation of mask such as meaning of color in DrSleep's repo.

这里提供了经过训练的模型。在DrSleep的repo中可以找到关于mask的详细解释,例如颜色的含义。

 

安装这个最后悔的就是没装个tensorflow1.6。。。。。。 o(╥﹏╥)o

本文参考:

https://github.com/rishizek/tensorflow-deeplab-v3-plus

你可能感兴趣的:(tensorflow)