目标检测到目标跟踪 -- Faster R-CNN 观测器

https://blog.paperspace.com/
目标跟踪在在某些程度上可以说是目标检测的一个维度拓展。目标检测类似于贝叶斯 Filtering 和 Smoothing 中的观测器,整个目标跟踪 task 就像是(offline tracking 对应于smoothing 问题,online tracking对应于filtering 问题)一个 time-vary system,我们要做的就是使用 observation 来估计系统的 Hiden State (current object location 或 offline 中的所有 frame 中 object location)。因此观测器极为重要,它是一个noisy measurement。现在我们从最经典的目标检测 Framework Faster R-CNN入手。

本文回顾了微软研究人员开发的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)来检测物体。

本文的提纲如下:

  • Overview of the Object Detection Pipeline
  • R-CNN 概述
  • Fast R-CNN 概述
  • Faster R-CNN
  • Region Proposal Network (RPN)
  • Anchors
  • Objectness Score
  • Feature Sharing between RPN and Fast R-CNN
  • 训练 Faster R-CNN
  • Alternating Training
  • Approximate Joint Training
  • Non-Approximate Joint Training
  • Drawbacks
  • Mask R-CNN
  • Conclusion
  • References

博客中提到的论文可以免费下载。本文末尾的参考文献中部分提供了这些论文的引用和下载链接。

目标检测流程概述

传统的目标检测技术遵循如下图所示的3个主要步骤。第一步涉及生成几个region proposals。这些region proposals是可能包含对象的候选方案。这些region proposal的数量通常在几千,例如2000或更多。一些生成region proposal的算法的例子是选择性搜索 (Selective Search) 和边缘框 (EdgeBoxes)。

从每个region proposal中,使用各种图像描述符提取固定长度的特征向量,例如定向梯度直方图(HOG)。该特征向量是目标检测器成功的关键。向量应该充分地描述一个对象,即使它因某些变换(如缩放或平移)而变化。

目标检测到目标跟踪 -- Faster R-CNN 观测器_第1张图片

然后使用特征向量将每个 region proposal 分配给背景类或对象类之一。随着类数量的增加,构建能够区分所有这些对象的模型的复杂性也会增加。支持向量机(SVM)是一种用于分类区域建议的流行模型。

下面的这个快速的概述足以理解基于区域的卷积神经网络(R-CNN)的基础知识。

R-CNN概览

2014年,加州大学伯克利分校的一组研究人员开发了一种名为 R-CNN (区域卷积神经网络的简称)[1]的深度卷积网络,可以检测图像中80种不同类型的物体。

与上图所示的目标检测技术的通用 pipeline 相比,R-CNN[1]的主要贡献只是基于卷积神经网络(CNN)提取特征。除此之外,一切都类似于通用对象检测 pipeline。下图是R-CNN模型的工作过程。

目标检测到目标跟踪 -- Faster R-CNN 观测器_第2张图片

R-CNN由3个主要模块组成:

  1. 第一个模块使用选择性搜索 (Selective Search) 算法生成2000个区域建议。
  2. 在调整大小为一个固定的预定义大小后,第二个模块从每个 region proposal 提取长度为4096的特征向量。
  3. 第三个模块使用一个预先训练的SVM算法来分类区域建议的背景或对象类之一。

R-CNN 模型有一些缺点:

  • 它是一个多阶段模型,每个阶段是一个独立的组件。因此,它不能端到端进行训练。
  • 它将预先训练的CNN中提取出来的特征缓存在磁盘上,以训练支持向量机。这需要数百GB的存储空间。
  • R-CNN 依赖于选择性搜索 (Selective Search) 算法来生成区域建议 (region proposal),这需要大量的时间。此外,该算法不能针对检测问题进行定制。
  • 每个区域建议 (region proposal) 被独立地反馈给 CNN进行特征提取。这使得R-CNN无法实时运行。

作为 R-CNN 模型的扩展,Fast R-CNN 模型[2] 被提出以克服其局限性。下一节将给出 Fast R-CNN 的快速概述。

Fast R-CNN快速概述

Fast R-CNN [2]是一款由 Ross Girshick 独立开发的物体检测器,他是一名 Facebook 人工智能研究员和前微软研究员。Fast R-CNN 克服了几个问题在R-CNN。顾名思义,Fast R-CNN 相对于R-CNN 的一个优势就是它的速度。

这里是Fast R-CNN 一个主要贡献的总结 :

  1. 提出了一种新的层,称为 ROI Pooling,ROI 从同一幅图像中的所有 proposal (即ROI) 中提取等长的特征向量。
  2. 相对于 R-CNN 具有多个阶段(区域建议生成、特征提取、使用SVM分类),Fast R-CNN构建的网络只有一个阶段。
  3. Fast R-CNN共享所有 proposal (即ROI) 的计算(即卷积层计算),而不是单独为每个 proposal 进行计算。这是通过使用新的 ROI Pooling 层来实现的,这使得Fast R-CNN比R-CNN更快。
  4. Fast R-CNN 不缓存提取的特征,因此不需要太多的磁盘存储。R-CNN它需要数百GB存储空间。
  5. 快速R-CNN比R-CNN更准确。

Fast R-CNN 的总体架构如下图所示。与 R-CNN 的3个阶段相比,该模型只有一个阶段。它只接受图像作为输入,并返回被检测对象的类概率和边界框。

目标检测到目标跟踪 -- Faster R-CNN 观测器_第3张图片

最后一个卷积层的特征图被输入给 ROI Pooling 层。原因是要从每个区域建议中提取一个固定长度的特征向量。下图显示了ROI Pooling 层是如何工作的。

简单地说,ROI Pooling 层的工作原理是将每个 region proposal 分割成一个网格单元。对网格中的每个单元格应用 max pooling操作以返回单个值。所有单元格的所有值表示特征向量。如果网格大小为2×2,则特征向量长度为4。

目标检测到目标跟踪 -- Faster R-CNN 观测器_第4张图片
目标检测到目标跟踪 -- Faster R-CNN 观测器_第5张图片
目标检测到目标跟踪 -- Faster R-CNN 观测器_第6张图片
目标检测到目标跟踪 -- Faster R-CNN 观测器_第7张图片

有关 ROI Pooling 层的更多信息,请参阅这篇文章。

利用 ROI Pooling 提取的特征向量传递给FC层。最后一个 FC 层的输出分为2个分支:

  1. Softmax 层预测物体类别得分 (class scores)
  2. FC 层预测被检测物体的边界框 (bounding boxes)

在 R-CNN 中,每个 region proposal 独立于其他区域建议输入给模型。这意味着如果处理一个区域需要 S S S 秒,那么处理 N N N 个区域需要 S ∗ N S*N SN 秒。Fast R-CNN比R-CNN更快,因为它在多个 proposal 之间共享计算。

R-CNN[1] 对每幅图像的单个 ROI 进行采样,而 Fast R-CNN [2]对同一幅图像的多个 ROI 进行采样。例如,R-CNN 从128张不同的图像中选取一批128个区域。因此,总的处理时间是 128 ∗ S 128*S 128S 秒。

对于 Faster R-CNN,批量128个区域可以从2个图像中选择(每个图像64个区域)。当从相同的图像中采样区域时,它们的卷积层计算是共享的,这减少了时间。因此,处理时间下降到 2 ∗ S 2*S 2S。然而,从同一幅图像中采样多个区域会降低性能,因为所有区域都是相关的。

尽管 Fast R-CNN 模型有优点,但它有一个关键的缺点,因为它依赖于耗时的选择性搜索 (Selective Search) 算法来生成区域建议。指定目标检测任务不能自定义“Selective Search”方式。因此,它对于检测数据集中的所有目标对象来说可能不够精确。

下一节将介绍 Faster R-CNN[3]。Faster R-CNN 构建了一个生成region proposal 的网络。

Faster R-CNN

Faster R-CNN[3] 是Fast R-CNN[2] 的扩展。顾名思义,“Faster R-CNN” 比 “Fast R-CNN” 快,这要归功于区域提议(region proposal)网络(RPN)。

主要贡献

该论文[3] 的主要贡献如下:

  1. 提出的region proposal network(RPN)是一种生成不同尺度 (scales) 和纵横比 (aspect ratios) 提议的全卷积网络。RPN 实现了带有注意力的神经网络 (neural network with attention),告诉目标检测 (Fast R-CNN) 往哪里看。
  2. 该论文引入了锚框 (anchor boxes) 的概念,而不是使用图像的金字塔(pyramids of images)(即图像的多个实例,但在不同的尺度)或滤波金字塔(pyramids of images)(即不同大小的多个过滤器)。anchor boxes 是具有特定比例和宽高比的参考 box。使用多个参考anchor boxes,则单个区域存在多个尺度和宽高比。这可以被看作是参考 anchor boxes 的金字塔。然后将每个区域映射到每个参考 anchor boxes,从而以不同的比例和宽高比检测物体。
  3. 卷积通过共享 RPN 和 Fast R-CNN 计算, 这减少了计算时间。

Faster R-CNN的架构如下图所示。它由2个模块组成:

  1. RPN: 用于生成区域建议。
  2. Fast R-CNN: 用于在提议的区域中检测物体。

RPN模块负责生成区域建议。它在神经网络中应用了注意力的概念,所以它引导 Fast R-CNN 检测模块在图像中寻找物体的位置。

目标检测到目标跟踪 -- Faster R-CNN 观测器_第8张图片

请注意卷积层(例如计算)是如何在 RPN 和 Fast R-CNN 模块之间共享的。

Faster R-CNN的工作流程如下:

  • RPN 生成区域建议 (region proposal)。
  • 对于图像中的所有区域建议 (region proposal),使用ROI Pooling 层[2]从每个区域提取一个固定长度的特征向量。
  • 提取的特征向量使用Fast R-CNN进行分类。
  • 返回被检测对象的类分数 (class scores),以及其边界框 (bounding-boxes)。

Region Proposal Network (RPN)

R-CNN 和 Fast R-CNN 模型依赖于选择性搜索 (Selective Searching) 算法来生成区域建议 (region proposal)。每个 proposal 都被提交给一个预先训练的 CNN 进行分类。[3]提出了一种可以生成区域提议的网络 ——Region Proposal Network (RPN)。这有一些好处:

  • 区域建议 (region proposals) 现在使用一个网络生成,该网络可以根据检测任务进行训练和定制。
  • 因为 proposal 是使用网络生成的,所以可以端到端地训练来定制检测任务。因此,与选择性搜索(Selective Search)和边缘框(EdgeBoxes)等通用方法相比,它可以产生更好的区域建议。
  • RPN 使用与 Fast R-CNN 检测网络相同的卷积层处理图像。因此,与选择性搜索等算法相比,RPN并不需要额外的时间来生成 proposal。
  • 由于共享相同的卷积层,RPN 和 Fast R-CNN 可以合并或统一成为一个网络。因此,训练只进行一次。

RPN 工作在与 Fast R-CNN 共享的最后一个卷积层返回的输出特征图 (feature map)上。下图显示了这一点。基于大小为 n × n n\times n n×n 的矩形窗口,滑动窗口 passes through 特征图。对于每个窗口,会生成几个 candidate region proposals。这些 proposals 不是最终的 proposals,因为它们将根据它们的“objectness score”(下文解释)进行筛选。

Anchor

由下图可以看出,最后一个共享卷积层的 feature map 通过大小为 n × n n\times n n×n 的矩形滑动窗口,其中对于 VGG-16 网络 n = 3 n=3 n=3。对于每个窗口,生成 K K K 个区域建议。每个 proposal 都根据一个称为 anchor box 的参考框进行参数化。anchor boxes 的2个参数为:

  1. Scale
  2. Aspect Ratio

一般有3个 scales 和3个 aspect ratios,因此总共有 K = 9 K=9 K=9 个 anchor boxes。但是 K K K 可能不等于9。换句话说,从每个区域建议中产生 K K K 个区域,其中每个 K K K 个区域在尺度或宽高比上都不同。一些锚点的变化如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-84DUbKkA-1646278717070)(C:\Users\lpf\AppData\Roaming\Typora\typora-user-images\image-20220303101856181.png)]

使用参考 anchor (即 anchor boxes ),可以使用单一比例的单一图像,同时能够提供比例不变的目标检测器,因为 anchor 存在于不同的比例。这可以避免使用多个图像或过滤器。多尺度 anchors 是共享 RPN 和 Fast R-CNN 检测网络特征的关键。

对于每个 n × n n\times n n×n 区域建议,提取一个特征向量(ZF网络的长度为256,VGG-16网络的长度为512)。然后将这个向量传递给2个完全连接的层:

  1. 第一个FC层命名为 c l s cls cls,表示一个二元分类器,为每个区域提案生成对象度分数-objectness score (即该区域是否包含一个对象,或者是背景的一部分)。
  2. 第二个FC层被命名为 r e g reg reg,它返回一个定义区域 bounding box 的4-D向量。

FC第一层(即二进制分类器)有2个输出。第一个是将区域分类为背景,第二个是将区域分类为物体。下一节讨论如何给每个anchor 赋 objectness score,以及如何使用它来生成分类标签。

Objectness Score

cls 层为每个区域提议输出2个元素的向量。如果第一个元素为1,第二个元素为0,则将区域提案分类为背景。如果第二个元素是1,第一个元素是0,那么该区域表示一个对象。

为了训练RPN,每个 anchor 都根据交叉-联合(IoU)给出正或负的objectness score。

IoU 是 anchor box 与ground-truth box的面积的交集与并集面积之比。IoU 的取值范围是0.0 ~ 1.0。当没有交集时,IoU 为0.0。随着这两个 box 的距离越来越近,交集就会增加,直到达到1.0(当这两个 box 完全相同时)。

接下来的4个条件使用 IoU 来确定 anchor 的 objectness score 是positive 还是 negative:

  1. 如果 anchor 的 IoU 与任何 ground-truth box 的重叠度大于0.7,那么 anchor 将被给予正对象属性标签。
  2. 如果没有与 IoU 重叠大于0.7的 anchor,则为与ground-truth box 重叠的 IoU 最高的 anchor 分配一个正标签。
  3. 当所有 ground-truth box 的 IoU 重叠小于0.3时,非正anchor 将被分配为负的 objectness score。负的objectness score 意味着锚被归类为背景。
  4. 既不 positive 也不 negative 的 anchor 对训练目标没有帮助。

当我第一次读这篇文章的时候,我对第二和第三个条件感到困惑。所以,让我们进一步研究。

假设有3个 region proposal 与3个 anchors 相关,它们的 IoU 分数与3个 ground-truth box 如下所示。因为 anchor 的IoU值为0.9,高于0.7,所以它在ground-truth box中被分配为正的 0bjectness score,而在其他框中被分配为负的。

0.9, 0.55, 0.1

以下是 anchors 的分类结果:

positive, negative, negative

第二个条件意味着,当没有任何 anchors 的IoU重叠分数高于0.7时,则搜索具有最高 IoU 的 anchor,并为其分配一个 positive 的 objectness score。虽然预计IoU的最高分应该是0.7分,但令人困惑的是,论文中并没有提到IoU的最高分。

预计最小值应为0.5。所以,如果一个 anchor 的IoU分数大于0.5,但小于或等于0.7,那么就给它分配一个p ositive 的对象性分数。

假设锚的IoU分数列在下面。因为最高的IoU分数是第二个IoU,其值为0.55,所以它属于第二个条件。因此,它被分配一个 posiive 的对象性分数。

0.2, 0.55, 0.1

以下是 anchors 的分类结果:

negative, positive, negative

第三个条件指定,当具有所有ground-truth box的 anchor 的IoU分数小于0.3时,这个 anchor 将被分配一个负的对象性分数。对于下一个 IoU score,anchor 在这3种情况下被给予负分,因为所有的 IoU scores 都小于0.3。

0.2, 0.25, 0.1

以下是 anchors 的分类结果:

negative, negative, negative

根据第四个条件,当 anchor 的 IoU score 大于等于0.3但小于等于0.5时,它既不被归类为正也不被归类为负。这个 anchor不用于训练分类器。

对于下面的 IoU scores,anchor 没有被分配任何标签,因为所有的分数都在0.3到0.5之间(包括)。

0.4, 0.43, 0.45

下一个方程总结了这4个条件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LSjXw6KV-1646278717071)(C:\Users\lpf\AppData\Roaming\Typora\typora-user-images\image-20220303111534169.png)]

Feature Sharing between RPN and Fast R-CNN

Fast R-CNN 体系结构中的两个模块,即 RPN 和 Fast R-CNN,是独立的网络。每个都可以单独训练。相比之下,对于Faster R-CNN,可以建立一个统一的网络,其中 RPN 和 Fast R-CNN 同时接受训练。

其核心思想是RPN 和 Fast R-CNN 共享相同的卷积层。这些层只存在一次,但在两个网络中使用。可以称之为层共享或特性共享。记住,在Faster R-CNN中anchor [ 3 ] [3] [3]是使它有可能分享功能/层之间的两个模块。

Training Faster R-CNN

Faster R-CNN论文 [ 3 ] [3] [3]提到了3种不同的方法来训练 RPN 和 Fast R-CNN,同时共享卷积层:

  1. 交替训练 Alternating Training
  2. 近似联合训练 Approximate Joint Training
  3. Non-Approximate联合训练

Alternating Training

第一种方法称为交替训练,首先训练 RPN 生成区域建议。基于ImageNet 上的预训练模型,对共享卷积层的权值进行初始化。RPN 的其他权值随机初始化。

RPN 生成区域建议框后,对 RPN 和共享卷积层的权值进行调优。

RPN 生成的 proposal 被用来训练 Fast R-CNN 模块。在这种情况下,共享卷积层的权值由 RPN 用调优的权值初始化。其他的Fast R-CNN 权值是随机初始化的。在训练 Fast R-CNN 时,Fast R-CNN 和共享层的权值都被调优。共享层中的调优权重再次用于训练 RPN,然后重复这个过程。

根据 [ 3 ] [3] [3],交替训练是2个模块的首选训练方式,并且在所有的实验中都得到了应用。

Approximate Joint Training

第二种方法称为近似联合训练,RPN 和 Fast R-CNN 都被视为一个单独的网络,而不是两个独立的模块。在这种情况下,区域建议是由RPN生成的。

在不更新RPN和共享层的权值的情况下,proposals 被直接发送给检测目标位置的 Fast R-CNN。只有在 Fast R-CNN 产生其输出后,Fast R-CNN 中的权重才会被调整。

由于 RPN 和共享层的权值在生成区域建议后没有更新,因此忽略了权值相对于区域建议的梯度。与第一种方法相比,这降低了该方法的准确性(即使结果接近)。另一方面,训练时间减少了约25-50%。

Non-Approximate Joint Training

在近似联合训练方法中,使用RoI wraping 层来计算权重相对于所提出的 bounding box 的梯度。

缺点

Faster R-CNN 的一个缺点是,RPN是经过训练的,其中所有的anchor 都是从单个图像中提取的,大小为256。因为来自一幅图像的所有样本可能是相关的(即它们的特征相似),网络可能需要很长时间才能达到收敛。

Mask R-CNN

作为对Faster R-CNN [ 3 ] [3] [3]的扩展,Mask R-CNN模型包括另一个分支,该分支为每个检测到的对象返回一个掩码-mask。

Conclusion

本博客回顾了一种用于目标检测的深度卷积神经网络,称为Faster R-CNN,它可以准确地检测和分类图像中的目标。

本文首先回顾了任何对象检测模型的通用步骤。然后快速回顾了R-CNN 和 Fast R-CNN 模型是如何工作的,最后引入升级版的Faster R-CNN 。

Faster R-CNN 是端到端训练的模型。它使用一种新的区域建议网络 (RPN) 来生成区域建议,与传统算法(如选择性搜索)相比节省了时间。它使用 ROI 池化层从每个区域提议中提取一个固定长度的特征向量。

我们看到Faster R-CNN的一个缺点是,对于RPN来说,小批量中的所有 anchors 都是从单个图像中提取的。因为来自一幅图像的所有样本可能是相关的(即它们的特征相似),网络可能需要很长时间才能达到收敛。

也就是说,Faster R-CNN 是一种最先进的对象检测模型。Mask R-CNN 后来在 Faster R-CNN 的基础上构建,以返回每个检测到的对象的对象遮罩。

References

  1. Girshick, Ross, et al. “Rich feature hierarchies for accurate object detection and semantic segmentation.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2014.
  2. Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE international conference on computer vision. 2015.
  3. Ren, Shaoqing, et al. “Faster r-cnn: Towards real-time object detection with region proposal networks.” Advances in neural information processing systems. 2015.
  4. He, Kaiming, et al. “Mask r-cnn.” Proceedings of the IEEE international conference on computer vision. 2017.

你可能感兴趣的:(目标跟踪,python,homework,pytorch)