Mask R-CNN 笔记

Mask R-CNN论文:Mask R-CNN

Fast R-CNN 和 Faster R-CNN 试图解决目标检测的问题,而 Mask R-CNN 则是在 Faster R-CNN的基础上,试图解决包含目标检测的像素级实例分割问题。简单而言,Mask R-CNN 就是在 Faster R-CNN的基础上,添加了一条并联的 Mask 预测网络。


前人的工作

Faster R-CNN:

R-CNN 系列网络已经经过了很成熟的发展,它为 Mask R-CNN的网络结构提供了很好的支持。在此基础上, Mask R-CNN 很容易地被实现和训练。

FCN:

全卷积网络可以实现像素到像素的 heatmap 预测,由于 Mask R-CNN 的边界框尺寸不定,应用像素到像素的预测技术是必要的,Mask R-CNN 的 Mask 预测支路实际上就是一个小型的 FCN 网络。

FCN 提出的理念很有建设性,但它本身在实例分割上却并没有出色的表现。Mask R-CNN 作者所言,基于他们的经验,在实例分割领域,将分类和实例分割解耦是必要的,而 FCN 采用的策略是同时预测 Mask 和类别,这个高度耦合的过程使得网络训练时,类别的预测和 Mask 的预测相竞争,网络难以具有鲁棒性。

而 Mask R-CNN 就将分类和 Mask 分成了两个任务。Mask 预测网络会对每个类别分别预测一个 Mask ,置于取哪个 Mask 作为最终输出,则由分类网络的输出决定。

DeepMask:

Mask R-CNN列出来批判的对象,因为它以及相似的网络都将掩码预测先于分类进行,事实证明这种 pipeline 又慢又不是很精确。


Mask R-CNN 的贡献

Mask R-CNN 在实例分割领域超过了当时所有最先进的方法。此外,在继承了 Faster R-CNN 的框架之下,Mask R-CNN 在速度上依然不逊于大多数实例分割模型。Mask R-CNN 还表现出了很高的可拓展性,作者在微调网络结构后,将 Mask R-CNN 应用到人体姿态预测中,也在预测速度相同的情况下击败了 2016 年的冠军。 而 Mask R-CNN 所做的调整只是将每个人体关键点作为一个 one-hot 的 Mask。Mask R-CNN 的结构可以被适用于各种实例级别的应用上。


Mask R-CNN 的网络设计

Faster R-CNN 部分的 pipeline 都没变化,只是有些模块做了修改。


Mask R-CNN网络结构设计图

Mask的表示

对每一个RoI,Mask 预测支路输出一个m×m的二进制图像,表示 RoI 中的目标掩码。

RoI Align

Faster R-CNN部分的最大不同点在于,Mask R-CNN 采用 RoI Align 代替了 RoI Pooling。

不采用 RoI Pooling 的原因是,RoI Pooling 在映射 RoI 到特征图上时,以及将特征图上的 RoI 映射到池化输出上时,都进行了图像尺寸的取整操作。比如一个500×600的 RoI,映射到卷积后的特征图上会缩小16倍,变成31×37(取整),为了适应一个7×7的池化输出大小,又需要每个池化窗口的大小为4×5(取整)。取整的过程无法回溯,所以基于 RoI Pooling 得到的特征预测出来的 Mask,不能精确地覆盖原始图像上的像素。

RoI Align 做了一个很简单的改进,采用了亚像素的思想,每次映射 RoI 时,直接保留浮点数的尺寸。一个500×600的 RoI,映射到到特征图变成31.25×37.5(不取整),为了适应一个7×7的池化输出大小,又需要每个池化窗口的大小为4.46×5.36。

RoI Align的原理

那么在做最大池化的时候,既然像素点的数量不是整数,怎么找到特征值最大的像素点?在这里,每个池化窗格中都取了整数个区域(论文中为2×2),每个区域的特征值通过双线性插值得到,然后这些区域再通过最大池化输出它们中的最大值。

RoI Align中,单个池化窗格里的双线性插值示意图

网络结构:Backbone

作者尝试了几种 backbone: ResNet,从50层的 ResNet 的第4个阶段的最后一个卷积层后截断,取前面的部分作为特征提取网络,记为 ResNet-50-C4,这是一种常见的 backbone 选取方式; FPN,目的是从不同的尺度上提取特征图上的特征。

网络结构:Head

基于 ResNet 的网络 head 如左下图所示,在 RoI Align后,分支前还加入了 ResNet 的第 5 阶段,但是输入调整为7×7的池化结果,取消了stride,保持输出也是7×7。然后再进行分支,其一和 Faster R-CNN 一样,预测类别和边界框回归;其二是预测 Mask 的全卷积网络,可以看到这里不仅用了卷积层,还用了反卷积层。

基于 FPN 的网络 head 如右下图所示,在 PoI Align 后直接分支,一条全连接(也加了一层卷积,可能是想更深度地提取特征吧)支路预测类别和边界框回归,一条全卷积支路预测 Mask 。

关于为什么这些网络结构设计会有细节上的不同,作者并没有说明,想必也是实验了多种结构后得到的结果。

训练

损失函数

Mask R-CNN 定义的多任务损失函数:

L=L_{cls}+L_{box}+L_{mask}\\

其中,L_{cls}是多分类交叉熵损失函数,L_{box}是用Smooth_{L_{1}}计算的边框回归参数损失函数,这两者在之前的论文里都已经提到过了。

L_{mask}是 Mask 预测的损失函数。因为 Mask 的输出是一个具有固定尺寸的二值方阵,所以L_{mask}简单地定义为每个像素的二分类损失之和。Mask 的预测目标是正样本的 ROI 和它的 object 的 Mask 的交集。

不过在训练时并不采用多任务损失函数来进行端到端的模型训练,而是分别训练分类支路和 Mask 预测支路。

超参数

超参数的设置和 Fast/Faster R-CNN 中相同,尽管这些网络的原本目的是目标检测,但 Mask R-CNN 体现了对这些超参数的鲁棒性。

样本

选取与 Ground Truth 具有至少 50% 的 IoU 的 RoI 作为正样本,其余的为负样本。

每个 GPU 在每个批次选择两张图片中的 N 个 RoI 作为 mini-batch ,正负样本比例为1:3。N 在 ResNet backbone 下取64,在 FPN backbone 下取512。在八核 GPU 上训练 160K 个批次。

学习率0.02(在120K个批次后缩减为0.002),weight decay 0.0001,momentum 0.9。

测试

在测试时,提出 N 个 Region Proposal(在 ResNet backbone 下取300,在 FPN backbone 下取1000),在边框预测后,用非极大值抑制选取前100个边界框,对每个边界框而言,Mask 预测支路为每个类别预测一个二值的m×m 大小的 Mask,但最后只取用和分类支路预测到的类别相符的 Mask,这个 Mask 被放大到原始 RoI 的尺寸。

相较于 Faster R-CNN,Mask 预测支路会让整个网络的前向传播时间增加大约 20% 。


其它

独立预测 Mask  VS  类别和 Mask 一起预测

除了单独训练 Mask 预测支路,另一种方式是采用L_{mask}+L_{cls}的损失函数,一起训练分类支路和 Mask 预测支路,也就是不将两者解耦。但实验证明,这样会导致模型性能变差。所以在 Mask R-CNN的结构下,还是解耦地预测更符合期望。

每一类预测一个 Mask  VS  总共只预测一个 Mask

除了对每一个类别预测一个 Mask,最后取类别符合者,也可以直接预测一个与类别无关的 Mask。这种思想也很直观:人在看到一个东西时,就算不认识它是什么,也能够很容易地分辨出它的边界。实验证明,总共只预测一个 Mask 确实也不会让模型表现得太差。


Mask R-CNN 在人体位姿估计上的应用

Mask R-CNN 只要做一点小修改就可以作为人体位姿的估计器:在 Mask 预测支路中,对于每个人体关键点,分别预测一个 one-hot 的 Mask。

甚至,在做这种修改时,几乎不需要任何人体位姿估计领域的知识——因为本来这就是为了验证 Mask R-CNN 在各个领域上的通用性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容