本文介绍了Mask Rcnn目标分割项目的搭建及运行过程,并对搭建过程中可能出现的问题进行了解答。

环境:Cuda10.2+tensorflow-gpu1.13.2

Mask R-CNN是一个实例分割算法,可以用来做“目标检测”、“目标实例分割”、“目标关键点检测”。

一、下载项目源码

https://github.com/matterport/Mask_RCNN/releases下载最新版本

Source code (zip):源码压缩包下载。

balloon_dataset.zip:气球数据集,里面的图片并不是很多,几十张。

mask_rcnn_balloon.h5:训练好的气球数据集权重。

mask_rcnn_coco.h5:基于mask rcnn训练好的coco数据集的权重,这个要感谢网友分享的下载链接,这里附上下载地址

mask_rcnn_coco.h5:下载链接如下:

链接:https://pan.baidu.com/s/1Mj9xOj0o8z3Rn-NBo6TRgw 
提取码:l3pb

二、需要安装的环境:

numpy

scipy

Pillow

cython

matplotlib

scikit-image

tensorflow>=1.3.0

keras>=2.0.8

opencv-python

h5py

imgaug

关于CUDA+tensorflow-gpu的安装可以参考我的另一篇博文

Windows10下安装Anaconda、Pycharm、Tensorflow-gpu,并在Pycharm中配置Tensorflow_肯定有人改了我的代码的博客-CSDN博客https://blog.csdn.net/qq_40770527/article/details/108349891?spm=1001.2014.3001.5501

三、测试

1、Windows下安装cocoapi方法

由于源码基于coco数据集进行的测试,检测代码中包含一些coco相关的模块,要正常运行代码,需要先安装cocoapi,具体步骤如下:

(1)在  Github下载源码并进行解压;https://github.com/philferriere/cocoapi

(2)安装 Visual C++ 2015;http://go.microsoft.com/fwlink/?LinkId=691126(因为我的电脑早就安装了VS,所以这一步骤我直接跳过了)

(3)进入coco源码setup.py所在目录 cocoapi-master\PythonAPI;

(4)执行命令:python setup.py build_ext install(注意是在PythonAPI目录)

2、读取摄像头实时检测

Mydemo_came.py

将mask_rcnn_coco.h5权重文件放到项目文件下

import os
import sys
import random
import math
import numpy as np
import skimage.io
import matplotlib
import matplotlib.pyplot as plt
import cv2
import time
# Root directory of the project
ROOT_DIR = os.path.abspath("./")# Import 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
sys.path.append(os.path.join(ROOT_DIR, "samples/coco/"))  # To find local version
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(MODEL_DIR ,"mask_rcnn_coco.h5")
# Download COCO trained weights from Releases if needed
if not os.path.exists(COCO_MODEL_PATH):utils.download_trained_weights(COCO_MODEL_PATH)print("***********************")# 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_GPUGPU_COUNT = 1IMAGES_PER_GPU = 1config = 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)))
cap = cv2.VideoCapture(0)while(1):# get a frameret, frame = cap.read()# show a framestart =time.clock()results = model.detect([frame], verbose=1)r = results[0]visualize.display_instances(frame, r['rois'], r['masks'], r['class_ids'],class_names, r['scores'])cv2.imshow("capture", frame)end = time.clock()print(end-start)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()#image= cv2.imread("C:\\Users\\18301\\Desktop\\Mask_RCNN-master\\images\\9.jpg")
## Run detection
#
#results = model.detect([image], verbose=1)
#
#print(end-start)
## Visualize results
#r = results[0]
#visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'],
#                            class_names, r['scores'])

结果如图所示:

3、检测单张图片

可随机检测文件夹内某个图片或指定图片路径进行检测两种方式

Mydemo_pic.py

import os
import sys
import random
import math
import numpy as np
import skimage.io
import matplotlib
import matplotlib.pyplot as plt
import cv2
import time
# Root directory of the project
ROOT_DIR = os.path.abspath("./")# Import 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
sys.path.append(os.path.join(ROOT_DIR, "samples/coco/"))  # To find local version
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(MODEL_DIR ,"mask_rcnn_coco.h5")
# Download COCO trained weights from Releases if needed
if not os.path.exists(COCO_MODEL_PATH):utils.download_trained_weights(COCO_MODEL_PATH)print("***********************")# 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_GPUGPU_COUNT = 1IMAGES_PER_GPU = 1config = 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'])#image= cv2.imread("C:\\Users\\18301\\Desktop\\Mask_RCNN-master\\images\\9.jpg")
## Run detection
#
#results = model.detect([image], verbose=1)
#
#print(end-start)
## Visualize results
#r = results[0]
#visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'],
#                            class_names, r['scores'])

测试结果如图所示:

四、可能出现的报错及解决方法

注意事项:这里首先总结下我在跑代码时遇到的主要问题及解决思路。

(1)由于我之前装了tensorflow2.*最新版本,而原代码是在tensorflow1.3环境下搭建的,所以请中间报的很多错误都是由于版本问题导致的,中间我也尝试过在不降低tensorflow版本的前期下解决问题,结果发现问题一个接着一个,解决了这个马上遇到新的问题,最后没办法只能选择降低tensorflow版本

(2)在安装tensorflow低版本时又遇到了很多问题,主要原因在于我之前安装了很多最新的包,而tensorflow1.3所依赖的一些包可能版本又很低,导致中间出现各种报错,这里建议使用conda install tensorflow***代替pip install tensorflow***(虽然我之前一直用的pip install 也都没有问题,但这次确实是只有conda install 才解决了问题,详细原因也不太清楚,可能是conda安装时会自动添加相关依赖)

(3)如果还是出现一些相关包的功能报错,极大的可能是由于版本问题,最好的方法就是查找该包与tensorflow1.3对应的版本,降低该包当前版本。

具体报错问题:

1、一般报错缺少某个包,直接pip install ***安装就可以

ModuleNotFoundError: No module named 'Cython'

ModuleNotFoundError: No module named 'imgaug'

2、AttributeError: module 'tensorflow' has no attribute 'log'

因为我一开始用的tensorflow2.0以上版本,而原代码使用的tensorflow1.3,导致出现了各种问题,

如果是2.0的版本请修改为更低的版本试试,比如1.4或者以下版本

3、from tensorflow.python.eager.context import get_config报错

原因是,keras和tensorflow版本不匹配的问题,我的就是keras直接安装,结果安装的最新版本,和tensorflow不匹配

最后,无赖降低了版本,

4.ImportError: DLL load failed: 找不到指定的模块。

Failed to load the native TensorFlow runtime.

网上有说是protobuf问题。 在自动安装了tensorflow时, protobuf安装的是最新版本3.20.0, 出现了不兼容的问题。更换为 protobuf 3.6.0即可

pip install protobuf==3.6.0

弄了半天还是报错,后来看到说大概应该是因为缺少依赖,还有的相似的问题,可能是因为tensorflow和你的cuda版本不匹配。比如我的电脑上cuda就是10.2版本的,但是需要的tensorflow版本只支持到cuda10.0。如果你用pip安装,这种情况下你就要手动重新配cuda,但是用conda安装,他会自动帮你把需要的cudatoolkit一起安装上。这是用conda安装时,自动装下来的包有cudatoolkit。

所以装这些包的时候能用conda装尽量用conda装。conda install会帮你把需要的依赖一起安装好,而pip install只会帮你装一个你指定的包。

解决方法:

Pip uninstall tensorflow

Conda install tensorflow==1.13.2

5、File "h5py\h5.pyx", line 1, in init h5py.h5

ImportError: DLL load failed: 找不到指定的程序。

AttributeError: module 'h5py' has no attribute 'File'

由于h5py库的更新,安装过程中会自动安装h5py=3.0.0以上的版本,会导致decode(“utf-8”)的错误!

各位一定要在安装完tensorflow后利用命令装h5py=2.10.0!

6、AttributeError: type object 'h5py.h5.H5PYConfig' has no attribute '__reduce_cython__'

查看原因说可能存在多个h5py版本,

于是我分别使用conda uninstall

和pip uninstall 卸载了h5py,并在安装目录中删掉了所有h5py包

最后再装了一次,解决了问题

7、报错信息:UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.

网上试了很多方法,有说要加use的,但是我试了都没用

import matplotlib

matplotlib.use('Qt5Agg')#必须显式指明matplotlib的后端

import matplotlib.pyplot as plt

后来我想到可能还是版本过高的问题,我用的是3.版本,于是我卸载了重装了2.版本,解决了问题

8、报错信息:Input image dtype is bool. Interpolation is not defined with bool data type

原因:可能是scikit-image的版本太高,与其他环境不匹配,我卸载当前版本后安装了一个低版本的,解决了问题

解决方案:

pip uninstall scikit-image

pip install scikit-image==0.16.2

Mask Rcnn目标分割-项目搭建及跑通测试代码相关推荐

  1. Mask Rcnn目标分割-训练自己数据集-详细步骤

    本文接着介绍了Mask Rcnn目标分割算法如何训练自己数据集,对训练所需的文件以及训练代码进行详细的说明. 本文详细介绍在只有样本图片数据时,如果建立Mask Rcnn目标分割训练数据集的步骤.过程 ...

  2. DL之Mask R-CNN:2018.6.26世界杯阿根廷队VS尼日利亚比赛2:1实现Mask R-CNN目标检测

    DL之Mask R-CNN:2018.6.26世界杯阿根廷队VS尼日利亚比赛2:1实现Mask R-CNN目标检测 目录 输出结果 人身检测 核心代码 输出结果 先上目标检测结果 人身检测 观众席:众 ...

  3. 有空就学学的实例分割1——Tensorflow2搭建Mask R-CNN实例分割平台

    有空就学学的实例分割1--Tensorflow2搭建Mask R-CNN实例分割平台 学习前言 什么是Mask R-CNN 源码下载 Mask R-CNN实现思路 一.预测部分 1.主干网络介绍 2. ...

  4. mask rcnn实例分割_使用Mask-RCNN的实例分割

    mask rcnn实例分割 In this article, I will be creating my own trained model for detecting potholes. For d ...

  5. OpenCV4.0 Mask RCNN 实例分割示例 C++/Python实现

    点击我爱计算机视觉标星,更快获取CVML新技术 前几天OpenCV4.0-Alpha发布,其中新增实例分割Mask RCNN模型是这次发布的亮点之一. 图像实例分割即将图像中目标检测出来并进行像素级分 ...

  6. TensorFlow MASK R-CNN Demo Windows 无痛搭建 (CPU版)

    TensorFlow MASK R-CNN Demo Windows 无痛搭建 (CPU版) 依赖库版本 版本很重要, 错了不一定能跑起来 MASK R-CNN == 2.1 tensorflow = ...

  7. 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程

    一:前言介绍 LVI-SAM是Tixiao Shan的最新力作,Tixiao Shan是Lego-loam(基于激光雷达里程计的SLAM框架)和Lio-sam(基于惯性-雷达紧耦合的SLAM框架)的作 ...

  8. 【githubshare】基于 C 语言编写的一款 2D 太空射击游戏,已在 Windows 10 和 Ubuntu Linux 16.04 系统上跑通测试

    基于 C 语言编写的一款 2D 太空射击游戏:space-shooter.c,已在 Windows 10 和 Ubuntu Linux 16.04 系统上跑通测试. GitHub:github.com ...

  9. maskrcnn用于目标检测_用自己的数据训练Mask R-CNN目标检测/分割模型

    摘要: 本文讲述了如何使用Mask-CNN对图像中的大量数据进行目标识别与目标分割. 计算机非常擅长数字运算,但对分析图像中的大量数据束手无策.直到最近找到了解决方法,即创建图像处理单元库,利用数千个 ...

最新文章

  1. 跟我学jQuery(三) 无所不能的选择器1
  2. python搭建项目结构_Django搭建项目实战与避坑细节详解
  3. CentOS7.7安装MySQL5.6并配置环境变量(详细版)
  4. 4-数据结构-串的学习
  5. mysql虚拟列表_「前端进阶」高性能渲染十万条数据(虚拟列表)
  6. [有问有答] 如何用邮件安全地传递密码
  7. 日赚1.2亿元,人均月薪5.5万元,蚂蚁集团招股书首亮相......
  8. 应用内广告帮助乐易实现收入+玩家时长双丰收
  9. 在Silverlight3绘制sprite图片的一部分
  10. redhat enterprise linux5.4.iso,版本有RedHat Enterprise Linux(RHEL)5.4/5.5/5.8/6.0/6.3 ISO镜像文件下载地址...
  11. 190221每日一句
  12. Podfile 文件模板
  13. 慧都科技:软件正版化不会一蹴而就 但趋势明显
  14. manjaro开启热点设置密码WPA/WPA2后iphone连不上
  15. element 复杂表格,表格合并
  16. 安卓中的hander
  17. 第9章第9节:完成过渡页幻灯片版式的制作 [PowerPoint精美幻灯片实战教程]
  18. 我对OpenGL教程的学习(入门篇)
  19. K均值聚类以及matlab实现
  20. 大数据告诉你NBA的字母哥如何年入2415万美金

热门文章

  1. First part of my Spring posts is refreshed
  2. 华为电子邮件显示未读邮件1_电子邮件简介已经过去
  3. 《PeopleWare》读书笔记
  4. 嵌入式Linux的两种I2C驱动方式
  5. ZBrush:生物角色无脑重拓扑神器ZWrap
  6. Linux 中 which、whereis、locate、find的区别
  7. av_interleaved_write_frame(fmt_ctx, enc_pkt);返回-22
  8. 根据文件模板实现预览、生成word、pdf、excel(后端-项目)
  9. Java——编辑、编译和运行
  10. Python进行数据分析探索