英文原文:https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/
对原文的表达有部分改动
在本文中,我们将更深入地研究可用于目标检测的各种算法。我们将从 RCNN 家族的算法开始,即 RCNN、Fast RCNN 和 Faster RCNN。在本系列即将发布的文章中,我们将介绍更高级的算法,如 YOLO、SSD 等。
1. 解决目标检测任务的简单方法(使用深度学习)
下图是说明目标检测算法如何工作的一个流行示例。图像中的每个物体,从一个人到一只风筝,都以一定的精度被定位和识别。
让我们从最简单的深度学习方法开始,也是一种广泛使用的方法,用于检测图像中的目标——卷积神经网络( CNN)。CNN 的内部工作原理如下:
我们将图像传递给网络,然后通过各种卷积和池化层处理,发送给全连接层。最后,我们以目标类别的形式获得输出。这相当简单,不是吗?对于每个输入图像,我们得到一个相应的类作为输出。我们可以使用这种技术来检测图像中的各种目标吗?让我们看看如何使用 CNN 解决一般的目标检测问题。
-
首先,我们用一张图片作为输入:
输入图片 -
然后我们将图像分成不同的区域:
分隔不同区域 然后我们将每个区域视为一个单独的图像。
-
将所有这些区域(图像)传递给 CNN 并将它们分类为各种类别。
5.一旦我们将每个区域划分为相应的类,我们就可以将所有这些区域组合起来,得到带有检测目标的原始图像:
带有检测目标的原始图像
使用这种方法的问题在于图像中的目标可能具有不同的纵横比和空间位置。例如,在某些情况下,目标可能覆盖图像的大部分,而在某些情况下,目标可能仅覆盖图像的一小部分。目标的形状也可能不同(在现实生活中经常发生)。由于这些因素,我们将需要大量的区域,从而导致大量的计算时间。因此,为了解决这个问题并减少区域数量,我们可以使用基于区域的 CNN,它使用提案法选择区域。让我们了解这个基于区域的 CNN 可以为我们做什么。
2. 理解基于区域的卷积神经网络
2.1 RCNN
与在大量区域上工作不同的是,RCNN 算法是在图像中选取一堆框并检查这些框中是否有任何一个包含任何目标。 RCNN 使用 selective search 从图像中提取这些框(这些框称为 regions)。
让我们首先了解什么是 selective search 以及它如何识别不同的 regions。基本上四个模式可以构成一个物体:不同的尺度、颜色、纹理和外壳。selective search 识别图像中的这些模式,并在此基础上提出各种regions。以下是selective search 工作原理的简要概述:
-
首先将图像作为输入:
输入 -
生成初始子分割,以便我们从该图像中获得多个 regions
初始分割 -
将相似的区域组合起来形成一个更大的区域(基于颜色相似性、纹理相似性、大小相似性和形状兼容性):
根据特性组合 最后,这些区域会产生最终的目标位置(Region of Interest)。以下是 RCNN 中检测目标所遵循步骤的简要总结:
- 首先采用一个预训练的卷积神经网络(待迁移)。
- 我们根据需要检测的类数训练网络的全连接层和输出层。
- 获取每个图像的 ROI。然后我们 reshape 所有这些区域,以便匹配 CNN 输入大小。
- 得到区域后,我们训练 SVM 对物体和背景进行分类。对于每一类,我们训练一个二元 SVM。
- 最后,我们训练一个线性回归模型来为图像中的每个识别目标生成更紧密的边界框。
举个例子:
-
首先,将图像作为输入:
输入图片 -
我们使用一些建议方法(例如 selective search)获得感兴趣区域 (ROI):
获取ROI -
根据 CNN 的输入对所有这些区域进行 reshape,并将每个区域传递给 ConvNet:
Reshape to CNN -
CNN 提取每个区域的特征,并使用 SVM 将这些区域划分为不同的类别:
CNN to SVM -
最后,使用边界框回归 (Bbox reg) 来预测每个识别区域的边界框:
边界回归
2.2 RCNN 的问题
到目前为止,我们已经看到了 RCNN 如何实现目标检测。但是这种技术有其自身的局限性。由于以下步骤,训练 RCNN 模型既昂贵又缓慢:
- 基于 selective search 为每个图像提取 2,000 个区域
- 使用 CNN 为每个图像区域提取特征。假设我们有 N 个图像,那么 CNN 特征的数量将是 N*2,000
- 使用RCNN进行物体检测的整个过程有三个模型:
- 用于特征提取的CNN
- 用于识别目标的线性 SVM 分类器
- 用于收紧边界框的回归模型。
所有这些过程结合起来使 RCNN 非常慢。对每张新图像进行预测大约需要 40-50 秒,这实质上使得模型在面对庞大的数据集时变得笨重且几乎无法构建。
好消息是——我们有另一种目标检测技术,它修复了我们在 RCNN 中看到的大部分问题。
3 理解 Fast RCNN
3.1 Fast RCNN
我们还能做些什么来减少 RCNN 算法通常需要的计算时间?我们是否可以每张图像只运行一次并获取所有感兴趣的区域(包含某个目标的区域)。
RCNN 的作者 Ross Girshick 提出了这个想法,即每张图像只运行一次 CNN,然后找到一种方法在 2,000 个区域之间共享该计算。在 Fast RCNN 中,我们将输入图像提供给 CNN,后者反过来生成卷积特征图。使用这些地图,提取提议的区域。然后我们使用 RoI 池化层将所有提议的区域重塑为固定大小,以便可以将其馈入全连接网络。
让我们将其分解为简化概念的步骤:
- 与前两种技术一样,我们将图像作为输入。
- 该图像被传递到一个 ConvNet,它依次生成感兴趣的区域。
- RoI 池化层应用于所有这些区域,根据 ConvNet 的输入重塑它们。每个区域都被传递到一个全连接的网络。
- 追加 softmax 层来输出类。线性回归层也并行用于输出预测类的边界框坐标。
因此,Fast RCNN 不是使用三个不同的模型(如 RCNN),而是使用单个模型从区域中提取特征,将它们分成不同的类,并同时返回识别类的边界框。
为了进一步分解,我将对每个步骤进行可视化。
-
将图像作为输入:
输入图像 -
这个图像被传递到一个 ConvNet,它相应地返回感兴趣的区域:
ConvNet 返回 ROI -
在提取的感兴趣区域上应用 RoI 池化层,以确保所有区域的大小相同:
RoI 池化层 -
这些区域被传递到一个全连接的网络,该网络对它们进行分类,并同时使用 softmax 和线性回归层返回边界框:
这就是 Fast RCNN 如何解决 RCNN 的两个主要问题,1. 将每个图像的一个而不是 2,000 个区域传递给 ConvNet。2. 使用一个而不是三个不同的模型来提取特征、分类和生成边界框。
3.2 Fast RCNN的问题
但即使是 Fast RCNN 也存在某些问题。它还使用 selective search 作为寻找感兴趣区域的建议方法,这是一个缓慢且耗时的过程。每张图像检测目标大约需要 2 秒,这与 RCNN 相比要好得多。但是当我们考虑大型现实生活数据集时,即使是 Fast RCNN 看起来也不那么快了。
4. 理解 Faster RCNN
4.1. Faster RCNN
Faster RCNN 是 Fast RCNN 的修改版本。它们之间的主要区别在于 Fast RCNN 使用 selective search 来生成感兴趣的区域,而 Faster RCNN 使用 Region Proposal Network ,又名 RPN。 RPN 将图像特征图作为输入并生成一组目标提议,每个提议的目标以分数作为输出。
Faster RCNN 方法通常遵循以下步骤:
- 我们将图像作为输入并将其传递给 ConvNet,后者返回该图像的特征图。
- RPN 应用于这些特征图。这将返回目标提议及其目标分数。
- 一个 RoI 池化层被应用于这些提议,以将所有提议 reshape 到相同的大小。
-
最后,提议被传递到一个全连接层,该层在其顶部有一个 softmax 层和一个线性回归层,以对目标的边界框进行分类和输出。
Faster RCNN
让我简要解释一下这个区域提议网络(RPN)实际上是如何工作的。
首先,Faster RCNN 从 CNN 获取特征图并将它们传递给区域提议网络。 RPN 在这些特征图上使用一个滑动窗口,在每个窗口,它生成 k 个不同形状和大小的 Anchor 框:
Anchor 框是固定大小的边界框,它们放置在整个图像中,具有不同的形状和大小。对于每个 Anchor,RPN 预测两件事:
- Anchor是目标的概率(不考虑目标属于哪个类)
- 其次是边界回归,用于调整锚点以更好地适应目标
我们现在有不同形状和大小的边界框,它们被传递到 RoI 池化层。在 RPN 步骤之后,有可能存在没有分配给它们的类别提议。我们可以获取每个建议并对其进行裁剪,以便每个建议都包含一个目标。这就是 RoI 池化层所做的。它为每个锚点提取固定大小的特征图:
然后将这些特征图传递到具有 softmax 和线性回归层的全连接层。它最终对目标进行分类并预测已识别目标的边界框。
4.2 Faster RCNN 的问题
到目前为止,我们讨论的所有目标检测算法都使用区域来识别目标。网络不会一次性查看完整图像,而是依次关注图像的各个部分。这会造成两个并发症:
- 该算法需要多次遍历单个图像才能提取所有目标
- 由于有不同的系统一个接一个地工作,所以更靠后的系统的性能取决于先前系统的性能
5. 算法总结
算法 | 特征 | 预测时间/图像 | 限制 |
---|---|---|---|
RCNN | 使用selective search来生成区域。从每张图像中提取大约 2000 个区域。 | 40-50 秒 | 高计算时间,因为每个区域分别传递给 CNN,它还使用三种不同的模型进行预测。 |
Fast RCNN | 每张图像只传递一次到 CNN 并提取特征图。在这些地图上使用 selective search 来生成预测。将 RCNN 中使用的所有三个模型组合在一起。 | 2 秒 | selective search很慢,因此计算时间仍然很长 |
Faster RCNN | 用区域提议网络取代 selective search,使算法更快。 | 0.2 秒 | 目标提议需要时间,并且由于不同的系统一个接一个地工作,系统的性能取决于前一个系统的性能。 |