开源项目,2万3千星!岂止是工业级,简直就是军事级!(貌似好像的确用在军事领域,老外真牛,测试图片都用军方照片,至于哪个军方,咱不知道,咱也不想知道)
这么好的东西,当然要分享到国内,我们就是学技术。其他少扯
国内镜像
http://www.gitpp.com/dsboy/mask_rcnn
该存储库包括:
该代码已记录并设计为易于扩展。如果您在研究中使用它,请考虑引用此存储库(下面的 bibtex)。如果您从事 3D 视觉工作,您可能会发现我们最近发布的 Matterport3D 数据集也很有用。该数据集是根据我们的客户捕获的 3D 重建空间创建的,他们同意将其公开供学术用途。您可以 在此处 查看更多示例 。
入门 demo.ipynb 是最简单的开始方法。它展示了使用在 MS COCO 上预训练的模型来分割您自己的图像中的对象的示例。它包括在任意图像上运行对象检测和实例分割的代码。
train_shapes.ipynb 展示了如何在您自己的数据集上训练 Mask R-CNN。本笔记本引入了一个玩具数据集(形状)来演示对新数据集的训练。
( model.py 、 utils.py 、 config.py ):这些文件包含主要的 Mask RCNN 实现。
spect_data.ipynb 。该笔记本可视化了准备训练数据的不同预处理步骤。
spect_model.ipynb 该笔记本深入介绍了检测和分割对象所执行的步骤。它提供了管道每个步骤的可视化。
spect_weights.ipynb 该笔记本检查训练模型的权重并查找异常和奇怪的模式。
逐步检测 为了帮助调试和理解模型,有 3 个笔记本( inspect_data.ipynb 、 inspect_model.ipynb 、 inspect_weights.ipynb )提供了大量可视化,并允许逐步运行模型以检查每个点的输出。这里有一些例子:
1.锚点排序和过滤 可视化第一阶段区域提议网络的每一步,并显示正锚点和负锚点以及锚框细化。
2. 边界框细化 这是最终检测框(虚线)和第二阶段对其应用的细化(实线)的示例。
3. 掩模生成 生成的掩码示例。然后将它们缩放并放置在图像上的正确位置。
4.层激活 通常,检查不同层的激活以查找问题迹象(全零或随机噪声)很有用。
5. 权重直方图 另一个有用的调试工具是检查权重直方图。这些包含在inspect_weights.ipynb笔记本中。
6. 记录到 TensorBoard TensorBoard 是另一个出色的调试和可视化工具。该模型配置为在每个时期结束时记录损失并保存权重。
6. 将不同的部分组合成最终结果
MS COCO 训练 我们为 MS COCO 提供预训练的权重,以使其更容易启动。您可以使用这些权重作为起点来训练您自己的网络变体。培训和评估代码位于 samples/coco/coco.py
.您可以在 Jupyter 笔记本中导入此模块(请参阅提供的笔记本以获取示例),也可以直接从命令行运行它,如下所示:
# Train a new model starting from pre-trained COCO weights python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=coco # Train a new model starting from ImageNet weights python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=imagenet # Continue training a model that you had trained 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 像素。
边界框 :一些数据集提供边界框,一些数据集仅提供掩模。为了支持对多个数据集的训练,我们选择忽略数据集附带的边界框并动态生成它们。我们选择封装掩模所有像素的最小框作为边界框。这简化了实现,也使得应用图像增强变得容易,否则图像增强很难应用于边界框,例如图像旋转。
为了验证这种方法,我们将计算出的边界框与 COCO 数据集提供的边界框进行了比较。我们发现~2% 的边界框相差 1 像素或更多,~0.05% 的边框相差 5 像素或更多,只有 0.01% 的边框相差 10 像素或更多。
学习率: 论文使用了0.02的学习率,但我们发现它太高了,经常会导致权重爆炸,特别是在使用小批量时。这可能与 Caffe 和 TensorFlow 计算梯度的方式(批次和 GPU 上的总和与平均值)之间的差异有关。或者,也许官方模型使用梯度裁剪来避免这个问题。我们确实使用了渐变裁剪,但不要设置得太激进。我们发现较小的学习率无论如何收敛得更快,所以我们就这样做。
这个项目基于一篇很厉害的论文 论文《 Mask R-CNN》
https://arxiv.org/abs/1703.06870
论文《Mask R-CNN》在计算机视觉领域产生了巨大的影响,它扩展了Faster R-CNN这一流行的目标检测框架,将其演化为一个更强大的实例分割框架。下面是对该论文的解读:
引言 :
网络结构 :
Mask R-CNN基于Faster R-CNN,但添加了一个额外的并行分支用于预测分割掩码。这个分支与现有的分类和边界框回归分支并行。
主干网络(如ResNet)用于提取图像的特征,然后这些特征被传递到RPN(Region Proposal Network)来生成提议(Proposals)。
接着,RoIAlign层被引入来更精确地对齐提议的特征,这是与Faster R-CNN中使用的RoIPool层的主要区别。RoIAlign通过消除量化步骤,显著提高了掩模的准确性。
RoIAlign :
RoIAlign是为了解决RoIPool中由于量化步骤导致的空间不对齐问题。
在RoIPool中,由于量化到特征图的离散粒度,会引入误差。RoIAlign通过采用双线性插值来获得精确的浮点数坐标,从而避免了这种量化误差。
实验表明,RoIAlign可以显著提高掩模的精度,有时甚至可以提高10%到50%。
损失函数 :
Mask R-CNN的损失函数是分类损失、边界框回归损失和掩模损失的组合。
分类损失和边界框回归损失与Faster R-CNN中使用的相同。
掩模损失是针对每个RoI的逐像素二元交叉熵损失。由于每个RoI可能包含多个目标,因此为每个类别独立预测一个掩模,而不依赖于类别预测。
实验结果 :
结论 :
总的来说,Mask R-CNN的提出是计算机视觉领域的一个重要里程碑,它为实例分割任务提供了一个高效且准确的解决方案,并启发了后续许多相关的研究工作。
开源项目,2万3千星!岂止是工业级,简直就是军事级!(貌似好像的确用在军事领域)
国内镜像
http://www.gitpp.com/dsboy/mask_rcnn