使用Tensorflow object detection訓練maskrcnn,並使用opencv4.0集合c++調用訓練模型

前言:opencv4.0可以直接調用TensorFlow Object Detection API訓練的maskrcnn模型。

我是在Windows上安裝的,首先安裝了cuda9以及cudnn7;然後裝了anaconda3.5,Python3.6.7。
cuda9 百度雲鏈接:https://pan.baidu.com/s/1xauBu0I8OuPLyTqlGWSGcw,密碼:biwv
cuDNN7 百度雲鏈接:https://pan.baidu.com/s/1hfqLpQgTJOxiCD1Rze9peQ,密碼:6zlv
anaconda3.5 百度雲鏈接:https://pan.baidu.com/s/1Zfyp8t_OWHimHC8_uu1jbg ,密碼:q4en

*********************** 上述軟件以及Python安裝教程可自行百度 ***********************

安裝 TensorFlow Object Detection API參考鏈接:https://blog.csdn.net/weixin_42499236/article/details/83823779

一、數據準備

如果你數據的標籤是用labelme手動標註的,那麼訓練過程可以完全按照:https://www.jianshu.com/p/27e4dc070761 來進行。

如果你數據的標籤不是標註的,而是像我這樣(或者可以轉化成我這樣),比如一張原圖裏有五個目標,標籤是五張對應於五個類別的.png格式的二值圖(每張.png圖像內只有一個類別,且目標像素爲1,背景像素爲0;且每個.png圖像以“原圖名_類別名_原圖名”方式命名,參考下圖),那麼我們可以用我寫的代碼直接將數據轉換爲訓練所需的train.record和val.record。代碼鏈接:https://download.csdn.net/download/yu734390853/11457462
原圖:(RGB彩色圖,其中圖片名爲2-11-1)
在這裏插入圖片描述
原圖對應的標籤圖像:(原圖上包含五個類別,因此原圖對應五個標籤圖像二值圖;第一張標籤圖像名爲2-11-1_CTV_2-11-1,其中2-11-1爲原圖像名,CTV表示類別,以此類推)

在這裏插入圖片描述
假設你的訓練集原圖的路徑爲 path_to_train_dir,訓練集對應的圖像標籤路徑爲 path_to_train_png_dir,在終端先後執行如下指令:

python3 pngto_tf_record.py \
    --images_dir=path_to_train_dir \    
    --label_map_path=path_to_label_map.pbtxt \
    --output_path=path_to_train.record

其中,以上所有路徑都支持相對路徑。output_path 爲輸出的 train.record 以及 val.record 的路徑,label_map_path 是所有需要檢測的類名及類標號的配置文件,該文件的後綴名爲 .pbtxt,寫法很簡單,假如你要檢測 ’person’ , ‘car’ ,‘bicycle’ 等類目標,則寫入如下內容:
在這裏插入圖片描述
***************到此,訓練數據準備完畢,進入訓練時間。

二、訓練maskrcnn模型

可完全參考:https://www.jianshu.com/p/27e4dc070761

三、模型轉換

1.將Tensorflow訓練出來的.ckpt模型轉化爲.pb文件,在 TensorFlow models/research/object_detection 目錄下的終端執行:

$ python3 export_inference_graph.py --input_type image_tensor  
  --pipeline_config_path /home/.../training/pipeline.config
  --trained_checkpoint_prefix /home/.../training/model.ckpt-200000
  --output_directory /home/.../training/output_inference_graph

執行上述代碼之後會在 /home/…/training 文件夾內看到新的文件夾 output_inference_graph,裏面存儲着訓練好的最終模型,如直接調用的用於推斷的文件:frozen_inference_graph.pb。其中命令中 model.ckpt-200000 表示訓練 200000 生成的模型,實際執行上述代碼時要修改爲自己訓練多少次後生成的模型。其它路徑和文件(夾)名稱也由自己任意指定。

2.生成.pbtxt文本圖文件,告訴OpenCV如何加載模型權重。在 TensorFlow models/research/object_detection 目錄下的終端執行:

python3  tf_text_graph_mask_rcnn.py --input /path/to/model.pb --config /path/to/example.config --output /path/to/graph.pbtxt

就會在相應目錄下生成graph.pbtxt

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章