社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

工业级目标检测!GitHub 2万3千星!

GitHubFun网站 • 9 月前 • 262 次点击  

开源项目,2万3千星!岂止是工业级,简直就是军事级!(貌似好像的确用在军事领域,老外真牛,测试图片都用军方照片,至于哪个军方,咱不知道,咱也不想知道)

这么好的东西,当然要分享到国内,我们就是学技术。其他少扯

国内镜像

http://www.gitpp.com/dsboy/mask_rcnn

该存储库包括:

  • 基于 FPN 和 ResNet101 构建的 Mask R-CNN 源代码。

  • MS COCO 的训练代码

  • MS COCO 的预训练权重

  • Jupyter 笔记本可可视化每一步的检测管道

  • 用于多 GPU 训练的 ParallelModel 类

  • MS COCO 指标评估 (AP)

  • 在您自己的数据集上进行训练的示例

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

入门

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

  • train_shapes.ipynb展示了如何在您自己的数据集上训练 Mask R-CNN。本笔记本引入了一个玩具数据集(形状)来演示对新数据集的训练。

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

  • spect_data.ipynb。该笔记本可视化了准备训练数据的不同预处理步骤。

  • spect_model.ipynb该笔记本深入介绍了检测和分割对象所执行的步骤。它提供了管道每个步骤的可视化。

  • spect_weights.ipynb 该笔记本检查训练模型的权重并查找异常和奇怪的模式。

逐步检测

为了帮助调试和理解模型,有 3 个笔记本(inspect_data.ipynbinspect_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.pysamples/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这一流行的目标检测框架,将其演化为一个更强大的实例分割框架。下面是对该论文的解读:

  1. 引言

  • Mask R-CNN的提出是为了解决实例分割(Instance Segmentation)的问题,即不仅检测图像中的目标,还为每个目标生成一个精确的分割掩码。

  • 此前的方法,如Faster R-CNN,主要关注目标检测,而Mask R-CNN通过添加一个并行的分支来预测每个RoI(Region of Interest)的分割掩码,从而实现了实例分割。

  • 网络结构

    • 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在各种数据集上的卓越性能,包括COCO数据集。

    • 与其他方法相比,Mask R-CNN在实例分割任务上取得了显著的优势,同时保持了实时性能。

  • 结论

    • Mask R-CNN通过引入一个并行的掩模预测分支和RoIAlign层,成功地将Faster R-CNN扩展为一个强大的实例分割框架。

    • 该方法在各种数据集上展示了卓越的性能,为计算机视觉领域的研究和应用提供了新的方向。

    总的来说,Mask R-CNN的提出是计算机视觉领域的一个重要里程碑,它为实例分割任务提供了一个高效且准确的解决方案,并启发了后续许多相关的研究工作。


    开源项目,2万3千星!岂止是工业级,简直就是军事级!(貌似好像的确用在军事领域)

    国内镜像

    http://www.gitpp.com/dsboy/mask_rcnn


    Python社区是高质量的Python/Django开发社区
    本文地址:http://www.python88.com/topic/173102
     
    262 次点击