Mask rcnn-README.md

10 篇文章 0 订阅
5 篇文章 0 订阅

参考:


Mask R-CNN为对象检测和分割

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

该存储库包括:

  • 在FPN和ResNet101上构建的Mask R-CNN的源代码。
  • MS COCO的训练代码
  • 预先训练的MS COCO权重
  • Jupyter notebooks在每一步都可以看到检测管道
  • 用于多GPU训练的ParallelModel类
  • MS COCO指标评估(AP)
  • 训练您自己的数据集的示例

该代码被记录并设计为易于扩展。 如果您在研究中使用它,请考虑引用此存储库。 如果您从事3D视觉工作,您可能会发现我们最近发布的Matterport3D数据集也很有用。 该数据集是由我们的客户拍摄的3D重建空间创建的,这些客户同意将这些空间公开供学术使用。 你可以在这里看到更多的例子。

使用此模型的项目

如果将此模型扩展到其他数据集或构建使用它的项目,我们很乐意听取您的意见。

  • 图像到OSM:使用TensorFlow,Bing和OSM查找卫星图像中的特征。 目标是通过添加高质量的棒球,足球,网球,足球和篮球场来改进OpenStreetMap。
  • 4K视频演示:Karol Majek的4K视频演示。

这里写图片描述

入门

  • demo.ipynb是最简单的开始。 它展示了一个使用MS COCO预先训练的模型来分割自己图像中的对象的例子。 它包括在任意图像上运行对象检测和实例分割的代码。

  • train_shapes.ipynb显示了如何在您自己的数据集上训练Mask R-CNN。 这款notebook引入了一个玩具数据集(Shapes)来演示新数据集的训练。

  • model.pyutils.pyconfig.py):这些文件包含主Mask RCNN实现。

  • inspect_data.ipynb。 该notebook可视化不同的预处理步骤以准备训练数据。

  • inspect_model.ipynb这个notebook深入到执行检测和分割对象的步骤。 它提供了管道每一步的可视化。

inspect_weights.ipynb这款notebook检查训练好的模型的权重并查找异常和奇怪的模式。

逐步检测

为了帮助debugging和理解模型,有3个笔记本(inspect_data.ipynb,inspect_model.ipynb,inspect_weights.ipynb)提供了大量的可视化,并允许逐步运行模型来检查每个点的输出。 这里有一些例子:

1.锚点分类和过滤

可视化第一阶段区域提案网络的每一步,并显示正面和负面的锚点以及锚点框架细化

这里写图片描述

2.边界框细化

这是第二阶段最终检测框(虚线)和应用于它们的细化(实线)的示例。
这里写图片描述

3.Mask生成

生成的mask的示例。 然后将它们缩放并放置在正确位置的图像上。
这里写图片描述

4.层次激活

通常检查不同层的激活以寻找麻烦迹象(全零或随机噪声)是有用的。
这里写图片描述

5.权重直方图

另一个有用的调试工具是检查权重直方图。 这些都包含在inspect_weights.ipynb笔记本中。
这里写图片描述

6.登录到TensorBoard

TensorBoard是另一个伟大的调试和可视化工具。 该模型配置为记录损失并在每个时期结束时保存权重。
这里写图片描述

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

这里写图片描述

MS COCO训练

我们为MS COCO提供预先训练的权重,使其更容易启动。 您可以使用这些权重作为起点来在网络上训练自己的变体。 训练和评估代码在coco.py中。 您可以在Jupyter notebook导入此模块(请参阅提供的笔记本中的示例),也可以直接从命令行运行它,如下所示:

# Train a new model starting from pre-trained COCO weights
python3 coco.py train --dataset=/path/to/coco/ --model=coco

# Train a new model starting from ImageNet weights
python3 coco.py train --dataset=/path/to/coco/ --model=imagenet

# Continue training a model that you had trained earlier
python3 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 coco.py train --dataset=/path/to/coco/ --model=last

您还可以运行COCO评估代码:

# Run COCO evaluation on the last trained model
python3 coco.py evaluate --dataset=/path/to/coco/ --model=last

训练计划,学习率和其他参数应在coco.py中设置。

训练自己的数据集

为了在您自己的数据集上训练模型,您需要对两类进行分类:

Config此类包含默认配置。 对它进行子类化并修改需要更改的属性。

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

Dataset类本身就是基类。 要使用它,创建一个新的类继承它,并添加特定于您的数据集的函数。 请参阅utils.py中的基础Dataset类以及在train_shapes.ipynb和coco.py中进行扩展的示例。

与官方文件的差异

这个实现大部分遵循Mask RCNN论文,但是有些情况下我们偏离了代码简单性和泛化性。这些是我们意识到的一些差异。如果您遇到其他差异,请告诉我们。

  • 图像大小调整:为了支持每批次训练多幅图像,我们将所有图像的大小调整为相同大小。例如,MS COCO上的1024x1024图像。我们保留宽高比,所以如果图像不是正方形,我们用零填充它。在这篇论文中,调整大小的方法是:最小边是800px,最大边是1000px。

  • 边界框:一些数据集提供边界框,一些仅提供掩码。为了支持对多个数据集进行训练,我们选择忽略数据集附带的边界框,然后动态生成它们。我们选取封装所有像素的最小盒子作为边界框。这简化了实现,并且还使得应用某些图像增强变得容易,否则将很难应用于边界框,例如图像旋转。

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

  • 学习率:本文使用的学习率为0.02,但我们发现它太高,并且经常导致权重爆炸,尤其是使用小批量时。这可能与Caffe和TensorFlow计算梯度之间的差异(批次与GPU之间的平均值与平均值之间的差异)有关。或者,也许官方模型使用渐变裁剪来避免这个问题。我们确实使用渐变裁剪,但不要太积极。我们发现无论如何,较小的学习速度会更快地收敛,所以我们就这样做。

  • Anchor Strides:金字塔的最低级别相对于图像的跨度为4px,所以锚点每隔4个像素间隔创建一次。为了减少计算和内存负载,我们采用了2的锚定步长,它将锚点数量减少了4,并且对精度没有显着影响。

贡献

欢迎对这个资料库作出贡献。 你可以贡献的东西的例子:

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

您也可以加入我们的团队,帮助我们构建更多像这样的项目。

要求

  • Python 3.4+
  • TensorFlow 1.3+
  • Keras 2.0.8+
  • Jupyter Notebook
  • Numpy,skimage,scipy,Pillow,cython,h5py

MS COCO要求:

要在MS COCO上进行训练或测试,您还需要:

如果您使用Docker,则代码已验证可在此Docker容器上使用。

安装

1、克隆这个存储库

2、从发布页面下载预先训练好的COCO权重(mask_rcnn_coco.h5)。

3、(可选)在MS COCO上训练或测试从其中一个回购站安装pycocotools。 他们是原始pycocotools for Python3和Windows的补丁(官方repo似乎不再活跃)。

更多示例

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值