1. 程式人生 > >用自己的資料集訓練Mask-RCNN實現過程中的坑

用自己的資料集訓練Mask-RCNN實現過程中的坑

本文僅僅是自己實現過程的筆記記錄,僅僅用來交流的。

在網上大量蒐集資料後,實現Mask-RCNN,但是過程中還是出現了很多很多的問題,所以將過程記錄如下,方便日後學習。

一、實驗前準備

1. COCO資料集

COCO的 全稱是Common Objects in COntext,是微軟團隊提供的一個可以用來進行影象識別的資料集。MS COCO資料集中的影象分為訓練、驗證和測試集。

COCO資料集現在有3種標註型別:object instances(目標例項), object keypoints(目標上的關鍵點), and image captions(看圖說話),使用JSON檔案儲存。

2. 環境搭建

安裝要求按照必要的環境

Python 3.6,TensorFlow 1.8-gpu,Keras 2.1.6(這些版本是我實驗中的版本)和其他常見軟體包requirements.txt。

二、製作資料集

這裡我們需要利用labelme來生成json檔案以及yaml檔案等。

1. 安裝labelme

win10+python3

在cmd中使用pip安裝,

pip install pillow

pip install pyqt5

pip install labelme

安裝成功之後,在python安裝目錄下Scripts目錄下可以找到labelme,如下圖所示:

2. 製作資料集

雙擊labelme.exe可以開啟繪製mask的介面,然後通過開啟圖片可以自己繪製,但需要注意的是如果一張圖片中有很多應該標記相同標籤的掩碼,那麼標籤命名為a1,a2……以此類推。

這時需要將json檔案裝成dataset

在cmd中執行

需要呼叫的就是labelme_json_to_dataset.exe,後面加上json檔案儲存的路徑,如上圖我的路徑在桌面。

執行之後,可以看到在json路徑下多出了一個資料夾,裡面內容如下圖所示:

三、準備訓練

Mask-RCNN中Mask_RCNN/samples/shapes/train_shapes.ipynb提供瞭如何使用自己的資料集來訓練,所以我們將主要利用這個檔案來訓練自己的資料集,但需要更改一部分程式碼。我將train_shapes.ipynb拷貝下來,放置在Mask-RCNN根目錄。我把程式碼放在

https://download.csdn.net/download/yql_617540298/10546011,如有需要請下載。

如何使用伺服器的gpu在本機上開啟ipython過程可以參考之前的博文,地址:

開始執行

(1)error1

第172行,這是需要呼叫os裡的listdir(),更改程式碼:

imglist = os.listdir(img_floder)

(2)error2

from PIL import Image

(3)error3

這是由於我的圖片的尺寸不一樣大小,而我在程式碼中將圖片尺寸設定為640*480,所以需要將圖片的尺寸統一處理一下,使用python resize()很快可以處理完成。

(4)error4

這是由於缺少這個依賴,所以解決方案是import yaml。

(5)error5

這又是由於python2和python3的問題,將model.py中re.fullmatch()改為re.match(),重新執行,發現可以訓練了。

但是執行了一段時間後,發現又報錯了。

(6)error6

這是由於我計算錯了,NUM_CLASSES = 1 + 3 # background + 3 shapes這是原始程式碼,而我這裡假設有4類,那麼就是需要寫成NUM_CLASSES = 1 + 4。

改過之後,發現可以正常訓練了。

(7)如果是python2可能出現的問題

如果需要使用python2訓練,那麼在python3上可以建立一個虛擬環境,或是直接使用python2的環境訓練,

如果是python2,出現了錯誤提示util.py中import urllib.request沒有request:

pip install request,但仍舊報錯,發現是因為python版本的問題,更改程式碼from urllib2 import urlopen。