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)来检测物体。
本文的提纲如下:
博客中提到的论文可以免费下载。本文末尾的参考文献中部分提供了这些论文的引用和下载链接。
传统的目标检测技术遵循如下图所示的3个主要步骤。第一步涉及生成几个region proposals。这些region proposals是可能包含对象的候选方案。这些region proposal的数量通常在几千,例如2000或更多。一些生成region proposal的算法的例子是选择性搜索 (Selective Search) 和边缘框 (EdgeBoxes)。
从每个region proposal中,使用各种图像描述符提取固定长度的特征向量,例如定向梯度直方图(HOG)。该特征向量是目标检测器成功的关键。向量应该充分地描述一个对象,即使它因某些变换(如缩放或平移)而变化。
然后使用特征向量将每个 region proposal 分配给背景类或对象类之一。随着类数量的增加,构建能够区分所有这些对象的模型的复杂性也会增加。支持向量机(SVM)是一种用于分类区域建议的流行模型。
下面的这个快速的概述足以理解基于区域的卷积神经网络(R-CNN)的基础知识。
2014年,加州大学伯克利分校的一组研究人员开发了一种名为 R-CNN (区域卷积神经网络的简称)[1]的深度卷积网络,可以检测图像中80种不同类型的物体。
与上图所示的目标检测技术的通用 pipeline 相比,R-CNN[1]的主要贡献只是基于卷积神经网络(CNN)提取特征。除此之外,一切都类似于通用对象检测 pipeline。下图是R-CNN模型的工作过程。
R-CNN由3个主要模块组成:
R-CNN 模型有一些缺点:
作为 R-CNN 模型的扩展,Fast R-CNN 模型[2] 被提出以克服其局限性。下一节将给出 Fast R-CNN 的快速概述。
Fast R-CNN [2]是一款由 Ross Girshick 独立开发的物体检测器,他是一名 Facebook 人工智能研究员和前微软研究员。Fast R-CNN 克服了几个问题在R-CNN。顾名思义,Fast R-CNN 相对于R-CNN 的一个优势就是它的速度。
这里是Fast R-CNN 一个主要贡献的总结 :
Fast R-CNN 的总体架构如下图所示。与 R-CNN 的3个阶段相比,该模型只有一个阶段。它只接受图像作为输入,并返回被检测对象的类概率和边界框。
最后一个卷积层的特征图被输入给 ROI Pooling 层。原因是要从每个区域建议中提取一个固定长度的特征向量。下图显示了ROI Pooling 层是如何工作的。
简单地说,ROI Pooling 层的工作原理是将每个 region proposal 分割成一个网格单元。对网格中的每个单元格应用 max pooling操作以返回单个值。所有单元格的所有值表示特征向量。如果网格大小为2×2,则特征向量长度为4。
有关 ROI Pooling 层的更多信息,请参阅这篇文章。
利用 ROI Pooling 提取的特征向量传递给FC层。最后一个 FC 层的输出分为2个分支:
在 R-CNN 中,每个 region proposal 独立于其他区域建议输入给模型。这意味着如果处理一个区域需要 S S S 秒,那么处理 N N N 个区域需要 S ∗ N S*N S∗N 秒。Fast R-CNN比R-CNN更快,因为它在多个 proposal 之间共享计算。
R-CNN[1] 对每幅图像的单个 ROI 进行采样,而 Fast R-CNN [2]对同一幅图像的多个 ROI 进行采样。例如,R-CNN 从128张不同的图像中选取一批128个区域。因此,总的处理时间是 128 ∗ S 128*S 128∗S 秒。
对于 Faster R-CNN,批量128个区域可以从2个图像中选择(每个图像64个区域)。当从相同的图像中采样区域时,它们的卷积层计算是共享的,这减少了时间。因此,处理时间下降到 2 ∗ S 2*S 2∗S。然而,从同一幅图像中采样多个区域会降低性能,因为所有区域都是相关的。
尽管 Fast R-CNN 模型有优点,但它有一个关键的缺点,因为它依赖于耗时的选择性搜索 (Selective Search) 算法来生成区域建议。指定目标检测任务不能自定义“Selective Search”方式。因此,它对于检测数据集中的所有目标对象来说可能不够精确。
下一节将介绍 Faster R-CNN[3]。Faster R-CNN 构建了一个生成region proposal 的网络。
Faster R-CNN[3] 是Fast R-CNN[2] 的扩展。顾名思义,“Faster R-CNN” 比 “Fast R-CNN” 快,这要归功于区域提议(region proposal)网络(RPN)。
该论文[3] 的主要贡献如下:
Faster R-CNN的架构如下图所示。它由2个模块组成:
RPN模块负责生成区域建议。它在神经网络中应用了注意力的概念,所以它引导 Fast R-CNN 检测模块在图像中寻找物体的位置。
请注意卷积层(例如计算)是如何在 RPN 和 Fast R-CNN 模块之间共享的。
Faster R-CNN的工作流程如下:
R-CNN 和 Fast R-CNN 模型依赖于选择性搜索 (Selective Searching) 算法来生成区域建议 (region proposal)。每个 proposal 都被提交给一个预先训练的 CNN 进行分类。[3]提出了一种可以生成区域提议的网络 ——Region Proposal Network (RPN)。这有一些好处:
RPN 工作在与 Fast R-CNN 共享的最后一个卷积层返回的输出特征图 (feature map)上。下图显示了这一点。基于大小为 n × n n\times n n×n 的矩形窗口,滑动窗口 passes through 特征图。对于每个窗口,会生成几个 candidate region proposals。这些 proposals 不是最终的 proposals,因为它们将根据它们的“objectness score”(下文解释)进行筛选。
由下图可以看出,最后一个共享卷积层的 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个参数为:
一般有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个完全连接的层:
FC第一层(即二进制分类器)有2个输出。第一个是将区域分类为背景,第二个是将区域分类为物体。下一节讨论如何给每个anchor 赋 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:
当我第一次读这篇文章的时候,我对第二和第三个条件感到困惑。所以,让我们进一步研究。
假设有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)]
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]是使它有可能分享功能/层之间的两个模块。
Faster R-CNN论文 [ 3 ] [3] [3]提到了3种不同的方法来训练 RPN 和 Fast R-CNN,同时共享卷积层:
第一种方法称为交替训练,首先训练 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个模块的首选训练方式,并且在所有的实验中都得到了应用。
第二种方法称为近似联合训练,RPN 和 Fast R-CNN 都被视为一个单独的网络,而不是两个独立的模块。在这种情况下,区域建议是由RPN生成的。
在不更新RPN和共享层的权值的情况下,proposals 被直接发送给检测目标位置的 Fast R-CNN。只有在 Fast R-CNN 产生其输出后,Fast R-CNN 中的权重才会被调整。
由于 RPN 和共享层的权值在生成区域建议后没有更新,因此忽略了权值相对于区域建议的梯度。与第一种方法相比,这降低了该方法的准确性(即使结果接近)。另一方面,训练时间减少了约25-50%。
在近似联合训练方法中,使用RoI wraping 层来计算权重相对于所提出的 bounding box 的梯度。
Faster R-CNN 的一个缺点是,RPN是经过训练的,其中所有的anchor 都是从单个图像中提取的,大小为256。因为来自一幅图像的所有样本可能是相关的(即它们的特征相似),网络可能需要很长时间才能达到收敛。
作为对Faster R-CNN [ 3 ] [3] [3]的扩展,Mask R-CNN模型包括另一个分支,该分支为每个检测到的对象返回一个掩码-mask。
本博客回顾了一种用于目标检测的深度卷积神经网络,称为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 的基础上构建,以返回每个检测到的对象的对象遮罩。