这是Python 3,Keras和TensorFlow上Mask R-CNN的实现。该模型为图像中的每个对象实例生成边界框和分割掩码。它基于特征金字塔网络(FPN)和ResNet101主干网。
该存储库包括:
- 在FPN和ResNet101上构建的Mask R-CNN的源代码。
- MS COCO的训练代码
- 预先训练的MS COCO权重
- Jupyter笔记本电脑在每一步都可以看到检测管道
- 用于多GPU培训的ParallelModel类
- MS COCO指标评估(AP)
- 训练您自己的数据集的示例
该代码被记录并设计为易于扩展。 如果您在研究中使用它,请考虑引用此存储库。 如果您从事3D视觉工作,您可能会发现我们最近发布的Matterport3D数据集也很有用。 这个数据集是由我们的客户拍摄的3D重建空间创建的,这些客户同意将它们公开供学术使用。 你可以在这里看到更多的例子。
Getting Started
- demo.ipynb是最简单的开始。 它展示了一个使用MS COCO预先训练的模型来分割自己图像中的对象的例子。 它包括在任意图像上运行对象检测和实例分割的代码。
- train_shapes.ipynb显示了如何在您自己的数据集上训练Mask R-CNN。 这款笔记本引入了一个仿真数据集(Shapes)来演示新数据集的训练。
- (model.py,utils.py,config.py):这些文件包含主掩码RCNN实现。
- inspect_data.ipynb。 该笔记可视化不同的预处理步骤以准备训练数据。
- inspect_model.ipynb这个笔记深入到执行检测和分割对象的步骤。 它提供了管道每一步的可视化。
- inspect_weights.ipynb这款笔记检查训练好的模型的权重并查找异常和奇怪的模式。
Step by Step Detection
为了帮助调试和理解模型,有3个笔记(inspect_data.ipynb,inspect_model.ipynb,inspect_weights.ipynb)提供了大量的可视化,并允许逐步运行模型来检查每个点的输出。 这里有一些例子:
Anchor sorting and filtering
可视化第一阶段区域提案网络的每一步,并显示正面和负面的锚点以及锚点框架细化。Bounding Box Refinement
这是第二阶段最终检测框(虚线)和应用于它们的细化(实线)的示例。- Mask Generation
生成的掩码的示例。 然后将它们缩放并放置在正确位置的图像上。 - Layer activations
通常检查不同层的激活以寻找麻烦迹象(全零或随机噪声)是有用的。 - Weight Histograms
另一个有用的调试工具是检查重量直方图。 这些都包含在inspect_weights.ipynb笔记中。
- Logging to TensorBoard
TensorBoard是另一个伟大的调试和可视化工具。 该模型配置为记录损失并在每个时期结束时保存权重。- Composing the different pieces into a final result