热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MaskR-CNN的代码实现

导言这篇博客主要记录了我实现MaskR-CNN中demo的过程,及遇到问题的解决办法。源码下载地址稍后给出。实现MaskR-CNN的demo一共需要下载以下两个文件:1、Ma

导言

这篇博客主要记录了我实现Mask R-CNN中demo的过程,及遇到问题的解决办法。源码下载地址稍后给出。
实现Mask R-CNN的demo一共需要下载以下两个文件:

1、Mask R-CNN源码

2、训练好的权重mask_rcnn_coco.h5

上面两个文件可以从网盘下载:
链接: https://pan.baidu.com/s/1qC5Rguvoyrppp4lZsa1TaQ 密码: satp

一、环境配置信息

关于基于pycharm的tensorflow环境配置在我之前的这篇博客环境配置。这里主要列出软件和各种库的版本:

1、配置信息

ubuntu 16.04
pycharm 2018.1.2
python 3.5.2
tensorflow-gpu 1.4.0
cuda 8.0. #使用nvcc -V 查看
cudnn 6.0
numpy 1.14.2
skimage 0.13.1
keras 2.0.8
scipy 1.0.1
pip 10.0.1

2、工具说明

1)、pycocotools

在Ms coco上训练数据时需要安装pycocotools,具体方法参见这个博客。

2)、关于Jupyter和Pycharm

这两个都是使用python非常方便的工具,mask-rcnn的源码是在Jupyter上跑的,而我选择的是Pycharm。所有会有部分地方的代码需要调整,主要就是从ipynb类型的文件中把代码拷出来粘贴到新的python文件中。

3、在pycharm中安装上述库

pycharm作为一个强大的IDE,上面的大部分库可以直接在pycham中安装:
file->settings->Project->project Interpreter,出现如下效果:
这里写图片描述
点击右上角的+符号,在出来的界面搜索框输入需要安装的库名称,在右下角可以选择安装的版本。一切都很方便。

二、代码结构说明

1、项目目录

首先把下载的mask rcnn源码解压到任意文件,在pycharm中新建项目,把解压后的全部文件拷贝到pycham中新建项目的根目录中。同时把训练好的权重文件mask_rcnn_coco.h5也拷贝过去。
项目结构如下:
这里写图片描述

2、文件概述

图片展示的目录结构有部分是我自己添加的代码,没有影响。
以ipynb结尾的文件是基于Jupyter的,就是code+markdown的模式。
如果想要在pycharm中运行,可以把每个ipynb类型文件中的代码拷贝出来,放到一个新建的python文件中运行。
首先介绍一下每个文件的大概作用,来源于matterport-Mask_RCNN官方教程翻译:

demo.ipynb 最简单的开始方式。展示了使用一个在MS COCO上预训练的模型在你的图片上实现图像分割。包括了在任意图片上实现图像检测和实例分割的代码。
train_shapes.ipynb 展示了怎么训练Mask R-CNN用自己的数据集。这个教程包括了一个玩具数据集来演示训练一个新数据集。
Visualize 文件主要是实现可视化的结果
inspect_data.ipynb 这个教程展示了不同的预处理步骤来准备训练数据
inspect_model.ipynb 这个教程深度解析了mask rcnn执行目标检测和语义分割的每一步。
inspect_weights.ipynb 这个教程考察了训练模型的权重,寻找异常值和反常的模式。
这里主要是实现demo.ipynb文件。

3、运行demo.ipynb

demo.ipynb是一个简单的mask-rcnn的小例子。它实现了从images文件夹中随机选择一个图片进行检测标记。
首先把demo.ipynb中代码拷贝出来放入新的python文件中,如下:

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

import coco
import utils
import model as modellib
import visualize

%matplotlib inline 

# Root directory of the project
ROOT_DIR = os.getcwd()

# Directory to save logs and trained model
MODEL_DIR = os.path.join(ROOT_DIR, "logs")

# Local path to trained weights file
COCO_MODEL_PATH =  "mask_rcnn_coco.h5"


# Directory of images to run detection on
IMAGE_DIR = os.path.join(ROOT_DIR, "images")


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
    GPU_COUNT = 1
    IMAGES_PER_GPU = 1

cOnfig= InferenceConfig()
config.display()


# Create model object in inference mode.
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
# 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', 'stop sign', 'parking meter', 'bench', 'bird',
               'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear',
               'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie',
               'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball',
               'kite', 'baseball bat', 'baseball glove', 'skateboard',
               'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup',
               'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
               'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza',
               'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed',
               'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote',
               'keyboard', 'cell phone', 'microwave', 'oven', 'toaster',
               'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors',
               'teddy bear', 'hair drier', 'toothbrush']



# Load a random image from the images folder
file_names = next(os.walk(IMAGE_DIR))[2]
image = skimage.io.imread(os.path.join(IMAGE_DIR, random.choice(file_names)))

# Run detection
results = model.detect([image], verbose=1)

# Visualize results
r = results[0]
visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'], 
                            class_names, r['scores'])

注意到%matplotlib inline这句代码出错,解决办法就是注释掉这句代码,原因我写在了第三部分。
这里还需要在代码最后添加一句代码:

plt.show()

这样就可以直接运行,会在images文件夹中随机选择一张图片进行检测,效果如下:

这里写图片描述

4、demo.ipynb中代码详解

首先,前面的import是引入的各种库文件以及实现mask rcnn的部分python文件。

class InferenceConfig(coco.CocoConfig)
#整个训练模型的配置信息类,从coco.CocoConfig函数中读取配置信息。主要包括:GPU_COUNT,IMAGES_PER_GPU等。
#最后使用config.display()输出配置信息在控制面板。
#其中,model.py文件开头说明了tensorflow和keras的版本要求。

Create model object in inference mode.
#Model的创建,主要是调用model.MaskRCNN()。
#model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR, cOnfig=config)

Load weights trained on MS-COCO
#给上一步创建的model对象加载weights,使用方式:
#model.load_weights(COCO_MODEL_PATH, by_name=True)

class names
#该模型将对象分类并返回类id,这些id是标识每个类的整数值。一些数据集将整型值分配给它们的类,而有些则没有。例如,在MS-COCO数据#集中,“person”类是1,“teddy bear”是88。ID通常是连续的,但并不总是如此。例如,COCO数据集有与类IDs 70和72相关的类,而不#是71。

Load a random image from the images folder
#从名为images的文件夹中随机加载要进行训练的图片

Run detection
#调用model.detect()函数进行目标检测训练。

Visualize results
#实现可视化的结果,调用visualize.display_instances()函数。

Plt.show()
#import matplotlib.pyplot as plt,绘制出处理过的图片。

三、遇到的问题及解决方法

%matplotlib inline代码出错

这是因为%matplotlib inline是jupyter编辑器中的内置函数,使用它可以绘制出处理过的图片。但是因为它是内置在jupyter中的,所以在pycharm中不可用。这里在pycharm中的解决办法主要就是注释掉%matplotlib inline,然后在代码的最后加上:

plt.show()

关于这个问题的详细介绍可以参考这个博客。

在pycharm中显示训练过的图片

这个问题就是上面说的到%matplotlib inline代码出错问题,加下列代码就可以了。

plt.show()

推荐阅读
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文介绍了SVD(奇异值分解)和QR分解的基本原理及其在Python中的实现方法。通过具体代码示例,展示了如何使用这两种矩阵分解技术处理图像数据和计算特征值。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 掌握 Photoshop 是学习网页设计的重要一步。本文将详细介绍 Photoshop 的基础与进阶功能,帮助您更好地进行图像处理和网页设计。推荐使用最新版本的 Photoshop,以体验更强大的功能和更高的效率。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • 如何彻底清除顽固软件如360
    本文详细介绍了如何彻底卸载难以删除的软件,如360安全卫士。这类软件不仅难以卸载,还会在开机时启动多个应用,影响系统性能。我们将提供两种有效的方法来帮助您彻底清理这些顽固软件。 ... [详细]
author-avatar
葛妹秀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有