AIHGF

Github项目 - Mask R-CNN 的 Keras 实现
Mask R-CNN 实现了实例分割, 目标检测, 姿态估计有效统一, 取得了很赞的效果. Facebook 开源...
扫描右侧二维码阅读全文
30
2018/05

Github项目 - Mask R-CNN 的 Keras 实现

Mask R-CNN 实现了实例分割, 目标检测, 姿态估计有效统一, 取得了很赞的效果.
Facebook 开源了基于 Caffe2 的源码实现 - Detectron.
但这里学习的是 matterport 开源的基于 Keras 和 TensorFlow 的 Mask R-CNN 版本 - matterport/Mask_RCNN.

[Github - matterport/Mask_RCNN]

论文细节可见: 论文阅读 - Mask R-CNN

基于 Keras 的 Mask R-CNN

该 Github 项目的实现, 基于: Python 3.4, Keras2.0.8, TensorFlow1.3.
依赖项可见 requirements.txt 文件.

模型可以输出图片中每一个实例的边界框和分割 masks.

项目组成:

[1] - 基于 FPN 和 ResNet101 的 Mask R-CNN 源码.
[2] - MS COCO 的训练代码.
[3] - MS COCO 的预训练模型权重.
[4] - Jupyter notebooks, 可视化每一步的检测过程.
[5] - multi-GPU 训练的并行模型类 ParallelModel class.
[6] - MS COCO 度量(AP) 的评测
[7] - 自定义数据集上的训练样例.

该代码的文档和设计, 易于扩展.
如果在研究中涉及该项目, 请添加引用.
如果在进行 3D Vision 研究, 可以查看 Matterport3D 数据集.

1 开始文档

  • demo.ipynb. 简单的测试 Demo.
    该文档给出测试样例: 采用 MS COCO 数据集预训练的模型分割图片中的目标物体. 可以对任意图片生成目标检测和实例分割结果.

  • train_shapes.ipynb, 在自定义数据集上训练 Mask R-CNN 教程.

  • (model.py, utils.py, config.py), Mask R-CNN 的主要实现和配置脚本.

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

  • inspec_model.ipynb, 深入了解物体检测和分割. 对流程的每一步进行可视化.

  • inspect_weights.ipynb, 检查训练的模型的权重, 寻找可能存在的异常和奇怪模式.

2 检测的逐步拆解

为了便于理解和调试模型, 该项目提供了三个 notebooks, 进行可视化和逐步运行模型, 以分析每个点的输出情况:



例如:

2.1 Anchor 的排序与过滤



对于第一阶段的 RPN, Region Proposal Network, 进行可视化,并显示随着 anchor box 的改善所得到的 positive 和 negative anchors.


2.2 边界框改善(bounding box refinement)



这里给出了最终的检测 boxes 的示例(虚线框), 以及在第二阶段改善后的 boxes(实线框).


2.3 Mask 生成



生成的 Mask 示例. 这些 Masks 再进行处理, 得到最终的正确 Masks, 如 scaled.


2.4 网络层的激活值(layer activations)



一般情况下, 查看不同网络层的激活值能够有助于查看异常,如都是 0 或者噪声等.


2.5 权重直方图(weight histograms)



权重直方图也是模型调试的有用工具. 可以参看: inspect_weights.ipynb


2.6 TensorBoard 可视化 log



TensorBoard 是很有用的调试和可视化工具.
模型训练时, 每个 epoch 都会输出 losses log 和保存模型权重.


2.7 将不同部分组成最终结果





3. MS COCO 数据集上的模型训练



这里提供了在 MS COCO 数据集上训练的模型权重. 可以将其作为训练的起始点, 继续进行训练.

训练和评测代码: samples/coco/coco.py.

可以在 Jupyter notebook 中导入该模块, 或者直接运行下面的命令:

# 从 pre-trained COCO weights 开始训练新的模型
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=coco

# 从 ImageNet weights 开始训练新的模型
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=imagenet

# 从先前的训练状态继续训练模型
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=/path/to/weights.h5

# 从训练的最后模型继续进行训练. 会自动从模型路径寻找训练的最后权重.
python3 samples/coco/coco.py train --dataset=/path/to/coco/ --model=last


也可以运行 COCO 评测代码:

# 对最后训练的模型进行 COCO 评测
python3 samples/coco/coco.py evaluate --dataset=/path/to/coco/ --model=last


训练设置, 学习率等其它参数的设置在: samples/coco/coco.py.

4. 自定义数据集上的模型训练



可以参考 颜色填充 - 基于 Mask R-CNN 和 TensorFlow 的实例分割, Splash of Color: Instance Segmentation with Mask R-CNN and TensorFlow, 介绍了在一个简单应用中, 从图片标注到模型训练,以及模型使用.

在自定义数据集上的模型训练, 主要需要扩展两个类:
[1] - Config - 包含默认配置. 可以根据需要, 添加子类, 修改对应的属性.
[2] - Dataset - 便于处理任何数据集. 不需要修改模型代码, 即可适用于新数据集. 也支持同时加载多种数据集.

具体 Demo, 可参考:
- samples/shapes/train_shapes.ipynb
- samples/coco/coco.py
- samples/balloon/balloon.py
- samples/nucleus/nucleus.py

5. 与论文的不同之处



该 Github 项目大部分是基于 Mask R-CNN 论文, 但有一些地方为了代码间接和泛化, 有些不同.
主要的区别如下:


[1] - 图像调整 Image Resizing - 为了支持每个 batch 训练多张图片, 这里将所有的图片调整为相同尺寸.
例如, MS COCO 图片尺寸调整为 1024x1024. 调整时, 保持了图片的长宽比. 因此, 如果图片不是方形的, 则补零.
论文里是调整图片短边尺寸为 800 px, 最大为 1000 px.

  • [2] - 边界框 Bounding Boxes - 某些数据只有边界框或者只有 mask 标注. 为了支持同时多个训练数据, 这里忽略数据集标注的边界框数据, 而是在线生成边界框标注. 将囊括所有 mask 像素的最小 box 作为边界框. 这样可以简化实现, 更易于进行图片增强.

  • [3] - 学习率 Learning Rate - 论文采用学习率为 0.02, 但这里发现 0.02 值太大, 经常出现发散, 尤其是 batchsize 很小时. 可能原因是 Caffe 和 TensorFlow 计算差值方式的不同(sum vs mean across batches and GPUs).
    或者是, 官方实现采用了梯度裁剪. 这里也尝试了梯度裁剪, 但并没有太明显的效果.
    作者发现, 采用较小的学习率不管怎样都可以很快收敛.

  • 6. MS COCO 数据集

    在 MS COCO 数据集上的训练, 需要:
    - pycocotools
    - MS COCO Dataset
    - 下载 5K minival35K validation-minus-minival 子数据集. 更多细节参考 Faster R-CNN 实现.

    Docker 版

    7. 安装

    • 依赖项安装
    pip3 install -r requirements.txt
    
    • 克隆项目
    git clone https://github.com/matterport/Mask_RCNN.git
    
    • 运行项目根目录中的 setup.py
    python3 setup.py install
    
    • 下载预训练的 COCO 权重 - mask_rcnn_coco.h5

    • [可选] MS COCO 数据集所需工具 - pycocotools

    8. 基于该模型的项目

    Last modification:October 9th, 2018 at 09:31 am

    Leave a Comment