专栏名称: coderpai
目录
相关文章推荐
德州晚报  ·  沙尘今晚到!还有小雨雪!山东最新预报 ·  昨天  
鲁中晨报  ·  警惕!淄博一女子被骗80万 ·  昨天  
山东省交通运输厅  ·  山东铁投集团力促“开门红” ... ·  2 天前  
鲁中晨报  ·  42岁男演员街头摆摊刷鞋,本人回应→ ·  3 天前  
51好读  ›  专栏  ›  coderpai

CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN

coderpai  · 掘金  ·  · 2017-12-30 12:35

正文

作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai
我的博客: 请点击这里

自从 Alex Krizhevsky, Geoff Hinton, and Ilya Sutskever 成为了 ImageNet 2012 冠军之后,CNN 已经变成了图像分割的标配。实际上,从那时起,CNN 已经在 ImageNet 挑战上面战胜了人类。

CNNs now outperform humans on the ImageNet challenge. The y-axis in the above graph is the error rate on ImageNet.

虽然这些分类结果令人印象深刻,但是比真实的人类视觉理解还是要简单很多。

An example of an image used in the classification challenge. Note how the image is well framed and has just one object.

在分类中,通常我们会把图像中一个单一对象作为分类焦点,也就是说主要去识别焦点的物体(比如上面的狗狗)。但是,当我们环顾我们周围世界的时候,我们面对的是一个更加复杂的问题。

Sights in real life are often composed of a multitude of different, overlapping objects, backgrounds, and actions.

我们看到场景是一个非常复杂的场景,而且是多个目标进行重叠的背景,我们不仅需要分类这些不同的对象,而且需要识别他们的边界和彼此的关联。

In image segmentation, our goal is to classify the different objects in the image, and identify their boundaries. Source: Mask R-CNN paper.

CNN 可以帮助我们实现这样复杂的任务吗?也就是说,我们给出更复杂的图像,可以利用 CNN 来识别图像中的不同物体之间的边界吗?这个问题,在过去几年里,已经由 Ross Girshick 和他的同事向我们证明了,答案是肯定的。

这篇文章的目标

通过这篇文章,我们将介绍一些用于对象检测和分割的主要技术手段,并且了解他们是如何从上一个模型演变到下一个模型的。具体来说,我们将介绍 R-CNN(Regional CNN),一个最早利用CNN解决这个问题的模型,以及其后期的 Fast R-CNN 模型和 Faster R-CNN 模型。最后,我们将介绍 Mask R-CNN 模型,这个模型是由 Facebook Research 最近发布的一篇文章,这篇文章提供了像素级别的分割。以下是各个模型的文章:

  1. R-CNN: arxiv.org/abs/1311.25…

  2. Fast R-CNN: arxiv.org/abs/1504.08…

  3. Faster R-CNN: arxiv.org/abs/1506.01…

  4. Mask R-CNN: arxiv.org/abs/1703.06…

2014: R-CNN - An Early Application of CNNs to Object Detection

Object detection algorithms such as R-CNN take in an image and identify the locations and classifications of the main objects in the image. Source: [https://arxiv.org/abs/1311.2524 .]( upload-images.jianshu.io/upload_imag…

受 Hinton 实验室的启发,UCB 的 Jitendra Malik 的团队问了这样一个问题:

对象检测到底能如何泛化?

对象检测是找到图像中的不同对象并且进行分类的任务(如上图所示)。由 Ross Girshick,Jeff Donahue 和 Trevor Darrel 组成的团队发现这个问题可以用 Krizhevsky 的方法在 PASCAL VOC Challenge 上面进行实现,他们写道:

本文首先显示,与基于 HOG 类特征的简单系统相比,CNN 可以显著提高 PASCAL VOC 上的对象检测性能。

现在让我们来了解一下 R-CNN 的架构,以及它是如何工作的。

理解 R-CNN

R-CNN 模型的目标是根据拍摄的图像,正确识别图像中主要对象(通过边框)的位置。

  • 输入:image

  • 输出:物体边框 + 每个对象的标签

但是我们如何找出这些边框的位置呢?R-CNN 的做法就是按照人类的直观理解来做的 —— 我们先从图像里把一些物体给框出来,然后来确定这个物体是什么对象。

Selective Search looks through windows of multiple scales and looks for adjacent pixels that share textures, colors, or intensities. Image source: https://www.koen.me/research/pub/uijlings-ijcv2013-draft.pdf

R-CNN 使用一种称为选择性搜索的技术来创建这些边界框,更多的细节你可以阅读 这篇文章 。更高层次来说,选择性搜索(如上图所示)是通过不同大小的窗口来查看图像,并且对于每个大小不同的窗口,尝试通过文理,颜色或强度将相邻像素分组在一起以识别对象。

After creating a set of region proposals, R-CNN passes the image through a modified version of AlexNet to determine whether or not it is a valid region. Source: https://arxiv.org/abs/1311.2524

一旦这些边框确定之后,R-CNN 就会将该区域转变到一个标准的平方尺寸,并将其传送到 AlexNet 的一个变体中,如上图所示。

在 CNN 的最后一层,R-CNN 添加了一个支持向量机(SVM),它简单的分类这是否是一个对象,也就是图中的第四步。

改进边界框

现在,我们已经获得了物体的大致边框,那么我们可以将这个边框缩小以适应物体本身真实的尺寸吗?答案是可以的,这是 R-CNN的最后一步。R-CNN 对区域进行一个简单的线性回归,以生成更紧密的边界框坐标以获得结果。以下是回归模型的输入和输出:

  • 输入: 与物体对应图像的子区域。

  • 输出: 子区域中对象的新边界框坐标。

最后,总结一下 R-CNN 的几个步骤:

  1. 给图像生成一组边界框。

  2. 通过预先训练的 AlexNet 运行边框中的图像,最后通过 SVM 来进行分类。

  3. 一旦对象被分类,边界框通过运行线性回归模型输出更加紧密的边框坐标。

2015: Fast R-CNN - Speeding up and Simplifying R-CNN

Ross Girshick wrote both R-CNN and Fast R-CNN. He continues to push the boundaries of Computer Vision at Facebook Research.

R-CNN 可以很好的工作,但是基于以下几个理由,它非常慢:

  1. ’它需要 CNN(AlexNet)针对每个图像区域进行运行分类(每个图像大约 2000 次前向传递)。

  2. 它需要分别训练三种不同的模型 —— CNN生成图像特征,SVM来预测分类,最后通过线性回归来收紧边界框。这样设计使得数据管道非常难设计。

2015年,R-CNN 的第一作者 Ross Girshick 解决了这两个问题,也就诞生了第二个算法 —— Fast R-CNN。现在,让我们来看看它的主要思路:

Fast R-CNN Insight 1: RoI (Region of Interest) Pooling

对于 CNN 的前向传播,Girshick 意识到,对于每个图像,图像的许多分割区域都是重叠的,这就使得我们一次又一次地运行相同的 CNN 计算(大约 2000 次)。他的想法很简单,就是让CNN运行一次图像,然后找到一种共享计算的方法,来区分这 2000 个区域。

In RoIPool, a full forward pass of the image is created and the conv features for each region of interest are extracted from the resulting forward pass. Source: Stanford’s CS231N slides by Fei Fei Li, Andrei Karpathy, and Justin Johnson.

这正是 Fast R-CNN 被称之为 PolPool(Region of Interest Pooling)的核心技术,该技术能分享 CNN 在其次区域的前向传递。在上图中,请注意每个 CNN 特征图是从一个原来的大特征图中进行选取的。然后,区域中的特征都被进行合并(一般是采用最大池)。所以需要我们计算的是一个原始图片,而不是那个 2000 次区域。

Fast R-CNN Insight 2: Combine All Models into One Network

Fast R-CNN combined the CNN, classifier, and bounding box regressor into one, single network. Source: https://www.slideshare.net/simplyinsimple/detection-52781995

Fast R-CNN 的第二个改进是在单一模型中同时训练了 CNN,分类器和边界回归。早期的模型我们使用 CNN 来进行图像特征提取,SVM 来进行分类,最后用线性回归来进行边框收紧。Fast R-CNN 使用一个模型来同时达到这三个模型的效果。

上图展示的就是这个联合模型。Fast R-CNN 用 CNN 顶部的 softmax 层来替代 SVM 分类器的输出分类。它还添加了与 softmax 层平行的线性回归层用来输出边界框坐标。这样,所有我们需要模型的输出都是来自于单一的网络。整个网络模型的输入和输出如下:

  • 输入: 带有区域目的的图像。

  • 输出: 每个区域的对象分类以及更紧密的边界框。

2016: Faster R-CNN - Speeding Up Region Proposal

即使取得了这些进步,Fast R-CNN 仍然存在一个瓶颈 —— 区域检测。正如我们所看到的,检测对象位置的第一步是产生一对潜在的边界框和区域进行测试。在 Fast R-CNN 中,这些边界框是采用选择性搜索创建的,这是一个相当缓慢的过程,被认为是整个流程额瓶颈。

Jian Sun, a principal researcher at Microsoft Research, led the team behind Faster R-CNN. Source: https://blogs.microsoft.com/next/2015/12/10/microsoft-researchers-win-imagenet-computer-vision-challenge/#sm.00017fqnl1bz6fqf11amuo0d9ttdp

在2015年中期,一个微软研究员的团队 Shaoqing Ren,Kaiming He,Ross Girshick 和 Jian Sun,找到了一个方法来解决这个瓶颈问题,他们将这个方法命名为 Faster R-CNN。

Faster R-CNN 的一个重大改进是,在 CNN 第一步分类的时候,后续步骤重用那些相同的 CNN 结构,而不是单独运行选择性搜索算法。

In Faster R-CNN, a single CNN is used for region proposals, and classifications. Source: https://arxiv.org/abs/1506.01497

的确,这正是 Faster R-CNN 团队所取得的成就。在上图中,你可以看到如何使用单个 CNN 来对区域进行处理和分类。这样,我们只需要一个 CNN 进行训练,而其他的区域都可以从这个 CNN 网络中获取,作者这样写道:

我们的观测结果是,用于区域检查(如 Fast R-CNN)的卷积特征图也可以用于区域生成,从而实现几乎无成本的区域生成。

一下是其模型的输入和输出:

  • 输入: 图像(注意不需要区域提案)。

  • 输出: 图像中对象的分类和边界框坐标。

如何生成区域

接下来,让我们来看看 Faster R-CNN 是如何从 CNN 特征图中来生成区域。Faster R-CNN 在网络上添加了一个完全卷积网络,创建了一个所谓的 区域生成网络

The Region Proposal Network slides a window over the features of the CNN. At each window location, the network outputs a score and a bounding box per anchor (hence 4k box coordinates where k is the number of anchors). Source: https://arxiv.org/abs/1506.01497

区域生成网络通过在 CNN 特征图上面的滑动窗口,并在每个窗口中输出 k 个潜在的边界框和分数,以便预测哪些框是最好的。那么,k 个框是代表什么呢?

We know that the bounding boxes for people tend to be rectangular and vertical. We can use this intuition to guide our Region Proposal networks through creating an anchor of such dimensions. Image Source: http://vlm1.uta.edu/~athitsos/courses/cse6367_spring2011/assignments/assignment1/bbox0062.jpg

直观地,我们知道图像中的对象应该符合某些常见的比例和大小。例如,我们知道我们想要的一些类似于人类形状的边框比例和大小。同样,我们知道我们看到的很多的盒子厚度都不会很薄。以这种方式,我们可以创建 k 个这样的盒子,我们称之为锚盒(anchor boxes)。对于每个这样的锚盒,我们在图像中输出一个边界框和每个位置的得分。

考虑到这些锚盒,我们来看看这个区域生成网络的输入和输出:

  • 输入 :CNN 特征图。

  • 输出 :每个锚盒对应的边界框和该边界框中图像会是某个对象的可能性分数。

然后,我们将每个这样的可能对象边界框传递到 Fast R-CNN 中,以生成分类结果和收紧边界框。

2017: Mask R-CNN - Extending Faster R-CNN for Pixel Level Segmentation

The goal of image instance segmentation is to identify, at a pixel level, what the different objets in a scene are. Source: https://arxiv.org/abs/1703.06870

到目前为止,我们已经看到我们如何使用 CNN 特征图去有效地定位图像中不同对象的边界框。

我们可以将这些技术进一步扩展,并定位每个对象的精确像素,而不是仅限于边框。这个像素级别的图像分割问题被 Kaiming He 等科学家解决,这个框架被称为 Mask R-CNN。

Kaiming He, a researcher at Facebook AI, is lead author of Mask R-CNN and also a coauthor of Faster R-CNN.







请到「今天看啥」查看全文