本文回顾了由微软研究人员开发的 Faster R-CNN 模型。Faster R-CNN 是一种用于物体检测的深度卷积网络,在用户看来,它是一个单一的、端到端的统一网络。该网络可以准确快速地预测不同物体的位置。为了真正理解 Faster R-CNN,我们还必须快速概述一下它所进化的网络,即 R-CNN 和 Fast R-CNN。
本文首先快速回顾了基于区域的 CNN (R-CNN),这是首次尝试构建使用预训练 CNN 提取特征的物体检测模型。接下来,快速回顾了 Fast R-CNN,它比 R-CNN 更快,但不幸的是它忽略了区域提案的生成方式。Faster R-CNN 后来解决了这个问题,它构建了一个区域提案网络,可以生成区域提案,并将其输入到检测模型 (Fast R-CNN) 以检查物体。
传统的对象检测技术遵循下图给出的 3 个主要步骤。第一步涉及生成多个区域提案。这些区域提案是可能包含对象的候选区域。这些区域的数量通常为几千个,例如 2,000 个或更多。一些生成区域提案的算法的示例是选择性搜索和 EdgeBox。
从每个区域提案中,使用各种图像描述符(例如方向梯度直方图 (HOG))提取固定长度的特征向量。该特征向量对于对象检测器的成功至关重要。即使对象由于某些变换(例如缩放或平移)而发生变化,该向量也应该充分描述对象。
然后使用特征向量将每个区域提案分配给背景类或对象类之一。随着类别数量的增加,构建可以区分所有这些对象的模型的复杂性也会增加。用于对区域提案进行分类的流行模型之一是支持向量机 (SVM)。
这个快速概述足以理解基于区域的卷积神经网络 (R-CNN) 的基础知识。
2014 年,加州大学伯克利分校的一组研究人员开发了一种名为 R-CNN(基于区域的卷积神经网络的缩写)的深度卷积网络,它可以检测图像中的 80 种不同类型的物体。
与上图所示的物体检测技术的通用流程相比,R-CNN 的主要贡献只是基于卷积神经网络 (CNN) 提取特征。除此之外,一切都与通用物体检测流程相似。下图显示了 R-CNN 模型的工作原理。
R-CNN 由 3 个主要模块组成:
R-CNN 模型有一些缺点:
作为 R-CNN 模型的扩展,提出了 Fast R-CNN 模型以克服一些局限性。下一节将简要概述 Fast R-CNN。
Fast R-CNN是一种由 Facebook AI 研究员、前微软研究员 Ross Girshick 独自开发的物体检测器。Fast R-CNN 克服了 R-CNN 中的几个问题。顾名思义,Fast R-CNN 相对于 R-CNN 的一个优势是速度。
以下是Fast R-CNN中主要贡献的摘要:
Fast R-CNN 的一般架构如下所示。与 R-CNN 中的 3 个阶段相比,该模型由一个阶段组成。它只接受图像作为输入并返回检测到的对象的类概率和边界框。
最后一个卷积层的特征图被馈送到 ROI Pooling 层。原因是从每个区域提案中提取固定长度的特征向量。下面的 GIF 显示了 ROI Pooling 层的工作原理。
简而言之,ROI Pooling 层的工作原理是将每个区域提案拆分成一个单元格网格。最大池化操作应用于网格中的每个单元格以返回单个值。所有单元格的所有值都代表特征向量。如果网格大小为 2×2,则特征向量长度为 4。
有关 ROI Pooling 层的更多信息,请查看。
然后,使用 ROI Pooling 提取的特征向量被传递到一些 FC 层。最后一个 FC 层的输出分为 2 个分支:
在 R-CNN 中,每个区域提案都独立于其他区域提案输入到模型中。这意味着如果处理单个区域需要 S 秒,则 N 个区域需要 S*N 秒。Fast R-CNN 比 R-CNN 更快,因为它在多个提案之间共享计算。
R-CNN 从每幅图像中采样单个 ROI,而 Fast R-CNN 则从同一幅图像中采样多个 ROI。例如,R-CNN 从 128 张不同的图像中选择一批 128 个区域。因此,总处理时间为 128*S 秒。
对于 Faster R-CNN,可以从仅 2 张图像(每幅图像 64 个区域)中选择一批 128 个区域。当从同一幅图像中采样区域时,它们的卷积层计算是共享的,这减少了时间。因此,处理时间降至 2*S。但是,从同一幅图像中采样多个区域会降低性能,因为所有区域都是相关的。
尽管 Fast R-CNN 模型具有优势,但它有一个关键的缺点,因为它依赖于耗时的选择性搜索算法来生成区域提议。选择性搜索方法无法针对特定的对象检测任务进行定制。因此,它可能不足以准确检测数据集中的所有目标对象。
在下一节中,我们将介绍 Faster R-CNN。Faster R-CNN 构建了一个用于生成区域提议的网络。
Faster R-CNN 是 Fast R-CNN 的扩展。顾名思义,Faster R-CNN 比 Fast R-CNN 更快,这要归功于区域提议网络 (RPN)。
本文的主要贡献是:
下图显示了 Faster R-CNN 的架构。它由 2 个模块组成:
RPN 模块负责生成区域提议。它应用了神经网络中的注意力概念,因此它指导 Fast R-CNN 检测模块在图像中寻找对象的位置。
请注意,卷积层(例如计算)是如何在 RPN 和 Fast R-CNN 模块之间共享的。
Faster R-CNN 的工作原理如下:
R-CNN 和 Fast R-CNN 模型依赖于选择性搜索算法来生成区域提议。每个提议都被输入到预先训练的 CNN 中进行分类。本文提出了一种称为区域提议网络 (RPN) 的网络,它可以生成区域提议。这有一些优点:
RPN 处理与 Fast R-CNN 共享的最后一个卷积层返回的输出特征图。如下图所示。基于大小为 nxn 的矩形窗口,滑动窗口穿过特征图。对于每个窗口,都会生成多个候选区域提案。这些提案不是最终提案,因为它们将根据其“对象性得分”(如下所述)进行筛选。
根据下图,最后一个共享卷积层的特征图通过大小为 nxn 的矩形滑动窗口,其中对于 VGG-16 网络,n=3。对于每个窗口,生成 K 个区域提案。每个提案都根据称为锚点框的参考框进行参数化。锚点框的 2 个参数是:
通常,有 3 个比例和 3 个长宽比,因此总共有 K=9 个锚点框。但 K 可能不同于 9。换句话说,每个区域提案都会生成 K 个区域,其中 K 个区域中的每一个在比例或长宽比上都有所不同。下图显示了一些锚点变化。
使用参考锚点(即锚框),使用单一尺度的单一图像,同时能够提供尺度不变的物体检测器,因为锚点存在于不同的尺度上。这避免了使用多个图像或过滤器。多尺度锚点是跨 RPN 和 Fast R-CNN 检测网络共享特征的关键。
对于每个 nxn 区域提议,提取一个特征向量(ZF 网络的长度为 256,VGG-16 网络的长度为 512)。然后,将该向量馈送到 2 个兄弟全连接层:
第一个 FC 层(即二元分类器)有 2 个输出。第一个用于将该区域分类为背景,第二个用于将该区域分类为对象。下一节将讨论如何将对象性分数分配给每个锚点以及如何使用它来生成分类标签。
cls 层为每个区域提案输出一个包含 2 个元素的向量。如果第一个元素为 1,第二个元素为 0,则区域提案被归类为背景。如果第二个元素为 1,第一个元素为 0,则该区域表示对象。
为了训练 RPN,每个锚点都会根据交并比 (IoU) 获得正或负的对象性得分。
IoU 是锚点框与真实框的交集面积与 2 个框的并集面积之比。 IoU 的范围从 0.0 到 1.0。当没有交集时,IoU 为 0.0。随着 2 个框彼此靠近,IoU 会增加,直到达到 1.0(当 2 个框 100% 相同时)。
接下来的 4 个条件使用 IoU 来确定为锚点分配正或负的客观性得分:
既不是正的也不是负的锚点对训练目标没有贡献。
我第一次阅读这篇论文时,对第二和第三个条件感到困惑。所以,让我们进一步澄清一下。
假设有 3 个区域提案与 3 个锚点相关联,它们与 3 个真实框的 IoU 分数如下所示。因为有一个锚点的 IoU 分数为 0.9,高于 0.7,所以它与该真实框的 IoU 分数为正,与所有其他框的 IoU 分数为负。
0.9, 0.55, 0.1
这是对锚点进行分类的结果:
positive, negative, negative
第二个条件意味着当没有锚点的 IoU 重叠分数高于 0.7 时,则搜索具有最高 IoU 的锚点并为其分配正的客体性分数。预计最大 IoU 分数小于或等于 0.7,但令人困惑的是,论文中没有提到 IoU 分数的最小值。
预计最小值应为 0.5。因此,如果锚点框的 IoU 分数大于 0.5 但小于或等于 0.7,则为其分配正的客体性分数。
假设锚点的 IoU 分数如下所示。因为最高的 IoU 分数是第二个,其值为 0.55,所以它符合第二个条件。因此,它被分配了一个正的 objectness 分数。
0.2, 0.55, 0.1
以下是对锚点进行分类的结果:
negative, positive, negative
第三个条件规定,当一个锚点与所有真实框的 IoU 分数小于 0.3 时,则为该锚点分配一个负的 objectness 分数。对于接下来的 IoU 分数,由于所有 IoU 分数都小于 0.3,因此在 3 种情况下为该锚点分配一个负分数。
0.2, 0.25, 0.1
以下是对锚点进行分类的结果:
negative, negative, negative
根据第四个条件,当一个锚点的 IoU 分数大于或等于 0.3 但小于或等于 0.5 时,它既不被分类为正也不被分类为负。此锚点不用于训练分类器。
对于以下 IoU 分数,锚点未分配任何标签,因为所有分数都在 0.3 和 0.5 之间(含)。
0.4, 0.43, 0.45
下一个等式总结了这 4 个条件。
请注意,第一个条件(0.7 < IoU)通常足以将一个锚点标记为正(即包含一个对象),但作者更喜欢提及第二个条件(0.5 < IoU <= 0.7),因为在极少数情况下不存在 IoU 为 0.7 的区域。
Fast R-CNN 架构中的 2 个模块,即 RPN 和 Fast R-CNN,是独立的网络。它们每个都可以单独训练。相比之下,对于 Faster R-CNN,可以构建一个统一的网络,其中 RPN 和 Fast R-CNN 可以同时训练。
核心思想是 RPN 和 Fast R-CNN 共享相同的卷积层。这些层仅存在一次,但在 2 个网络中使用。可以称之为层共享或特征共享。请记住,锚点使得 Faster R-CNN 中的 2 个模块之间可以共享特征/层。
Faster R-CNN 论文提到了在共享卷积层的同时训练 RPN 和 Fast R-CNN 的 3 种不同方法:
第一种方法称为交替训练,其中首先训练 RPN 以生成区域提案。共享卷积层的权重基于 ImageNet 上的预训练模型进行初始化。RPN 的其他权重随机初始化。
在 RPN 生成区域提案的框后,RPN 和共享卷积层的权重都会进行调整。
RPN 生成的提案用于训练 Fast R-CNN 模块。在这种情况下,共享卷积层的权重使用 RPN 调整后的权重进行初始化。其他 Fast R-CNN 权重随机初始化。在训练 Fast R-CNN 时,Fast R-CNN 和共享层的权重都会进行调整。共享层中调整后的权重再次用于训练 RPN,并重复该过程。
根据论文,交替训练是训练这两个模块的首选方式,并应用于所有实验。
第二种方法称为近似联合训练,其中 RPN 和 Fast R-CNN 都被视为单个网络,而不是两个单独的模块。在这种情况下,区域提案由 RPN 生成。
不更新 RPN 或共享层的权重,提案直接输入 Fast R-CNN,后者检测对象的位置。只有在 Fast R-CNN 产生输出后,Faster R-CNN 中的权重才会调整。
由于在生成区域提案后不更新 RPN 和共享层的权重,因此会忽略相对于区域提案的权重梯度。与第一种方法相比,这会降低该方法的准确性(即使结果接近)。另一方面,训练时间减少了约 25-50%。
在近似联合训练方法中,使用 RoI Warping 层来计算相对于建议边界框的权重梯度。
Faster R-CNN 的一个缺点是,RPN 的训练方式是,所有 256 个小批量的锚点都是从一张图像中提取的。由于一张图像中的所有样本可能相关(即它们的特征相似),因此网络可能需要很长时间才能达到收敛。
作为 Faster R-CNN 的扩展,Mask R-CNN 模型包含另一个分支,该分支为每个检测到的对象返回一个掩码。
本文回顾了一种用于对象检测的深度卷积神经网络 Faster R-CNN,它可以准确地检测和分类图像中的对象。
本文首先回顾了任何对象检测模型的通用步骤。然后,它快速回顾了 R-CNN 和 Fast R-CNN 模型的工作原理,以便了解 Faster R-CNN 正在克服哪些挑战。
Faster R-CNN 是一个端到端训练的单阶段模型。它使用一种新颖的区域提议网络 (RPN) 来生成区域提议,与传统算法(如选择性搜索)相比,这节省了时间。它使用 ROI 池化层从每个区域提议中提取固定长度的特征向量。
我们看到的 Faster R-CNN 的一个缺点是,对于 RPN,小批量中的所有锚点都是从单个图像中提取的。由于来自单个图像的所有样本可能存在相关性(即它们的特征相似),因此网络可能需要很长时间才能达到收敛。
话虽如此,Faster R-CNN 是一种最先进的物体检测模型。此后,Mask R-CNN 已基于 Faster R-CNN 构建,以返回每个检测到的物体的物体掩码。
原文链接: