MASK R-CNN

https://github.com/facebookresearch/Detectron.

1. 素质四连

  • 要解决什么问题?
    • 之前的研究使得物体检测、图像分割任务的性能有了很大的提高,但对物体分割任务(instance segmentation)没有很大提升。
    • 建立一套基于物体分隔的模型架构。
  • 用了什么方法解决?
    • 在Faster R-CNN添加了预测mask的部分(与预测bbox的类别信息与位置信息平行)。
  • 效果如何?
    • 没有进行大规模优化,就在COCO数据集的三项任务——物体分割、物体检测、人体关键点检测 中超过其他所有模型。
    • 使用RoI Align解决 mis-alignment 的问题,提高模型精度(特别是对于小物体)。
  • 还存在什么问题?
    • Faster R-CNN系模型的主要问题在于测试速度慢,达不到实时要求。
    • PS:为了训练COCO,论文中用8GP训练了2天,对我这种就1块GPU的人来说……

 

2. 网络结构

2.1. 综述

  • 大部分结构与Faster R-CNN相同。
  • 不同之处:
    • 使用RoIAlign替代RoIPool。
    • 添加预测mask的分支(与预测bbox平行)。

2.2. 论文配图如下

  • 流程介绍:
    • 原始图片(图中最左边的图片)通过基础网络(图中忽略)提取特征。
    • RPN(图中忽略)以基础网络特征图为输入,获取一系列RoI(图中 RoIAlign 层中的多个矩形框),即候选区域。
    • RoIAlign(图中RoIAlign) 以基础网络特征图为输入,结合RPN层获取的RoI,为每个RoI获取固定尺寸的特征图(图中左边数第一个conv层)。
    • 以RoIAlign层输出的固定尺寸特征图为输入,预测图像的bbox,包括位置信息与分类信息。(即图中获取 class box的结果)。
    • 以RoIAlign层输出的固定尺寸特征图为输入,预测图像的mask。(即图中两个conv以及最终结果)。

2.3. 模型分层

  • 基础网络,论文中使用了以下两中基础网络:
    • Faster R-CNN原文中使用的ResNet。
    • 另一篇论文中提到的 ResNet-EPN。
  • Head Architecture:
    • 以基础网络输出作为输入,预测bbox、instance segmentation信息。
    • 与Faster R-CNN不同之处(论文配图如下)
      • 灰色背景部分是原先的结构,其他部分是Mask R-CNN的添加部分。

 

3. 重点

3.1. Mask

  • Mask的设计:
    • 对每个RoI分别预测其mask。
    • 解耦(decouple)mask和分类信息,换句话说,就是每一类物体分别预测mask。
    • 从模型角度,每个RoI的的mask预测结果尺寸为[m, m, k],其中m为mask的长宽,k为分类数量。
    • 在实际运行时,根据RoI的分类信息,来选择对应通道的mask。
  • 如何计算mask?
    • 输入:RoIAlign输出的固定尺寸特征图。
    • 输出:shape为[m, m, k]的mask。
    • 方法:论文中说,利用FCN论文(图像分割算法)中的方法计算,本质就是利用转置卷积操作。
    • 其他方法:参考资料TensorFlow Object Detection API 中的 box_predictor.py,_predict_masks函数使用了bilinear resize和convolution来替代转置卷积。

3.2. RoIAlign

    • 在计算RoI Pooling时,会进行两次量化(在这里指的就是去掉小数部分,只保留整数):
      • 获取每个RoI在基础网络特征图中对应的区域时,会对对应区域的特征图边界进行量化。
      • 在将RoI对应的特征图转化为固定尺寸的特征图时,也会进行量化。
    • 问题描述:在进行量化时,特征图对应的原始数据会有减少,影响模型整体精度。
  • 解决方案:保留所有特征图所在浮点数位置坐标,使用双线性插值获取特征图上所有点的取值。
  • 论文配图如下:
    • 图中黑色点就是当前特征图中各点位置(位置坐标不一定是整数)。
    • 图中虚线相交点位置就是原始特征图中各点的实际位置(位置坐标都是整数)。
    • 以左上角黑点为例,双线性插值通过与四个当前黑点最近的实际特征点(位置坐标都是整数),来计算当前特征点(位置坐标不一定是整数)取值。

3.3. 训练细节

  • 损失函数:
    • 分为三部分:分类损失(与Faster R-CNN相同),位置损失(与Faster R-CNN相同),mask损失(本论文特有)。
    • Mask 损失:
      • mask的结果是K*m*m维向量,其中K为类别数量,m*m是mask的最终输出长宽。
      • 计算每个像素的sigmoid结果,最终Mask 损失就是二维交叉熵损失的平均值(average binary cross-entropy loss)。
  • 每个GPU同时训练两张图片(作者用了8GPU,所以batch size是16),输入图片尺寸为800*800。
  • 训练时,每张图片的RoI数量为64/512(根据基础网络不同而改变);测试时每张图片RoI数量为300/1000。
  • 正反例比例为1:3。
  • anchors使用 5 scales 和 3 aspect ratios。
  • weight decay为0.0001。
  • 学习率:0.02,到120k iteration后为除以10。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Mask RCNN 是基于Kaiming 之前的工作 FPN (Feature Pyramid Network) 很形象地说就是用FPN产生的检测结果, 后面加了一个分割的网络. 文章中用到了 Top-Down + Bottom-Up 最近很流行的多层网络, 因为最开始Faster-RCNN只是在最后一层上面检测, 很容易丢掉小目标物体, 并且对细节遮挡也很不敏感. 最近的趋势就是结合多层 特征, 答主孔涛就很早发现了这个insight, 做出了HyperNet 并中了CVPR roal!!!作者:Oh233 链接:https://www.zhihu.com/question/57403701/answer/153060743 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Mask R-CNN 这个结果确实很强,但要同时注意它主要是加上了许多(都是很有用的)engineering techniques 。 比如说 anchor 从 12 增加到了15个,图像 size 从600变成了800,还有ROI batch size变到了512,从FPN那篇paper来看,这些 better practice 会有对性能十分明显的提升 (table 3 baseline: AP=26.3 -> 31.6)。而我们组16年的coco分割竞赛冠军 ,Fully Convolutional Instance-aware Semantic Segmentation (FCIS)的代码昨晚终于开源了。限于计算资源,我们并没有加上这些改进。这些改进应该是比较 general 的,也会适用于 FCIS。欢迎大家试用一波。FCIS 提供了一种简单高效的框架去解决 instance segmentation 的问题。跟之前 COCO 2015 的冠军 MNC 相比,它的主要不同在于 mask estimation 和 detection 是共同做的,而不是先估计 mask 再做 detection。在 FCIS 中 detection/mask estimation 之间通过 inside/outside score map 互相影响,利用了这两个紧密相连 task 之间的共性。现在 release 版本基于支持多卡训练的MXNet,msracver/FCIS。实际上大概今年一月份我们就已经写出了外面可以使用的Caffe版本,但是当时官方 Caffe 只支持单卡做复杂任务的训练,对于COCO这种大规模数据集来说用单卡训练的话一下子几周的时间就过去了。考虑到大家用起来会非常蛋疼,最后还是决定没有release这个版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TWSF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值