MaskRCNN環境部署及訓練


MaskRCNN環境部署及訓練自己數據

MaskRCNN是屬於實物分割算法,進行多任務深度學習的算法,能夠完成目標分類、目標檢測、實例分割等多種任務,是一石多鳥的多任務網絡模型的典型代表。接下來簡單描述如何在windows/linux環境中部署和利用MaskRCNN完成自己數據集的訓練。

1、環境

Mask R-CNN是基於Python3,Keras,TensorFlow。

  • Python 3.4+(自行安裝,或安裝Anaconda也可,本文為Python 3.6)
  • Jupyter Notebook
  • TensorFlow>=1.3.0
  • Keras>=2.0.8
  • numpy、scipy、Pillow、cython、matplotlib、scikit-image、opencv-python、h5py、imgaug、IPython[all]

2、MaskRCNN算法部署

  • 源代碼下載

git clone https://github.com/matterport/Mask_RCNN.git

將代碼文件夾命名為入Mask_RCNN

  • 安裝依賴環境

進入Mask_RCNN目錄下,運行指令:

pip3 install –r requirements.txt

注:此步安裝了numpy、scipy、Pillow、cython、matplotlib、scikit-image、tensorflow>=1.3.0、keras>=2.0.8、opencv-python、h5py、imgaug、IPython[all]。在安裝過程中可能會遇到部分包安裝不成功的情況,可以單獨采用pip
install命令單獨安裝。也可能依舊出現同樣的錯誤,比如window環境下安裝shaply的時候容易報錯,OS
Error:找不到指定模塊。解決方法是:到https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely,下載和你的python版本對應的shapely.whl,比如我的是64位,python3.6,下載后接着運行如下命令: 

python -m pip install Shapely-1.6.4.post1-cp36-cp36mwin_amd64.whl

於是Shapely安裝成功。

下載和運行命令:

  1. linux環境下:

git clone https://github.com/matterport/Mask_RCNN/releases

cd cocoapi/PythonAPI

python3 setup.py build_ext --inplace

python3 setup.py build_ext install

  1. window環境下

pip install
git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI

或者登陸網站,下載壓縮包,cocoapi-master.zip,解壓后進入PythonAPI,運行

python setup.py build_ext install

注:必須安裝Visual Studio C++。

  • 安裝jupyter notebook

運行命令:

pip install jupyter

執行jupyter notebooks只需在命令行里輸入:

jupyter notebook

  • 運行demo.ipynb

至此Mask
R-CNN的環境就全部配置好啦,我們可以Mask_RCNN-master/samples/demo.ipynb開始運行。在瀏覽器打開頁面,點擊進入
 samples目錄,點擊demo.ipynp進入代碼運行頁面

選擇Cell菜單,在Cell下拉菜單選擇Run
All,稍等片刻,在該頁面底部或新窗口中會輸出運行結果。

demo.ipynb展示了一個使用MS
COCO預先訓練的模型來分割自己圖像中的對象的例子, 它包括在任意圖像上運行對象檢測和實例分割的代碼,在代碼中,demo分割的圖像隨機來源於Mask_RCNN/images。也可以將demo.ipynb轉化為demo.py進行運行。方式是打開jupyter
notebooks,從Mask_RCNNr/samples/demo.ipynb,在File中選擇Download
as中點擊Python(.py),

后台運行結果:

訓練自己樣本

3.1 制作數據集

  • 安裝labelme及使用

源代碼及其他環境下的安裝可參照:

https://github.com/wkentaro/labelme

在此主要介紹windows下的安裝步驟,linux環境下可參考上述網址內介紹的。

  1. Anaconda的安裝

首先安裝Anaconda,

下載連接為:https://www.anaconda.com/download/#linux。

安裝教程為:https://docs.anaconda.com/anaconda/install/windows。

安裝成功后,打開Anaconda Prompt,然后依次輸入以下命令。

# python3

conda create --name=labelme python=3.6

conda activate labelme

pip install pyqt5

conda install pillow

pip install labelme

以上都成功后,打開Anaconda
Prompt,進入Anaconda根目錄下,輸入labelme,打開labelme。

注意標注時,起點要和終端重合才能進行下一個目標的標注。

  • 對json文件的解析

每張圖片都會生成對應的json文件。接下里就是解析json文件。
以第一個樣本為例,解析json文件時,在命令行輸入以下進行轉化:

在labelme打開的目錄下新建一個json文件,存放所有需要解析的json文件,再建立labelme_json文件夾,存放解析后的文檔。

執行語句如下(對2019_1.json解析):

labelme_json_to_dataset yes/2019_1.json -o labelme_json/2019_1

通過剛剛這個命令,你可以在labelme_json/2019_1子文件夾里找到5個文件,

分別為:img.png/info.yaml/label.png/label_names.txt/label_viz.png。

  • 轉化為8位位圖

將填充后的label.png轉為灰度圖24位位圖轉8位位圖,代碼如下(python)

# -*- coding: utf-8 -*-

from PIL import Image

import numpy as np

import shutil

import os

def img_16to8(src_dir):

dest_dir = r'D:\Anaconda3\labelme-master\cv2_mask' #8位圖存放位置

for child_dir in os.listdir(src_dir):

#new_name = child_dir.split('_')[0] + '.png'

new_name = child_dir + '.png'

old_mask = os.path.join(os.path.join(src_dir, child_dir), 'label.png')

img = Image.open(old_mask)

img = Image.fromarray(np.uint8(np.array(img)))

new_mask = os.path.join(dest_dir, new_name)

img.save(new_mask)

if _name_ == 'main':

#dir = raw_input('please input the operate dir:')

src_dir = r'D:\Anaconda3\labelme-master\labelme_json'

img_16to8(src_dir)

到此數據集就准備好了,建立images文件夾,在images文件夾中建立pic文件夾存放原圖,json文件夾存放圖片的json文件,label_json存放解析json文件產生的文件夾,cv2_mask存放8位圖。

3.2 訓練和測試

模型訓練:

訓練腳本參照下面的附件,在訓練自己的樣本時注意修改其中的訓練樣本地址,初始權重,以及修改類別數等信息。

腳本:

模型測試:

測試腳本參考下面的附件,在測試的時候,引用的是\samples\shapes中的ShapesDataset數據集類,因此根據自己的類別個數修改\samples\shapes中shapes.py中類別個數。

腳本:

目前只標了105張圖,5個類別,訓練了30代。測試效果不是很好,如下圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM