1. 程式人生 > >利用deeplab v3+開原始碼訓練PASCAL VOC 2012資料集

利用deeplab v3+開原始碼訓練PASCAL VOC 2012資料集

deeplab v3+環境配置好之後則可以進行模型的訓練
1、準備PASCAL VOC 2012資料集:可以在ubantu命令列上執行

#From the tensorflow/models/research/deeplab/datasets directory.
  sh download_and_convert_voc2012.sh

下載並把資料集轉換成 TFRecord格式

我已有VOC 2012資料集壓縮包,所以省了下載步驟。因此手動在\research\deeplab\datasets目錄下建立一個名為pascal_voc_seg的資料夾,把壓縮包放進該資料夾裡,再執行 sh download_and_convert_voc2012.sh(程式碼無需改動),執行後會多了下圖紅色方框裡的檔案(在虛擬機器ubantu 16.04執行的程式,一下截圖為虛擬機器共享資料夾裡的截圖):
在這裡插入圖片描述

在這裡插入圖片描述

執行效果圖
至此,可以執行 train.py開始訓練模型

# From 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=256 \          # 當主機記憶體不夠大時會出現記憶體不夠的錯誤,因此可根據情況適當減小數值
    --train_crop_size=256 \
    --train_batch_size=1 \
    --dataset="pascal_voc_seg" \
    --tf_initial_checkpoint='./deeplabv3_pascal_trainval/model.ckpt' \    # 載入權重(路徑用單引號引起來)
    --train_logdir='./PATH_TO_TRAIN_DIR' \  # 儲存訓練的中間結果的路徑,該資料夾為手動建立,如果之前的訓練結果不要想重新訓練,直接清空該資料夾
    --dataset_dir='./deeplab/datasets/pascal_voc_seg/tfrecord'     # 第二步生成的tfrecord的路徑

注意點:(1)上述命令中=後面不能有空格

踩過的坑:PC記憶體太小時會出現以下錯誤,我把 --train_crop_size=513 改為256可以正常訓練:
在這裡插入圖片描述

在這裡插入圖片描述

至此模型訓練完成

執行命令:

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_TRAIN_DIR' \      #上述訓練中間結果儲存路徑
    --eval_logdir='./result_test_output' \  # 結果輸出路徑,該資料夾需手動建立
    --dataset_dir='./deeplab/datasets/pascal_voc_seg/tfrecord'  # 驗證集tfrecord檔案所在路徑

踩過的坑:把–eval_crop_size=513 改為128則會出錯,原因不明,錯誤如下圖所示,不改則不會出錯。
在這裡插入圖片描述

執行成功截圖:
在這裡插入圖片描述

執行命令:

# From 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_TRAIN_DIR' \       #上述訓練中間結果儲存路徑
    --vis_logdir='./vis_output' \      # 視覺化預測結果儲存路徑,手動建立
    --dataset_dir='./deeplab/datasets/pascal_voc_seg/tfrecord'    # 生成的tfrecord資料集所在路徑

執行效果圖:
在這裡插入圖片描述

圖片處理結果:
原圖:
在這裡插入圖片描述

分割圖:
在這裡插入圖片描述