Mask R-CNN

论文下载:https://arxiv.org/pdf/1703.06870.pdf

论文翻译:http://weixin.niurenqushi.com/article/2017-03-29/4805787.html

项目地址:https://github.com/TuSimple/mx-maskrcnn

iccv2017的PPT: https://download.csdn.net/download/julialove102123/10444703

 

一. Mask-RCNN 介绍

       Mask-RCNN 来自于Kaiming 大神,通过在 Faster-RCNN 的基础上添加一个分支网络,在实现目标检测的同时,把目标像素分割(添加 Mask)出来。

 

网络分支:

  • 每个候选 object 的 class label - Faster R-CNN
  • 每个候选 object 的 bounding-box offset —— Faster R-CNN
  • 每个候选 object 的 mask - added

 

Faster R-CNN 包括两个阶段:

  • 1st Stage —— Region Proposal Network(RPN),得到候选 object 的 bounding-boxes;
  • 2st Stage —— 采用 RoIPool 从每个候选 box 提取特征,并进行分类和 bounding-box 回归.

   Mask-RCNN 的网络结构改动示意图:

        

       其中 黑色部分为原来的 Faster-RCNN,红色部分为在 Faster网络上的修改:

1)将 Roi Pooling 层替换成了 RoiAlign;

2)添加并列的 FCN 层(mask 层);

        Mask-RCNN 的特点:

1)在边框识别的基础上添加分支网络,用于语义Mask 识别;

2)训练简单,相对于 Faster 仅增加一个小的 Overhead,可以跑到 5FPS;

3)可以方便的扩展到其他任务,比如人的姿态估计等;

4)不借助 Trick,在每个任务上,效果优于目前所有的 single-model entries;

     

二. RCNN行人检测框架

       基于最早的 Faster RCNN 框架,出现不少改进,主要有三篇需要看:

1)作者的推荐: Speed/accuracy trade-offs for modern convolutional object detectors 【arxiv

2)Resnet:arxiv

3)FPN: Feature Pyramid Networks for Object Detection,通过特征金字塔来融合多层特征,实现CNN。【arxiv

       Resnet和FPN方法与 Mask 结合的示意图:

        

       图中灰色部分是 原来的 RCNN 结合 ResNet or FPN 的网络,下面黑色部分为新添加的并联 Mask层,这个图说明作者所提出的Mask RCNN 方法的泛化适应能力 - 可以和多种 RCNN框架结合,表现都不错。

 

三. Mask-RCNN 技术要点

● 技术要点1 - 强化的基础网络

     通过 ResNeXt-101+FPN 用作特征提取网络,达到 state-of-the-art 的效果。

● 技术要点2 - ROIAlign

     采用 ROIAlign 替代 RoiPooling,引入了一个插值过程,先通过双线性插值到14*14,再 pooling到7*7,很大程度上解决了仅通过 Pooling 直接采样带来的 Misalignment 对齐问题

     PS: 虽然 Misalignment 在分类问题上影响并不大,但在 Pixel 级别的 Mask 上会存在较大误差。

 

RoIPool 用于从每个 RoI 中提取小的特征图(如7x7),RoIPool 选择的特征图区域,会与原图中的区域有轻微出入. 首先,对浮点数 RoI 进行量化,再提取分块的直方图,最后利用 max pooling 组合. 导致 RoI 和提取的特征间的 misalignments. 对于平移不变性的分类任务,这种影响不大,但对于精确的像素级 masks 预测具有较大的负影响.

RoIAlign 能够去除 RoIPool 引入的 misalignments,准确地对齐输入的提取特征. 即: 避免 RoI 边界或 bins 进行量化(如,采用x/16来替代round(x/16)四舍五入处理] );采用 bilinear interpolation 根据每个 RoI bin 的四个采样点来计算输入特征的精确值,并采用 max 或 average 来组合结果.

如,假设点 (x,y)(x,y),取其周围最近的四个采样点,在 Y 方向进行两次插值,再在 X 方向 进行两次插值,以得到新的插值. 这种处理方式不会影响 RoI 的空间布局.

假设有一个 128x128 的图像,25x25 的特征图,想要找出与原始图像左上角 15x15 位置对应的特征区域,怎么在特征图上选取像素?

原始图像的每一个像素与特征图上的 25/128 个像素对应. 为了在原始图像选取 15 个像素,在特征图上我们需要选择 15 * 25/128 ~= 2.93 个像素.

对于这种情形,RoIPool 会舍去零头选择两个像素,导致排列问题. 但在 RoIAlign,这种去掉小数点之后数字的方式被避免,而是使用双线性插值(bilinear interpolation)准确获得 2.93 像素位置的信息,避免了排列错误.

[From Face++]

● 技术要点3 - Loss Function

训练时,对每个采样的 RoI 的 multi-task loss 为:

L=Lcls+Lbox+Lmask

  • Lcls - 分类 loss
  • Lbox - bounding-box 回归 loss
  • Lmask - mask 分割 loss

mask 网络分支采用 FCN 对每个  ROIAlign 的分割输出维数为 Km2,即 KS(输出 K 个mask)类别的 m×m (池化分辨率(7*7))的二值 mask. 采用像素级 Sigmoid,定义 Lmask 为平均二值交叉熵损失函数(average binary cross-entropy loss). 一个 RoI 仅与 ground-truth 类别 k 相关,Lmask 只与第 k​ 个 mask 相关,不受其它的 mask 输出的影响.

Lmask 使得网络能够输出每一类的 mask,且不会有不同类别 mask 间的竞争. 分类网络分支预测 object 类别标签,以选择输出 mask,解耦了 mask 和 class 预测间的关系.传统 FCNs 采用 per-pixel 的 softmax 和 multinomial cross-entropy loss,会造成不同类别的 mask 间的相互影响;

Lmask 采用 per-pixel sigmoid 和 binary loss,避免了不同类别的 mask 间的影响. 有效的提升了 instance segmentation 效果.

         注:  Lmask(Cls_k) = Sigmoid (Cls_k),平均二值交叉熵 (average binary cross-entropy)Loss,通过逐像素的 Sigmoid 计算得到。 

     为什么是 K个mask?通过对每个 Class 对应一个 Mask 可以有效避免类间竞争(其他 Class 不贡献 Loss )。

        

     通过结果对比来看(Table2 b),也就是作者所说的 Decouple 解耦,要比多分类 的 Softmax 效果好很多。

四. 对比实验效果

       另外,作者给出了很多实验分割效果,就不都列了,只贴一张 和 FCIS 的对比图(FCIS 出现了Overlap 的问题):

       

五. Mask-RCNN 扩展

       Mask-RCNN 在姿态估计上的扩展,效果不错。

        

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

女王の专属领地

您的鼓励是我最大的动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值