Mask RCNN个人见解

Mask RCNN论文阅读


Mask RCNN是实例分割架构,以Faster RCNN为原型,增加了用于分割任务的分支,但是比Faster RCNN慢一些,也可用于其他任务诸如人体姿态估计等

1.简介

  • 实例分割任务与目标检测不同点在于不仅要找到物体还要详细勾勒出边缘。给每个像素进行确定的分了。它在Faster RCNN的基础上进行扩展,对每个proposal都使用FCN进行语义分割,其与定位、分类任务一同进行
  • ROI Align代替 ROI Pooling。
  • 我们的模型又快又好
  • 我们的模型在Faster RCNN基础上一改就行,好实现
  • 对每个类都独立地产生一个binary mask,与直接使用FCN同时进行多任务比起来效果更好
  • 框架同样适用于人体姿态估计,效果也很好

2.相关工作(名词)

  • RCNN
  • 实例分割

3.Mask R-CNN

  • 回顾Faster RCNN:Faster RCNN分为两个stage,第一个stage是RPN网络,产生候选框(candidate object bounding boxes),第二个stage是类似Fast RCNN,从候选框利用RoIPool提取特征并且进行分类和回归任务

  • Mask RCNN: 采用相同的two-stage 思想,有一个类似的first stage 同样是RPN,在second stage,不仅同时预测分类和bbox还要对与每一个RoI输出一个binary mask

  • 损失函数: L = L c l s + L b o x + L m a s k L=L_{cls}+L_{box}+L_{mask} L=Lcls+Lbox+Lmask 其中 L b o x 和 L c l s L_{box}和L_{cls} LboxLcls和Faster RCNN一样
    L m a s k L_{mask} Lmask则如下(摘自博客):
    对于每一个ROI,mask分支定义一个Km2维的矩阵表示K个不同的分类对于每一个m*m的区域,对于每一个类都有一个。对于每一个像素,都是用sigmod函数进行求相对熵,得到平均相对熵误差Lmask。对于每一个ROI,如果检测得到ROI属于哪一个分类,就只使用哪一个分支的相对熵误差作为误差值进行计算。(举例说明:分类有3类(猫,狗,人),检测得到当前ROI属于“人”这一类,那么所使用的Lmask为“人”这一分支的mask。)这样的定义使得我们的网络不需要去区分每一个像素属于哪一类,只需要去区别在这个类当中的不同分别小类。最后可以通过与阈值0.5作比较输出二值mask。这样避免了类间的竞争,将分类的任务交给专业的classification分支
    简而言之就是先确定这个RoI是哪个类,然后网络本来是生成了K个类的mask,现在只取其中那个类的mask,然后一个一个像素对应,最后使用平均二值交叉熵损失计算loss:
    (懒得打了直接用图)
    在这里插入图片描述
    优点: 将mask损失和分类损失独立开了,互相不影响
  • 掩膜表示法(Mask Representation): 由于mask其实是要给输入的图像的空间信息进行编码,不像分类或者回归任务中最后转变成了一个向量,丢失了空间信息,这里的mask还需要原来的空间信息,于是就可以使用卷积操作获得相关的参数,于是做法就是对每一个RoI使用FCN(全卷积网络)来生成一个mm的mask。这可以保证用来预测mask分支过程中的每一层都包含着最开始的RoI的mm的空间信息,但是这也要求之前的RoI的特征需要更加精确,而之前的RoIPool直接进行池化丢失了一些细节信息,因此引入了下边的RoIAlign

  • RoIPool:RoIPooling的目的是将不同输入pooling之后变成相同输出,一般的是77的输出。这个过程中有两次的信息失准,第一次是经过了多次卷积后候选框的长度可能不是整数的像素值,此时RoIPool会取整;另外在切分为77的时候又会出现浮点数,于是要再一次取整,于是两次信息的失准出现了一个名为“不匹配问题”的问题,这个问题对检测和分类没啥太大影响但是对于分割会有较大的影响

  • RoIAlign:取消量化操作,一直保留浮点数到双线性插值法使用,最后根据双线性插值的结果对每个小单元进行maxPooling或averagePooling。
    双线性插值算法详解

  • 网络结构:
    作者在前期提取图片特征时使用了多种网络结构,包括resnet,resnext,resnet C4等等,最后是Faster RCNN with FPN结果的最好(FPN中已经包括了res5)

3.1 实现细节
  • 设置的超参数与Faster RCNN中基本一致,虽然他们是为了回归和分类用的,但是实例分割的结果可以表明这些参数对于实例分割(在Mask RCNN中)同样鲁棒
  • 训练:
    在Faster RCNN中,一个RoI在与gt box的IoU大于0.5时才被当做是正样本,否则为负样本。在这里mask loss L m a s k L_{mask} Lmask也只会在正样本中定义,mask的目标是一个RoI和一个gt box 的交叉的综合结果
    输入图片时作者对图片统一进行了resize,统一到800 * 800的像素,每一个小的训练batch为2,每一张图有N个采样过后的RoI,正负样本的比例是1:3,N在不同的特征提取网络中不同,另外还有一些超参数的设定此处不再一一列出

  • 测试:
    在测试时,proposal的数目也不尽相同,在C4中是300,在FPN网络中则选择了1000,在对这些proposal预测bbox后还进行了NMS,mask分支则是应用于得分最高的前100个检测框,这和训练时的平行分支分别计算的思路不同,但是他加速了测试时间并且提高了准确率(使用了更少、更精确的RoIs)。对于每个RoI,模型都能predict K个masks,但是最后只会用第k个mask,进行预测之后mask还会再resize回原来的RoI大小(比如7*7),并且进行阈值设定得到最终的掩码。
    (由于只计算前100个检测框的mask,实际上Mask RCNN比原来的Faster RCNN多了一些些计算开销,约20%)

4.实验结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值