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

作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai
简书地址:https://www.jianshu.com/p/867038d71f3c


自从 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: https://i-blog.csdnimg.cn/blog_migrate/abcbca21ebff3340f226410579e15a1d.png
  2. Fast R-CNN: https://arxiv.org/abs/1504.08083
  3. Faster R-CNN: https://arxiv.org/abs/1506.01497
  4. Mask R-CNN: https://arxiv.org/abs/1703.06870

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://i-blog.csdnimg.cn/blog_migrate/abcbca21ebff3340f226410579e15a1d.png.](http://upload-images.jianshu.io/upload_images/1155267-728833a69ab66dc7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

受 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 的做法就是按照人类的直观理解来做的 —— 我们先从图像里把一些物体给框出来,然后来确定这个物体是什么对象。

改进边界框

现在,我们已经获得了物体的大致边框,那么我们可以将这个边框缩小以适应物体本身真实的尺寸吗?答案是可以的,这是 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

2016: Faster R-CNN - Speeding Up Region Proposal

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

如何生成区域

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

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

RoiAlign - Realigning RoIPool to be More Accurate

代码

如果你有兴趣自己尝试这些算法,这里有一些相关的库:

Faster R-CNN
Mask R-CNN

作者:chen_h
微信号 & QQ:862251340
简书地址:https://www.jianshu.com/p/867038d71f3c

CoderPai 是一个专注于算法实战的平台,从基础的算法到人工智能算法都有设计。如果你对算法实战感兴趣,请快快关注我们吧。加入AI实战微信群,AI实战QQ群,ACM算法微信群,ACM算法QQ群。长按或者扫描如下二维码,关注 “CoderPai” 微信号(coderpai)
这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值