Mask R-CNN用于目标检测和分割代码实现

Mask R-CNN for object detection and instance segmentation on Keras and TensorFlow

代码链接:https://github.com/matterport/Mask_RCNN

这是基于Python 3,Keras和TensorFlow 的Mask R-CNN的实现。该模型为图像中对象的每个实例生成边界框和分割masks。基于功能金字塔网络Feature Pyramid Network(FPN)和ResNet101主干网。

该存储库包括:

基于FPN和ResNet101构建的Mask R-CNN的源代码。
MS COCO的训练代码
MS COCO的预训练权重
Jupyter说明文件电脑可在每个步骤可视化检测管线
用于多GPU训练的Parallel Model类
评估MS COCO指标(AP)
自主数据集训练示例

该代码已记录并设计为易于扩展。如果在研究中使用,请考虑引用该存储库(下面的bibtex)。如果从事3D视觉工作,可能会发现最近发布的Matterport3D数据集也很有用。该数据集是由客户捕获的3D重构空间创建的,这些客户同意将其公开提供给学术用途。可以在此处看到更多示例。

开始启动

demo.ipynb是最简单的启动方法。显示了一个示例,该示例使用在MS COCO上进行预训练的模型来分割自己的图像中的对象。包括在任意图像上运行对象检测和实例分割的代码。
train_shapes.ipynb显示了如何在自己的数据集上训练Mask R-CNN。本说明文件介绍了玩具数据集(形状),以演示对新数据集的训练。
(model.py,utils.py,config.py):这些文件包含主要Mask RCNN实现。
inspect_data.ipynb。该说明文件可视化了准备训练数据的不同预处理步骤。
inspect_model.ipynb本说明文件深入介绍了检测和分割对象所执行的步骤。提供了管道中每个步骤的可视化。
inspect_weights.ipynb 此说明文件检查经过训练的模型的权重,并查找异常和奇数模式。

逐步检测

为了帮助调试和理解模型,共有3个说明文件(inspect_data.ipynb,inspect_model.ipynb, inspect_weights.ipynb)提供了很多可视化效果,并允许逐步运行模型以检查每个点的输出。这里有一些例子:

  1. 锚点排序和过滤

可视化第一阶段区域提议网络的每个步骤,并显示正锚和负锚以及锚框的细化。

  1. 边界框优化

这是最终检测框(虚线)的示例,在第二阶段对其进行了改进(实线)。

  1. 遮罩生成

生成的masks示例。然后将缩放并放置在正确位置的图像上。

  1. 分层激活

通常,检查不同层的激活以查找故障迹象(全零或随机噪声)通常很有用。

  1. 重量直方图

另一个有用的调试工具是检查重量直方图。这些都包含在inspect_weights.ipynb说明文件中。

6.登录到TensorBoard

TensorBoard是另一个出色的调试和可视化工具。该模型配置为记录损失并在每个时期结束时节省权重。

7.将不同的部分组合成最终结果

MS COCO训练

正在为MS COCO提供预训练的权重,以使其易于启动。可以将这些权重用作在网络上训练自己的变体的起点。训练和评估代码在中samples/coco/coco.py。可以在Jupyter说明文件中导入此模块(有关示例,请参阅提供的说明文件),也可以直接从命令行运行,如下所示:

# Train a new model starting frompre-trained COCO weights

python3 samples/coco/coco.py train
–dataset=/path/to/coco/ --model=coco

# Train a new model starting from ImageNetweights

python3 samples/coco/coco.py train
–dataset=/path/to/coco/ --model=imagenet

# Continue training a model that you hadtrained earlier

python3 samples/coco/coco.py train
–dataset=/path/to/coco/ --model=/path/to/weights.h5

# Continue training the last model you
trained. This will find

# the last trained weights in the model
directory.

python3 samples/coco/coco.py train
–dataset=/path/to/coco/ --model=last

还可以使用以下命令运行COCO评估代码:

# Run COCO evaluation on the last trained
model

python3 samples/coco/coco.py evaluate
–dataset=/path/to/coco/ --model=last

训练时间表,学习率和其参数应在中设置samples/coco/coco.py。

训练自己的数据集

首先阅读有关气球颜色飞溅示例的博客文章。涵盖了从注释图像到训练再到在示例应用程序中使用结果的过程。

总之,要在自己的数据集上训练模型,需要扩展两个类:

Config 此类包含默认配置。对其进行子类化,然后修改需要更改的属性。

Dataset 此类提供了使用任何数据集的一致方式。允许使用新的数据集进行训练,而无需更改模型的代码。还支持同时加载多个数据集,如果要检测的对象在一个数据集中并非全部可用,这将很有用。

见例子samples/shapes/train_shapes.ipynb,samples/coco/coco.py,samples/balloon/balloon.py,和samples/nucleus/nucleus.py。

与官方文件的差异

此实现大部分遵循Mask RCNN论文,但是在少数情况下,偏向于代码简单和通用化。这些是知道的一些差异。如果遇到其差异,请告诉。

图像调整大小:为了支持每批训练多幅图像,将所有图像调整为相同大小。例如,在MS COCO上为1024x1024px。保留宽高比,因此,如果图像不是正方形,则将其填充为零。在本文中,进行了调整大小,以使最小的一面为800像素,最大的一面为1000像素。
边界框:某些数据集提供边界框,而某些数据集仅提供masks。为了支持对多个数据集的训练,选择忽略数据集随附的边界框,而是动态生成。选择封装masks所有像素的最小框作为边界框。这简化了实现,并且还使图像增强很容易应用,否则图像增强将很难应用于边界框,例如图像旋转。

为了验证这种方法,将计算出的边界框与COCO数据集提供的边界框进行了比较。发现〜2%的边界框相差1px或更多,〜0.05%的边界相差5px或更多,只有0.01%的相差10px或更多。

学习率:本文使用的学习率是0.02,但发现该值太高,通常会导致权重爆炸,尤其是在使用小批量时。这可能与Caffe和TensorFlow计算梯度之间的差异(批次与GPU之间的总和与均值)之间的差异有关。或者,也许官方模型使用渐变修剪来避免此问题。确实使用了梯度裁剪,但不要设置得太过激。发现,较小的学习率无论如何都会收敛得更快,因此继续这样做。

引文

使用以下bibtex引用此存储库:

@misc{matterport_maskrcnn_2017,

title={Mask R-CNN for object detection and instance segmentation on
Keras and TensorFlow},

author={Waleed Abdulla},

year={2017},

publisher={Github},

journal={GitHub repository},

howpublished={\url{https://github.com/matterport/Mask_RCNN}},

}

贡献

欢迎对该存储库做出贡献。可以做出贡献的示例:

速度改进。就像在TensorFlow或Cython中重写一些Python代码一样。
训练其数据集。
精度提高。
可视化和示例。

也可以加入团队,并帮助建立更多像这样的项目。

要求

列出了Python 3.4,TensorFlow 1.3,Keras 2.0.8和其常见软件包requirements.txt。

MS COCO要求:

要对MS COCO进行训练或测试,还需要:

pycocotools(下面的安装说明)
MS COCO数据集
下载5K minival 和35K 验证减去最小值 子集。更多详细信息,请参见原始的Faster R-CNN实现。

如果使用Docker,则代码已通过验证可在此Docker容器上工作 。

安装

copy此存储库
安装依赖

pip3 install -r requirements.txt

从存储库根目录运行安装程序

python3 setup.py安装

从发布页面下载预训练的COCO权重(mask_rcnn_coco.h5)。
(可选)pycocotools从这些存储库之一中进行MS COCO安装的训练或测试。是原始pycocotools的分支,具有针对Python3和Windows的修复(官方仓库似乎不再处于活动状态)。

Linux:https://github.com/waleedka/coco
Windows:https://github.com/philferriere/cocoapi。路径上必须具有Visual C ++ 2015生成工具(有关更多详细信息,请参见repo)

Mask R-CNN用于目标检测和分割代码实现相关推荐

  1. CVPR2022知识蒸馏用于目标检测:Focal and Global Knowledge Distillation for Detectors

    论文下载:https://arxiv.org/abs/2111.11837 源码下载:https://github.com/yzd-v/FGD Abstract 知识蒸馏已成功应用于图像分类.然而目标 ...

  2. 【CV】Mask R-CNN:用于目标实例分割的通用框架

    论文名称:Mask R-CNN 论文下载:https://arxiv.org/abs/1703.06870 论文年份:2017 论文被引:18354(2022/05/03) Abstract We p ...

  3. 【Pytorch神经网络理论篇】 33 基于图片内容处理的机器视觉:目标检测+图片分割+非极大值抑制+Mask R-CNN模型

    基于图片内容的处理任务,主要包括目标检测.图片分割两大任务. 1 目标检测 目标检测任务的精度相对较高,主要是以检测框的方式,找出图片中目标物体所在的位置.目标检测任务的模型运算量相对较小,速度相对较 ...

  4. 即插即涨2-3%!AC-FPN:用于目标检测的注意力引导上下文的特征金字塔网络

    关注 点击关注上方"AI深度视线",并"星标"公号 技术硬文,第一时间送达! 精彩内容 AC-FPN--用于目标检测的注意力引导上下文的特征金字塔网络 ,即插即 ...

  5. 准确度判断 语义分割_Mask R-CNN(目标检测语义分割)测试

    Mask R-CNN(目标检测语义分割)测试 Mask R-CNN(目标检测,语义分割)测试 Kaiming He的大作Mask R-CNN(https://arxiv.org/pdf/1703.06 ...

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

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

  7. MoCo不适用于目标检测?MSRA提出对象级对比学习的目标检测预训练方法SoCo!性能SOTA!(NeurIPS 2021)...

    关注公众号,发现CV技术之美 本文分享 NeurIPS 2021 论文『Aligning Pretraining for Detection via Object-Level Contrastive ...

  8. CVPR2019| 最新CVPR2019论文:含目标检测、分割、深度学习、GAN等领域

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 推荐几篇CPRR2019最新论文,含目标检测.分割.深度表示.GAN等领域 [1]Strong-Weak Distr ...

  9. 带你读AI论文丨用于目标检测的高斯检测框与ProbIoU

    摘要:本文解读了<Gaussian Bounding Boxes and Probabilistic Intersection-over-Union for Object Detection&g ...

最新文章

  1. php ping 命令注入,CTF关于ping命令注入问题
  2. 2020-11-11(aidl)
  3. 最新虚拟机VMware 下载安装
  4. extjs 页面打开时表格自动加载后台传来的json数据
  5. python 字体_python docx字体设置
  6. 怀念一下过去的人和事
  7. 还在纠结数据仓库和数据湖的二选一?滴普科技FastData教你两手兼得
  8. Excel插入复选框
  9. 怎么linux添加guest,如何为Ubuntu 16.04安装VirtualBox Guest Additions
  10. 鲁冠球:冲向世界的打铁匠
  11. for循环后面的分号
  12. 北京智源大会 | AI + 医疗的下一个十年:从公共卫生预警到人类基因密码破解 道翰天琼认知智能api机器人接口。
  13. 466. 回文日期 Java题解 (模拟)
  14. 嵌入式驱动工程师学习路线【建议收藏】
  15. linux:线程同步的5种方法
  16. flink的java api_Flink 流处理API之二
  17. python怎么做游戏主播_当游戏主播需要什么条件
  18. 好的阅读就是主动阅读
  19. 「角」毫米波雷达前装增速放缓?哪些供应商位居TOP10
  20. 【C/C++】%2d,%02d是什么意思

热门文章

  1. 前端Vue学习之路(一)-初识Vue
  2. js获取html代码中所有图片地址
  3. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)
  4. GPU与CPU交互技术
  5. 将深度学习低延迟推理性能提高一倍
  6. Python:Scrapy Shell
  7. [JS]请填充代码,使mySort()能使传入的参数按照从小到大的顺序显示出来。
  8. python list 的乘法
  9. Python 单下划线(“_“)与双下划线(“__“)以及以双下划线开头和结尾的的区别
  10. python 使用 struct 把数据变成字节流