基本目标检测算法介绍(第1部分)

Sunflower`
2周前 阅读 146 点赞 1

在一个凌乱的房子里,你花过多少时间寻找丢失的房间钥匙?相信很多人都有过这种直到现在仍然是令人沮丧的经历。但是如果一个简单的计算机算法能在毫秒之内找到你的钥匙呢?

这就是目标检测算法的能力。虽然这是一个简单的例子,目标检测涉及各行各业不同应用,在智能城市车辆实时检测时钟监控。简而言之,这些都是强大的深度学习算法。

在这篇文章中,我们将深入研究各种可用于目标检测的算法。我们将从属于RCNN族的算法开始,即RCNN、Fast RCNN和Faster RCNN。在本系列即将到来的文章中,我们将介绍更高级的算法,如YOLO、SSD等。

我鼓励您阅读上一篇关于目标检测的文章,在上一篇文章中我们介绍了一些目标检测的基础知识,并展示了ImageAI库的Python实现。

目录表

1.一种简单的解决目标检测任务的方法(利用深度学习)

2.理解基于区域的卷积神经网络

RCNN

RCNN问题

3.Fast RCNN的理解

  • 了解Fast RCNN
  • Fast RCNN问题

4.Fster RCNN

  • 了解Faster RCNN
  • Faster RCNN问题

5.算法综述

6.小结

1. 目标检测简易方法(利用深度学习)

下图是对象检测算法如何工作的典型示例。图像中的每个物体,从人到风筝,都被定位和识别出来,并附有一定的精确度。

让我们从最简单的但使用广泛的深度学习方法开始——用于检测图像中的对象——卷积神经网络(Convolutional Neural Networks,CNNs)。如果你对CNNs的理解有点生疏,我建议先浏览一下这篇文章

先简单地总结一下CNN的内部运作。看看下面的图片:

我们将图像传递给网络,然后通过各种卷积和汇集层发送图像。最后,我们以对象的类的形式得到输出。

对于每个输入图像,我们得到相应的类作为输出。我们能用这种技术来检测图像中的各种物体吗?是的,我们可以!让我们看看如何使用CNN解决一般的目标检测问题。

1.首先,输入图像:

2.然后将图像分割成不同的区域:

3.然后我们将每个区域视为一个单独的图像

4.将所有这些区域(图像)传递给CNN,并将它们分类成不同的类

5.一旦我们将每个区域划分成相应的类,就可以将所有这些区域组合起来以获得原始图像和检测到的对象:

问题是图像中的对象可以具有不同的纵横比和空间位置。例如,在某些情况下,目标可能覆盖图像的大部分,而在其他情况下,目标可能仅覆盖图像的一小部分。对象的形状也可能不同(在实际中很常见)。

所以,我们将需要大量的区域,这也会导致大量的计算时间。因此,为了减少区域的数量,我们可以使用基于区域的CNN。让我们了解这个区域的CNN能为我们做什么。

2.基于区域卷积神经网络的理解

2.1 认识RCNN

RCNN算法不是处理大量区域,而是在图像中提供一组框,并检查这些框中是否有包含任何对象。RCNN使用选择性搜索从图像中提取这些框(这些框被称为区域)。

让我们首先了解什么是选择性搜索,以及它如何识别不同的区域。基本上有四个区域组成一个物体:不同的尺度、颜色、纹理和外壳。选择性搜索识别图像中的这些模式,并在此基础上提出不同的区域。这里简要介绍一下选择性搜索的工作原理:

  • 首先将图像作为输入:

  • 产生初始子分割,使得我们从该图像具有多个区域:

  • 结合相似的区域形成一个较大的区域(基于颜色相似,纹理相似,大小和形状的相似性,兼容性):

  • 最后,这些区域产生最终的对象位置(感兴趣区域)。

下面是RCNN检测目标之后的步骤的总结摘要:

  1. 首先采用预训练卷积神经网络。
  2. 对该模型进行再训练。我们根据需要检测的类的数量来训练网络的最后一层。
  3. 得到每个图像的感兴趣区。然后,我们重塑所有区域,使他们能够匹配CNN的输入大小。
  4. 在得到区域后,训练SVM对目标和背景进行分类。对于每个类,我们训练一个二进制SVM。
  5. 最后,我们训练线性回归模型来生成图像中每个被识别对象的更紧密的包围盒。

如果有一个生动形象的例子可能会更好地理解以上步骤(图片来自这里)。举个例子!

  • 首先,输入图像:

  • 然后,我们使用一些方法(例如,如上所述的选择性搜索)得到感兴趣区(ROI):

  • 然后根据CNN的输入对所有这些区域进行改造,并将每个区域传递给ConvNet:

  • CNN提取每个区域的特征,并使用支持向量机将这些区域划分为不同的类:

  • 最后,使用包围盒回归(Bounding box regression)来预测每个识别区域的边界框:

以上就是RCNN如何帮助我们检测物体。

2.2 RCNN的问题

到目前为止,我们已经看到RCNN如何有助于目标检测。但这种技术也有其局限性。由于以下步骤,RCNN模型的训练费用昂贵且速度慢:

  1. 基于选择性搜索提取每个图像的2000个区域
  2. 使用CNN提取每个图像区域的特征。假设我们有N个图像,那么CNN特征的数量将是N* 2000。
  3. 使用RCNN的物体检测的整个过程有三种模型:
  • CNN特征提取
  • 用于目标识别的线性SVM分类器
  • 收缩边界框的回归模型。

所有这些过程结合起来使得RCNN非常缓慢。对每个新图像进行预测大约需要40-50秒,这实质上使得模型很麻烦,并且当面对一个巨大的数据集时几乎不可能构建。

我们有另一个对象检测技术,修复了我们在RCNN中看到的大部分限制。

3.Fast RCNN

3.1 了解Fast RCNN

我们还可以做些什么来减少RCNN算法通常需要的计算时间?我们不是每幅图像都运行CNN 2000次,而是每幅图像只运行一次,并获得所有感兴趣的区域(包含一些目标的区域)。

RCNN的作者Ross Girshick提出了这样的想法,即每幅图像运行一次CNN,然后找到一种方法跨2000个区域共享这种计算。在快速RCNN中,我们将图像输入到CNN,然后产生卷积特征映射。使用这些映射,建议的区域被提取。然后,我们使用RoI池层将所有建议的区域重塑为固定大小,以便可以将其馈送到完全连接的网络中。

让我们把它分解成简化概念的步骤:

  1. 首先输入图像。
  2. 该图像被传递给一个ConvNet,它依次产生感兴趣区。
  3. 在所有这些区域上应用RoI池层,以根据ConvNet的输入对它们进行重塑。然后,每个区域被传递到完全连接的网络。
  4. 在完全连接网络的顶部使用SoftMax层输出类。与SoftMax层一起,线性回归层也被并行地用于输出预测类的边界框坐标。

因此,Fast RCNN不是使用三个不同的模型(如RCNN),而是使用单个模型,从区域提取特征,将它们分成不同的类,并同时返回识别出的类的边界框。

让我们再次以实例来解释这一点:

  • 输入图像:

  • 该图像被传递给一个返回相应兴趣区的大屏幕:

  • 然后,在感兴趣的提取区域上应用Rol池层,以确保所有区域都具有相同的大小:

  • 最后,这些区域被传递到一个完全连接的网络,对它们进行分类,同时使用SoftMax和线性回归层同时返回包围盒:

这就是Fast RCNN如何解决RCNN的两个主要问题,即,将每个图像传递一个而不是2000个区域到ConvNet,并使用一个而不是三个不同的模型来提取特征、分类和生成边界框。

3.2 Fast RCNN的问题

但是,即使Fast RCNN也会有问题。它也使用选择性搜索作为建议方法来找到感兴趣区,这是一个缓慢且耗时的过程。每个图像需要大约2秒来检测对象,这比RCNN要好得多。但是当我们考虑大型现实数据集时,即使是Fast RCNN也不会看起来那么快。

但是还有另一种目标检测算法-Faster RCNN。

4.Faster RCNN

4.1 了解Faster RCNN

Faster RCNN是 Fast RCNN的修改版本。它们之间的主要区别在于快速RCNN使用选择性搜索来生成感兴趣区,而Faster RCNN使用“区域生成网络(Region Proposal Network,即RPN)”。RPN将图像特征映射作为输入,并生成一组目标建议,每个目标建议以目标得分作为输出。

下面是Faster RCNN方法的执行步骤:

  1. 输入图像,并将其传递给返回该图像的特征映射的ConvNet。
  2. 区域生成网络应用于这些特征地图。这将返回对象建议以及它们的目标得分。
  3. 在这些生成上应用Rol池层将所有的生成降到相同的大小。
  4. 最后,将生成传递到在其顶部具有SoftMax层和线性回归层的完全连接层,以分类并输出对象的边界框。

简要地解释这个区域建议网络(RPN)是如何工作的。

首先,Faster RCNN从CNN获取特征映射并将其传递给区域生成网络。RPN在这些特征图上使用滑动窗口,并且在每个窗口中生成不同形状和大小的kk anchor boxes:

Anchor Boxes是固定大小的边界盒,放置在整个图像中,并且具有不同的形状和大小。对于每个锚,RPN预测两件事:

  1. 锚是目标的概率(它不考虑目标属于哪个类)。
  2. 用于调整锚以更好地适应目标的包围盒回归器。

我们现在有不同形状和大小的包围盒,它们被传递到ROI池层。可能在RPN步骤之后,有没有分配给它们的类的生成。我们可以接受每一个生成,并嵌入它,以便每个生成包含一个对象。这就是ROI池层所做的事情。它为每个锚提取固定大小的特征映射:

然后将这些特征映射传递到具有SoftMax和线性回归层的完全连接层。它最终对目标进行分类并预测所识别对象的边界框。

4.2 Faster RCNN的问题

到目前为止,我们讨论的所有对象检测算法都使用区域来识别对象。网络不是一目了然地观察完整的图像,而是有顺序地关注图像的各个部分。这产生了两个问题:

  1. 该算法需要多次通过单个图像来提取所有对象。
  2. 由于不同的系统一个接一个地工作,系统的性能取决于先前的系统如何执行

5.算法综述

下表是我们在本文中所涵盖的所有算法的一个很好的总结。下次做一个目标检测挑战时可能会有用。

6. 小结

目标检测是一个引人入胜的领域,在商业和研究应用中都能看到大量的牵引力。由于现代硬件和计算资源的进步,这个领域有了很大的突破。

这篇文章只是我们的目标探测旅程的开始。在本系列的下一篇文章中,我们将会看到现代目标检测算法,如YOLO和Retina Net。要保持关注哦!


原文链接:A Step-by-Step Introduction to the Basic Object Detection Algorithms (Part 1)

翻译:Sunflower`



| 1
登录后可评论,马上登录吧~
评论 ( 0 )

还没有人评论...