深度 | 用于图像分割的卷积神经网络:从R(3)
2017-04-25 编辑:
在 Faster R-CNN,单个 CNN 用于区域提案和分类。
事实上,这正是 Faster R-CNN 团队取得的成就。上图中你可以看到单个 CNN 如何执行区域提案和分类。这样一来,只需训练一个 CNN,我们几乎就可以免费获得区域提案!作者写道:
我们观察到,区域检测器(如 Fast R-CNN)使用的卷积特征映射也可用于生成区域提案 [从而使区域提案的成本几乎为零]。
以下是其模型的输入和输出:
输入:图像(注意并不需要区域提案)。
输出:图像中目标的分类和边界框坐标。
如何生成区域
让我们花点时间看看 Faster R-CNN 如何从 CNN 特征生成这些区域提案。Faster R-CNN 在 CNN 特征的顶部添加了一个简单的完全卷积网络,创建了所谓的区域提案网络。
区域提案网络在 CNN 的特征上滑动一个窗口。在每个窗口位置,网络在每个锚点输出一个分值和一个边界框(因此,4k 个框坐标,其中 k 是锚点的数量)。
区域生成网络的工作是在 CNN 特征映射上传递滑动窗口,并在每个窗口中输出 k 个潜在边界框和分值,以便评估这些框有多好。这些 k 框表征什么?
我们知道,用于人的边框往往是水平和垂直的。我们可以使用这种直觉,通过创建这样维度的锚点来指导区域提案网络。
我们知道图像中的目标应该符合某些常见的纵横比和尺寸。例如,我们想要一些类似人类形状的矩形框。同样,我们不会看到很多非常窄的边界框。以这种方式,我们创建 k 这样的常用纵横比,称之为锚点框。对于每个这样的锚点框,我们在图像中每个位置输出一个边界框和分值。
考虑到这些锚点框,我们来看看区域提案网络的输入和输出:
输入:CNN 特征图。
输出:每个锚点的边界框。分值表征边界框中的图像作为目标的可能性。
然后,我们仅将每个可能成为目标的边界框传递到 Fast R-CNN,生成分类和收紧边界框。
2017:Mask R-CNN - 扩展 Faster R-CNN 以用于像素级分割
图像实例分割的目的是在像素级场景中识别不同目标。
到目前为止,我们已经懂得如何以许多有趣的方式使用 CNN,以有效地定位图像中带有边框的不同目标。
我们能进一步扩展这些技术,定位每个目标的精确像素,而非仅限于边框吗?这个问题被称为图像分割。Kaiming He 和一群研究人员,包括 Girshick,在 Facebook AI 上使用一种称为 Mask R-CNN 的架构探索了这一图像分割问题。
Facebook AI 的研究员 Kaiming He 是 Mask R-CNN 的主要作者,也是 Faster R-CNN 的联合作者。
很像 Fast R-CNN 和 Faster R-CNN,Mask R-CNN 的基本原理非常简单直观。鉴于 Faster R-CNN 目标检测的效果非常好,我们能将其简单地扩展到像素级分割吗?
在 Mask R-CNN 中,在 Faster R-CNN 的 CNN 特征的顶部添加了一个简单的完全卷积网络(FCN),以生成 mask(分割输出)。请注意它是如何与 Faster R-CNN 的分类和边界框回归网络并行的。
Mask R-CNN 通过简单地向 Faster R-CNN 添加一个分支来输出二进制 mask,以说明给定像素是否是目标的一部分。如上所述,分支(在上图中为白色)仅仅是 CNN 特征图上的简单的全卷积网络。以下是其输入和输出:
输入:CNN 特征图。
输出:在像素属于目标的所有位置上都有 1s 的矩阵,其他位置为 0s(这称为二进制 mask)。
但 Mask R-CNN 作者不得不进行一个小的调整,使这个流程按预期工作。
RoiAlign——重对齐 RoIPool 以使其更准确
图像通过 RoIAlign 而不是 RoIPool 传递,使由 RoIPool 选择的特征图区域更精确地对应原始图像的区域。这是必要的,因为像素级分割需要比边界框更细粒度的对齐。
当运行没有修改的原始 Faster R-CNN 架构时,Mask R-CNN 作者意识到 RoIPool 选择的特征图的区域与原始图像的区域略不对齐。因为图像分割需要像素级特异性,不像边框,这自然地导致不准确。
作者通过使用 RoIAlign 方法简单地调整 RoIPool 来更精确地对齐,从而解决了这个问题。