Mask R-CNN阅读总结

Mask R-CNN论文阅读笔记

三个重要概念的区别

物体检测,语义分割,实例分割三者之间的区别
物体检测(object detection)的目标是确定每个物体的类别,并用bounding box标记出每个物体的位置。
语义分割(semantic segmentation)的目标是像素级别的确定每个物体的分类及位置,但不区分同一类别的不同个体。
实例分割(instance segmentation)的目标是在语义分割的基础上进一步区分不同的实例。
三者间的区别示例

论文提出背景

物体检测和语义分割的快速发展受益于强有力的基础架构的提出,比如物体检测的Faster R-CNN,语义分割的FCN,但FCN通常执行每像素多类分类(per-pixel multi-class categorization),分割和分类同时进行,基于我们的实验,FCN对于目标分割效果不佳。但这些方法都没有区分不同的实例,这就是Mask R-CNN提出的原因。

主要贡献

1.在Faster R-CNN原有的基础上拓展了一个新的分支来在每个ROI上像素级别地预测分割masks,该分支与原有的classification 、bounding box regression并行进行。
2.对于Fast/Faster R-CNN缺失的像素级别的输入与输出的对齐,本文提出了 RoIAlign 方法解决这一问题,忠实得保留了精确的空间位置。
3.发现将掩码和类别预测解耦至关重要:独立地为每个类别预测一个二进制掩码,类别之间没有竞争,并且依靠网络的ROI分类分支来预测类别。相比之下,FCNs通常以像素为单位进行多类分类,将分割和分类结合在一起,基于实验发现对于实例分割效果很差。

相关工作

Instance segmentation实例分割

  • 早期方法 [13, 15, 16, 9] :bottom-up segments(???不理解)
  • DeepMask [33] and following works [34, 8] :先提出分割建议,再利用Fast-RCNN进行分类

以上方法分割早于分类,速度慢且不准确

  • Dai et al. [10] :提出了一种多阶段级联的方法,从bounding box 建议中预测分割建议,最后做分类
  • Li et al. [26]提出FCIS将分割建议与物体检测系统融合,核心思想是训练一个对位置敏感的卷积网络,同时预测分类,boxes位置和mask。该方法速度得到提升,但对于重叠实例表现较差
  • 对每个像素进行多分类 [23, 4, 3, 29]:试图将相同类别的像素分割成不同的实例
  • Mask R-CNN:分割与bounding box回归和分类平行进行

损失函数

在这里插入图片描述

  • 第一项的第二项的定义与Fast R-CNN相同
  • Mask输出为K×(m×m)维,对每个像素应用sigmoid(判断是前景还是背景),损失函数为average binary cross-entropy loss.仅在真实标签为K的ROI区域上计算mask损失(还没有搞清楚,暂时理解是下图)
  • 之前利用将FCN应用于像素级softmax和多重交叉熵损失的语义分割在实例分割任务上会造成类间竞争

在这里插入图片描述
原文如下,理解了修改
we rely on the dedicated classification branch to predict the class label used to select the output mask. This decouples mask and class prediction.
我们依靠专用分类分支来预测用于选择输出掩码的类别标签。这分离了掩码和类预测。
在这里插入图片描述(产生k个m*m的预测??

做到像素对齐的原因

Mask 对输入对象的空间布局进行了编码,提取mask的空间结构可以通过卷积提供的像素到像素的对应关系来进行处理。(分类和box 偏移通过全连接层被压缩为短的输出向量,因此损失了空间信息)
具体来说,用FCN对每个ROI区域预测m×m的mask,这允许mask分支中的每个层保持显式的m×m对象空间布局,而不会将其折叠为缺乏空间维度的矢量表示。

ROIPool实现步骤

  1. 量化(取整):首先将ROI浮点数量化为特征映射的离散粒度(granularity)
  2. 将量化后的ROI细分到已经被量化的spatial bin(**bin怎么量化???**比如15×15的一张图要分成4个bin(2×2)则15÷2就会四舍五入)
  3. 池化:对每个bin进行池化操作(通常是max pooling)

量化导致了ROI与提取的特征之间无法对齐,虽然这不会对分类结果产生影响,因为分类对小幅度的变换具有一定的鲁棒性,但对于预测像素精度的mask会产生很大的负面影响。

ROIAlign实现细节

为了处理上述问题,本文作者提出了ROIAlign层,移除了ROIPool的量化操作(boundaries和bin)
在这里插入图片描述(下图步骤还没搞清楚
在这里插入图片描述

具体实现: 使用双线性插值来计算每个ROI bin中四个规则采样位置的输入特征的精确值,并聚合结果(max/average pooling)
在这里插入图片描述
Feature Pyramid network(FPN)[27]提取特征更有效,了解一下!!

网络结构

Faster R-CNN结构
在这里插入图片描述Mask R-CNN整体结构
在这里插入图片描述

头部网络结构
在这里插入图片描述
特征金字塔网络
在这里插入图片描述在这里插入图片描述

  • (a)先生成多个尺度的图片,在分别提取特征形成特征图,最后分别做预测
  • (b)对原始图片多次提取特征,在最后一个特征图上做预测(SPPnet/Fast/Faster采用 )
  • (c)对原始图片多次提取特征,每个特征图都进行预测(SSD采用)
  • (d)将顶层特征图通过上采样的方式生成底层特征图,再分别预测
    在这里插入图片描述卷积过程中,特征图尺寸不改变的层称为一个stage,将每个stage最后一个特征图输出形成特征金字塔

训练细节

  • 超参数设置遵循Fast/Faster R-CNN中的设置
  • IOU>0.5为正例,mask损失仅在正例上计算
  • mask的目标是ROI与其相关联的标签mask的交集

测试细节

  1. 提出区域建议:C4架构的网络建议数为300,FPN为1000
  2. 在区域建议上运行边框预测
  3. 非极大值抑制
  4. 在置信度前100个建议区域运行mask 分支

测试时并未采用训练时的三个分支平行进行,加快了测试速度,提升了准确率(因为使用了更少、更准确的ROI)
掩码分支可以预测每个ROI的K个mask,但是我们只使用第k个mask,其中k是分类分支预测的类别。然后,将m×m浮点数mask输出的大小调整为ROI大小(??),并以0.5的阈值将其二值化

实验结果分析

a)底层网络
在这里插入图片描述

  • 更好的底层网络带来了预期的收益
  • 更深的网络做的更好
  • FPN优于C4

AP50表示average precision > 0.5的概率

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值