本文僅僅是自己實現過程的筆記記錄,僅僅用來交流的。
在網上大量蒐集資料後,實現Mask-RCNN,但是過程中還是出現了很多很多的問題,所以將過程記錄如下,方便日後學習。
一、實驗前準備
1. COCO數據集
COCO的 全稱是Common Objects in COntext,是微軟團隊提供的一個可以用來進行圖像識別的數據集。MS COCO數據集中的圖像分爲訓練、驗證和測試集。
COCO數據集現在有3種標註類型:object instances(目標實例), object keypoints(目標上的關鍵點), and image captions(看圖說話),使用JSON文件存儲。
2. 環境搭建
本文采用github上Mask-RCNN代碼,網址:https://github.com/matterport/Mask_RCNN
安裝要求按照必要的環境
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過程可以參考之前的博文,地址:
https://blog.csdn.net/yql_617540298/article/details/80933242。
開始運行
(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。