1. 程式人生 > >【tensorflow】Object DetectionAPI訓練識別自己的資料集

【tensorflow】Object DetectionAPI訓練識別自己的資料集

#一、資料準備
###1.一個友好的標註工具
各種系統安裝已經再此介紹的很詳細了,linux下可以三行命令解決。

注意:圖片要求是png或者jpg格式

1> . 標註資訊存為xml檔案,使用該指令碼可以將所有的xml檔案轉換為1個csv檔案(自行修改xml路徑)
2> . 把生成的csv檔案分成訓練集和測試集
###2.生成TFRecord檔案
使用該指令碼分別生成train.record 和 test.record.
記得修改其中三處路徑,以及分類標識資料型別(中文有註釋),分兩次執行哦!
#二、環境搭建
###1.tensorflow 版本 >= 1.4.0
具體的安裝,自行百度
###2.部署tensorflow model
1> . 從這裡下載下

整個models,解壓,假設放在了A目錄下;
注意:下文中的A 都表示下載的model檔案的目錄位置
2> . 這一步分linux和window介紹

------------------------------------------------linux開始----------------------------------------------------
進入A/models/research/目錄,右鍵開啟終端,執行
protoc object_detection/protos/*.proto --python_out=.      
新增slim和models/research路徑,相當於環境變數
gedit ~/.bashrc


在該檔案末,新增:
export PYTHONPATH=$PYTHONPATH:/A/models/research/slim:/A/models/research/
更新檔案
source ~/.bashrc

------------------------------------------------linux以上結束----------------------------------------------------


------------------------------------------------window開始-----------------------------------------------------
下載

protoc-3.3.0-win32.zip
解壓後,執行一下protoc.exe檔案
開啟cmd視窗,cd到A/models/research/目錄下(老版本沒有research目錄),執行如下:
protoc object_detection/protos/*.proto --python_out=.
將生成一堆python檔案
然後為python新增預設模組搜尋路徑三種方式
本人選擇的第三種,增加.pth檔案
在site-packages新增一個路徑檔案,如mypkpath.pth,必須以.pth為字尾,寫上你要加入的模組檔案所在的目錄名稱,也就是下面兩行:
A\models\research A\models\research\slim
然後儲存為了.pth檔案,名字隨意選,然後放在Python執行能掃描到的地方,我放在了python下的lib下的site-packages裡,因為python執行一定會經過這裡。

------------------------------------------------window以上結束-----------------------------------------------------

3> . 兩個系統都必須經過這一步
測試安裝,進入到A/models/research/目錄下,執行

python  object_detection/builders/model_builder_test.py

如果發現前方有坑:

Traceback (most recent call last):
  File "object_detection/builders/model_builder_test.py", line 21, in <module>
    from object_detection.builders import model_builder
ImportError: No module named 'object_detection'

說明前邊模組檔案路徑配置沒有成功。
#三、訓練自己的資料
###1.下載模型
模型地址
選擇其中的下載
###2.建立標籤分類的配置檔案(label_map.pbtxt)

item {
  id: 1 # id一定要從1開始編號
  name: 'syjxh'
}

item {
  id: 2
  name: 'dnb'
}

放在一個位置就好
###3.修改對應的pipline配置檔案
找到\object_detection\samples\configs\XXXXXXXXXXX.config檔案,XXXXXXXXXXX需要和你下載的模型一致的配置檔案,複製到\test\data資料夾下,修改一下幾處:

# ====修改 1=====
num_classes:2    # 根據你的目標分類來,我這裡一共標記了6種物件
# ====修改 2=====
# 因為我們是重新訓練模型,所以這裡註釋掉模型檢測點,並將from_detection_checkpoint該為false
# fine_tune_checkpoint: "PATH_TO_BE_CONFIGURED/model.ckpt"  
  from_detection_checkpoint: false
  num_steps: 200000  # 訓練次數
# ====修改 3=====
train_input_reader: {
  tf_record_input_reader {
    # 訓練樣本路徑
    input_path: "A/models/test/data/train.record" 
  }
  # 標籤分類配置檔案路徑
  label_map_path: "A/models/test/label_map.pbtxt"
}

# ====修改 4=====
eval_input_reader: {
  tf_record_input_reader {
    # 驗證樣本路徑
    input_path: "A/models/test/data/eval.record"
  }
   # 標籤分類配置檔案路徑
  label_map_path: "A/models/test/label_map.pbtxt"
  shuffle: false
  num_readers: 1
}

###4.開始訓練啦!!!!
直接使用object_detection\train.py檔案進行訓練即可,引數如下:

--logtostderr
--pipeline_config_path=F:/TensorFlow/models/test/data/ssd_inception_v2_pets.config
--train_dir=F:/TensorFlow/models/test/training

配置好引數後,直接run起來,接下來就是漫長的等待,訓練過程中可以使用eval.py檔案進行驗證。
目前我還沒跑出結果,截個圖給大家瞅瞅先!還在訓練中,估計跑一天。。。

這裡寫圖片描述


繼續補充結果


參考:
部落格1,
部落格2