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

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

在網上大量蒐集資料後,實現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。

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