1.项目简介 https://github.com/matterport/Mask_RCNN为源码网址,这是github上基于Python 3、Keras和TensorFlow的Mask R-CNN实现。Mask R-CNN模型会给图像中的每个目标生成边界框和分割掩码。它基于特征金字塔网络(FPN)和ResNet101架构。模型效果可参考下图:
2. 项目的实际应用 a)4K分辨率(4096×2160)视频下进行目标检测和实例分割
b)通过添加棒球场地、足球场地、网球场地和篮球场地等地理标识来改进OpenStreetMap。效果图如下图所示: 注:OpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。[1]
c)显微镜图像中细胞核的分割,效果如下图所示:
d)医疗机器人中的目标检测与分割,用于给机器人手臂操作医疗零部件时提供空间位置信息
e)将卫星图像转换为地图,效果如下图所示:
f)从地理空间图像中生成矢量掩码,效果如下图所示:
3 项目包含的内容 a) 基于FPN和ResNet101架构的源代码 b) 基于MS COCO数据集的模型训练代码 c) 基于MS COCO数据集的预训练权重 d) 使用Jupyter可视化查看算法的每一步流程 e) 为支持多gpu训练设计的类(class) f) 能在MS COCO数据集上对指标进行评估 g) 使用自己的数据集进行训练的样例 4 快速开始使用项目 a) demo.ipynb 展示了一个使用预先在MS COCO数据集上训练过的模型来分割图像中的目标。它包括对任意图像进行对象检测和实例分割的代码。 b) train_shapes.ipynb展示如何在自己的数据集上训练Mask R-CNN模型。这个案例通过一个示例数据集来演示如何在一个新数据集上进行训练。 c) (model.py, utils.py, config.py) 这些文件包含模型的主要实现。 d) inspect_data.ipynb这个案例可视化了在准备训练数据前,不同数据预处理过程。 e) inspect_model.ipynb这个案例深入研究了检测和分割目标的步骤。它提供了算法流程中每个步骤的可视化展示。 f) inspect_weights.ipynb这个案例检查训练过的模型权重文件,查找异常情况。 5 模型检测过程 5.1 Anchors排序和过滤 可视化第一阶段RPN(区域候选网络)的每一步,显示正的anchors和负的anchors以及anchors框位置精修。如下图所示:
5.2 边界框位置精修 进过非极大值抑制(NMS)处理后,可以得到虚线框的检测结果。在第二阶段通过将检测结果进行边界框位置精修得到实线框,结果如下图所示:
5.3 掩码生成 生成Masks之后将Masks缩放并放在图像的正确位置。
5.4 层激活 检查不同层的激活情况来发现异常信号(数值全为零或随机噪声),通常这个步骤会有帮助。具体如下图所示:
5.5 权重直方图 另一个有用的调试工具是检查权重直方图,这些都包含在inspect_weights.ipynb案例中。权重直方图如下所示。
5.6 TensorBoard的日志记录 TensorBoard是另外一个很棒的调试和可视化工具。模型可以在每个epoch结束时,记录损失值以及保存模型权重。损失值图如下所示:
5.7 把不同的部分组合形成最终的结果 将框预测,Mask预测,类别预测组合形成最终的结果,如下图所示:
参考网站: [1]Open Street Map https://baike.baidu.com/item/Open%20Street%20Map/11057294?fr=aladdin&fromid=3171606&fromtitle=openstreetmap
|