在阅读Mask R-CNN论文的过程中,虽然整篇论文没有公式,但是对于我来说还是有些难理解了,综合性较强,里面涉及到了许多知识,需要看其它的论文才能理解,所以就将其它论文的要点一起整理在这里。
Fast R-CNN
整体架构如图1所示:
它是将整幅图像和一系列的目标建议作为输入。首先将整幅图像通过许多卷积层和最大池化层生成一个卷积特征图。之后对于每个目标建议,通过感兴趣区域(RoI)池化层从特征图中获取定长的特征向量。每一个特征向量都喂给一系列的全连接层,最后分支到两个兄弟输出层,一个通过softmax输出K个类别和背景的概率进行分类,另一个输出K个类别的包围盒位置信息的4个真实值,分别为中心坐标和它的高度和宽度。
RoI pooling layer
RoI池化层是通过最大池化将特征图中感兴趣的区域固定在固定的空间范围(e.g 7×7),这两个值是超参数,独立于任何的RoI。在本文中,RoI是卷积特征图中的一个矩形窗口,每个RoI由四元组构成,其中为其左上角坐标,分别为高度和宽度。RoI最大池化,通过将h×w大小的窗口分割成H×W个子窗口,每个子窗口的大小为,之后对每个子窗口取最大值。对于特征图的每个通道,池化操作都是独立进行的,互不干扰。
Multi-task loss
第一个分类网络的输出为离散概率分布(对于每个RoI),,对应与k个类别加一个背景。第二个是包围盒回归偏移输出为,对应于第k个类别。对于每个训练的RoI,它的标签为真实类别和真实值包围盒回归目标。使用多任务损失L对于每个标签RoI协同的训练分类和包围盒回归,损失函数为;
其中,表示真实的类别,表示预测得到的概率,取负对数表示概率越大,误差越小。等于0的时候代表背景,它没有包围盒。
,表示1范数,它对于外翻更不敏感。
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所示:
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展示了上下特征图的构建。
从上图可以从下到上的途径是将每个阶段的卷积层结果与一个1×1的卷积核进行卷积,这是为了减少通道维数。而右边的自上而下的操作是对上层输出的特征图进行以尺度系数为2的上采样(使用最近邻采样),之后将两者对应相加。这个过程是循环进行的,直到精度最高的特征图产生。最后,在每一个合并后面加上3×3的卷积去生成最后的特征图,这是为了减少上采样的混叠。
比如对于ResNet共有5层,使用每一层最后残差块激活函数的输出作为特征图,将最后一层残差块的输出记为jia,分别是的输出,对应于输入图像有步长为个像素。没有将加入,因为它的内存太大了。之后通过上-下操作产生对应的特征图记为,有相同的空间大小。且将特征的通道数都定为。
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有区域分别在上,同时在每一层有长宽比为,所以在整个金字塔中有共15个anchors。
将训练标签赋给anchors是基于与真值框的交并比(IoU)。如果一个anchor的标签为正是与真值框有高的IoU,或者与真值框的交并比达到了0.7,标签为负是与所欲真值框的交并比小于0.3。
Feature Pyramid Networks for Fast R-CNN
Fast R-CNN使用RoI池化进行特征提取,为了使用FPN需要对RoI进行不同尺度的赋值。本文将RoI的高度和宽度(与输入图像尺寸有关)分配给特征图像金字塔的为:
224是ImageNet典型的输入尺寸。当RoI有尺寸时应该映射到层上。类似的,基于ResNet的Faster R-CNN使用作为单一尺度特征图设置的值为4。上面公式意味着当RoI的尺寸变得很小时,它应该被映射到高精度层上。比如说,当尺寸变为224的一半,应该映射到第3层。
将预测头部(在Fast R-CNN中是分类和回归)与所有层的RoI连接。不论是哪一层的头部都是共享参数的。对于ResNet的已经用于构建特征金字塔了,所以只需要从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架构如下图所示:
图的左边是将ResNet作为骨干架构的头部,可以看到在输出特征图的后面还有一个残差卷积层。而右边是通过ResNet+FPN得到的骨干架构,已经在前面使用过了所以头部结构就不包括它了。可以看到对应不同的骨干架构得到的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是特征图步长,是取整操作。所以如果是在不整除的情况下,最后得到的坐标与先前的坐标就不对齐了,因为存在取整操作。而且量化也在将固定空间范围时出现(e.g.7×7)。由于这两者的量化都使得坐标与原本的坐标不是一一对应的关系了。如下图所示,虚线代表生成的特征图,而实现框表示预测得到的RoI的真实坐标,但是由于量化操作,将真实值进行取整变成了在黄色区域了,又有池化操作,比如将其分成2×2的大小,由于是小数,所以取整操作,将其分割成红线划分的4部分了。这就是两次量化操作的影响。
由于量化操作因为不能整除的影响较大,所以在RoIAlign池化层中不使用取整操作,具体如下图所示:
虚线表示的是特征图,实现表示的是预测得到RoI区域,将它分成2×2bins,在每个bin里面有规律的采样了4个点,这四个点的值通过双线性差值得到,箭头表示的通过这4个点进行双线性插值得到箭头所指示的点的值。之后总计结果(使用最大值或者是平均值)。这样就做到了像素的一一对应。
multi-task loss
对于每一个采样的RoI都有损失函数,其中分类误差和包围盒损失与Faster R-CNN定义的一样。而Mask分支对应于每个RoI的输出有维,K表示通道数,而m×m是每类的精度。提供单像素的sigmoid,使用二元交叉熵平均损失定义。对于第k类的RoI,,mask的损失只与第k类有关(其它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