目标检测系列:Mask RCNN

论文链接:http://openaccess.thecvf.com/content_ICCV_2017/papers/He_Mask_R-CNN_ICCV_2017_paper.pdf

1. Introduction

这篇论文算是Faster rcnn的一个扩展,将faster rcnn模型用在了实例分割的任务上,但是有了一些改进,效果在当时非常好

2. ROIAlign

这是本文提出的一个创新点,在传统的ROIPooling上进行改进
在这里插入图片描述
针对上图 :

  1. Conv layers使用的是VGG16,feat_stride=32(即表示,经过网络层后图片缩小为原图的1/32),原图800800,最后一层特征图feature map大小:2525

  2. 假定原图中有一region proposal,大小为665665,这样,映射到特征图中的大小:665/32=20.78,即20.7820.78,如果你看过Caffe的Roi Pooling的C++源码,在计算的时候会进行取整操作,于是,进行所谓的第一次量化,即映射的特征图大小为20*20

  3. 假定pooled_w=7,pooled_h=7,即pooling后固定成77大小的特征图,所以,将上面在 feature map上映射的2020的 region proposal划分成49个同等大小的小区域,每个小区域的大小20/7=2.86,即2.862.86,此时,进行第二次量化,故小区域大小变成22

  4. 每个22的小区域里,取出其中最大的像素值,作为这一个区域的‘代表’,这样,49个小区域就输出49个像素值,组成77大小的feature map

总结,所以,通过上面可以看出,经过两次量化,即将浮点数取整,原本在特征图上映射的2020大小的region proposal,偏差成大小为1414的,这样的像素偏差势必会对后层的回归定位产生影响
ROIAlign 改进
同样,针对上图,有着类似的映射

  1. Conv layers使用的是VGG16,feat_stride=32(即表示,经过网络层后图片缩小为原图的1/32),原图800800,最后一层特征图feature map大小:2525

  2. 假定原图中有一region proposal,大小为665665,这样,映射到特征图中的大小:665/32=20.78,即20.7820.78,此时,没有像RoiPooling那样就行取整操作,保留浮点数

  3. 假定pooled_w=7,pooled_h=7,即pooling后固定成77大小的特征图,所以,将在 feature map上映射的20.7820.78的region proposal 划分成49个同等大小的小区域,每个小区域的大小20.78/7=2.97,即2.97*2.97

  4. 假定采样点数为4,即表示,对于每个2.97*2.97的小区域,平分四份,每一份取其中心点位置,而中心点位置的像素,采用双线性插值法(下面介绍)进行计算,这样,就会得到四个点的像素值,如下图

如图所示,外边的黑框是3x3大小,红框是2.97x2.97,将这个区域又分为四个小区域,每个区域的中心点分别是用红点表示,那么下面就要计算中心点的值,其实也很简单,若每个中心点是整数,那么直接等于该点的值就行,如果不等,那就用双线性插值进行计算,所谓的双线性插值就是找到每个中心点最近的四个坐标,利用双线性插值的方式得到的结果正如图中所示,可以通过线性函数分别求出A,B的值,然后再通过A,B利用线性函数可以求出红点的值。求出四个红点的值后,可以通过max或者avg方法进行池化
ROIAlign的实现就是这么简单,但是效果却非常好,可以提升10%~50%

在这里插入图片描述

3. Mask rcnn

将ResNet-FPN和Fast RCNN进行结合,实际上就是Faster RCNN的了,但与最初的Faster RCNN不同的是,FPN产生了特征金字塔 [公式] ,而并非只是一个feature map。金字塔经过RPN之后会产生很多region proposal。这些region proposal是分别由 [公式] 经过RPN产生的,但用于输入到Fast RCNN中的是 [公式] ,也就是说要在 [公式] 中根据region proposal切出ROI进行后续的分类和回归预测。问题来了,我们要选择哪个feature map来切出这些ROI区域呢?实际上,我们会选择最合适的尺度的feature map来切ROI。具体来说,我们通过一个公式来决定宽w和高h的ROI到底要从哪个[公式] 来切:
在这里插入图片描述

这里224表示用于预训练的ImageNet图片的大小。 [公式] 表示面积为 [公式] 的ROI所应该在的层级。作者将 [公式] 设置为4,也就是说 [公式] 的ROI应该从 [公式] 中切出来。假设ROI的scale小于224(比如说是112 * 112), [公式] ,就意味着要从更高分辨率的 [公式] 中产生。另外,[公式] 值会做取整处理,防止结果不是整数。

这种做法很合理,大尺度的ROI要从低分辨率的feature map上切,有利于检测大目标,小尺度的ROI要从高分辨率的feature map上切,有利于检测小目标。
在这里插入图片描述
骨干网络ResNet-FPN,用于特征提取,另外,ResNet还可以是:ResNet-50,ResNet-101,ResNeXt-50,ResNeXt-101;
头部网络,包括边界框识别(分类和回归)+mask预测。头部结构见下图:
在这里插入图片描述
下部分是mask子网部分,注意这里的输出通道数是80,是和类别数一样,上部分就是传统的Faster rcnn分类和回归子网
损失函数
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 m a s k L_{mask} Lmask是针对特征图上每个像素点来计算的,更关键的是,只计算跟标签一样那个类别的损失,其他类别的损失不参与计算,每个像素点都会有八十个sigmoid或者二分类损失,但只有一个参与了损失函数,作者实验验证这是一个非常重要的点

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值