摘要: 本文讲述了如何使用Mask-CNN对图像中的大量数据进行目标识别与目标分割。

计算机非常擅长数字运算,但对分析图像中的大量数据束手无策。直到最近找到了解决方法,即创建图像处理单元库,利用数千个内核的原始动力解锁图片背后的含义。

使用自己的数据

我们将使用一个示例数据集,它在随机色彩背景上由不同大小和颜色的圆圈、正方形和三角形组成。我已经创建了一个COCO-style版本,如果你想学习如何将图片转换成自己的数据集,请参阅前面的文章。

这一次我们的重点是自动标记图像中的所有形状,并标出每个图像精确到像素的位置。这类的任务称为“目标分割”。在计算机视觉中,有很多听起来类似的的术语,比如“物体识别(object recognition)”、“类分割(class segmentation)”、“目标检测(object detection)”,我们需要通过看它们做了什么来区分。下图展示了我们从这四个类型中所能获得的信息,从左到右,任务依次变得困难。

不同类型的图像处理

目标识别告诉我们图像中有什么,而不是在什么地方或者有多少。类分割对图像中不同类型的对象添加位置信息。目标检测将图像中的每个对象通过边界框分割开。最后,这四个当中最难也是我们要训练的是——目标分割。它赋予每个对象一个清晰的边界,也能用来创建前三个的结果。

对于这种简单数据集,我们可以使用老式计算机视觉思路,例如Hough圈和线条检测或模板匹配来获得好的结果。但是通过深度学习,我们可以使用相同方法在几乎所有类型的图像数据集上获得相同类型的结果,而且无需考虑要找的是什么特征,这简直太神奇了。

Mask R-CNN是什么?

在训练自己的Mask R-CNN之前,让我们快速从右向左讲解一下名字的含义。

“NN”是神经网络,它的灵感来自于生物神经元的工作原理,神经网络是连接的神经元集合,每个神经元根据输入和内部参数输出信号。当训练神经网络时,我们要不断调整神经元的内部参数来获得期望的输出。

神经网络

“C”代表“卷积”。CNNs是专门为图像学习而设计的,但在某些方面上与神经网络相似。它们的过滤器是通过在某个时间段在图像上某小块横向和纵向滑动进行的,而不是一次向穿过整个图像。CNN比常规的神经网络使用更少的参数和内存,这使得它们能够处理比传统神经网络更大的图像。

卷积

普通的CNNs擅长目标识别,但是如果我们想要做目标检测,需要知道位置。这就是“R”“区域”。R-CNNs能够围绕对象画出边框。随着时间的推移,发展出了Fast R-CNN和Faster R-CNN。Faster R-CNN在CNN最后提出了Proposal生成网络,即如果在区域内发现对象,则这些区域就会被用作边框。

最后,“Mask”添加了像素级的分割,并创建了目标分割模型。它为网络添加了一个额外的分支来创建二进制掩码,这与我们在注释图像时所做的类似。

准备好电脑配置

要运行这些例子,你需要用最新nvidia显卡的Ubuntu 16.04系统。我可以使用只有2GB内存的GeForce 940M对一小部分网络进行训练,但是你最好使用11GB内存以上的nvidia卡。如果没有,你可以开始使用Amazon Web Services或谷歌云。

我们将使用Docker上运行来确保在同一页面。Docker通过脚本创建系统的副本,所以不必安装所有的小程序。但是在此之前需要准备好主机系统。

安装Ubuntu 16.4之后,我们需要安装NVIDIA图形驱动和CUDA(并行计算平台)。首先打开一个终端并运行以下命令来安装图形驱动程序。

然后安装CUDA

现在安装Docker、Docker- compose和Nvidia-Docker。

全部安装好后,重启电脑就可以运行我们的Mask C-RNN系统了。

开始实践

下载并提取deep-learning-explorer。里面包含mask-rcnn文件夹和一个数据文件夹。Data/shapes文件夹中包含数据测试集的压缩文件。提取出shapes.zip文件,并将annotations,shapes_train2018,shapes_test2018和shapes_validate2018移动到data/shapes文件夹中。

回到终端界面,cd进入到mask-rcnn/docker目录下,并运行docker-compose up。首次运行这个命令时,Docker需要几分钟准备从头开始构建系统。准备就绪时会显示如下:

Docker系统准备就绪

将最后一行复制粘贴到web浏览器中,就会打开Jupyter Notebook。进入home/keras/mask-rcnn/notebooks目录,点击mask_rcnn.ipynb。现在您可以浏览每个笔记本单元并训练您自己的Mask R-CNN模型。幕后Keras与Tensorflow正在GPU上训练神经网络。如果你没有11GB显存的话,你可能会在“微调”步骤中遇到问题,但你应该能够用最少2GB的内存卡来训练网络顶端。

我们之所以不必花费数天或数周时间训练模型以及数以千计的例子就能获得不错的结果,是因为复制了之前真实的COCO数据集上完成的训练的权重(内部神经元参数)。由于大多数图像数据集具有相似的基本特征,比如颜色和模式,所以通常可以用一种模型的训练数据来训练另一个模型。这种复制数据称为迁移学习。

如果你滚动到笔记本的底部,你会发现我们只预测了大约37%的正确形状。但是可以通过将STEPS_PER_EPOCH增加到750(培训样本的总数)并运行5个或更多的epochs,来改进模型。

在训练期间或之后,你可以通过一些图表来查看TensorBoard的使用情况。首先需要登录到Docker容器中,启动并运行TensorBoard,然后在web浏览器中访问。过程为在终端运行docker ps,将显示所有运行的容器,使用CONTAINER ID的前两个字符启动Docker容器bash shell来训练模型。例如,我们的ID是d5242f7ab1e3,我们将使用docker exec - d5 bash来登录。运行tensorboard --logdir ~/data/shapes/logs --host 0.0.0.0,现在可以通过访问http://localhost:8877进入TensorBoard了。

现在,你已经根据自己的数据准备好训练Mask R-CNN模型了。

引用和资源:

deep-learning-explorer

pycococreator - 转换数据

R-CNN (arxiv)

Fast R-CNN (arxiv)

Faster R-CNN (arxiv)

Mask R-CNN (arxiv)

Stanford CS class notes

本文由阿里云云栖社区组织翻译。

文章原标题《Train a Mask R-CNN model on your own data》

作者:waspinator

译者:奥特曼,审校:袁虎。

本文为云栖社区原创内容,未经允许不得转载。

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

  1. 使用自己的数据训练MobileNet SSD v2目标检测--TensorFlow object detection

    使用自己的数据训练MobileNet SSD v2目标检测--TensorFlow object detection 1. 配置 1.1 下载models-1.12.0 2. 准备数据集 3. 配置文 ...

  2. 多目标进化优化_科研一角|论文分享 | 等离子喷焊工艺参数多目标优化

    科研一角|论文分享 等离子喷焊工艺参数多目标优化 喷焊层质量是影响再制造产品质量的主要因素,而等离子喷焊过程中参数的选择又影响着喷焊层质量,工艺参数的确定通常依靠加工手册.工人的操作经验以及工艺参数优 ...

  3. attodiskbenchmarks(磁盘传输速率检测)_硬盘坏了可以修复吗?电脑硬盘检测?

    硬盘坏了数据可以修复吗?硬盘是电脑的灵魂,而电脑是存储所有最重要数据的地方.尽管大多数电脑硬件都可以更换,但是如果你还没有创建备份,则硬盘上的宝贵数据将无法替换.因此,确保硬盘保持健康是至关重要的. ...

  4. python实现目标检测_由浅入深:教你如何构建一个行人目标检测模型(Python)

    摘要: 零基础也能构建一个目标检测(对象检测)模型?小编教你使用Image AI库从头开始构建一个行人检测模型. 当我们看到一张图片时,我们的大脑会立即识别图片中所包含的物体.而对于机器来说,识别这些 ...

  5. keras faster物体检测_【开源项目】特斯拉+树莓派实现车牌识别检测系统

    怎样在不换车的前提下打造一个智能车系统呢?一段时间以来,本文作者 Robert Lucian Chiriac 一直在思考让车拥有探测和识别物体的能力. 本文来源:机器视觉 怎样在不换车的前提下打造一个 ...

  6. 数据中心细节_当细节很重要时数据不平衡

    数据中心细节 定义不平衡数据 (Definition Imbalanced Data) When we speak of imbalanced data, what we mean is that a ...

  7. 深度学习cnn人脸检测_用于对象检测的深度学习方法:解释了R-CNN

    深度学习cnn人脸检测 介绍 (Introduction) CNN's have been extensively used to classify images. But to detect an ...

  8. 【目标检测_概述】recent advances in deep learning for object detection_2019

    文章目录 Abstract 1.Introduction 2. Problem Setting 3.Detection Components 3.1 Detection Settings 3.2 De ...

  9. 如何使用CNN进行物体识别和分类_基于CNN目标检测方法(RCNN系列,YOLO,SSD)

    转载自:基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测 一.研究意义 卷积神经网络(CNN)由于其强大的特征提取能力,近年 ...

最新文章

  1. mysql关系表控制_mysql表关系
  2. inet_ntoa()返回字符串的生命周期
  3. python exe运行报 编码错误_python运行显示编码错误
  4. 深度学习笔记第二门课 改善深层神经网络 第一周:深度学习的实践层面
  5. cognos安装教程linux,linux环境下安装cognos10.2.1(菜鸟安装)
  6. Azure Show|第一期 开播啦!嘉宾梁迪李卓恒李佳芮
  7. 浪潮信息边缘服务器m5多少钱,浪潮边缘计算服务器NE5260M5发布!最高性能可达每秒70万亿次...
  8. 删除某个字段_Android中Room的使用4_删除一个字段
  9. 腾讯专注关键词的深度语义匹配模型
  10. java numberformat_java 之 格式化输出 NumberFormat
  11. Unity使用MikuMikuDance
  12. 用python画钢铁侠图片_Photoshop快速把钢铁侠图片转为素描水墨风格教程
  13. win10蓝牙已配对连接不上_win10蓝牙耳机显示已配对但没有声音的具体处理方法...
  14. Layui layer弹层组件 子iframe大小比父iframe大,还可对父iframe进行操作
  15. Java 八大基本数据类型简述
  16. R语言机器学习 趋势分析 SMA EMA
  17. 钱多多第二阶段冲刺06
  18. 【JTeam Champion NFT】NFT交易必备的四个工具
  19. 老夫纵横IT行业20年,才总结出这份独步天下的分布式进阶笔记
  20. freebsd 启用网关

热门文章

  1. vant weapp 多选上传图片_微信小程序使用Vant Weapp组件库的方法步骤
  2. Blender学习笔记(建模#3:点操作)
  3. 浅谈异或(^),与(),或(|)
  4. redis 学习看这个网站就够了
  5. 用Python图像识别技术打造一个小狗分类器,实现让机器自己去“学习”~
  6. 2012-12-21世界末日是不会来了。
  7. cocoscreator设置层级zIndex使用注意事项
  8. Vue leaning(入门)第四弹
  9. 碎嘴子教学mysql数据库自增
  10. Java:案例理解-接口回调