使用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.ipynb
、samples/coco/coco.py
、samples/balloon/balloon.py
和samples/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',