程式設計

TensorFlow Object Detection API 自行訓練模型教學,辨識特定物件

PASCAL VOC 2012 資料集

首先從 PASCAL VOC 2012 的網站上下載該資料集,整個資料集的大小大約是 2GB,下載時要稍微等一下:

cd models/research/

# 下載 PASCAL VOC 2012 資料集(2GB)
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar

使用 create_pascal_tf_record.py 將 PASCAL VOC 2012 資料轉為 TFRecord 格式:

# 將 PASCAL VOC 2012 資料轉為 TFRecord 格式(training set)
python object_detection/dataset_tools/create_pascal_tf_record.py 
  --data_dir=VOCdevkit 
  --year=VOC2012 
  --set=train 
  --label_map_path=object_detection/data/pascal_label_map.pbtxt 
  --output_path=object_detection/data/pascal_train.record

# 將 PASCAL VOC 2012 資料轉為 TFRecord 格式(validation set)
python object_detection/dataset_tools/create_pascal_tf_record.py 
  --data_dir=VOCdevkit 
  --year=VOC2012 
  --set=val 
  --label_map_path=object_detection/data/pascal_label_map.pbtxt 
  --output_path=object_detection/data/pascal_val.record

這裡同樣以 Faster RCNN + Resnet101 + COCO 的模型作為預訓練模型,下載後放進 object_detection/data/ 目錄:

# Faster RCNN + Resnet101 以 COCO 資料集訓練好的模型
wget http://storage.googleapis.com/download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gz

# 將模型參數放入 object_detection/data/
tar zxvf faster_rcnn_resnet101_coco_11_06_2017.tar.gz
cp faster_rcnn_resnet101_coco_11_06_2017/model.ckpt.* object_detection/data/

接下來要建立一個 .config 設定檔,這部分可參考 faster_rcnn_resnet101_voc07.config 這個內建的範例,將包含 PATH_TO_BE_CONFIGURED 的路徑修改一下,其餘的設定可以不需要更改,編輯完成後同樣儲存於 models/research/object_detection/data/ 之中,由於我們這裡使用的資料是 2012 年的,所以我把新的檔名變更為 faster_rcnn_resnet101_voc12.config

接著就可以開始訓練模型,訓練模型的方式跟之前相同:

# 設定檔路徑
PIPELINE_CONFIG="object_detection/data/faster_rcnn_resnet101_voc12.config"

# 訓練結果放置路徑
MY_MODEL_DIR="my_voc_model"

# 使用第一張 GPU 卡進行訓練
CUDA_VISIBLE_DEVICES=0 python object_detection/train.py 
  --logtostderr 
  --pipeline_config_path=${PIPELINE_CONFIG} 
  --train_dir=${MY_MODEL_DIR}/train

# 使用第二張 GPU 卡進行驗證
CUDA_VISIBLE_DEVICES=1 python object_detection/eval.py 
  --logtostderr 
  --pipeline_config_path=${PIPELINE_CONFIG} 
  --checkpoint_dir=${MY_MODEL_DIR}/train 
  --eval_dir=${MY_MODEL_DIR}/eval

# 啟動 TensorBoard
tensorboard --port=16006 --logdir=${MY_MODEL_DIR}

在訓練的過程中,同樣可以使用 TensorBoard 監看模型的狀況:

TensorBoard 畫面

驗證模型

模型訓練好之後,依照同樣的方式匯出模型:

# 設定檢查點檔案路徑
CHECKPOINT_NUMBER=800000
CKPT_PREFIX=${MY_MODEL_DIR}/train/model.ckpt-${CHECKPOINT_NUMBER}

# 將訓練好的模型匯出
python object_detection/export_inference_graph.py 
  --input_type image_tensor 
  --pipeline_config_path ${PIPELINE_CONFIG} 
  --trained_checkpoint_prefix ${CKPT_PREFIX} 
  --output_directory my_exported_graphs

並將新模型套用至前一篇教學的程式碼,跑出來的結果會像這樣:

測試結果

測試結果

參考資料:PythonProgramming.netLEARNING BY HACKINGPriya DwivediDat TranJiancheng Li

Page: 1 2

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang

Recent Posts

[DIY] 自製凡士林火種

這裡介紹如何利用簡單的凡士林與...

2 年 ago

[DIY] 自製火影木葉、砂忍者村標誌雕刻木牌

本篇記錄我用路邊撿來的樟木與龍...

2 年 ago

收集龍眼木修剪枝幹用於木頭工藝

最近打算帶著阿玄做一些木工作品...

2 年 ago

[DIY] 樟木手工自製迷你手裏劍(忍者武器)

本篇記錄阿玄第一次使用木工工具...

2 年 ago

[DIY] 龍眼木手工自製木槌

本篇記錄我用自己砍的龍眼木還有...

2 年 ago

[DIY] 樟木手工自製苦無(忍者武器)

本篇記錄我自己用樟木的枝幹,以...

2 年 ago