zoukankan      html  css  js  c++  java
  • 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:Anaconda3labelme-mastercv2_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:Anaconda3labelme-masterlabelme_json'

    img_16to8(src_dir)

    到此数据集就准备好了,建立images文件夹,在images文件夹中建立pic文件夹存放原图,json文件夹存放图片的json文件,label_json存放解析json文件产生的文件夹,cv2_mask存放8位图。

    3.2 训练和测试

    模型训练:

    训练脚本参照下面的附件,在训练自己的样本时注意修改其中的训练样本地址,初始权重,以及修改类别数等信息。

    脚本:

    模型测试:

    测试脚本参考下面的附件,在测试的时候,引用的是samplesshapes中的ShapesDataset数据集类,因此根据自己的类别个数修改samplesshapes中shapes.py中类别个数。

    脚本:

    目前只标了105张图,5个类别,训练了30代。测试效果不是很好,如下图:

  • 相关阅读:
    【iOS
    【iOS】Swift ESTabBarController的使用
    【iOS
    【iOS】图表实现-Charts(二)
    【iOS】图表实现-Charts(一)
    【iOS】图表实现-AAChartKit
    【iOS】图表实现-总述
    【iOS
    【iOS
    整理下开发中常用的第三方库
  • 原文地址:https://www.cnblogs.com/shenggang/p/12144850.html
Copyright © 2011-2022 走看看