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

 

參考文檔

https://gist.github.com/douglasrizzo/c70e186678f126f1b9005ca83d8bd2ce
https://towardsdatascience.com/how-to-train-your-own-object-detector-with-tensorflows-object-detector-api-bec72ecfe1d9


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM