用自己的資料集訓練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根目錄。我把程式碼放在
如何使用伺服器的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。