使用object detection訓練並識別自己的模型
1.安裝tensorflow(version>=1.4.0)
2.部署tensorflow models
- 在這裡下載
- 解壓並安裝
- 解壓後重命名為models複製到tensorflow/目錄下
- 在linux下
- 進入tensorflow/models/research/目錄,執行protoc object_detection/protos/*.proto --python_out=.
- 在~/.bashrc file.中新增slim和models/research路徑
export PYTHONPATH=$PYTHONPATH:/path/to/slim:/path/to/research
- 在windows下
- 下載
3.訓練資料準備(標記分類的圖片) - 安裝labelImg 用來手動標註圖片 ,圖片需要是png或者jpg格式 - 標註資訊會被儲存為xml檔案,使用 這個指令碼 將所有xml檔案轉換為一個csv檔案(xml檔案路徑識別在29行,根據情況自己修改) - 把生成的csv檔案分成訓練集和測試集
4.生成TFRecord檔案 - 使用 這個指令碼 將兩個csv檔案生成出兩個TFRecord檔案(訓練自己的模型,必須使用TFRecord格式檔案。圖片路徑識別在86行,根據情況自己修改)
5.建立label map檔案 id需要從1開始,class-N便是自己需要識別的物體類別名,檔案字尾為.pbtxt item{ id:1 name: 'class-1' } item{ id:2 name: 'class-2' }
6.下載模型並配置檔案
- 下載一個模型(檔案字尾.tar.gz)
- 修改對應的訓練
7. 訓練模型 - 進入tensorflow/models/research/目錄,執行 python object_detection/train.py --logtostderr --pipeline_config_path=${PATH_TO_YOUR_PIPELINE_CONFIG} //第六步中修改的pipline配置檔案路徑// --train_dir=${PATH_TO_TRAIN_DIR} //生成的模型儲存路徑//
8.匯出模型 - 在第7步中,--train_dir指向的路徑中會生成一系列訓練中自動儲存的checkpoint,一個checkpoint由三個檔案組成,字尾分別是.data-00000-of-00001 .index和.meta,任然在第7步的路徑中,執行 python object_detection/export_inference_graph.py --input_type image_tensor --pipeline_config_path ${PIPELINE_CONFIG_PATH} //第六步中修改的pipline配置檔案路徑// --trained_checkpoint_prefix ${TRAIN_PATH} //上述的一個checkpoint,例如model.ckpt-112254// --output_directory ${OUTPUT_PATH} //輸出模型檔案的路徑// - 目前直接使用export_infernce_graph.py會報錯,解決方法是將object_detection/目錄下的export.py檔案中第71行的 rewrite_options = rewriter_config_pb2.RewriterConfig(layout_optimizer=rewriter_config_pb2.RewriterConfig.ON) 改為 rewrite_options = rewriter_config_pb2.RewriterConfig()
9.使用新模型識別圖片 - 在jupyter notebook中開啟object_detection/路徑下的object_detection_tutorial.ipynb檔案 - 修改第四步程式碼中的PATH_TO_CKPT,指向第8步匯出模型路徑中的frozen_inference_graph.pb檔案 - 修改第四步程式碼中的PATH_TO_LABELS,指向第5步建立的pbtxt檔案路徑 - 修改第四步程式碼中的NUM_CLASSES為模型實際包含的類別數 - 註釋掉第五步所有程式碼 - 修改第九步程式碼中的PATH_TO_TEST_IMAGES_DIR, 指向待識別圖片資料夾路徑 - 修改第九步程式碼中TEST_IMAGE_PATHS, 將檔名和副檔名修改為實際圖片格式,如圖片為1.bmp、2.bmp... 則對應改為'{}.bmp',同時修改i值範圍以覆蓋所有待檢測圖片
參考文件