热门标签 | 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()

推荐阅读
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
  • 如何使用PyCharm及常用配置详解
    对于一枚pycharm工具的使用新手,正确了解这门工具的配置及其使用,在使用过程中遇到的很多问题也可以迎刃而解,文中有非常详细的介绍, ... [详细]
  • 本文介绍了SVD(奇异值分解)和QR分解的基本原理及其在Python中的实现方法。通过具体代码示例,展示了如何使用这两种矩阵分解技术处理图像数据和计算特征值。 ... [详细]
  • 本文介绍如何通过更改软件源来提前体验Ubuntu 8.10,包括详细的配置步骤和相关注意事项。 ... [详细]
  • 本文介绍如何在Linux Mint系统上搭建Rust开发环境,包括安装IntelliJ IDEA、Rust工具链及必要的插件。通过详细步骤,帮助开发者快速上手。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
  • 本文详细介绍了Python中函数的基本概念,包括函数的定义与调用、文档注释、参数传递(形参与实参)、返回值以及函数嵌套。通过具体示例和解释,帮助读者掌握函数在编程中的应用。 ... [详细]
  • 解决Anaconda安装TensorFlow时遇到的TensorBoard版本问题
    本文介绍了在使用Anaconda安装TensorFlow时遇到的“Could not find a version that satisfies the requirement tensorboard”错误,并提供详细的解决方案,包括创建虚拟环境和配置PyCharm项目。 ... [详细]
  • Python Django大学生心理健康管理系统开发(含源码、文档)
    本项目包含完整的源代码、设计文档、数据库结构以及详细的安装指南,旨在为计算机专业的学生提供一个全面的心理健康管理系统解决方案。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • Python3 第一周学习总结
    本文总结了Python3第一周的学习内容,包括Python的主要特性、版本选择建议、开发环境配置技巧以及一些有趣的语言特性。 ... [详细]
  • Python基础入门:理解字符集与编码
    本文首先探讨了计算机的基本工作原理——二进制系统,进而深入介绍了字符集的概念及其在不同编码标准(如ASCII、GB2312、GBK、Unicode及UTF-8)中的应用。此外,文章还简要介绍了Python的安装、基本运行环境配置、变量定义、字符串处理、用户输入输出、条件判断及循环控制结构。 ... [详细]
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社区 版权所有