目標檢測筆記二: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
- 附各種依賴公開數據和模型的下載鏈接: https://pan.baidu.com/s/1c23vV5A 密碼: 7877
- 想了解具體定位演算法的原理和差異可以參考:博客鏈接,知乎鏈接
目錄:
- 環境安裝(ubuntu與window7)
- 數據預處理
- 修改配置
- 開始訓練
- 測試模型
一.環境安裝:
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在https://github.com/google/protobuf/releases/download/v3.4.0/protoc-3.4.0-win32.zip下載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
配置文件分成五個部分,
- model模型的框架 meta-architecture, feature extractor…
- train_config,定義 optimizer (Momentum, Adam, Adagrad…), fine-tune model
- eval_config,定義valuation估值指標
- train_input_config,定義作為訓練數據集與標籤映射路徑
- 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下即可看到具體的識別結果了。
六:訓練自己定義的數據
https://github.com/luyishisi/tensorflow/tree/master/4.Object_Detection
相關鏈接:
- 自建的tensorflow有趣小項目開源網址:https://github.com/luyishisi/tensorflow,持續更新小項目歡迎star
- TensorFlow model 官方開源網址:https://github.com/tensorflow/models/tree/master/object_detection
- 附各種依賴公開數據和模型的下載鏈接: https://pan.baidu.com/s/1c23vV5A 密碼: 7877
- 想了解具體定位演算法的原理和差異可以參考:博客鏈接,知乎鏈接
原創文章,轉載請註明: 轉載自URl-team
推薦閱讀:
※【簡評】FaceBoxes
※感覺靈感被掏空?你需要這 9 篇論文來補一補 | PaperDaily #05
※YOLO2
※R-CNN &Fast RCNN & Faster RCNN
TAG:目标检测 | 深度学习DeepLearning | TensorFlow |