1. 程式人生 > >Mask Rcnn訓練自己的資料

Mask Rcnn訓練自己的資料

最近在學習官方版的   Mask-Rcnn , 已經能夠訓練 , 下面簡述下使用自己資料集訓練的方法。

經過測試驗證官方版的Mask-Rcnn是可以直接使用COCO資料集進行訓練的,所以本文也是COCO格式的資料集的製作方法。

一,labelme標註資料集

       製作資料集時主要使用labelme工具進行標註,安裝標註方法不再贅述,這裡只介紹博主標註後的結果及命名規則。

       下圖是我拍攝的RGB圖片資料集,

   

       在我們的資料集中共有:box, package ,fruit, column 四類,在畫掩碼過程中如果單張圖片有多個box、fruit…命名規則為box1、box2..fruit1、fruit2..。如下圖所示:

    

    在標註完儲存後會為每張RGB圖生成一個.json的標註檔案,最後得到的所有的標註檔案如下

    

二,labelme標註資料集到COCO資料集的轉化

          這裡首先原諒我想要兩分下載積分的邪惡念頭,我也是積分不夠用才這樣。

          工具特點:在官方版Mask-Rcnn中增加了 掩碼區域面積 ‘area’的依賴檢查,在以前的轉化工具裡是不支援‘area’資料計算的,這裡添加了此功能,完全滿足續訓練需求了。

          使用:下載下來的是一個 labelme2COCO.py檔案, 使用時只需要將該檔案複製到 labelme標註的資料夾下,

      

     然後終端執行命令:

python labelme2COCO.py

     即可得到COCO資料集格式的new.json檔案,如上圖所示。具體內容如下:

在你使用中轉化出來的檔案 ‘categories’中 ‘name’和 ‘supercategory’部分可能會出現名字錯誤的現象,這是分類名,具體需要根據你的標註命名規則修改 程式碼  def data_transfer(self): 函式中 label 的字串截斷,選取方法。

          如果你生成的new.json格式如上,那麼COCO格式的資料集算是製作完成了。

三,官方版Mask-Rcnn訓練

         1,資料集準備

               可以在home目錄下建立資料夾Datatsets, 子目錄再建立 annotations , train ,val 三個資料夾。

         

          其中train和val存放的是訓練集RGB圖和驗證集RGB圖 ,annotations中為使用訓練集和驗證集的標註檔案生成的COCO格式的 .json檔案

       

   2,mask-rcnn訓練

      以configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml 網路訓練示例。

       首先修改 ‘/lib/datasets/dataset_catalog.py’檔案連線到自己的資料集

      

     在檔案中新增以上程式碼,連線到我們的資料集。

     然後修改‘configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml’檔案

      在‘MODEL:’處‘NUM_CLASSES:’ 處為類別數+1 ,這裡因為只有4類,所以數字為5

       NUM_GPUS: 1  只有一個GPU

     

主要修改以上部分 注意“DATASETS:”部分 ,‘labelme_train’和 ‘labelme_val’是和‘/lib/datasets/dataset_catalog.py’檔案中新增部分的 labelme_train’和 ‘labelme_val’對應的這樣才能保證連結訓練我們的資料集。

         ‘WEIGHTS:’部分是一個預訓練模型,可以根據工程說明下載,在該處連線到下載到的預訓練模型。

最後在工程目錄下建立資料夾 out_dir 使用命令

python2 tools/train_net.py --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml OUTPUT_DIR out_dir 

即可訓練,我為了省事將上面命令寫成了train.sh指令碼檔案,真不想每次都要輸入那麼多東西。

訓練結束:

此處只做一下示例,使用了450張圖片做訓練集,迭代次數12000次,訓練輸出檔案在out_dir目錄下,可以檢視。

四,測試

      修改檔案‘/lib/datasets/dummy_datasets.py’將classes 安裝生成的train.json 中categories分類順序改為自己的類別。

classes = [ 'background', 'box', 'fruit', 'column', 'package' ]

     然後即可使用訓練生成 的模型進行測試,博主測試如下

 

示例完畢