Mask R-CNN学习笔记

在阅读Mask R-CNN论文的过程中,虽然整篇论文没有公式,但是对于我来说还是有些难理解了,综合性较强,里面涉及到了许多知识,需要看其它的论文才能理解,所以就将其它论文的要点一起整理在这里。

Fast R-CNN

整体架构如图1所示:


图1 Fast R-CNN

它是将整幅图像和一系列的目标建议作为输入。首先将整幅图像通过许多卷积层和最大池化层生成一个卷积特征图。之后对于每个目标建议,通过感兴趣区域(RoI)池化层从特征图中获取定长的特征向量。每一个特征向量都喂给一系列的全连接层,最后分支到两个兄弟输出层,一个通过softmax输出K个类别和背景的概率进行分类,另一个输出K个类别的包围盒位置信息的4个真实值,分别为中心坐标和它的高度和宽度。

RoI pooling layer

RoI池化层是通过最大池化将特征图中感兴趣的区域固定在固定的空间范围H\times W(e.g 7×7),这两个值是超参数,独立于任何的RoI。在本文中,RoI是卷积特征图中的一个矩形窗口,每个RoI由四元组(r,c,h,w)构成,其中(r,c)为其左上角坐标,(h,w)分别为高度和宽度。RoI最大池化,通过将h×w大小的窗口分割成H×W个子窗口,每个子窗口的大小为h/H\times w/W,之后对每个子窗口取最大值。对于特征图的每个通道,池化操作都是独立进行的,互不干扰。

Multi-task loss

第一个分类网络的输出为离散概率分布(对于每个RoI),p=(p_0,\dots,p_k),对应与k个类别加一个背景。第二个是包围盒回归偏移输出为t^k=(t_x^k,t_y^k,t_h^k,t_w^k),对应于第k个类别。对于每个训练的RoI,它的标签为真实类别u和真实值包围盒回归目标v。使用多任务损失L对于每个标签RoI协同的训练分类和包围盒回归,损失函数为;

L(p,u,t^u,v)=L_{cls}(p,u)+\lambda[u\geq 1]L_{loc}(t^u,v)

其中L_{cls}=-logp_uu表示真实的类别,p_u表示预测得到的概率,取负对数表示概率越大,误差越小。u等于0的时候代表背景,它没有包围盒。

L_{loc}=\sum_{i\in \{x,y,w,h \} } smooth_{L_1}(t_i^u-v_i)L_1表示1范数,它对于外翻更不敏感。

smooth_{L_1}=\begin{cases}0.5x^2 &\quad if|x|<1\\|x|-0.5 &\quad otherwise\end{cases}

Faster R-CNN

与Fast R-CNN相比,Faster R-CNN加入了区域建议网络(RPN),与提取整幅图像特征共享卷积层。它是端到端训练的,输出高质量的区域建议给Fast R-CNN用作检测。Faster R-CNN由两个模块组成,第一个模块是深度全卷积网络提议区域,第二个模块是Fast R-CNN检测使用建议区域。使用流行的属于叫做注意力机制,RPN告诉Fast R-CNN应该看向哪里。整体架构如图2-1所示:


图2-1 Faster R-CNN

Region Proposal Networks

区域建议网络将任意大小的图像作为输入,输出一系列矩形目标建议,每个都有目标分数。为了产生目标区域,将一个小的网络在特征图中滑动,该小网络作为卷积特征图n×n的空间窗口输入。每个滑动窗口被映射到低维的特征(ZF为256-d,VGG-16为512-d,这里的256和512都是通道数,随后跟着ReLU)。之后被送入到两个兄弟全连接层——盒回归层(reg)和盒分类层(cls),在本文中使用n=3。

FPN(Feature Pyramid Networks )

Bottom-up pathway

自底朝上的途径是骨干卷积层的前向传播,以2为尺度系数在不同的尺度下计算包含特征图的特征等级。有许多层输出的图的尺寸是相同的,将这些层叫做同一网络阶段。在特征金字塔中,定义一个阶段为一个金字塔层,选择每一阶段的最后一层输出作为一系列特征图的参考,这一决定是自然的,因为每个阶段的最深层有最强壮的特征。

Top-down pathway and lateral connections

自上而下的途径有一个幻觉就是从高层的金字塔得到的特征图产生的特征精度越高,其通过粗糙的上采样之后,分割能力越强。这些特征与从下而上得到的特征进行横向连接。每一个横向连接将从上而下和从下而上得到的在相同大小下的特征进行合并。图3展示了上下特征图的构建。


图3 构建块

从上图可以从下到上的途径是将每个阶段的卷积层结果与一个1×1的卷积核进行卷积,这是为了减少通道维数。而右边的自上而下的操作是对上层输出的特征图进行以尺度系数为2的上采样(使用最近邻采样),之后将两者对应相加。这个过程是循环进行的,直到精度最高的特征图产生。最后,在每一个合并后面加上3×3的卷积去生成最后的特征图,这是为了减少上采样的混叠。

比如对于ResNet共有5层,使用每一层最后残差块激活函数的输出作为特征图,将最后一层残差块的输出记为jia,分别是conv2,conv3,conv4,conv5的输出,对应于输入图像有步长为\{4,8,16,32  \}个像素。没有将conv1加入,因为它的内存太大了。之后通过上-下操作产生对应的特征图记为\{ P_2,P_3,P_4,P_5\},有相同的空间大小。且将特征的通道数都定为d=256

Applications

Feature Pyramid Networks for RPN

将特征金字塔网络应用与Faster R-CNN中的区域建议网络。对于传统的区域建议网络,它需要一个3×3的滑动窗口在特征图中游走,后面更随这两个兄弟1×1卷积层用于分类和回归,将其作为网络的头部(head)。有无目标和包围盒的回归还与一系列的参考包围盒anchors(锚点)有关。这些锚点有预先定义的尺度和长宽比,它是为了覆盖不同形状的目标。

本文将FPN应用到RPN,将头部相同的设计(3×3的滑动窗口和2个兄弟1×1的卷积)连接到特征图中的每一层。由于头部在特征金字塔中的所有层进行稠密的滑动,没有必要在特定层使用多尺度的anchors,因此,在每一层只需要使用单独尺度的anchors。正式的,定义anchors有区域\{ 32^2, 64^2,128^2,256^2,512^2\}分别在\{ P_2,P_3,P_4,P_5,P_5\}上,同时在每一层有长宽比为\{ 1:2, 1:1,2:1\},所以在整个金字塔中有共15个anchors。

将训练标签赋给anchors是基于与真值框的交并比(IoU)。如果一个anchor的标签为正是与真值框有高的IoU,或者与真值框的交并比达到了0.7,标签为负是与所欲真值框的交并比小于0.3。

Feature Pyramid Networks for Fast R-CNN

Fast R-CNN使用RoI池化进行特征提取,为了使用FPN需要对RoI进行不同尺度的赋值。本文将RoI的高度h和宽度w(与输入图像尺寸有关)分配给特征图像金字塔的P_k为:

k=\lfloor k_0+\log_2(\sqrt{wh}/224)\rfloor

224是ImageNet典型的输入尺寸。当RoI有w\times h=224^2尺寸时应该映射到k_0层上。类似的,基于ResNet的Faster R-CNN使用C_4作为单一尺度特征图设置k_0的值为4。上面公式意味着当RoI的尺寸变得很小时,它应该被映射到高精度层上。比如说,当尺寸变为224的一半,应该映射到第3层。

将预测头部(在Fast R-CNN中是分类和回归)与所有层的RoI连接。不论是哪一层的头部都是共享参数的。对于ResNet的conv5已经用于构建特征金字塔了,所以只需要从RoI池化层获取7×7的特征,在分类和回归之前直接与两个全连接层(1024d)相连(每个后面都有ReLU激活函数)。这两个全连接层是随机初始化的,因为在ResNet中没有预先训练的全连接层。

Mask R-CNN

Faster R-CNN对于每一个候选对象有两个输出,一个是类标签,另一个是包围框的值。而Mask R-CNN是在Faster R-CNN的基础上增加第三个分支输出目标掩码mask。

骨干架构

为了概括性的描述该方法,本文使用多种架构对Mask R-CNN进行实例化描述,架构主要是ResNet和特征金字塔网络(FPN)。为清晰起见,将区域进行两个划分:

(1)卷积层的主干架构是为了从整幅图像进行特征提取,本文将其命名为网络深度特征(network-depth-features)

(2)包围盒识别(分类和回归)与mask预测是在每个RoI后面分开配置的,为网络的head

ResNet:传统的用ResNet实现的Faster R-CNN,它的特征是通过最后一层卷积层的第4层提取的,将这个叫做C4。一般使用的ResNet的深度为50或者是101,如果是使用50,则将这个主干架构称为ResNet-50-C4。使用深度为50的可以从下图看出,在提取特征之后,后面还有一层。所以在网络的head中会包括ResNet的第5层,用于计算强度。

ResNet+FPN:使用具有横向连接的自顶向下结构,从单一尺度输入构建一个网络内特征金字塔。Faster R-CNN使用FCN作为主干架构,RoI特征是根据它们的尺度从不同层的特征金字塔中提取出来的。使用ResNet-FPN进行特征提取在精度和速度上都展现了很好的效果。在网络head中,由于FPN已经包括res5所以更有效了,后面只需要使用一些滤波器。

关于两者的head架构如下图所示:

Head Architecture

图的左边是将ResNet作为骨干架构的头部,可以看到在输出特征图的后面还有一个残差卷积层conv5。而右边是通过ResNet+FPN得到的骨干架构,conv5已经在前面使用过了所以头部结构就不包括它了。可以看到对应不同的骨干架构得到的mask的尺寸也不一样。80是物体的类别数,而14×14和28×28分别是mask的精度。

Mask的表示

一个mask是对空间布局的编码,因此不像标签和包围盒的值可以直接通过全连接层变为向量,由卷积得到空间架构的mask可以通过像素和像素之间的对应关系自然的进行处理。具体的,对每一个RoI通过FCN预测得到m×m掩码。这使得mask分支的每一层都明确的保留了m×m的空间布局,不会坍塌成向量。而像素与像素之间的对应关系,这就要求得到的RoI特征需要和明确的像素之间准确的对齐,所以就引入了RoIAlign,它在mask预测分支中起到了至关重要的作用。

RoIAlign

在Fast R-CNN中的RoI池化操作是对连续的坐标x通过计算[x/16]得到的,其中16是特征图步长,[\cdot ]是取整操作。所以如果是在不整除的情况下,最后得到的坐标与先前的坐标就不对齐了,因为存在取整操作。而且量化也在将固定空间范围时出现(e.g.7×7)。由于这两者的量化都使得坐标与原本的坐标不是一一对应的关系了。如下图所示,虚线代表生成的特征图,而实现框表示预测得到的RoI的真实坐标,但是由于量化操作,将真实值进行取整变成了在黄色区域了,又有池化操作,比如将其分成2×2的大小,由于是小数,所以取整操作,将其分割成红线划分的4部分了。这就是两次量化操作的影响。

演示图

由于量化操作因为不能整除的影响较大,所以在RoIAlign池化层中不使用取整操作,具体如下图所示:


RoIAlign

虚线表示的是特征图,实现表示的是预测得到RoI区域,将它分成2×2bins,在每个bin里面有规律的采样了4个点,这四个点的值通过双线性差值得到,箭头表示的通过这4个点进行双线性插值得到箭头所指示的点的值。之后总计结果(使用最大值或者是平均值)。这样就做到了像素的一一对应。

multi-task loss

对于每一个采样的RoI都有损失函数L=L_{cls}+L_{box}+L_{mask},其中分类误差L_{cls}和包围盒损失L_{box}与Faster R-CNN定义的一样。而Mask分支对应于每个RoI的输出有Km^2维,K表示通道数,而m×m是每类的精度。提供单像素的sigmoid,使用二元交叉熵平均损失定义L_{mask}。对于第k类的RoI,,mask的损失只与第k类有关(其它mask损失对这个误差影响)。定义的L_{mask}允许网络生成每个类别的mask且不需要在类别中进行竞争。通过专门的分类分支选择mask,这将mask和分类进行了解耦。

参考资料

Mask R-CNN Kaiming He Georgia Gkioxari Piotr Dollar Ross Girshick

Feature Pyramid Networks for Object Detection Tsung-Yi Lin, Piotr Dollar , Ross Girshick, Kaiming He, Bharath Hariharan, and Serge Belongie

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks   Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun

Fast R-CNN

令人拍案称奇的Mask RCNN

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

推荐阅读更多精彩内容