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代。测试效果不是很好,如下图:

posted @ 2020-01-03 14:44  GC_AIDM  阅读(4675)  评论(0编辑  收藏  举报