1. 程式人生 > >使用object detection訓練並識別自己的模型

使用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下       - 下載

protoc-3.3.0-win32.zip(version==3.3,已知3.5版本會報錯)        - 解壓後將protoc.exe放入C:\Windows下       - 在tensorflow/models/research/開啟powershell,執行protoc object_detection/protos/*.proto --python_out=.

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)   - 修改對應的訓練

pipline配置檔案      - 查詢檔案中的PATH_TO_BE_CONFIGURED欄位,並做相應修改       - num_classes 改為你模型中包含類別的數量       - fine_tune_checkpoint 解壓.tar.gz檔案後的路徑 + /model.ckpt       - from_detection_checkpoint:true       - train_input_reader         - input_path 由train.csv生成的record格式訓練資料         - label_map_path 第5步建立的pbtxt檔案路徑       - eval_input_reader         - input_path 由test.csv生成的record格式訓練資料         - label_map_path 第5步建立的pbtxt檔案路徑

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值範圍以覆蓋所有待檢測圖片

參考文件