Mask R-CNN论文阅读笔记


title: Mask R-CNN论文阅读笔记
date: 2019-06-04 11:36:32
tags:

  • instance segmentation
  • paper

参考资料如下:

Abstract

Introduction

Related Work

Mask R-CNN

在Faster R-CNN的二分支预测基础上,加上第三个预测分支:预测一个mask。关键是如何提取很小(像素级别)的空间信息

Faster R-CNN回顾

Faster R-CNN第一阶段“RPN”,提取出“proposal”——即有可能包含object的区域,但不关心到底是什么object;第二阶段本质上是“Fast R-CNN”, 使用ROIPool对proposal的feature进行“same size”操作,再输入到Fast R-CNN进行分类&bounding box回归。这两个阶段用到的feature可以是共享的。


Faster R-CNN模型图

Mask R-CNN

Mask R-CNN也是二阶段方法,第一阶段同样是RPN网络。在第二阶段并行进行三个工作:①预测cls ②box offset ③binary mask

​ 形式化地,对于每个ROI定义了多任务loss:L=L_{cls}+L_{box}+L_{mask},其中L_{cls},L_{box}的定义与Fast R-CNN中的一样。对于L_{mask}: 每一个ROI有一个Km^2维度的输出(K是cls的个数,m是ROI align后输入第二阶段的特征大小)。如下图所示,如果cls分支预测的是“人”,则只取“人mask”与label之间计算binary cross-entropy loss。

[图片上传失败...(image-1cb66f-1562147825974)]

  • binary cross-entropy loss的计算方式如下:即每个cell计算loss,再平均

[图片上传失败...(image-8b59b0-1562147825974)]

这样的mask loss定义消除了classes之间的竞争,解除了mask分支预测和cls分支预测的耦合。不同于FCN网络对于segmentation loss的定义softmax+cross-entropy, mask rcnn使用的loss定义为sigmoid+binary loss。FCN网络的segmentation loss的定义如下,可以看出: ①classes之间是有竞争的[sum(yi)=1] ②mask的预测也带有了cls的预测,这样就与cls分支耦合了

[图片上传失败...(image-14fc8a-1562147825974)]

RoIAlign

RPN网络输出的region of interest是相对于原图的,映射到feature map上有可能不在整数坐标上。如下图,假设有一个5*5的feature map,而RPN输出的region映射到feature map上是虚线区域


image
  • ROI Pooling的做法:

    • 先对ROI进行quantization操作(quantization:即对到相应的整数上 )
    image
    • 进行pooling的bin划分
    image
    • 再对bin进行quantization操作
    image
    • 再对每个bin取max
    image
  • ROI Align操作:

    • 直接进行bin划分

    [图片上传失败...(image-950307-1562147825974)]

    • 在bin中sample一些点,论文中说点的个数&位置的影响并不大。其中X_{low}X_{hign}是相应bin的X最小,最大值

    [图片上传失败...(image-36a4f-1562147825974)]

    • 计算每个点处的value(双线性差值)。以S1为例,他周围的整点(2,1)(3,1)(2,2)(3,2),这些整点处的value是知道的,因此可以计算出S1处的值,计算如下:

    [图片上传失败...(image-bfd0d-1562147825974)]

    • 每个bin有四个点,对这四个点进行取average(用max-pool也可以,模型对此不敏感)
    image
    image

网络结构

[图片上传失败...(image-8f2b1c-1562147825974)]
为了说明这个方法的泛化性,作者提出多种Mask-RCNN结构。不同结构之间的差异体现在: (i)特征提取层的backbone结构 (ii)网络的两个head部分(Box head&Mask head)

backbone架构

​ 文中称backbone结构为“network-depth-features”。测试的网络架构有50 depth或者100 depth的Resnet和ResNeXt网络。带有ResNets的Faster RCNN是从4-th stage最后的feature map上提取特征,作者记作C4。例如,从ResNet-50 的4-th stage final feature上提取特征,则被记为ResNet-50-C4

image

​ 作者还测试了更有效的bockbone——Feature Pyramid Network(FPN),带有FPN backbone 的Faster RCNN在不同尺度上提取ROI特征。除了多尺度之外,其余的部分和不同的ResNet相同。使用了ResNet-FPN backbone提取特征的Mask RCNN,在精度和速度上都有优秀的表现

network head

head部分主要是在已有结构上添加了全卷积的mask预测分支。作者主要拓展了以Resnet和FPN为基础网络的Faster RCNN box head。以FPN基础网络为例:

image
  • box head

[图片上传失败...(image-250f2c-1562147825974)]

① FPN-ROI mapping:将ROI对应到特定scale的feature map上。每个ROI有一个pooler scale属性,可以从pooler scale知道对应的是哪个feature map。

FPN网络如下:

[图片上传失败...(image-c82a46-1562147825974)]

可知pooler scale有1/4[P2],1/8[P3],1/16[P4],1/32[P5]四种(P6不参与这一步),通过如下公式:

[图片上传失败...(image-1266cb-1562147825974)]

​ 可知,lvl_{min}=2lvl_{max}=5(即Pn最小是P2,Pn最大是P5)。若某一个ROI,通过其pooler scale计算出target_{lvl}=3,则其对应着P3。

② ROI Align:将ROI对应上Pn,进行same size操作

[图片上传失败...(image-8da4ba-1562147825974)]

  • Mask Head

[图片上传失败...(image-821ac0-1562147825974)]

[图片上传失败...(image-a3fe5b-1562147825974)]

[图片上传失败...(image-3432f6-1562147825974)]

对于每个proposal会预测num_classes个mask,到底选择哪个mask,是通过box headcls预测分支来挑选的,如上图。

实现细节

超参的设定依据Fast/Faster RCNN,虽然原始的任务是object detection,但作者发现对于instance segmentation也同样适用

Training:

  • ROI的positive/negative:IoU[RoI&ground-truth box]>=0.5判为positive;否则判为negative。L_{mask}只定义在positive ROI上。mask的预测目标是①intersection between RoI ②GT mask
  • image-centric training。图像shorter edge缩放到800像素。每个GPU上,每个mini-batch有2张图片,每张图片采样N个ROI(正负比例为1:3)。采用C4 backbone,N=64;FPN backbone,N=512
    • image-centric sampling:mini-batch先对图像采样2个,再在采样到的图像中采样N个ROI,这样同一张图的各个ROI可以共享feature[Fast RCNN采用];还有一种方法称为“RoI-centric sampling”,这种方法从所有图片的所有候选区域中均匀取样,由于ROI来自不同图片,为了得到ROI的feature,这些不同的图片都要计算其feature,开销很大[R-CNN和SPPnet采用]
  • 作者使用8个GPU迭代了160k次,相应的learning rate=0.02并在120k迭代步lr变为0.002。衰减速率为0.0001,动量为0.9.
  • 为了方便消融性实验,RPN的独立训练的,但由于RPN和Mask RCNN使用相同的backbone,因此是可以共享的

Inference:

  • mask分支只应用在top 100 score的detected box上
  • 每个ROI有cls_num个mask,但是依据cls branch,选出第k个mask。对于m*m的mask,先resize to ROI size,再二值化

实验

各种指标

  • 简单指标:下面的“覆盖上了”、“没有”都是以IoU=0.5\ or\ 0.75\ or\ …为阈值的(大于阈值说明覆盖上了,小于阈值说明没有覆盖上)

    • TP(true positive): 有GT,且mask覆盖上了(准确)
    • TN:在背景处,算法预测出是背景(准确)
    • FP:预测的mask处,没有GT (过预测了)
    • FN:有GT的地方,没有mask(没预测到)
  • mask IoU:IoU=(GT \cap MASK)/(GT \cup MASK)

image
image
  • AP(Average Precision)

    • 查准率:Precision=TP/(TP+FP),这用公式应用在test set中的某一类
    • 由于TP等确定,和IoU的阈值有关,因此可以写成Precision(t)=TP(t)/(TP(t)+FP(t))
    • 为了考虑全面,可以取不同的阈值t,如0.5:0.05:0.95,(即,从0.5开始,以0.05为步长,一直取到0.95),再在阈值层面取平均\overline{Precision(t)}=\frac{1}{|threshold|}{\sum TP(t)/(TP(t)+FP(t))}
    • AP=\frac{1}{cls\_num}\sum^{cls\_num}_{i}\overline{Precision(t)}:即对所有类的\overline{Precision(t)}做平均。
    • 即:AP=\frac{1}{cls\_num}\sum^{cls\_num}_{i}\frac{1}{|threshold|}{\sum TP(t)/(TP(t)+FP(t))}.即:现在阈值层面取平均,再在cls层面取平均
    • AP_{50},即阈值只取0.5时,计算出来的AP
    • AP_{S/M/L}:即AP_{small/medium/large}。AP for small objects: area<32*32; for medium objects: 32*32<area<96*96; for large objects: area>96*96
  • AR(Average Recall)

    • 查全率:Recall=TP/(TP+FN)
    • 同上:AR计算公式如下:

    [图片上传失败...(image-68e17b-1562147825974)]

数据集介绍

参考文章如下:1. PASCAL VOC介绍 2.COCO介绍

PASCAL VOC数据集

  • 分布如下:
image

即,VOC 2012包含了VOC 0812的所有数据。普遍使用的是 VOC2007和VOC2012数据集,因为二者是互斥的。

  • 数据量
    • VOC 2007共10k image:5k train+val(train、val不分开的)以及5k test———>20 cls
    • VOC 2012【检测任务】: trainval有11540张图片共27450个物体;测试集大小不知道,还没有公布(VOC 2017的测试集以及label已经公布了)———>20 cls
    • VOC 2012【分割任务】:trainval有 2913张图片共6929个物体;测试集大小不知道,还没有公布———>20 cls

COCO数据集

  • 数据量(2014年)———>80 cls
    • train/val/test分别为80k/40k/40k
  • 数据划分
    • 训练集:80K的train + 35K的val(35K的val称为“trainval 35k”)
    • 测试集【本地】:剩余的5K val(被称为“minival”)
    • 测试集【在线】:提交到官方的evaluation server(称为“test-dev”)

Main Results

作者对比了COCO 2015和COCO 2016的冠军模型MNC和FCIS,在without bells and whilstles(可以理解为不需要花里胡哨的东西,例如不需要OHEM、data-augment等)的情况下,Mask R-CNN with ResNet-101-FPN都能超越花里胡哨的FCIS+++(which includes multi-scale train/test, horizontal flip test, and online hard example mining)。作者虽然没有尝试,但是认为这些花里胡哨的东西用在Mask RCNN上应该也能改进。

模型对比图

​ 通过模型的一些输出图片可以发现,FCIS+++有个普遍存在的缺点,即在实例与实例的重叠处表现不好,说明其对于实例分割的基础问题,并没有很好的解决。而Mask RCNN却能应对

上面是FCIS+++,下面是Mask RCNN

消融性实验(Ablation Experiments)

消融性实验有点控制变量的意思,mask RCNN有一系列pipelines,如A、B、C等,消融性实验就是看各个部分的贡献到底有多大,各个部分是不是彼此依赖、相互促进

  • 结构
    • FPN > C4
    • ResNet 101 > ResNet 50
    • ResNeXt 101 > ResNet 101
  • Independent Masks > Multinomial: 见前面L_{mask}的介绍
  • RoIAlign > RoIWarp ~= RoIPool
    • 使用stride-32的C5 feature比使用stride-16的C4 feature有着更高的精度——说明RoIAlign极大解决了“大步长(large-stride)” feature的挑战(检测和分割领域)
  • mask branch:由于mask的预测是需要空间信息的,因此全卷积(FCN)branch > MLP(多层全连接)

Bounding box detection result

消融性实验的指标针对的是最终mask的AP,现在讨论bbox

  • full trained Mask R-CNN:表现优于Faster R-CNN的各种变种(忽略Mask R-CNN的mask branch输出)
  • part trained Mask R-CNN(不训练mask branch)——也称为"Faster R-CNN with RoIAlign": 优于Faster R-CNN的各种变种【RoIAlign的功劳】
  • full trained Mask R-CNN > part trained Mask R-CNN【multi-task training的功劳,即mask branch也有一定的贡献】

时间(速度)

Inference:

作者使用Faster RCNN的4-step alternating training方法训练

  • ResNet-101-FPN。模型在每张图片需要195ms的GPU时间(Nvidia Tesla M40)+ 15ms CPU时间(resizing output to original resolution)。虽然是共享了特征,但是统计意义上和不共享特征有着相同的mask AP
  • ResNet-101-C4。耗费~400ms,因此不推荐
Faster RCNN的4-step training

训练:

  • 在COCO trainval35k上,8-GPU同步训练
    • ResNet-50-FPN:32 hours(0.72s per mini batch——16 images)
    • ResNet-101-FPN:44 hours

Enhance

许多用在detection/segmentation的技巧也可以用在Mask RCNN上

  • updated baseline(超参的改变)
    • 160k次迭代 ——> 180K次迭代
    • 在120k次learning rate变成1/10 ——> 在120k、160k迭代都变成1/10
    • NMS threshold:0.3 ——> 0.5
  • End-to-end training: “approximate 版本”
  • pre-trained使用1k-class subset of ImageNet ——> 5k-class subset of ImageNet
  • Train-time augmentation: 增加到260k次迭代
    • training 阶段: sample scale from [640,800] pixels
    • learning rate:在200k、240k分别reduced by 10
  • deeper 结构:101-layer ResNeXt ——> 152-layer
  • Non-local(NL): [todo]
  • test-time augmentation: 综合scale=[400: 100: 1200]&水平翻转的结果
image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容