(超详细很完整)tensorflow上实现deeplabv3+

UPDATE:如果想对自己滴数据进行训练,参见这一篇《(超详细很完整)tensorflow下利用deeplabv3+对自己的数据进行训练》不过得先完成本文滴配置~


最近在做语义分割,于是实现deeplabv3+?

我的环境:

ubuntu 16.04
anaconda3
tensorflow-gpu 1.11.0


clone models文件

首先clone官方提供的tensorflow/models文件。

git clone https://github.com/tensorflow/models.git

如果嫌弃下载慢,可以参看我的另外一篇blog,介绍了如何实现下载速度质的飞跃。

对于这里选择clone不同branch可能会导致的问题,参见Issue #6567。问题焦点在于master branch可能会出现Eval.py不出结果,切换r1.12.0 branch可能有用。


测试model_test.py

测试一下环境配置是否成功。

添加依赖库到PYTHONPATH,在目录/home/user/models/research/下:

# From /home/user/models/research/
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
source ~/.bashrc

调用model_test.py测试:

# From /home/user/models/research/
python deeplab/model_test.py

Cityscapes Dataset准备

实现过程使用Cityscapes Dataset作为数据集。

从www.cityscapes-dataset.com上下载Cityscapes Dataset——数据集leftImg8bit_trainvaltest.zip (11GB)和对应的标注集gtFine_trainvaltest.zip (241MB)。下载完成后解压到目录/home/user/data/cityscapesScripts/(路径可自己选择)。

之后在/home/user/data/cityscapesScripts/下clone Cityscapes Dataset的脚本代码:

git clone https://github.com/mcordts/cityscapesScripts.git

完成clone之后的目录结构:

/home/user/data/cityscapesScripts

  • cityscapesScripts
  • leftImg8bit
  • gtFine
  • tfrecord

将clone的脚本代码里面的createTrainIdLabelImgs.py复制一份到目录/home/user/data/cityscapesScripts/下,修改以下代码为自己的路径:

cityscapesPath = '/home/user/data/cityscapesScripts'

生成数据集的tfrecord

将数据集转换成tensorflow训练需要的tfrecord格式。

在目录models/research/deeplab/datasets中,修改convert_cityscapes.sh文件:

CITYSCAPES_ROOT="/home/user/data/cityscapesScripts"
...
python "${CITYSCAPES_ROOT}/createTrainIdLabelImgs.py"

之后运行convert_cityscapes.sh文件,生成tfrecord

sh convert_cityscapes.sh

生成的tfrecord在目录/home/user/data/cityscapesScripts/tfrecord下:
在这里插入图片描述


训练模型

首先下载预训练权重xception_cityscapes_trainfine:http://download.tensorflow.org/models/deeplabv3_cityscapes_train_2018_02_06.tar.gz (更多预训练权重请参见 https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md )
在目录models/research/deeplab//backbone/deeplabv3_cityscapes_train下解压预训练权重。

然后编辑训练指令:

python deeplab/train.py \
    --logtostderr \
    --training_number_of_steps=1000 \
    --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=2 \
    --dataset="cityscapes" \
    --tf_initial_checkpoint='/home/user/models/research/deeplab/backbone/deeplabv3_cityscapes_train/model.ckpt' \
    --train_logdir='/home/user/models/research/deeplab/exp/train_on_train_set/train' \
    --dataset_dir='/home/user/data/cityscapesScripts/tfrecord'

在目录/home/user/models/research下运行以上指令。

note:在这一步有小伙伴 @methy010 提出 “list index out of range” 的报错解决方案:

关于“list index out of range”的问题及解答:在python deeplab/train.py 下面参数设置中,train_crop_size 那一句应改为:–train_crop_size=“769,769”, 或者按博主的写法应改为–train_crop_size[0]=513, --train_crop_size[1]=513, 就不会出现list index out of range的问题了。第一种是按照github上README改的,亲测有效,第二种我没有自己run,只是推测博主漏写了[0][1]. 我是按照博主的教程一步步运行,发现问题并解决了的,在此提出希望可以帮助到别人。最后感谢博主这篇超详细的教程~比心

我当时的版本是没有这个问题的,所以可能就是我这篇文章开头说的不同 branch 的影响,后面的小伙伴如果因为各种因素而出现这个问题,可以参照这种解决方案尝试一下~

Finished training:

INFO:tensorflow:global step 970: loss = 0.4412 (0.504 sec/step)
INFO:tensorflow:global step 980: loss = 0.4016 (0.464 sec/step)
INFO:tensorflow:global step 990: loss = 0.6123 (0.520 sec/step)
INFO:tensorflow:global step 1000: loss = 0.3552 (0.492 sec/step)
INFO:tensorflow:Stopping Training.
INFO:tensorflow:Finished training! Saving model to disk.

验证模型效果

编辑验证指令:

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=1025 \
    --eval_crop_size=2049 \
    --dataset="cityscapes" \
    --checkpoint_dir='/home/user/models/research/deeplab/exp/train_on_train_set/train' \
    --eval_logdir='/home/user/models/research/deeplab/exp/train_on_train_set/eval' \
    --dataset_dir='/home/user/data/cityscapesScripts/tfrecord'

在目录/home/user/models/research下运行以上指令。

Finished evaluation:

INFO:tensorflow:Starting evaluation at 1995-04-01-08:49:56
INFO:tensorflow:Evaluation [50/500]
INFO:tensorflow:Evaluation [100/500]
INFO:tensorflow:Evaluation [150/500]
INFO:tensorflow:Evaluation [200/500]
INFO:tensorflow:Evaluation [250/500]
INFO:tensorflow:Evaluation [300/500]
INFO:tensorflow:Evaluation [350/500]
INFO:tensorflow:Evaluation [400/500]
INFO:tensorflow:Evaluation [450/500]
INFO:tensorflow:Evaluation [500/500]
INFO:tensorflow:Finished evaluation at 2019-04-01-08:52:12
miou_1.0[0.725369751]

如果之后显示INFO:tensorflow:Waiting for new checkpoint at /home/user/models/research/deeplab/exp/train_on_train_set/train则直接跳出不用理睬。


查看分割结果

编辑可视化指令:

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=1025 \
    --vis_crop_size=2049 \
    --dataset="cityscapes" \
    --colormap_type="cityscapes" \
    --checkpoint_dir='/home/user/models/research/deeplab/exp/train_on_train_set/train' \
    --vis_logdir='/home/user/models/research/deeplab/exp/train_on_train_set/vis' \
    --dataset_dir='/home/user/data/cityscapesScripts/tfrecord'

在目录/home/user/models/research下运行以上指令。

开始可视化:

INFO:tensorflow:Restoring parameters from /home/user/models/research/deeplab/exp/train_on_train_set/train/model.ckpt-1000
INFO:tensorflow:Visualizing batch 1 / 500
INFO:tensorflow:Visualizing batch 2 / 500
INFO:tensorflow:Visualizing batch 3 / 500
INFO:tensorflow:Visualizing batch 4 / 500
...

输出的对比结果:
在这里插入图片描述
在这里插入图片描述


DONE ?

评论 124
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值