天天看點

(超詳細很完整)tensorflow上實作deeplabv3+clone models檔案測試model_test.pyCityscapes Dataset準備生成資料集的tfrecord訓練模型驗證模型效果檢視分割結果DONE ?

UPDATE:如果想對自己滴資料進行訓練,參見這一篇《(超詳細很完整)tensorflow下利用deeplabv3+對自己的資料進行訓練》,不過得先完成本文滴配置~

最近在做語義分割,于是實作

deeplabv3+

?

我的環境:

ubuntu 16.04
anaconda3
tensorflow-gpu 1.11.0
           

文章目錄

  • clone models檔案
  • 測試model_test.py
  • Cityscapes Dataset準備
  • 生成資料集的tfrecord
  • 訓練模型
  • 驗證模型效果
  • 檢視分割結果
  • ==**DONE ;)**==

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/

下,修改以下代碼為自己的路徑:

生成資料集的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

下:

(超詳細很完整)tensorflow上實作deeplabv3+clone models檔案測試model_test.pyCityscapes Dataset準備生成資料集的tfrecord訓練模型驗證模型效果檢視分割結果DONE ?

訓練模型

首先下載下傳預訓練權重

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
...
           

輸出的對比結果:

(超詳細很完整)tensorflow上實作deeplabv3+clone models檔案測試model_test.pyCityscapes Dataset準備生成資料集的tfrecord訓練模型驗證模型效果檢視分割結果DONE ?
(超詳細很完整)tensorflow上實作deeplabv3+clone models檔案測試model_test.pyCityscapes Dataset準備生成資料集的tfrecord訓練模型驗證模型效果檢視分割結果DONE ?

DONE ?

繼續閱讀