原文链接

Mask R-CNN Keras 对象检测 对象分割 像素掩码

在 2019年7月16日 上张贴 由 hotdog发表回复

Mask R-CNN Keras
在本教程中,您将学习如何使用 Keras 和Mask R-CNN来执行实例分段(使用和不使用GPU)。
使用Mask R-CNN,我们可以执行以下两项操作:

  1. 对象检测,为我们提供图像中每个对象的(x,y)边界框坐标。
  2. 实例分割,使我们能够为图像中的每个单独对象获取 像素掩码

通过Mask R-CNN进行实例分割的示例可以在本教程顶部的图像中看到 – 请注意我们不仅拥有图像中对象的边界框,而且还为每个对象提供了像素方式的蒙版同样,使我们能够分割每个单独的对象(仅对象检测不会给我们的东西)。
实例分割与 Mask R-CNN 一起,推动了我们在计算机视觉中看到的“神奇”的一些最新进展,包括自动驾驶汽车,机器人等等。
在本教程的其余部分中,您将学习如何将 Mask R-CNN 与 Keras 一起使用,包括如何在您自己的图像上执行实例分割。
要了解有关Keras和Mask R-CNN的更多信息,请继续阅读!
寻找这篇文章的源代码?
跳到下载部分。
Keras Mask R-CNN
在本教程的第一部分中,我们将简要介绍Mask R-CNN架构。从那里,我们将查看该项目的目录结构,然后在我们的系统上安装Keras + Mask R-CNN。
然后,我将向您展示如何使用 Python 实现Mask R-CNN和Keras。
最后,我们将Mask R-CNN应用于我们自己的图像并检查结果。
我还将分享有关如何在您自己的自定义数据集上训练Mask R-CNN模型的资源。
Mask R-CNN 的历史

图1: He等人的Mask R-CNN架构。实现对象检测和逐像素实例分割。这篇博文使用Keras来处理在COCO数据集上训练的Mask R-CNN模型。
用于实例分割的Mask R-CNN模型已经从用于对象检测的三个先前架构发展而来

  • R-CNN:向网络呈现输入图像,在图像上运行选择性搜索,然后使用预先训练的CNN将来自选择性搜索的输出区域用于特征提取和分类。
  • Fast R-CNN仍然使用选择性搜索算法来获取区域提议,但添加了感兴趣区域(ROI)池模块。从要素图中提取固定大小的窗口,并使用这些要素获取最终的类标签和边界框。好处是网络现在可以端到端训练
  • Faster R-CNN引入区域提案网络(RPN),将区域提案直接烘焙到架构中,减少了对选择性搜索算法的需求。

Mask R-CNN 算法建立在之前 Faster R-CNN,使网络能够不仅执行对象检测 而且对像素实例的分割.
项目结构
继续使用今天博客文章的“下载”部分下载代码和预先训练的模型。让我们来看看我们的Keras Mask R-CNN项目结构

我们的项目包括测试 图像/ 目录以及三个文件:

  • coco_labels .txt :由81个类别标签的逐行列表组成。第一个标签是“背景”类,所以通常我们说有80个类。
  • mask_rcnn_coco .h5 :我们预先训练的Mask R-CNN模型权重文件,将从磁盘加载。
  • maskrcnn_predict .py :Mask R-CNN演示脚本加载标签和模型/权重。从那里,对通过命令行参数提供的测试图像进​​行推断。您可以使用我们自己的图像或 “下载”中 包含的images /目录中的任何一个进行测试 。

在我们回顾今天的脚本之前,我们将安装Keras + Mask R-CNN,然后我们将简要回顾COCO数据集。
安装Keras Mask R-CNN
使用pip,git和setup .py直接引用Keras + Mask R-CNN安装过程 。我建议您在今天的项目的专用虚拟环境中安装这些软件包,这样您就不会使系统的软件包树复杂化。
首先,安装所需的Python包
$ pip install numpy scipy
$ pip install pillow scikit-image matplotlib imutils
$ pip install "IPython[all]"
$ pip install tensorflow # or tensorflow-gpu
$ pip install keras h5py 如果您的计算机上安装了GPU,CUDA和cuDNN,请务必安装 tensorflow – gpu。
从那里开始,通过pip或从源代码编译来安装OpenCV
$ pip install opencv-contrib-python接下来,我们将在Keras中安装Mask R-CNN的Matterport实现
$ git clone https://github.com/matterport/Mask_RCNN.git
$ cd Mask_RCNN
$ python setup.py install最后,在虚拟环境中启动Python解释器,以验证是否已成功安装Mask R-CNN + Keras和OpenCV
$ python
>>> import mrcnn
>>> import cv2
>>>如果没有导入错误,您的环境现在可以用于今天的博客文章。
Mask R-CNN和COCO
我们今天在这里使用的Mask R-CNN模型是在COCO数据集上预先训练的
此数据集包含总共80个类(加上一个背景类),您可以从输入图像中检测和分割(第一个类是背景类)。我 在与此帖相关的“下载”中包含了名为coco_labels .txt的标签文件 ,但出于方便,我已将它们包含在此处:


在下一节中,我们将学习如何使用Keras和Mask R-CNN来检测和分割这些类中的每一个。
用Keras和Python实现Mask R-CNN
让我们开始实现Mask R-CNN分段脚本。
打开 maskrcnn_predict .py

第2-11行导入我们所需的包。
该 mrcnn 从Matterport 导入实现 Mask R-CNN的。从 mrcnn ,我们将使用 Config 创建一个自定义子类,我们的配置, modellib 加载我们的模型,以及 可视化 绘制我们的面具。
让我们继续并解析我们的命令行参数

我们的脚本需要三个命令行参数:

  • – weights 权重 :在COCO上预训练的Mask R-CNN模型权重的路径。
  • – labels :COCO类的路径标记文本文件。
  • – image :我们的输入图像路径。我们将对通过命令行提供的图像执行实例分割。

使用第二个参数,让我们继续加载我们的 CLASS_NAMES 和 COLORS

第24行将COCO类标签名称直接从文本文件加载到列表中。
从那里, 第28-31行为 每个类标签生成随机的,不同的 颜色。该方法来自Matterport在GitHub上的Mask R-CNN实现。
让我们继续构建我们的 SimpleConfig 类

我们的 SimpleConfig 类继承自Matterport的Mask R-CNN Config (第33行)。
配置为 NAME (第35行)。
从那里我们设置 GPU_COUNT 和 IMAGES_PER_GPU (即批处理)。如果您安装了GPU和tensorflow – gpu,那么Keras + Mask R-CNN将自动使用您的GPU。如果没有,将改为使用您的CPU。
注意:我在使用单个Titan X GPU的机器上执行了今天的实验,因此我将GPU_COUNT 设置 为1 。虽然我的12GB GPU在技术上可以同时处理多个图像(在训练期间或在预测期间,如在此脚本中),但我决定设置 IMAGES_PER_GPU = 1, 因为大多数读者不会拥有具有尽可能多内存的GPU。如果您的GPU可以处理它,请随意增加此值。
然后将我们的 NUM_CLASSES设置为等于CLASS_NAMES 列表的长度 (第45行)。
接下来,我们将初始化配置并加载我们的模型

第48行实例化我们的 配置 。
然后,使用我们的 配置 , 第53-55行加载我们 在COCO数据集上预训练的Mask R-CNN 模型。
让我们继续并 执行实例分割

第59-61行加载并预处理我们的 图像 。我们的模型需要RGB格式的图像,所以我们使用 cv2。cvtColor 交换颜色通道(相比之下OpenCV的默认BGR颜色通道排序)。
然后,65行 通过网络执行图像的前向传递, 以进行物体检测和逐像素掩模预测。
剩下的两个代码块将处理结果,以便我们可以使用OpenCV可视化对象的边界框和掩码

为了可视化结果,我们首先循环对象检测(第68行)。在循环内部,我们:

  • 获取唯一的 classID 整数(第71行)。
  • 提取 当前检测的 掩码(第72行)。
  • 确定 用于 可视化 蒙版的 颜色(第73行)。
  • 使用半透明alpha 通道(第76行)在对象上 应用/绘制我们预测的像素方式蒙版

从这里开始,我们将为图像中的每个对象绘制边界框和类标签+得分文本

第80行将我们的图像转换 回BGR(OpenCV的默认颜色通道排序)。
在 第83行,我们开始循环对象。在循环内部,我们:

  • 提取边界框坐标, classID , 标签 和 分数 (第86-89行)。
  • 计算 边界框和文本的 颜色(第90行)。
  • 绘制每个边界框(第93行)。
  • 连接类/概率 文本 (第94行),然后在图像顶部绘制它 (第95-97行)。

一旦完成该过程,结果输出 图像 将显示在屏幕上,直到按下一个键(第100-101行)。
Mask R-CNN和Keras结果
现在我们已经实现了Mask R-CNN脚本,让我们试一试。
确保您已使用本教程的“下载”部分下载源代码。
您需要知道命令行参数的概念才能运行代码。如果您不熟悉,请在尝试执行代码之前阅读argparse和命令行参数。
准备好后,打开终端并执行以下命令
$ python maskrcnn_predict.py --weights mask_rcnn_coco.h5 --labels coco_labels.txt \ --image images/30th_birthday.jpg

图2:在COCO上训练的面具R-CNN模型创建了侏罗纪公园吉普车(卡车)的像素图,我的朋友和我在庆祝我的30岁生日时。
在我30岁生日那天,我的妻子找到了一个人带着我们在费城的侏罗纪公园吉普车上驾驶我们- 这里我和我最好的朋友都在自然科学院外面。
请注意,不仅为每个对象(即人和吉普车)生成边界框,而且还有像素方式的蒙版!
让我们尝试另一个图像
$ python maskrcnn_predict.py --weights mask_rcnn_coco.h5 --labels coco_labels.txt \ --image images/couch.jpg

图3:我的狗Janie已经使用Keras和Mask R-CNN深度学习模型从沙发和椅子上分割出来。
这是我的狗Janie的超级可爱照片,躺在沙发上:

  1. 尽管绝大多数沙发都不可见,但是 Mask R-CNN 仍然能够将其标记为这样。
  2. Mask R-CNN能够正确标记图像中的狗。
  3. 即使我的咖啡杯几乎看不见,Mask R-CNN也可以给杯子贴上标签(如果你仔细观察,你会看到我的咖啡杯是侏罗纪公园的杯子!)

Mask R-CNN无法正确标记的图像的唯一部分是沙发的后部,它错误地作为椅子 – 仔细观察图像,你可以看到Mask R-CNN如何犯错误(区域确实看起来很像椅子而不是沙发的一部分。
这是使用Keras + Mask R-CNN进行实例分割的另一个例子
$ python maskrcnn_predict.py --weights mask_rcnn_coco.h5 --labels coco_labels.txt \ --image images/page_az.jpg

图4:Mask R-CNN分段图像(使用Keras,TensorFlow和Matterport的Mask R-CNN实现创建)。
让我们将Mask R-CNN应用于最终图像
$ python maskrcnn_predict.py --weights mask_rcnn_coco.h5 --labels coco_labels.txt \ --image images/ybor_city.jpg

图5: Keras + Mask R-CNN,带有来自Ybor City的图片的Python。
我最喜欢去美国的城市之一是Ybor City – 我喜欢这个地区(也许是公鸡在这个城市受到保护并且可以自由地漫游)。
在这里你可以看到我和这样一只公鸡 – 注意我们每个人如何被Mask R-CNN正确标记和分割。您还会注意到Mask R-CNN模型能够对每辆车进行本地化标记总线!
Mask R-CNN可以实时运行吗?
此时你可能想知道是否可以实时运行Keras + Mask R-CNN,对吧?
正如您在上面的Mask R-CNN的历史部分所知,Mask R-CNN基于Faster R-CNN物体探测器。
Faster R-CNNs 令人难以置信的计算量很大,而当你在物体检测的顶部添加例如分割,模型只变得计算昂贵,因此:

  • 在CPU上, Mask R-CNN无法实时运行。
  • 但是在GPU上, Mask R-CNN可以达到5-8 FPS。

如果您想半实时运行Mask R-CNN,则需要GPU。
摘要
在本教程中,您学习了如何使用Keras + Mask R-CNN来执行实例分段
与仅为您提供图像中对象的边界框(x,y)坐标的对象检测不同,实例分割更进一步,为每个对象生成像素方式的蒙版
使用实例分割我们实际上可以部分从图像的对象。
为了执行实例分割,我们使用了Matterport Keras + Mask R-CNN实现。
然后我们创建了一个Python脚本:

  1. 构建了Mask R-CNN的配置类(包括和不包含GPU)。
  2. 从磁盘加载Keras + Mask R-CNN架构
  3. 预处理我们的输入图像
  4. 检测到图像中的对象/蒙版
  5. 可视化结果

我希望你喜欢今天的帖子!
源代码下载
下载链接 https://hotdog29.com/?p=643

原文链接

Mask R-CNN Keras 对象检测 对象分割 像素掩码

文章转自 Adrian Rosebrock ,OpenCV Face Recognition,PyImageSearch,https://www.pyimagesearch.com/2018/09/24Keras Mask R-CNN/,2009年7月16日访问
相关文章

  • YOLO 对象检测 OpenCV 源代码
  • 文本检测 OpenCV EAST文本检测器 源代码
  • 源代码 下载
  • dlib 使用OpenCV,Python和深度学习进行人脸识别 源代码
  • OpenCV 人脸识别 源代码

张贴在技术博客、opencv标签:对象检测、Mask R-CNN、Keras、对象分割、像素掩码编辑

Mask R-CNN Keras 对象检测 对象分割 像素掩码相关推荐

  1. HALCON 21.11:深度学习笔记---对象检测, 实例分割(11)

    HALCON 21.11:深度学习笔记---对象检测, 实例分割(11) HALCON 21.11.0.0中,实现了深度学习方法. 本章介绍了如何使用基于深度学习的对象检测. 通过对象检测,我们希望在 ...

  2. 使用Tensorflow对象检测接口进行像素级分类

    文章来源:ATYUN AI平台 在过去,我们使用Tensorflow对象检测API来实现对象检测,它的输出是图像中我们想要检测的不同对象检测周围的边界框.而Tensorflow最近添加了新功能,现在我 ...

  3. Mask R-CNN对象检测和分割实现对无人机检测

    Github上发布了何凯明的Mask R-CNN目标检测和对象分割Keras和TensorFlow的实现代码. 这个实现基于Python 3.Keras和TensorFlow.模型对图片中的每个对象实 ...

  4. 【项目实践】基于Mask R-CNN的道路物体检测与分割(从数据集制作到视频测试)...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 1.内容概要 Mask R-CNN的框架是对Faster R-CNN的扩展,与BBox识别并行的增加一 ...

  5. 检测和语义分割_分割和对象检测-第5部分

    检测和语义分割 有关深层学习的FAU讲义 (FAU LECTURE NOTES ON DEEP LEARNING) These are the lecture notes for FAU's YouT ...

  6. AI队列长度检测:使用Keras进行对象检测

    目录 介绍 AI队列长度检测:使用Keras进行对象检测 卷积神经网络 训练CNN以检测物体 测试我们的模型 下一步是什么? 下载源1.4 KB 介绍 看到人们排队进入您的咖啡店或商店是一件很棒的事, ...

  7. 对象检测目标小用什么模型好_[目标检测] YOLO4论文中文版

    点击上方 蓝字 关注我呀! [目标检测] YOLO4论文中文版 文章目录 YOLO4论文中文版 摘要 1.介绍 2.相关工作 2.1.目标检测模型 2.2.Bag of freebies 2.3.Ba ...

  8. yolo v3制作自己的数据_必看!一文掌握最先进的实时对象检测系统YOLO

    全文共3866字,预计学习时长20分钟或更长 本文将详细分析如何使用YOLO(You Only Look Once)进行对象检测.要想完全理解这一技术,首先应该知道对象分类.检测和分割之间的区别. 对 ...

  9. 深度学习和目标检测系列教程 1-300:什么是对象检测和常见的8 种基础目标检测算法

    @Author:Runsen 由于毕业入了CV的坑,在内卷的条件下,我只好把别人卷走. 对象检测 对象检测是一种计算机视觉技术,用于定位图像或视频中的对象实例.对象检测算法通常利用机器学习或深度学习来 ...

最新文章

  1. 合种侧柏、油松专车3天4000能量领证
  2. 维基链连续3日暴涨接近100%,能否延续夏日神话?
  3. 【设计模式】享元模式 简介 ( 定义 | 对象池 | 内部状态 | 外部状态 | 适用场景 | 相关角色 )
  4. onSaveInstanceState和onRestoreInstanceState触发的时机
  5. 网络规划设计(项目类业务)
  6. ssl提高组周四备考赛【2018.10.18】
  7. python豆瓣mysql_python操作mysql
  8. java 构造器 null_java - 主结尾处的Java构造函数用户输入在构造函数中为Null - 堆栈内存溢出...
  9. 机器人汉堡店即将开业,做一个汉堡需要5分钟
  10. java贝叶斯分类器 开源_贝叶斯分类器
  11. “我爱淘”冲刺阶段Scrum站立会议3
  12. 苹果发信用卡——大数据解读硅谷巨头如何发力金融科技
  13. MRR(Mean Reciprocal Rank)笔记
  14. 【杂七杂八】Dreamweaver在Surface高分辨率下工具栏字体和按钮太小的解决办法
  15. javaSe查漏补缺
  16. 网易免费企业邮箱配置客户端
  17. java 版百度网盘功能
  18. 微信统一支付详解,坑太多,不得不写
  19. IBM启动2014三大战略方向
  20. 赛普拉斯代理4Mbit串行SPI铁电存储器CY15B104Q-LHXI

热门文章

  1. uni-app:新大陆PDA盘点RFID
  2. 【EasyRL学习笔记】第三章 表格型方法(Q-Table、Sarsa、Q-Learning)
  3. 微信hook,企微hook功能演示。
  4. Java生成PDF文档(表格)
  5. 芒果电动车显示服务器开小差了,《芒果电单车》断电解决办法
  6. 处理VS中scanf的安全警告
  7. 评职时,专利到底能加多少分?文科也可以申请专利吗?
  8. 煤炭企业管理中项目化管理的应用探寻
  9. 【转载】软件性能测试分析与调优实践之路-Web中间件的性能分析与调优总结
  10. nginx代理mysql数据库 stream