1. 程式人生 > >Tensoflow-程式碼實戰篇--Deeplab-V3+程式碼復現

Tensoflow-程式碼實戰篇--Deeplab-V3+程式碼復現

一、參考資料:

二、準備工作:

環境:

環境: anaconda3 + python3 + tensorflow-gpu1.8 機器:1 塊 GTX1070(8G)

git程式碼:

git clone https://github.com/tensorflow/models 程式碼一共有400+M,可以自己直接去上面給的官方githup裡面下載;

資料集:

1、資料集下載:先從Cityscapes website上下載資料集。這需要註冊賬號(最好用帶edu的郵箱註冊).下載資料集 leftImg8bit_trainvaltest.zip (11GB)和對應的標註集 gtFine_trainvaltest.zip (241MB)。 2、資料集工作目錄:

這裡是我的本地資料以及資料處理程式碼存放目錄;cityscapesscripts 是下載的資料集處理程式碼,詳細下步; gtfine和leftimagbbit是剛剛下載的資料解壓得到;tfrecord是TensorFlow講資料集轉換得到的格式,詳細見下下步; 3、克隆cityscapesscripts 的指令碼程式碼:

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

根據本地所設地址,對程式碼進行微調: 修改/home/jerry/dataset/cityscapes/cityscapesscripts/preparation/createTrainIdLabelImgs.py

要保證能夠利用該資料生成lable。 修改後如下: 在這裡插入圖片描述

4、生成CityScapes的TFRecords (1)在上面下載的程式碼裡,我的本地儲存目錄/home/jerry/Deeplab/research/deeplab/datasets/convert_cityscapes.sh找到並修改convert_cityscapes.sh檔案。將其中的CITYSCAPES_ROOT設定到對應的cityscapes主目錄: 在這裡插入圖片描述 (2)執行生成指令碼

sh convert_cityscapes.sh

在這裡插入圖片描述 結果儲存在tfrecord中,見我們第二步的工作目錄。

3、訓練

1、下載預訓練模型

tar -zxvf deeplabv3_cityscapes_train_2018_02_06.tar.gz

我的本地儲存目錄:/home/jerry/Deeplab/research/deeplab/backbone/deeplabv3_cityscapes_train/model.ckpt.index

2、訓練指令:

官方給出的指令格式:

python deeplab/train.py \
    --logtostderr \
    --training_number_of_steps=90000 \
    --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=769 \
    --train_crop_size=769 \
    --train_batch_size=1 \
    --dataset="cityscapes" \
    --tf_initial_checkpoint=${PATH_TO_INITIAL_CHECKPOINT} \
    --train_logdir=${PATH_TO_TRAIN_DIR} \
    --dataset_dir=${PATH_TO_DATASET}

實際訓練所用程式碼:

python "${WORK_DIR}"/train.py \
  --logtostderr \
  --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 \
  --training_number_of_steps=1000000 \
  --fine_tune_batch_norm=False \
  --tf_initial_checkpoint=/home/jerry/Deeplab/research/deeplab/backbone/deeplabv3_cityscapes_train/model.ckpt.index \
  --train_logdir="/home/jerry/Deeplab/research/deeplab/exp/train_on_train_set/train/" \
  --dataset_dir="/home/jerry/dataset/cityscapes/tfrecord"

引數分析:

  • training_number_of_steps: 訓練迭代次數,這裡只是驗證,故設定較小為1000
  • train_crop_size:訓練圖片的裁剪大小,因為我的GPU只有8G,故我將這個設定為513了
  • train_batch_size: 訓練的batchsize,也是因為硬體條件,故保持1
  • fine_tune_batch_norm=False :是否使用batch_norm,官方建議,如果訓練的batch_size小於12的話,須將該引數設定為False,這個設定很重要,否則的話訓練時會在2000步左右報錯
  • tf_initial_checkpoint:預訓練的初始checkpoint,這裡設定的即是前面下載的/home/jerry/Deeplab/research/deeplab/backbone/deeplabv3_cityscapes_train/model.ckpt.index
  • train_logdir: 儲存訓練權重的目錄,注意在開始的建立工程目錄的時候就建立了,這裡設定為"/home/jerry/Deeplab/research/deeplab/exp/train_on_train_set/train/" \
  • dataset_dir:資料集的地址,前面建立的TFRecords目錄。這裡設定為"/home/jerry/dataset/cityscapes/tfrecord"

訓練心得補充: (1)指令碼訓練:由於感覺在終端裡直接訓練,每次修改引數很煩,所以編了個指令碼,直接在腳本里修改引數,然後直接執行指令碼就可以了。 指令碼如下: 在這裡插入圖片描述 (2)部分修改:第一次訓練時,用了官方提供的與訓練的模型,然後每次訓練終端本地會儲存剛訓練的模型,所以我就想下次我是否可以接著剛剛訓練的模型繼續訓練,看了部分程式碼,然後嘗試修改,終於完成。 很簡單,只需要將 tf_initial_checkpoint 這個引數遮蔽掉,程式就會自動檢索上次訓練儲存的模型,接著訓練。除了修改呼叫引數還需要講train.py修改一點; 在這裡插入圖片描述 ,上述我的訓練指令碼,就是已經修改後的了。

訓練結果: 我程式沒有全跑完,我估計得到很好的結果,得跑90萬次左右3天左右吧。所以就不貼最後的圖了。

4、測試與視覺化

測試和視覺化步驟和上述訓練的步驟基本一致,沒有什麼太大的變化。 貼一下我測試的指令碼吧: 在這裡插入圖片描述

5、希望接下來自己能夠好好了解程式碼吧,這只是吧別人的程式碼跑一下,至於裡面的結構構建還不懂,繼續。