matterport/Mask_RCNN安装及使用

该博客介绍了matterport/Mask_RCNN的安装过程,包括解决imgaug安装问题的方法,并详细阐述了如何在MS COCO数据集上进行训练,以及训练自定义数据集的步骤。此外,还探讨了模型的工作流程,提供了多个notebooks用于数据和模型的可视化,并讨论了与论文中的不同之处。
摘要由CSDN通过智能技术生成

使用Anaconda安装,由于conda install出现一些问题,所以依赖项都是用pip安装
在安装imgaug时遇到了问题,解决办法是手动安装shapely,参考https://blog.csdn.net/w15797673137/article/details/90604062
其余部分均按照readme中教程执行,没有遇到问题

如果tensorflow安装成功但是在spyder中打不开,原因可能是spyder不是安装在该虚拟环境中,此时在虚拟环境conda install spyder之后再打开即可

使用jupyter notebook打开特定位置文件:
现在虚拟环境中cd到对应文件位置,然后打开jupyter notebook即可

repository includes

基于FPN和ResNet101的Mask R-CNN源码
在MS COCO数据集的训练代码
MS COCO数据集预训练权重
Jupyter notebooks文件(用来对检测的过程进行可视化)
用于多GPU训练的并行模块类
MS COCO metrics(AP)的评估
训练你自己的数据集的例子

该代码已经被记录,并且设计的非常易于扩展。如果要将其使用在您自己的研究中,请考虑引用该项目(下边的bibtex)。如果您从事3D视觉工作,您可能会发现我们最近发布的Matterport3D数据集也很有用。 此数据集是由我们的客户捕获的3D重构空间创建的,这些客户同意将其公开提供给学术用途。 您可以在此处查看更多示例。

Getting Started

demo.ipynb是最简单的开始方法。它展示了一个使用MS COCO允许你了模型来分割你自己的图片目标的例子。包括了在任意图片运行目标检测和实例分割的代码。

在MO COCO 上进行训练

我们为MS COCO提供预训练的权重,使它更加容易开始训练。你可以使用这些权重作为一个起始点,来训练你自己的网络。训练代码和评估代码在````samples/coco/coco.py```中,你可以在jupyter notebook中引用这个模块(参阅examples中提供是示例noebook)或者你也可以直接从命令行运行它。

# Train a new model starting from pre-trained COCO weights  使用coco预训练权重训练新的模型
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=coco

# Train a new model starting from ImageNet weights  使用ImageNet权重训练新模型
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=imagenet

# Continue training a model that you had trained earlier  继续训练之前训练过的模型
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=/path/to/weights.h5

# Continue training the last model you trained. This will find  继续训练最新训练过的模型
# the last trained weights in the model directory.              从model文件夹中自动找到最新的模型
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=last

你还可以使用以下命令运行COCO的评估代码:

# Run COCO evaluation on the last trained model  在最后训练的模型上运行COCO评估代码
python3 samples/coco/coco.py evaluate --dataset=/path/to/coco/ --model=last

训练计划,学习率,和其他参数应该samples/coco.coco.py中设置。

训练你自己的数据集

首先要阅读关于气球颜色splash样本的博客。它涵盖了从标注训练图片到使用的过程.
总之,要在你的数据集上训练模型,你需要扩展两个类。
Config该类包含默认配置。对其子类化并且根据你的需要修改属性
Dataset该类提供了使用任何数据集的统一方法。它允许您使用新的数据集进行培训,而无需更改模型的代码。它还支持同时导入多个数据集,如果你想要检测的目标不全都在一个数据集中时,这就很有用。
samples/shapes/train_shapes.ipynbsamples/coco/coco.pysamples/balloon/balloon.pysamples/nucleus/nucleus.py中查看示例。

与官方论文的不同

这个实现大部分都遵循Mask RCNN文章,但是在一些情况下我们偏向于代码的简单性和泛化行。以下使我们意识到的一些不同,如果还有其他差异,请告诉我们
(1)图像大小的调整
为了支持每个batch训练多个图像,我们将所有图像调整为相同大小。例如,MS COCO上的1024*1024。我们保持了宽高比,因此如果图片不是正方形,我们用0填充,在论文中,调整大小是的最小边为800px,最大边为1000px。
(2)边界框
一些数据集提供了边界框BBox,一些只提供masks。为了支持对多个数据集的训练,我们选择忽略数据集附带的边界框,而是动态生成它们。我们选择了包含所有mask像素点的最小的边界框作为BBox。这简化了Mask的实现并还使得图像增强变得容易,否则图像增强将难以应用到BBOX中,例如例如图像旋转
为了验证这种方法,我们将我们计算出的BBOX和COCO数据集中提供的BBOX进行了比较。我们发现大约2%相差1pix以上,约0.05%相差5pix以上,只有0.01%相差10pix以上。
(3)学习率
本文使用的学习率是0.02,但是我们太高,并且经常导致梯度爆炸,特别是当使用小的batchsize时。这可能与caffe和tensorflow的梯度计算方法不同有关(通过batches和GPU求和及求均值的差异)。或者,光放模型使用了gradient clipping来避免这个问题。我们确实也使用了gradient clipping,但是不会设置的过于激进。我们发现更小的学习率无论如都会加速收敛所以我们减小了学习率。

引言

使用该BilTeX来引用这个库

@misc{
   matterport_maskrcnn_2017,
  title={
   Mask R-CNN for object detection and instance segmentation on Keras and TensorFlow},
  author={
   Waleed Abdulla},
  year={
   2017},
  publisher={
   Github},
  journal={
   GitHub repository},
  howpublished={
   \url{
   https://github.com/matterport/Mask_RCNN}},
}

贡献

(用不上,先不翻译)

Requirements

Python 3.4, TensorFlow 1.3, Keras 2.0.8 其他公共的包在requirements.txt

MS COCO Requirements:

要在MS COCO上训练或者测试,你还需要:
(1)pycocotools(安装说明如下)
(2)MS COCO Dataset(http://cocodataset.org/#home)
(3)下载5K minival以及35K validationn-minus-minival子集。更多细节在最初的Faster R-CNN implementation中
如果你使用Docker,代码已经验证过可以再这个Docker container中运行(https://hub.docker.com/r/waleedka/modern-deep-learning/)

安装

(1)下载这个库(此项目)
(2)安装依赖项

pip3 install -r requirements.txt

(3)从项目 的根目录运行setup.py

python3 setup.py install

(4)现在COCO预训练权重(mask_rcnn_coco.h5)(https://github.com/matterport/Mask_RCNN/releases)
(5)(可选项)想要在MS COCO上训练或者测试,需要从这些repos中的一个下载pycoctools,他们是院士pycocotools的分支,具有python3和Windows的修复版本(官方repos似乎不再更新了)
Linux: https://github.com/waleedka/coco
Windows: https://github.com/philferriere/cocoapi. You must have the Visual C++ 2015 build tools on your path (see the repo for additional details)

使用此模型的项目

(如果你使用这个模型或者拓展了模型,我们愿闻其详)

demo.ipynb(如何调用训练好的模型进行检测)

别人的代码详解可以参考https://blog.csdn.net/myGFZ/article/details/80217885
权重文件.h5如果中断下载会出现OS错误https://blog.csdn.net/qq_41185868/article/details/80831046
安装pycocotools模块(该demo中不需要下载coco数据集)

pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
# -*- coding: utf-8 -*-
"""
Created on Mon Sep 16 23:35:43 2019

@author: Lenovo
"""

#Mask R-CNN例子
#一个使用预训练模型检测和分割目标的简要介绍

import os
import sys
import random
import math
import numpy as np
import skimage.io
import matplotlib
import matplotlib.pyplot as plt

# Root directory of the project
#项目根目录(返回上级目录的绝对路径)
ROOT_DIR = os.path.abspath("../")


# Import Mask RCNN
#导入Mask RCNN
sys.path.append(ROOT_DIR)  # To find local version of the library为了找到本地版本的库
from mrcnn import utils
import mrcnn.model as modellib
from mrcnn import visualize

# Import COCO config
#引用COCO设置模块
sys.path.append(os.path.join(ROOT_DIR, "samples/coco/"))  # To find local version(即将coco模块的目录加入到系统环境中)
import coco

  

# Directory to save logs and trained model
#保存日志和训练模型的文件夹
MODEL_DIR = os.path.join(ROOT_DIR, "logs")

# Local path to trained weights file
#训练权重文件的本地路径
COCO_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_coco.h5")
# Download COCO trained weights from Releases if needed
#如果需要的话,从Releases下载COCO训练权重
if not os.path.exists(COCO_MODEL_PATH):
    utils.download_trained_weights(COCO_MODEL_PATH)

# Directory of images to run detection on
#要运行检测的图像目录
IMAGE_DIR = os.path.join(ROOT_DIR, "images")

#恭喜
#我们将使用在MS-COCO数据集上训练的模型。该模型的配置在coco.py的CocoConnfig类中
#对于推理来说,请稍微修改配置以适合任务。为此,请对CocoConfig类进行子类化并覆盖您需要更改的属性

class InferenceConfig(coco.CocoConfig):
    # Set batch size to 1 since we'll be running inference on
    # one image at a time. Batch size = GPU_COUNT * IMAGES_PER_GPU
    #将batchsize设置成1因为我们将以此在一个图像上进行推断
    #Batch=GPU个数*每个GPU处理的图像数
    GPU_COUNT = 1
    IMAGES_PER_GPU = 1

#保存配置信息
config = InferenceConfig()
#输出配置信息在面板
#config.display()

# Create model object in inference mode.
#创建模型Model,调用了model.py中的Mask RCNN类
#对应参数(模型类型,模型文件夹,配置信息)
model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR, config=config)

# Load weights trained on MS-COCO
#载入模型权重文件
model.load_weights(COCO_MODEL_PATH, by_name=True)


# COCO Class names
#将整数id与类型名字对应(如模型预测的id=1,对应的是person)
# Index of the class in the list is its ID. For example, to get ID of
# the teddy bear class, use: class_names.index('teddy bear')
class_names = ['BG', 'person', 'bicycle', 'car', 'motorcycle', 'airplane',
               'bus', 'train', 'truck', 'boat', 'traffic light',
               'fire hydrant', 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值