目標檢測筆記二:Object Detection API 小白實踐指南

簡介:

本文使用公開數據去運行Tensorflow 新推出的 Object Detection API 帶大家實驗 Faster RCNN 的 training,Faster RCNN 是 object detection 中的經典方法, 而 object detection 主要是由 classification 與 localization 所組成,可以參考 cs231n。

網路上已經有一堆原理說明文了,但是純小白要實踐來看看卻總是很不知所措,因此本文偏小白詳細描述如何運作項目,其次過度封裝好的數據,也讓小白想應用的時候無從下手,因此本文完成一個簡單demo簡述如何構建自己的數據集

相關鏈接:

  • 自建的tensorflow有趣小項目開源網址:https://github.com/luyishisi/tensorflow,持續更新小項目歡迎star
  • 附各種依賴公開數據和模型的下載鏈接: pan.baidu.com/s/1c23vV5 密碼: 7877
  • 想了解具體定位演算法的原理和差異可以參考:博客鏈接,知乎鏈接

目錄:

  1. 環境安裝(ubuntu與window7)
  2. 數據預處理
  3. 修改配置
  4. 開始訓練
  5. 測試模型

一.環境安裝:

ubuntu

1:TensorFlow環境二選一:

親測用使用公開數據CPU需要在i5下跑一晚上,GPU只要30分鐘,建議安裝TensorFlow 1.00

pip install tensorflow # For CPUnpip install tensorflow-gpu # For GPUn

2:依賴環境

sudo apt-get install protobuf-compiler python-pil python-lxmlnsudo pip install jupyter,matplotlib,pillow,lxmln

3:務必需要的操作

必須編譯Protobuf庫,在object_detection同級目錄打開終端運行:

protoc object_detection/protos/*.proto --python_out=.n

將object_detection加入到環境變數

打開.bashrc 修改下面PYTHONPATH為你的object_detection的路徑

export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slimn

4:環境監測

在object_detection同級目錄打開終端運行:

python object_detection/builders/model_builder_test.pyn

結果沒有報錯,並且返回若干秒數據,則說明環境搭建成功。

window 7

在window下回麻煩的多

1:打開下載好的tensorflow model文件夾

2:安裝protoc在github.com/google/proto下載protoc-3.4.0-win32.zip。解壓後在bin目錄下有 protoc.exe。我將bin和include兩個文件夾,移到C:Windows目錄下(在path的即可),然後再mdels(或者models-master)文件夾下運行如下命令:

protoc.exe object_detection/protos/*.proto --python_out=.n

沒有報錯即正確

3:安裝tensorflow model 以及slim

在models-master 目錄下運行

python setup.py installn

如果你這時候運行測試命令會報錯:

python object_detection/builders/model_builder_test.pynImportError: No module named netsn

則需要進一步安裝slim,在models-masterslim目錄下也運行

python setup.py installn

4:配置path環境變數,如下:

C:UsersAdministratorDesktopobjmodels-mastermodels-master:C:UsersAdministratorDesktopobjmodels-mastermodels-masterslim;n

5:測試成功

二.數據預處理

Tensorflow對象檢測API必須使用TFRecord的檔案格式,我用的是2007年的數據集,如果你手邊有2012年的--year要改成2012. 詳細內容可參考標準TensorFlow格式,Pascal VOC數據集,我存放一份在百度雲的鏈接。。含預訓練好的模型,和2007年的數據

數據預處理

解壓縮VOCtrainval然後運行create_pascal_tf_record.py來處理成TFRecord。

# From tensorflow/models/object_detectionntar -xvf VOCtrainval_11-May-2007.tarnpython create_pascal_tf_record.py --data_dir=VOCdevkit n --year=VOC2007 --set=train --output_path=pascal_train.recordnpython create_pascal_tf_record.py --data_dir=VOCdevkit n --year=VOC2007 --set=val --output_path=pascal_val.recordn

這個create_pascal_tf_record.py做的事情分為三個部分

  • 將每張圖片注釋參數(圖片的寬度與高度,對象邊界框,類名稱,…等)跟標籤映射(類ID跟類名稱的對應關係)讀出來並塞進tf.train.Example協議緩衝區
  • 將tf.train.Example協議緩衝區序列化為字元串
  • 最後tf.python_io.TFRecordWriter把字元 串寫入TFRecords

三.修改配置

直接從項目中複製一個樣本出來改(object_detection/samples/configs/)我是使用的是 faster_rcnn_resnet101_voc07.config

配置文件分成五個部分,

  1. model模型的框架 meta-architecture, feature extractor…
  2. train_config,定義 optimizer (Momentum, Adam, Adagrad…), fine-tune model
  3. eval_config,定義valuation估值指標
  4. train_input_config,定義作為訓練數據集與標籤映射路徑
  5. eval_input_config,定義作為估值數據集的路徑與標籤映射路徑

主要修改這三部分

1:自定義路徑指定模型位置

fine_tune_checkpoint: 「PATH_TO_BE_CONFIGURED/model.ckpt」

通常在進行訓練時不會從頭開始訓練,大部份會利用別人已經訓練好的參數來微調以減少訓練的時間fine_tune_checkpoint的數值為:你定義的faster_rcnn_resnet101_coco_11_06_2017位置(例如:"object_detection/faster_rcnn_resnet101_coco_11_06_2017/model.ckpt")

2:指定訓練數據的label和record數據文件

label文件 官方已經有提供放在 object_detection/pascal_val.record

train_input_reader: {ntf_record_input_reader { input_path: "PATH_TO_BE_CONFIGURED/pascal_train.record" }nlabel_map_path: "PATH_TO_BE_CONFIGURED/pascal_label_map.pbtxt"}n

3:指定測試數據的label和record數據文件

eval_input_reader: {ntf_record_input_reader { input_path: "PATH_TO_BE_CONFIGURED/pascal_val.record" }nlabel_map_path: "PATH_TO_BE_CONFIGURED/pascal_label_map.pbtxt"n}n

四.啟動訓練

構建標準項目結構,建立demo目錄為主文件夾

  • demo目錄下包含(train和eval,config文件)
  • train目錄下包含(faster_rcnn_resnet101_coco_11_06_2017的解壓後文件)
  • eval是為空的,用於存放之後跑測試的文件

另外我比較喜歡在新建一個dete文件夾,存放上面處理後的record數據文件,和pascal_label_map .pbtxt類別映射表文件

然後開始運行吧!

python object_detection/train.py n --logtostderr n --pipeline_config_path=${定義的Config} n --train_dir=${訓練結果要存放的目錄}n

如果你是按照上訴的標準結構的話則:

python train.py n --logtostderr n --pipeline_config_path="./demo/***.config" n --train_dir="./demo/train/"}n

運行需要較大內存5-8G,訓練時日誌如下

當你的loss到0.5以下,基本就算訓練的比較准了,可以在運行eval來看看你的測試結果。

五.測試模型:

python object_detection/eval.py n --logtostderr n --pipeline_config_path=${定義的Config} n --checkpoint_dir=${訓練模型存放的目錄} n --eval_dir=${測試結果要存放的目錄}n

之後再針對這個demo啟動tensorboard

tensorboard --logdir demon

之後瀏覽器查看127.0.1.1:6006,在image下即可看到具體的識別結果了。

六:訓練自己定義的數據

github.com/luyishisi/te

相關鏈接:

  • 自建的tensorflow有趣小項目開源網址:https://github.com/luyishisi/tensorflow,持續更新小項目歡迎star
  • TensorFlow model 官方開源網址:github.com/tensorflow/m
  • 附各種依賴公開數據和模型的下載鏈接: pan.baidu.com/s/1c23vV5 密碼: 7877
  • 想了解具體定位演算法的原理和差異可以參考:博客鏈接,知乎鏈接

原創文章,轉載請註明: 轉載自URl-team


推薦閱讀:

【簡評】FaceBoxes
感覺靈感被掏空?你需要這 9 篇論文來補一補 | PaperDaily #05
YOLO2
R-CNN &Fast RCNN & Faster RCNN

TAG:目标检测 | 深度学习DeepLearning | TensorFlow |