文章目录

前言一、实例分割1.1 从分类到实例分割1.2 实例分割的背景

二、从RCNN、Fast RCNN、Faster RCNN,到Mask RCNN2.1 RCNN2.2 Fast RCNN2.3 Faster RCNN2.4 Mask RCNN

三、Mask RCNN网络概述3.1 架构两阶段细节

3.2 Loss Function(损失函数)3.3 ROI Align原理Roi Pooling vs Roi Align效果

四、Mask RCNN的可视化

前言

代码地址:maskrcnn-benchmark(PyTorch)

我在入门学习计算机视觉的适合,看一些经典的论文原文比较吃力。于是通过看各种参考文献及查阅各路资料,入门的角度写了一些博客,希望能够和大家一起进步。 笔者在阅读《Mask R-CNN》原文后,根据自身理解及查阅资料,以入门角度尽可能想要还原论文细节,水平有限,欢迎交流。

一、实例分割

1.1 从分类到实例分割

Classification(分类):只对图像中的主要目标进行分类。Classification + Localization(分类+定位):我们也想知道主要目标的边界框。Objection Detection(目标检测):图像中有多个目标,我们想知道在已知类别中,每个目标的类别及边界框位置。Instance Segmentation(实例分割):得到单个目标的分类结果,并得到每个目标的边界框位置。

1.2 实例分割的背景

语义分割通过对输入图像中每个像素的标签进行预测,给出了较好的推理,例如是前景还是背景。每个像素都根据其所在的对象类进行标记。为了进一步发展,实例分割为属于同一类的对象的单独实例提供了不同的标签。

目标检测:可以区分个体但不够准确。语义分割:可以划分像素但不可以区分个体。

而实例分割则可以结合二者的优点,对个体的分类及定位更加精准。因此,实例分割可以定义为同时解决目标检测问题和语义分割问题的技术。

二、从RCNN、Fast RCNN、Faster RCNN,到Mask RCNN

入门计算机视觉的目标检测,那么RCNN、Fast RCNN,Faster RCNN的文章是无法避而不谈的。要很好地理解 Mask R-CNN 网络架构,最好从R-CNN来理解。 以下仅仅是对RCNN,Fast RCNN,Faster RCNN的简单回顾,如果需要详细了解,可以学习这篇博客。

2.1 RCNN

在网络的底部,基于非深度学习的选择性搜索 (SS) 用于特征提取以生成 2k 区域建议。每个riigion proposall(区域提案) 都经过扭曲并通过卷积神经网络(CNN)和最后的支持向量机(SVM),输出分类和边界框。(因此效率很低)(如果感兴趣,可以阅读《Faster RCNN超详细入门 01-准备篇-背景 RCNN,SPPnet,Fast RCNN,RoI Pooling》)

2.2 Fast RCNN

在Fast R-CNN中,区域提议部分仍然使用基于非深度学习的 SS 方法,SS 仍然用于生成 2k 个区域建议。但是,与R-CNN不同的是,输入整张图像(而非每一个区域)经过 CNN 进行特征提取以生成特征图(这样就相当于共享了参数,提高了速度)。之后根据每个区域提议共享这些特征图以用于 RoI 池化。对于每个区域提案,在提案上执行 RoI 池化,最终通过网络,即全连接(FC)层。并且不再使用 SVM。最后,在全连接(FC)层的输出端输出分类和边界框。

2.3 Faster RCNN

详细可参考《Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)》

在Faster RCNN中,输入图像通过 CNN。这些特征图将用于区域提议网络(RPN)以生成区域提议,并用于生成特征图以用于稍后的 RoI 池化。不再使用SS。 因此,整个网络是一个端到端的深度学习网络,对于梯度传播提高目标检测精度至关重要。与Fast RCNN类似,对于每个 region proposal,RoI pooling 都在proposal 上进行,最后通过网络,即全连接层。最后,输出分类和边界框。

feature_maps = process(image)

ROIs = region_proposal(feature_maps)

for ROI in ROIs

patch = roi_pooling(feature_maps, ROI)

results = detector2(patch)

2.4 Mask RCNN

Mask RCNN,架构非常接近Faster RCNN。主要区别在于,在网络的末端,还有另一个头,即上图中的掩码分支,用于生成掩码进行实例分割。还有把Faster RCNN中的ROI Pooling换成了ROIAlign。(3.3会提到)

三、Mask RCNN网络概述

3.1 架构

两阶段

第一阶段:区域提案网络(RPN),提议候选对象边界框。每个区域提案都将经过第二阶段。第二阶段:对于每个区域提议,第一阶段提出的特征图根据区域进行RoI池化,并通过剩余的网络,输出类别、边界框以及二进制掩码。(在 ROI 池化之后,作者又添加 2 个卷积层来构建掩码。)

细节

RoI Align 网络输出多个边界框,而不是一个确定的边界框,并将它们扭曲成一个固定的维度(利用SSP net)。然后将扭曲的特征输入全连接层,使用 softmax 进行分类,并使用回归模型进一步细化边界框预测。扭曲的特征也被输入到 Mask 分类器中,该分类器由两个 CNN 组成,为每个 RoI 输出一个二进制掩码。掩码分类器允许网络为每个类生成掩码,而不会在类之间进行竞争。

3.2 Loss Function(损失函数)

多任务损失函数:

L

c

l

s

Lcls

Lcls:分类损失,与Faster R-CNN相同。

L

b

o

x

Lbox

Lbox:边界框损失,与Faster R-CNN相同。

L

m

a

s

k

Lmask

Lmask:二进制掩码损失。这个掩码分支为每个 RoI 输出

K

m

2

Km²

Km2,它们是

m

×

m

m × m

m×m 分辨率的

K

K

K 个二进制掩码,代表

K

K

K 个类。

3.3 ROI Align

原理

Mask R-CNN 的另一个主要贡献是对 ROI pooling的改进。在 ROI 中,卷积图被数字化(上图左上图):目标特征图的单元边界被迫与输入特征图的边界重新对齐。因此,每个目标单元格的大小可能不同(左下图),而这使得物体的预测边框与真实边框存在一个差距,这个差距在大物体检测时,误差可以接受,但在小物体检测时,误差就显得尤为难以接受。Mask R-CNN 使用ROI Align,它不会取整单元格的边界(右上)并使每个目标单元具有相同的大小(右下)。它还应用插值来更好地计算单元格内的特征图值。例如,通过应用插值,现在左上角的最大特征值从 0.8 变为 0.88。

Roi Pooling vs Roi Align

Faster RCNN中的Roi Pooling

首先,我们经过一些卷积层得到了如图左侧的输入特征图。然后根据region proposal(区域提议),我们使用一个 7×5 的区域作为 RoI Pooling 的输入,以输出 2×2 的特征图。每个黑色矩形都经过四舍五入以具有整数长度以供以后进行池化。对于输出特征图的每个值,它们只选取每个黑色矩形的最大值,称为最大池化(Max Pooling)。

Mask R-CNN 中的 RoIAlign

不是将黑色矩形四舍五入以获得整数长度,而是使用相同大小的黑色矩形。基于特征图值重叠的区域,取各单元格中心位置,使用双线性插值得到中间池化特征图,如图右下角所示。然后在这个中间池化特征图上执行最大池化(Max pooling)。

效果

四、Mask RCNN的可视化

参考Image segmentation with Mask R-CNN

可视化 Mask R-CNN/Faster R-CNN 中的一些主要步骤。使用Region proposal network(区域提议网络),我们提出 ROI proposals。下面的虚线矩形是那些提案,但为了演示目的,我们决定只显示那些最终得分高的proposal。

Roi Align(refine前)

这是我们进行最终分类和定位预测时边界框细化后的框。边界框更好地包围了ground truth内的物体。

refine后的边界框

就像 Faster R-CNN 一样,它是基于 RPN (region proposal network)的 ROI(虚线)执行目标分类。实线是最终预测中的边界框细化后的结果。

使用ROI分类(虚线),refine后(实线)

然后,采用非极大值抑制(non-maximum suppression),它对同一类高度重叠的框进行分组,并仅选择置信度最高的预测。这避免了同一目标的重复框选。

使用nms后,实线是细化的边界框

top边界框预测结果

以下是 RPN 使用的输入图片和一些特征图。第一个特征图显示了汽车排队位置的高激活率,也就是说,特征图学到了汽车的部分特征。 边界框的一些边角位置: 以及锚点偏移量的分布: 由上图看出,此次训练主要以x,y方向上的偏移量为主。 以下是根据top类别的,Mask R-CNN的最终预测:

Mask R-NNN的最终预测

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。