关于双阶段目标检测的学习

可在papers with code网站找到论文相应的代码

参考:
哔站上的讲解视频1
哔站上的讲解视频2
R-CNN史上最全讲解
目标检测算法总结
目标检测(Object Detection)
目标检测:RCNN、Fast RCNN、 Faster RCNN 基本思想和网络结构介绍

首先是RCNN

《Rich feature hierarchies for accurate object detection and semantic segmentation》2014

我们的方法结合了两个关键见解:
(1)可以将高容量卷积神经网络(cnn)应用于自下而上的区域建议,以定位和分割对象;
(2)当标记训练数据稀缺时,对辅助任务进行监督预训练,然后进行特定领域的微调,可以显著提高性能。

从图像分类到目标检测,涉及到一个定位的问题
定位的话:
1.定义成回归问题—但是效果不佳?
2.建造一个滑动窗口探测器–使用了20年

在测试时,我们的方法为输入图像生成大约2000个与类别无关的区域建议,使用CNN从每个建议中提取固定长度的特征向量,然后使用特定类别的线性支持向量机对每个区域进行分类。我们使用一种简单的技术(仿射图像扭曲)从每个区域建议中计算固定大小的CNN输入,而不考虑区域的形状。图1概述了我们的方法,并突出显示了一些结果。由于我们的系统将区域建议与CNN相结合,我们将该方法称为R-CNN:具有CNN特征的区域。
图1

本文的第二个主要贡献是表明,在大辅助数据集(ILSVRC)上进行监督预训练,然后在小数据集(PASCAL)上进行特定领域的微调,是在数据稀缺时学习高容量cnn的有效范例。

我们的系统也很有效率。唯一的类特定的计算是一个合理的小矩阵向量乘积和贪婪的非最大值抑制。这种计算特性来自于所有类别共享的特征,而且这些特征的维数比以前使用的区域特征低两个数量级。

我们的目标检测系统由三个模块组成。
第一个生成与类别无关的区域建议。这些建议定义了检测器可用的候选检测集。
第二个模块是一个大型卷积神经网络,从每个区域提取固定长度的特征向量。
第三个模块是一组特定于类的线性支持向量机。

模块设计

1.区域提案。最近的各种论文提供了生成类别无关区域建议的方法。例子包括:对象[1],选择性搜索[39],类别无关的对象建议[14],约束参数最小切割(CPMC)[5],多尺度组合分组[3],Cires等[6],他们通过将CNN应用于规则间隔的方形作物来检测有丝分裂细胞,这是区域建议的特殊情况。虽然R-CNN对特定区域提议方法不可知,但我们使用选择性搜索来实现与先前检测工作的可控比较(例如,[39,41])。
2.特征提取。我们使用Krizhevsky等人[25]描述的CNN的Caffe[24]实现,从每个区域提议中提取一个4096维的特征向量。特征是通过前向传播均值减去227 × 227 RGB图像,通过五个卷积层和两个完全连接层来计算的。读者可以参考[24,25]了解更多网络架构细节。

为了计算区域建议的特征,我们必须首先将该区域中的图像数据转换为与CNN兼容的形式(其架构需要固定的227 × 227像素大小的输入)。在任意形状区域的许多可能的变换中,我们选择了最简单的。无论候选区域的大小或宽高比如何,我们都将其周围紧密边界框中的所有像素翘曲到所需的大小。在翘曲之前,我们扩大紧边界框,以便在翘曲的大小下,在原始框周围正好有p个被翘曲的图像上下文像素(我们使用p = 16)。图2显示了扭曲训练区域的随机抽样。翘曲的替代方法在附录A中讨论。
在这里插入图片描述

在测试时,我们对测试图像进行选择性搜索以提取大约2000个区域建议(我们在所有实验中都使用选择性搜索的“快速模式”)。我们扭曲每个提议,并通过CNN向前传播,以计算特征。然后,对于每个类,我们使用为该类训练的支持向量机对每个提取的特征向量进行评分。给定图像中所有得分区域,我们应用贪婪非最大抑制(独立于每个类),如果该区域与大于学习阈值的较高得分选择区域有交集-过并(IoU)重叠,则拒绝该区域。

监督预训练。 我们在一个大型辅助数据集(ILSVRC2012分类)上判别性地预训练CNN,只使用图像级注释(该数据不可用边界框标签)。使用开源的Caffe CNN库进行预训练[24]。
特定领域的微调。 为了使我们的CNN适应新的任务(检测)和新的域(扭曲提议窗口),我们只使用扭曲区域提议继续对CNN参数进行随机梯度下降(SGD)训练。除了用随机初始化的(N + 1)路分类层(其中N为对象类的数量,加1为背景)替换CNN的imagenet特定的1000路分类层外,CNN的架构保持不变。
对象类别分类器。 考虑训练一个二元分类器来检测汽车。很明显,一个紧紧包围着一辆车的图像区域应该是一个积极的例子。同样,与汽车无关的背景区域显然应该是一个负面例子。不太清楚的是如何标记部分与汽车重叠的区域。我们用IoU重叠阈值来解决这个问题,低于该阈值的区域被定义为负值。重叠阈值0.3是通过在验证集上对{0,0.1,…,0.5}进行网格搜索选择的。我们发现仔细选择这个阈值很重要。将其设置为0.5,如[39]中所示,mAP降低5点。同样,将其设置为0会使mAP减少4点。正例被简单地定义为每个类的真值边界框。

一旦提取了特征并应用了训练标签,我们就对每个类优化一个线性支持向量机。由于训练数据太大,内存无法容纳,我们采用标准的硬负挖掘方法[17,37]。硬负挖掘收敛速度很快,在实践中,mAP仅在对所有图像进行一次遍历后就停止增长。

网络架构
本文的大部分结果使用了Krizhevsky等人[25]的网络架构。然而,我们发现体系结构的选择对R-CNN检测性能有很大的影响。在表3中,我们展示了使用Simonyan和Zisserman[43]最近提出的16层深度网络进行VOC 2007测试的结果。该网络是最近ILSVRC 2014分类挑战赛中表现最好的网络之一。该网络具有均匀的结构,由13层3 × 3卷积核组成,其中5个最大池化层穿插,顶部有3个完全连接的层。我们把这个网络称为牛津网的“O-Net”,把基线称为多伦多网的“T-Net”。

为了在R-CNN中使用O-Net,我们从Caffe模型动物园下载了VGG ILSVRC 16层模型的公开预训练网络权重。然后,我们使用与T-Net相同的协议对网络进行了微调。唯一的区别是根据需要使用更小的minibatch(24个示例),以便适应GPU内存。表3的结果表明,使用O-Net的RCNN大大优于使用TNet的R-CNN, mAP从58.5%提高到66.0%。然而,在计算时间方面有一个相当大的缺点,O-Net的转发时间大约是T-Net的7倍。

区域建议
我们采用了与PASCAL检测相同的区域建议方法。选择性搜索[39]在val1, val2和test中的每个图像上以“快速模式”运行(但不在训练中的图像上运行)。需要进行一个小的修改,以处理选择性搜索不是尺度不变的事实,因此产生的区域数量取决于图像分辨率。ILSVRC图像的大小从很小到几个百万像素不等,因此我们在运行选择性搜索之前将每个图像的大小调整为固定宽度(500像素)。在val上,选择性搜索导致每张图像平均2403个区域建议,所有地面真值边界框的召回率为91.6%(在0.5 IoU阈值下)。这一召回明显低于PASCAL,其召回率约为98%,表明在区域提案阶段有很大的改进空间。

结论

我们通过两点洞察实现了这一业绩。第一种是将大容量卷积神经网络应用于自底向上的区域建议,以实现目标的定位和分割。第二个是在标记训练数据稀缺的情况下训练大型cnn的范例。我们表明,对于具有丰富数据的辅助任务(图像分类),通过监督对网络进行预训练,然后针对数据稀缺的目标任务(检测)对网络进行微调,是非常有效的。我们推测,“有监督的预训练/特定领域的微调”范式将对各种数据稀缺的视觉问题非常有效。

读完总结

使用在imagenet上预训练的1000分类CNN,
然后在voc数据集上选择性搜索出2000个区域提案
区域提案resize后输入CNN,在voc数据集上微调CNN,20+1分类(CNN只负责提取特征,不负责最后的分类)
训练SVM分类器
bbox regression得到精确位置
在这里插入图片描述
在这里插入图片描述

问题

1.选择性搜索?
在这里插入图片描述
2.正样本上采样?
3.难例挖掘?
在这里插入图片描述

我们再看SPPNet,因为fast RCNN中会用到

《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》2014

参考B站视频
在这里插入图片描述
我们注意到,对于深度cnn, SPP具有几个显著的特性:1)SPP能够生成固定长度的输出,而与输入大小无关,而以前的深度网络中使用的滑动窗口池[3]不能;2) SPP使用多级空间箱,而滑动窗口池化仅使用单个窗口大小。多层次池化已被证明对物体变形具有鲁棒性[15];3)由于输入尺度的灵活性,SPP可以将在可变尺度下提取的特征集合在一起。实验表明,这些因素都提高了深度网络的识别精度。

RCNN的特征计算是耗时的,因为它重复地将深度卷积网络应用于每张图像的数千个扭曲区域的原始像素。在本文中,我们证明了我们可以只在整个图像上运行一次卷积层(不管窗口的数量),然后通过SPP-net在特征映射上提取特征。这种方法产生的速度比R-CNN快100倍以上。

上面描述的深度网络需要固定的图像大小。然而,我们注意到,固定大小的要求仅仅是由于全连接层需要固定长度的向量作为输入。另一方面,卷积层接受任意大小的输入。卷积层使用滑动滤波器,其输出与输入具有大致相同的宽高比。这些输出被称为特征映射[1]——它们不仅涉及响应的强度,还涉及它们的空间位置。

为了对任意大小的图像采用深度网络,我们将最后一个池化层(例如,pool5,在最后一个卷积层之后)替换为空间金字塔池化层。图3说明了我们的方法。
在每个空间bin中,我们汇集每个过滤器的响应(在本文中我们使用最大池化)。
空间金字塔池的输出是kM维向量,bin的数量记为M (k是最后一个卷积层的过滤器数量)。固定维向量是全连接层的输入。
在这里插入图片描述

单尺度训练

与之前的工作一样,我们首先考虑从图像中截取固定的大小(224×224)输入网络。
裁剪是为了增强数据。
对于给定大小的图像,我们可以预先计算空间金字塔池所需的箱大小。
考虑大小为a×a(例如13×13)的conv5之后的特征图。
在这里插入图片描述
对于l级金字塔,我们实现了l个这样的层。下一个全连接层(fc6)将连接l个输出。图4显示了cuda-convnet风格的3层金字塔池(3×3, 2×2, 1×1)的示例配置[3]。
我们的单规模训练的主要目的是实现多级池化行为。实验表明,这是提高精度 的原因之一。
在这里插入图片描述

多尺度训练

在训练过程中,我们通过两个共享参数的固定大小网络来实现可变输入大小的SPP-net
为了减少从一个网络(例如,224)切换到另一个网络(例如,180)的开销,我们在一个网络上训练每个完整的epoch,然后在下一个完整的epoch切换到另一个网络(保持所有权重)。这是迭代的。在实验中,我们发现这种多尺度训练的收敛速度与上述单尺度训练相似。
请注意,以上单/多尺寸解决方案仅适用于训练。在测试阶段,可以直接对任何大小的图像应用SPP-net。

多尺寸训练提高准确性

全图表示提高准确性

我们简要回顾了最近最先进的R-CNN方法[7]。R-CNN首先通过选择性搜索从每张图像中提取大约2000个候选窗口[20]。然后将每个窗口中的图像区域翘曲到固定大小(227×227)。使用预训练的深度网络提取每个窗口的特征。然后在这些特征上训练二值支持向量机分类器进行检测。R-CNN产生了令人信服的质量结果,并且大大优于以前的方法。然而,由于R-CNN对每张图像重复应用深度卷积网络约2000个窗口,因此非常耗时。特征提取是测试中主要的时间瓶颈。

我们的SPP-net也可以用于目标检测。
我们只从整个图像中提取一次特征映射(可能在多个尺度上)。然后,我们对特征映射的每个候选窗口应用空间金字塔池,以池化该窗口的固定长度表示(见图5)。由于耗时的卷积只应用一次,我们的方法可以运行速度提高几个数量级。

我们使用选择性搜索的“快速”模式[20],为每张图像生成大约2000个候选窗口。
然后我们调整图像的大小,使min(w;H) = s,从整个图像中提取特征映射。
我们暂时使用ZF-5(单尺寸训练)的SPP-net模型。在每个候选窗口中,我们使用4层空间金字塔(1×1, 2×2, 3×3, 6×6,共50个箱子)来汇集特征。这将为每个窗口生成一个12,800d (256×50)表示。这些表示提供给网络的全连接层。然后我们根据这些特征为每个类别训练一个二元线性SVM分类器。

我们的方法可以通过多尺度特征提取得到改进。我们调整图像的大小,使min(w,h) = s∈S = {480;576;688;864;1200},计算每个尺度的conv5特征图。将这些规模的特征结合起来的一个策略是逐个通道地汇集它们。但我们从经验上发现,另一种策略可以提供更好的结果。对于每个候选窗口,我们选择一个单一的尺度s∈S,使缩放后的候选窗口具有最接近224×224的像素数。然后只使用从该尺度提取的特征映射计算这个窗口的特征。如果预定义的尺度足够密集,窗口近似为正方形,我们的方法大致相当于将窗口大小调整为224×224,然后从中提取特征。然而,我们的方法只需要从整个图像中计算一次特征映射(在每个尺度上),而不考虑候选窗口的数量。

我们还对预训练的网络进行微调,如下[7(指RCNN)]。由于我们的特征是从任意大小窗口的conv5特征映射中汇集而来的,为了简单起见,我们只微调全连接层。
在这种情况下,数据层在conv5之后接受固定长度的池化特征,然后是fc6,7层和一个新的21分类(多了一个负类别)fc8层。

尽管准确率相当,但我们的方法比R-CNN快得多。R-CNN中卷积特征计算的复杂度为O(n·2272),窗口数为n(~ 2000)。我们方法的复杂度为0 (r·s2),比例为s,其中r为纵横比。
R-CNN每张图像的卷积时间为14.37秒,而我们的1尺度版本每张图像的卷积时间仅为0.053秒。所以我们的比R-CNN快270倍。

结论

SPP是一种灵活的解决方案,可以处理不同的比例、大小和纵横比。这些问题在视觉识别中很重要,但在深度网络的背景下却很少得到考虑。我们提出了一个用空间金字塔池化层训练深度网络的解决方案。所得的SPP-net在分类/检测任务中显示出出色的准确性,并大大加快了基于dnn的检测速度。我们的研究还表明,计算机视觉中许多久经考验的技术/见解仍然可以在基于深度网络的识别中发挥重要作用。

阅读总结

区域提案 2000候选框
图片进行resize,使得min(w,h)=s
backbone提取特征
分类和回归:
分类:
SPP 4层
FC层
SVM分类器
回归:BBox回归
NMS

然后是《Fast R-CNN》2015

首先提出了RCNN的缺点:

  1. 训练是一个多阶段的流水线。R-CNN首先使用对数损失对目标提议的卷积神经网络进行微调。
    然后,将svm与ConvNet的特征进行拟合。这些支持向量机充当对象检测器,取代通过微调学习的softmax分类器。在第三个训练阶段,学习边界盒回归量。
  2. 训练在空间和时间上都很昂贵。对于支持向量机和边界盒回归器训练,从每个图像中的每个目标提案中提取特征并写入磁盘。对于非常深度的网络,比如VGG16,这个过程需要2.5个gpu天来处理VOC07训练集的5k张图像。这些特征需要数百gb的存储空间。
  3. 目标检测速度慢。在测试时,从每个测试图像中的每个目标建议中提取特征。
    使用VGG16检测需要47s /图像(在GPU上)。

R-CNN之所以慢,是因为它对每个对象提议执行卷积神经网络前向传递,而不共享计算。
空间金字塔池网络(Spatial pyramid pooling networks, SPPnets)[11]被提出通过共享计算来加速R-CNN。SPPnet方法对整个输入图像计算卷积特征映射,然后使用从共享特征映射中提取的特征向量对每个目标提案进行分类。通过将提案内部的特征映射部分maxpooling成固定大小的输出(例如,6 × 6)来提取提案的特征。多个输出大小被池化,然后像空间金字塔池一样连接起来[15]。SPPnet在测试时将R-CNN加速10到100倍。由于更快的提案特征提取,训练时间也减少了3倍。

SPPnet也有明显的缺点。像R-CNN一样,训练是一个多阶段的管道,包括提取特征,对网络进行对数损失微调,训练支持向量机,最后拟合边界盒回归器。特性也被写入磁盘。但与R-CNN不同的是,[SPPnets]中提出的微调算法无法更新空间金字塔池化之前的卷积层。不出所料,这种限制(固定卷积层)限制了非常深的网络的准确性。

贡献

我们提出了一种新的训练算法,该算法修正了R-CNN和SPPnet的缺点,同时提高了它们的速度和准确性。我们称这种方法为快速R-CNN,因为它的训练和测试速度相对较快。快速RCNN方法有几个优点:
1。检测质量(mAP)高于R-CNN、SPPnet
2。训练是单阶段的,使用多任务损失
3。训练可以更新所有网络层。
4。特征缓存不需要磁盘存储

架构

在这里插入图片描述

图1展示了Fast R-CNN架构。fast R-CNN网络将一整张图像和一组目标建议作为输入。该网络首先用几个卷积(conv)和最大池化层来处理整个图像,以产生一个conv特征图。然后,针对每个目标提议,一个感兴趣区域(RoI)池化层从特征映射中提取一个固定长度的特征向量。
每个特征向量被馈送到一个全连接(fc)层的序列中,最终分支成两个兄弟输出层:
一个层对K个对象类和一个全面的“背景”类产生softmax概率估计,
另一个层为K个对象类中的每个对象类输出四个实值数字。每组4个值为K个类中的一个编码精细的边界盒位置。

RoI池化层

RoI池化层使用最大池化将任何有效感兴趣区域内的特征转换为具有固定空间范围H × W(例如7 × 7)的小特征映射,其中H和W是独立于任何特定RoI的层超参数。在本文中,感兴趣区域是一个矩形窗口到一个转换特征映射。每个RoI由一个四元组(r, c, h, w)定义,该组指定其左上角(r, c)及其高度和宽度(h, w)。

RoI最大池化的工作原理是将h × w RoI窗口划分为大小近似为h/H × w/W的子窗口的H × W网格,然后将每个子窗口中的值最大池化到相应的输出网格单元中。池化独立应用于每个特征映射通道,就像在标准最大池化中一样。RoI层只是SPPnets中使用的空间金字塔池层的特殊情况[11],其中只有一个金字塔层。我们使用[11]中给出的池化子窗口计算。

从预训练的网络初始化

我们用三个预训练的ImageNet[4]网络进行实验,每个网络有5个最大池化层和5到13个卷积层(参见4.1节了解网络细节)。当一个预训练的网络初始化一个Fast R-CNN网络时,它经历了三个转换。

首先,将最后一个最大池化层替换为RoI池化层,该层通过设置H和W与网络的第一个完全连接层兼容来配置(例如,对于VGG16, H = W = 7)。
其次,网络的最后一个完全连接层和softmax(经过1000路ImageNet分类训练)被前面描述的两个兄弟层(一个完全连接层和超过K + 1个类别的softmax和特定类别的边界盒回归器)所取代。
第三,将网络修改为接受两个数据输入:图像列表和这些图像中的roi列表。

针对检测微调

用反向传播训练所有网络权值是Fast R-CNN的一项重要能力。首先,让我们阐明为什么SPPnet无法更新空间金字塔池层以下的权重。
根本原因是通过SPP层的反向传播效率非常低,当每个训练样本(即RoI)来自不同的图像,这正是R-CNN和SPPnet网络的训练方式。效率低下源于这样一个事实,即每个RoI可能有一个非常大的感受野,通常跨越整个输入图像。由于向前传递必须处理整个接受野,所以训练输入很大(通常是整个图像)。

我们提出了一种更有效的训练方法,利用训练过程中的特征共享。在快速RCNN训练中,随机梯度下降(SGD)小批量分层采样,首先采样N个图像,然后从每个图像中采样R/N个roi。
关键的是,来自同一图像的roi在向前和向后传递中共享计算和内存。使N变小可以减少小批量计算。例如,当使用N = 2和R = 128时,所提出的训练方案大约比从128个不同的图像中采样一个RoI(即R- cnn和SPPnet策略)快64倍。 (?????)

这种策略的一个问题是,由于来自同一图像的roi是相关的,它可能会导致训练收敛缓慢。这种担忧似乎不是一个实际问题,我们使用比R- cnn更少的SGD迭代,在N = 2和R = 128的情况下获得了良好的结果。
除了分层采样之外,Fast R-CNN使用了一个精简的训练过程,其中一个微调阶段共同优化softmax分类器和边界盒回归器,而不是在三个单独的阶段训练softmax分类器、svm和回归器[9,11]。该过程的组成部分(损失、小批量采样策略、通过RoI池层的反向传播和SGD超参数)如下所述。 (?????)

多任务的损失。 快速R-CNN网络有两个兄弟输出层。第一个输出离散概率分布(每个RoI), p = (p0,…, pK),在K + 1类上。像往常一样,p是通过对全连接层的K+1个输出的softmax来计算的。第二个兄弟层输出边界盒回归偏移量,tk = (tk x, tk y, tk w, tk h ),对于k个对象类中的每一个,以k为索引。我们使用[RCNN]中给出的tk参数化,其中tk指定相对于对象建议的尺度不变平移和对数空间高度/宽度变化。

每个训练RoI都被标记为一个真值类别u和一个真值边界盒回归目标v,我们在每个标记的RoI上使用一个多任务损失L来联合训练分类和边界盒回归:
在这里插入图片描述
其中Lcls(p, u) = - log pu为真类u的对数损失。

第二个任务损失Lloc,定义在u类的真实边界盒回归目标元组上,v = (vx, vy, vw, vh),以及预测元组tu = (t u x, tu y, tu w, tu h),同样用于u类。当u≥1时,Iverson括号指标函数[u≥1]的值为1,否则为0。按照惯例,捕获所有的背景类被标记为u = 0。对于背景roi,没有基础真值框的概念因此Loc被忽略。对于有界盒回归,我们使用损失在这里插入图片描述
(smooth L1)是一种鲁棒的L1损失,与R-CNN和SPPnet中使用的L2损耗相比,它对异常值的敏感性较低。当回归目标无界时,带L2损失的训练可能需要仔细调整学习率,以防止梯度爆炸。Eq. 3消除了这种敏感性。

Mini-batch sampling

在微调期间,每个SGD迷你批都是由N = 2个随机选择的图像构建的(作为通常的做法,我们实际上迭代数据集的排列)。我们使用大小为R = 128的小批量,从每张图像中采样64个roi。如[RCNN]所示,我们从与真值框IoU至少为0.5的对象建议中获取25%的roi。这些roi包括带有前景对象类的示例,即u≥1。剩余的 RoI 是从目标建议中采样的,这些目标建议与真值框在 [0.1, 0.5) 区间内具有最大 IoU ,遵循 [11]。这些是背景示例,标记为u = 0。较低的阈值0.1似乎作为硬示例挖掘的启发式[8]。在训练过程中,图像水平翻转的概率为0.5。没有使用其他数据增强。

通过 RoI 池化层进行反向传播

反向传播通过 RoI 池化层路由导数。为了清楚起见,我们假设每个小批量只有一张图像 (N = 1),尽管扩展到 N > 1 很简单,因为前向传播独立处理所有图像。

令 xi ∈ R 为 RoI 池化层的第 i 个激活输入,并令 yrj 为第 r 个 RoI 的该层的第 j 个输出。 RoI池化层计算yrj=xi*(r,j),其中i*(r,j)=argmaxi′εR(r,j)xi′。 R(r, j) 是输出单元 yrj 最大池化的子窗口中输入的索引集。单个 xi 可以分配给多个不同的输出 yrj 。(????

RoI 池化层的后向函数通过遵循 argmax 转换来计算损失函数相对于每个输入变量 xi 的偏导数:在这里插入图片描述
换句话说,对于每个小批量 RoI r 和每个池化输出单元 yrj ,如果 i 是通过最大池化为 yrj 选择的 argmax,则累积偏导数 ∂L/∂yrj 。在反向传播中,偏导数 ∂L/∂yrj 已经由 RoI 池化层顶部的层的反向函数计算出来。

SGD 超参数

尺度不变性

我们探索了两种实现尺度不变目标检测的方法:(1)通过“强力”学习和(2)使用图像金字塔。这些策略遵循[SPP]中的两种方法。在暴力方法中,每个图像在训练和测试期间都以预定义的像素大小进行处理。网络必须直接从训练数据中学习尺度不变的目标检测。

相比之下,多尺度方法通过图像金字塔为网络提供近似尺度不变性。在测试时,图像金字塔用于近似缩放标准化每个对象提案。在多尺度训练期间,我们在每次对图像进行采样时随机采样金字塔尺度,遵循[SPP],作为数据增强的一种形式。由于 GPU 内存限制,我们仅对较小的网络进行多尺度训练实验。

截断的 SVD 可加快检测速度

通过使用截断的 SVD 压缩大型全连接层可以轻松加速 [5, 23]。

哪些层需要微调?

这是否意味着所有的转换层都应该进行微调?简而言之,不。在较小的网络(S 和 M)中,我们发现 conv1 是通用的并且与任务无关(众所周知的事实 [14])。是否允许 conv1 学习,对 mAP 没有任何有意义的影响。对于 VGG16,我们发现只需要更新 conv3_1 及以上的层(13 个卷积层中的 9 个)。这一观察是务实的:(1) 与从 conv3_1 学习相比,从 conv2_1 更新使训练速度减慢了 1.3 倍(12.5 小时与 9.5 小时); (2) 从 conv1_1 进行更新会超出 GPU 内存。从 conv2_1 开始学习时,mAP 的差异仅为 +0.3 分(表 5,最后一列)。本文中所有 Fast R-CNN 结果均使用 VGG16 微调层 conv3_1 及以上;所有模型 S 和 M 的实验都对 conv2 及以上层进行微调。

多任务训练有帮助吗?

在所有三个网络中,我们观察到多任务训练相对于单独的分类训练提高了纯分类准确性。

最后,我们采用基线模型(仅使用分类损失进行训练),附加边界框回归层,并使用 Lloc 对其进行训练,同时保持所有其他网络参数冻结。每组中的第三列显示了这种分阶段训练方案的结果:mAP 比第一列有所提高,但分阶段训练的表现不如多任务训练(每组第四列)。

尺度不变性:暴力还是技巧?

深度卷积网络擅长直接学习尺度不变性。多尺度方法仅使 mAP 略有增加,但计算时间成本较高(表 7)。对于 VGG16(模型 L),我们在实现细节上仅限于使用单一比例。然而,它实现了 66.9% 的 mAP,略高于 R-CNN [10] 报告的 66.0%,尽管 R-CNN 使用“无限”尺度(即每个提案都扭曲到规范大小)。

由于单尺度处理提供了速度和准确性之间的最佳权衡,特别是对于非常深的模型,因此本小节之外的所有实验都使用 s = 600 像素的单尺度训练和测试。

SVM 的性能优于 softmax 吗?

表 8 显示,对于所有三个网络,softmax 的性能均略优于 SVM,高出 +0.1 至 +0.8 mAP 点。这种效果很小,但它表明与以前的多阶段训练方法相比,“一次性”微调已经足够了。我们注意到,softmax 与一对一 SVM 不同,在对 RoI 进行评分时引入了类之间的竞争。

提案越多越好吗?

我们发现,随着提案数量的增加,mAP 先上升,然后略有下降(图 3,蓝色实线)。这个实验表明,用更多的建议淹没深度分类器并没有帮助,甚至会稍微损害准确性。

总结

本文提出了 Fast R-CNN,这是对 R-CNN 和 SPPnet 的干净、快速的更新。除了报告最先进的检测结果之外,我们还提供了详细的实验,希望能提供新的见解。特别值得注意的是,稀疏对象建议似乎可以提高检测器的质量。在过去,这个问题的成本(时间)太高而无法探究,但通过 Fast R-CNN 变得切实可行。当然,可能存在尚未发现的技术,允许密集框和稀疏提案一样执行。如果开发出这样的方法,可能有助于进一步加速物体检测。

RCNN是每个ROI分别送入RCNN,每个ROI分别算一遍,很费时,Fast RCNN是只送一张图,然后同时把ROI的坐标投影送入CNN;
RCNN是把每个候选区域缩放到固定大小再输入CNN,Fast RCNN通过一个ROI Pooling层将从CNN输出的候选区域的特征图缩放到固定大小再送入分类器和回归器。

问题

1.以上提到的训练方案有啥区别?

接着是faster RCNN 《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》2016

摘要:

最先进的对象检测网络依赖于区域提议算法来假设对象位置。SPPnet [1] 和 Fast R-CNN [2] 等进步减少了这些检测网络的运行时间,使区域提议计算成为瓶颈。在这项工作中,我们引入了一个区域提议网络(RPN),它与检测网络共享全图像卷积特征,从而实现几乎免费的区域提议。 RPN 是一个全卷积网络,可同时预测每个位置的对象边界和对象性分数。 RPN 经过端到端训练以生成高质量的区域提案,Fast R-CNN 使用这些区域提案进行检测。我们通过共享 RPN 和 Fast R-CNN 的卷积特征,进一步将 RPN 和 Fast R-CNN 合并成一个网络——使用最近流行的带有“注意力”机制的神经网络术语,RPN 组件告诉统一网络去哪里看。对于非常深的 VGG-16 模型 [3],我们的检测系统在 GPU 上的帧速率为 5fps(包括所有步骤),同时在 PASCAL VOC 2007、2012 和MS COCO 数据集,每张图像仅包含 300 个提案。在 ILSVRC 和 COCO 2015 比赛中,Faster R-CNN 和 RPN 是多个赛道第一名获奖作品的基础。代码已公开。

简介

目标检测的最新进展是由区域提议方法(例如,[4])和基于区域的卷积神经网络(RCNN)[5]的成功推动的。尽管最初在 [5] 中开发的基于区域的 CNN 计算成本高昂,但由于在提议 [1]、[2] 之间共享卷积,其成本已大大降低。最新的版本 Fast R-CNN [2],在忽略区域提议上花费的时间时,使用非常深的网络 [3] 实现了接近实时的速率。现在,提案是最先进的检测系统中测试时的计算瓶颈。

区域提议方法通常依赖于廉价的特征和经济的推理方案。选择性搜索 [4] 是最流行的方法之一,它基于设计的低级特征贪婪地合并超像素。然而,与高效的检测网络 [2] 相比,选择性搜索要慢一个数量级,在 CPU 实现中每张图像需要 2 秒。 EdgeBoxes [6] 目前提供了提案质量和速度之间的最佳权衡,每个图像 0.2 秒。尽管如此,区域提议步骤仍然消耗与检测网络一样多的运行时间。

我们的观察是,基于区域的检测器(例如 Fast RCNN)使用的卷积特征图也可以用于生成区域提案。在这些卷积特征之上,我们通过添加一些额外的卷积层来构建 RPN,这些卷积层同时回归规则网格上每个位置的区域边界和对象分数。因此,RPN 是一种全卷积网络(FCN)[7],可以专门针对生成检测建议的任务进行端到端训练。

RPN 旨在有效地预测具有各种尺度和纵横比的区域提案。与使用图像金字塔(图 1,a)或滤波器金字塔(图 1,b)的流行方法 [8]、[9]、[1]、[2] 相比,我们引入了新颖的“锚”框作为多种尺度和纵横比的参考。我们的方案可以被认为是回归参考金字塔(图 1,c),它避免了枚举多个尺度或纵横比的图像或过滤器。该模型在使用单尺度图像进行训练和测试时表现良好,从而提高了运行速度。
在这里插入图片描述
为了将 RPN 与 Fast R-CNN [2] 对象检测网络统一起来,我们提出了一种训练方案,该方案在区域提案任务的微调和对象检测的微调之间交替,同时保持提案固定。该方案收敛速度很快,并产生一个具有两个任务之间共享的卷积特征的统一网络。

相关工作

对象提案。 关于对象提议方法有大量文献。对对象提议方法的全面调查和比较可以在[19]、[20]、[21]中找到。广泛使用的对象提议方法包括基于分组超像素的方法(例如,选择性搜索[4]、CPMC [22]、MCG [23])和基于滑动窗口的方法(例如,窗口中的对象性[24]、EdgeBoxes [ 6])。对象提议方法被采用作为独立于检测器的外部模块(例如,选择性搜索 [4] 对象检测器、RCNN [5] 和 Fast R-CNN [2])。

用于对象检测的深度网络。 R-CNN 方法 [5] 端到端训练 CNN,将建议区域分类为对象类别或背景。
R-CNN 主要充当分类器,它不预测对象边界(除了通过边界框回归进行细化)。它的准确性取决于区域提议模块的性能(参见[20]中的比较)。几篇论文提出了使用深度网络来预测对象边界框的方法[25]、[9]、[26]、[27]。在 OverFeat 方法 [9] 中,训练全连接层来预测假设单个对象的定位任务的框坐标。然后,全连接层转变为卷积层,用于检测多个特定类别的对象。MultiBox 方法 [26]、[27] 从网络生成区域提议,该网络的最后一个全连接层同时预测多个与类无关的框,概括了 OverFeat 的“单框”方式。这些与类别无关的框被用作 R-CNN [5] 的提案。与我们的全卷积方案相反,MultiBox提议网络应用于单个图像裁剪或多个大图像裁剪(例如,224×224)。 MultiBox 不共享提议网络和检测网络之间的特征。稍后我们将结合我们的方法更深入地讨论 OverFeat 和 MultiBox。与我们的工作同时,开发了 DeepMask 方法 [28] 用于学习分割建议。

卷积的共享计算 [9]、[1]、[29]、[7]、[2] 因高效而准确的视觉识别而受到越来越多的关注。 OverFeat 论文 [9] 从图像金字塔计算卷积特征以进行分类、定位和检测。共享卷积特征图上的自适应大小池化(SPP)[1]是为了高效的基于区域的对象检测[1]、[30]和语义分割[29]而开发的。 Fast R-CNN [2] 能够在共享卷积特征上进行端到端检测器训练,并显示出令人信服的准确性和速度。

Faster RCNN

我们的目标检测系统称为 Faster R-CNN,由两个模块组成。第一个模块是提议区域的深度全卷积网络,第二个模块是使用提议区域的 Fast R-CNN 检测器 [2]。整个系统是一个用于目标检测的单一、统一网络(图 2)。RPN 模块使用最近流行的带有“注意力”[31] 机制的神经网络术语,告诉 Fast R-CNN 模块去哪里寻找。在3.1节中,我们介绍了区域提议网络的设计和特性。在第 3.2 节中,我们开发了用于训练具有共享功能的两个模块的算法。
在这里插入图片描述

3.1 区域提案网络

区域提议网络 (RPN) 将图像(任意大小)作为输入并输出一组矩形对象提议,每个矩形对象提议都有一个对象性分数。3 我们使用全卷积网络 [7] 对此过程进行建模,我们在本节描述这个网络。因为我们的最终目标是与 Fast R-CNN 对象检测网络 [2] 共享计算,所以我们假设两个网络共享一组公共的卷积层。在我们的实验中,我们研究了具有 5 个可共享卷积层的 Zeiler 和 Fergus 模型 [32] (ZF) 以及具有 13 个可共享卷积层的 Simonyan 和 Zisserman 模型 [3] (VGG-16)。

为了生成区域建议,我们在最后一个共享卷积层输出的卷积特征图上滑动一个小网络。这个小型网络将输入卷积特征图的 n × n 空间窗口作为输入。每个滑动窗口都映射到一个低维特征(ZF 为 256-d,VGG 为 512-d,后面是 ReLU [33])。该特征被输入到两个同级全连接层——盒回归层(reg)和盒分类层(cls)。我们在本文中使用 n = 3,注意到输入图像上的有效感受野很大(ZF 和 VGG 分别为 171 和 228 像素)。这个迷你网络在图 3(左)中的一个位置进行了说明。请注意,由于迷你网络以滑动窗口方式运行,因此全连接层在所有空间位置之间共享。这种架构自然是通过一个 n×n 卷积层和两个同级 1 × 1 卷积层(分别用于 reg 和 cls)来实现的。在这里插入图片描述
3.1.1 锚框
在每个滑动窗口位置,我们同时预测多个区域提案,其中每个位置的最大可能提案数量表示为 k。因此 reg 层有 4k 个输出,编码 k 个框的坐标,cls 层输出 2k 个分数,用于估计每个提案 4 的对象或非对象的概率。 k 个提案相对于 k 个参考框进行参数化,我们称之为锚框。锚点位于相关滑动窗口的中心,并与比例和纵横比相关联(图 3,左)。默认情况下,我们使用 3 个尺度和 3 个长宽比,在每个滑动位置产生 k = 9 个锚点。对于尺寸为 W × H(通常~2,400)的卷积特征图,总共有 W Hk 个锚点。

平移不变锚点
我们的方法的一个重要特性是,无论是在锚框还是计算相对于锚点的提案的函数方面,它都是平移不变的。如果平移图像中的对象,提案应该平移,并且相同的函数应该能够预测任一位置的提案。我们的 method 保证了这种平移不变的属性。作为比较,MultiBox 方法 [27] 使用 k-means 生成 800 个锚点,这些锚点不是平移不变的。因此,MultiBox 不保证在平移对象时生成相同的提案。

平移不变特性还减小了模型大小。 MultiBox 具有 (4 + 1) × 800 维全连接输出层,而我们的方法在 k = 9 个锚点的情况下具有 (4 + 2) × 9 维卷积输出层。结果,我们的输出层有 2.8 × 104 个参数(VGG-16 为 512 × (4 + 2) × 9),比 MultiBox 的输出层少两个数量级,后者有 6:1 × 106 个参数(1536 × MultiBox [27] 中的 GoogleNet [34] 为 (4 + 1) × 800)。如果考虑特征投影层,我们的提案层的参数仍然比 MultiBox 少一个数量级。我们希望我们的方法在小数据集(如 PASCAL VOC)上过拟合的风险较小。

多尺度锚框作为回归参考
我们的锚点设计提出了一种解决多个尺度(和纵横比)的新颖方案。如图1所示,多尺度预测有两种流行的方法。第一种方法是基于图像/特征金字塔,例如在 DPM [8] 和基于 CNN 的方法 [9]、[1]、[2] 中。图像在多个尺度上调整大小,并针对每个尺度计算特征图(HOG [8] 或深度卷积特征 [9​​]、[1]、[2])(图 1(a))。这种方法通常很有用,但很耗时。第二种方法是在特征图上使用多个尺度(和/或长宽比)的滑动窗口。例如,在DPM [8]中,使用不同的滤波器尺寸(例如5×7和7×5)分别训练不同纵横比的模型。如果这种方式用于处理多个尺度,它可以被认为是“过滤器金字塔”(图1(b))。第二种方式通常与第一种方式联合采用[8]。

作为比较,我们的基于锚点的方法是建立在锚点金字塔上的,这更具成本效益。我们的方法参考多个尺度和纵横比的锚框对边界框进行分类和回归。它仅依赖于单一尺度的图像和特征图,并使用单一尺寸的滤波器(特征图上的滑动窗口)。我们通过实验展示了该方案对于解决多种尺度和尺寸的效果(表 8)。

由于这种基于锚的多尺度设计,我们可以简单地使用在单尺度图像上计算的卷积特征,就像 Fast R-CNN 检测器 [2] 所做的那样。多尺度锚的设计是共享特征而不需要额外成本来解决尺度的关键组成部分。

3.1.2 损失函数
为了训练 RPN,我们为每个锚点分配一个二元类标签(是否是对象)。我们为两种锚点分配正标签:(i)与真实框具有最高交集重叠(IoU)重叠的锚点,或(ii)与任意真实框的 IoU 重叠高于 0.7 的锚点。请注意,单个真实框可能会为多个锚点分配正标签。通常第二个条件足以确定正样本;但我们仍然采用第一个条件,因为在极少数情况下,第二个条件可能找不到正样本。如果所有真实框的 IoU 比率低于 0.3,我们将负标签分配给非正锚。既不是积极的也不是消极的锚点对训练目标没有贡献。

通过这些定义,我们最小化了 Fast R-CNN [2] 中多任务损失后的目标函数。我们的图像损失函数定义为:在这里插入图片描述
这里,i是小批量中anchor的索引,pi是anchor i作为对象的预测概率。如果锚点为正,则地面实况标签 p * i 为 1;如果锚点为负,则地面实况标签 p * i 为 0。 ti 是一个向量,表示预测边界框的 4 个参数化坐标,t * i 是与正锚相关的地面实况框的向量。分类损失 Lcls 是两个类别(对象与非对象)的对数损失。对于回归损失,我们使用 Lreg (ti , t* i ) = R(ti − t * i ),其中 R 是[2]中定义的鲁棒损失函数(平滑 L1)。术语 p * i Lreg 表示回归损失仅针对正锚点 (p * i = 1) 激活,否则禁用 (p * i = 0)。cls 和 reg 层的输出分别由 {pi} 和 {ti} 组成。

这两项由 Ncls 和 Nreg 归一化,并由平衡参数 λ 加权。在我们当前的实现中(如已发布的代码),方程(1)中的 cls 项通过小批量大小(即 Ncls = 256)进行归一化,而 reg 项通过锚点位置的数量进行归一化(即,Nreg∼2400)。默认情况下,我们设置 λ = 10,因此 cls 和 reg 项的权重大致相等。我们通过实验表明,结果对大范围内的 λ 值不敏感(表 9)。我们还注意到,上述标准化不是必需的,可以简化。

对于边界框回归,我们采用以下 4 个坐标的参数化[5]:在这里插入图片描述
其中 x、y、w 和 h 表示框的中心坐标及其宽度和高度。变量 x、xa 和 x ∗ 分别代表预测框、锚框和真实框(y、w、h 也同样)。这可以被认为是边界框回归锚框到附近的地面实况框。

尽管如此,我们的方法通过与之前的基于 RoI(感兴趣区域)方法 [1]、[2] 不同的方式实现了边界框回归。在[1]、[2]中,对从任意大小的 RoIs 汇集的特征执行边界框回归,并且回归权重由所有区域大小共享。在我们的公式中,用于回归的特征在特征图上具有相同的空间大小(3×3)。为了考虑不同的大小,学习了一组 k 个边界框回归器。每个回归器负责一种尺度和一种纵横比,并且 k 个回归器不共享权重。因此,由于锚点的设计,即使特征具有固定的大小/比例,仍然可以预测各种大小的框。

3.1.3 Training RPNs
RPN 可以通过反向传播和随机梯度下降(SGD)进行端到端训练[35]。我们遵循[2]中的“以图像为中心”的采样策略来训练该网络。每个小批量都来自包含许多正例和负例锚点的单个图像。可以优化所有锚点的损失函数,但这会偏向负样本,因为它们占主导地位。相反,我们随机采样图像中的 256 个锚点来计算小批量的损失函数,其中采样的正锚点和负锚点的比例高达 1:1。如果图像中的正样本少于 128 个,我们会用负样本填充小批量。

我们通过从标准差为 0.01 的零均值高斯分布中提取权重来随机初始化所有新层。所有其他层(即共享卷积层)都是通过预训练 ImageNet 分类模型来初始化的 [36],这是标准做法 [5]。我们调整 ZF 网络的所有层,以及 VGG 网络的 conv3 1 及以上以节省内存 [2]。在 PASCAL VOC 数据集上,我们对 60k 小批量使用 0.001 的学习率,对接下来的 20k 小批量使用 0.0001。我们使用 0.9 的动量和 0.0005 的权重衰减 [37]。我们的实现使用 Caffe [38]。

3.2 RPN 和 Fast R-CNN 共享特征

到目前为止,我们已经描述了如何训练用于区域提案生成的网络,而没有考虑将利用这些提案的基于区域的对象检测 CNN。对于检测网络,我们采用Fast R-CNN [2]。接下来,我们描述学习由 RPN 和具有共享卷积层的 Fast R-CNN 组成的统一网络的算法(图 2)。

RPN 和 Fast R-CNN 都是独立训练的,都会以不同的方式修改它们的卷积层。因此,我们需要开发一种允许在两种网络之间共享卷积层的技术,而不是学习两个单独的网络。我们讨论了训练具有共享特征的网络的三种方法:
(i)交替训练。在这个解决方案中,我们首先训练 RPN,并使用建议来训练 Fast R-CNN。然后使用 Fast R-CNN 调整的网络来初始化 RPN,并迭代此过程。这是本文所有实验中使用的解决方案。

(ii) 近似联合训练。在此解决方案中,RPN 和 Fast R-CNN 网络在训练期间合并为一个网络,如图 2 所示。在每次 SGD 迭代中,前向传递生成区域提案,在训练 Fast R-CNN 检测器时,这些区域提案就像固定的预计算提案一样处理。后向传播照常进行,其中对于共享层,来自 RPN 损失和 Fast R-CNN 损失的后向传播信号被组合。该解决方案易于实施。但这个解决方案忽略了提案框的坐标的导数也是网络响应,因此是近似的。在我们的实验中,我们凭经验发现该求解器产生了接近的结果,但与交替训练相比,训练时间减少了约 25-50%。该求解器包含在我们发布的 Python 代码中。

(iii) 非近似联合训练。如上所述,RPN 预测的边界框也是输入的函数。 Fast R-CNN 中的 RoI 池化层 [2] 接受卷积特征以及预测的边界框作为输入,因此理论上有效的反向传播求解器还应该涉及边框坐标的梯度。在上面的近似联合训练中忽略了这些梯度。在非近似联合训练解决方案中,我们需要一个关于边框坐标可微分的 RoI 池化层。这是一个不平凡的问题,可以通过[15]中开发的“RoI扭曲”层给出解决方案,这超出了本文的范围。

四步交替训练。
在本文中,我们采用实用的四步训练算法通过交替优化来学习共享特征。
第一步,我们按照 3.1.3 节所述训练 RPN。该网络使用 ImageNet 预训练模型进行初始化,并针对区域提议任务进行端到端微调。
在第二步中,我们使用步骤 1 RPN 生成的建议通过 Fast R-CNN 训练一个单独的检测网络。该检测网络也是由 ImageNet 预训练模型初始化的。此时两个网络不共享卷积层。
第三步,我们使用检测器网络来初始化RPN训练,但是我们固定共享卷积层,仅微调 RPN 特有的层。现在这两个网络共享卷积层。
最后,保持共享卷积层固定,我们微调 Fast R-CNN 的独特层。因此,两个网络共享相同的卷积层并形成统一的网络。类似的交替训练可以运行更多次迭代,但我们观察到的改进可以忽略不计。

3.3 实施细节

我们在单一尺度的图像上训练和测试区域提议和对象检测网络[1],[2]。我们重新缩放图像,使其短边为 s = 600 像素 [2]。多尺度特征提取(使用图像金字塔)可以提高准确性,但没有表现出良好的速度与准确性权衡[2]。在重新缩放的图像上,最后一个卷积层上的 ZF 和 VGG 网络的总步幅均为 16 像素,因此在调整大小之前(~500×375),典型 PASCAL 图像上的总步长为 ∼10 像素。即使如此大的步幅也能提供良好的结果,尽管较小的步幅可以进一步提高准确性。

对于锚点,我们使用 3 个尺度,框区域分别为 128² 、 256² 和 512² 像素,以及 3 个长宽比 1:1、1:2 和 2:1。这些超参数并不是针对特定数据集精心选择的,我们在下一节中提供了关于它们效果的消融实验。正如所讨论的,我们的解决方案不需要图像金字塔或过滤器金字塔来预测多个尺度的区域,从而节省了大量的运行时间。图 3(右)显示了我们的方法对于各种比例和纵横比的能力。表 1 显示了使用 ZF 网络学习到的每个锚点的平均提案大小。我们注意到我们的算法允许大于底层感受野的预测。这样的预测并非不可能——如果只有物体的中间可见,人们仍然可以粗略地推断出物体的范围。

跨越图像边界的锚框需要小心处理。在训练过程中,我们忽略所有跨界锚点,因此它们不会造成损失。对于典型的 1000 × 600 图像,总共大约有 20000 (≈ 60 × 40 × 9) 个锚点。忽略跨界锚点,每张图像大约有 6000 个锚点用于训练。如果在训练中不忽略跨边界异常值,它们会在目标中引入大的、难以纠正的误差项,并且训练不会收敛。然而,在测试过程中,我们仍然将全卷积 RPN 应用于整个图像。这可能会生成跨边界提议框,我们将其裁剪到图像边界。

一些 RPN 提案彼此高度重叠。为了减少冗余,我们根据建议区域的 cls 分数采用非最大抑制(NMS)。我们将 NMS 的 IoU 阈值固定为 0.7,这使得每张图像大约有 2000 个提议区域。正如我们将要展示的,NMS 不会损害最终的检测精度,但会大大减少建议的数量。 NMS 之后,我们使用排名前 N 的提议区域进行检测。接下来,我们使用 2000 个 RPN 提案训练 Fast R-CNN,但在测试时评估不同数量的提案。

4 实验

4.1 PASCAL VOC实验

**RPN 上的消融实验。**为了研究 RPN 作为提案方法的行为,我们进行了多项消融研究。首先,我们展示了 RPN 和 Fast R-CNN 检测网络之间共享卷积层的效果。为此,我们在 4 步训练过程的第二步之后停止。使用单独的网络将结果略微降低至 58.7%(RPN+ZF,非共享,表 2)。我们观察到这是因为在第三步中,当使用检测器调整的特征来微调 RPN 时,提议的质量得到了提高。

接下来,我们通过在测试时关闭其中一个来分别研究 RPN 的 cls 和 reg 输出的作用。当 cls 层在测试时被移除(因此不使用 NMS/排名)时,我们从未评分区域中随机采样 N 个提案。当 N = 1000 (55.8%) 时,mAP 几乎没有变化,但当 N = 100 时,mAP 大幅下降至 44.6%。这表明 cls 分数说明了排名最高的提案的准确性。

另一方面,当在测试时删除 reg 层(因此提案成为锚框)时,mAP 下降至 52.1%。这表明高质量的提案主要归功于回归框边界。锚框虽然具有多种尺度和长宽比,但不足以进行准确检测。

在表 5 中,我们总结了整个目标检测系统的运行时间。 SS 需要 1-2 秒,具体取决于内容(平均约为 1.5 秒),而带有 VGG-16 的 Fast R-CNN 在 2000 个 SS 提案上需要 320 毫秒(如果在全连接层上使用 SVD,则需要 223 毫秒 [2])。我们的 VGG-16 系统的提议和检测总共需要 198 毫秒。通过共享卷积特征,仅 RPN 就只需要 10ms 来计算附加层。由于提案较少(每张图像 300 个),我们的区域计算量也较低。我们的系统采用 ZF 网络时的帧速率为 17 fps。在这里插入图片描述
对超参数的敏感性。 在表 8 中,我们研究了锚点的设置。默认情况下我们使用3 个比例和 3 个纵横比(表 8 中的 69.9% mAP)。如果每个位置仅使用一个锚点,则 mAP 会大幅下降 3-4%。如果使用 3 个尺度(具有 1 个纵横比)或 3 个纵横比(具有 1 个尺度),mAP 会更高,这表明使用多个尺寸的锚点作为回归参考是一种有效的解决方案。在此数据集上,仅使用具有 1 个长宽比的 3 个尺度 (69.8%) 与使用具有 3 个长宽比的 3 个尺度一样好,这表明尺度和长宽比并不是检测精度的分离维度。但我们在设计中仍然采用这两个维度,以保持系统的灵活性。

在表 9 中,我们比较了等式 (1) 中 λ 的不同值。默认情况下,我们使用 λ = 10,这使得等式 (1) 中的两项在归一化后权重大致相等。表 9 显示,当 λ 在大约两个数量级(1 到 100)的范围内时,我们的结果仅受到轻微影响(约 1%)。这表明结果在很宽的范围内对 λ 不敏感。
在这里插入图片描述
IoU 召回率分析。 接下来,我们使用真实框计算不同 IoU 比率下提案的召回率。值得注意的是,Recall-to-IoU 指标与最终检测精度松散相关[19]、[20]、[21]。使用这个指标来诊断提案方法比评估它更合适。

在图 4 中,我们显示了使用 300、1000 和 2000 个提案的结果。我们与 SS 和 EB 进行比较,N 个提案是基于这些方法生成的置信度排名前 N 的提案。该图显示,当提案数量从 2000 个下降到 300 个时,RPN 方法表现得很好。这解释了为什么 RPN 在使用少至 300 个提案时具有良好的最终检测 mAP。正如我们之前分析的,这个特性主要归因于RPN的cls项。当提案较少时,SS 和 EB 的召回率比 RPN 下降得更快。在这里插入图片描述
一阶段检测与两阶段提案+检测。 OverFeat 论文 [9] 提出了一种在卷积特征图上滑动窗口上使用回归器和分类器的检测方法。 OverFeat 是一个单阶段、特定于类的检测管道,而我们的是一个两阶段级联,由与类无关的提案和特定于类的检测组成。在 OverFeat 中,区域特征来自尺度金字塔上一个纵横比的滑动窗口。这些特征用于同时确定对象的位置和类别。在 RPN 中,特征来自方形(3×3)滑动窗口,并预测相对于不同尺度和长宽比的锚点的提议。虽然两种方法都使用滑动窗口,但区域提议任务只是 Faster RCNN 的第一阶段——下游 Fast R-CNN 检测器负责对提议进行细化。在级联的第二阶段,区域特征从更忠实地覆盖区域特征的提案框中自适应地汇集[1]、[2]。我们相信这些功能可以带来更准确的检测。

为了比较一级和两级系统,我们通过一级 Fast R-CNN 模拟 OverFeat 系统(从而也规避了实现细节的其他差异)。在这个系统中,“提案”是 3 个尺度(128、256、512)和 3 个长宽比(1:1、1:2、2:1)的密集滑动窗口。 Fast R-CNN 经过训练,可以根据这些滑动窗口预测特定类别的分数和回归框位置。由于OverFeat系统采用图像金字塔,因此我们还使用从5个尺度提取的卷积特征进行评估。我们使用[1]、[2]中的这 5 个尺度。

表 10 比较了两级系统和一级系统的两种变体。使用 ZF 模型,一级系统的 mAP 为 53.9%。这比两级系统 (58.7%) 低 4.8%。该实验证明了级联区域提议和对象检测的有效性。 [2]、[39] 中报告了类似的观察结果,其中用滑动窗口替换 SS 区域提案会导致两篇论文中的性能下降约 6%。我们还注意到,单阶段系统速度较慢,因为它需要处理更多的提案。

4.2 MS COCO 上的实验
我们注意到,在SPPnet系统[1]中,负样本在[0.1,0.5)用于网络微调,但在[0,0.5) 中的负样本仍然在具有硬负挖掘的 SVM 步骤中被访问。但Fast R-CNN系统[2]放弃了SVM步骤,因此[0,0.1) 中的负样本从未被访问过。包括这些[0,0.1) 样本在 Fast R-CNN 和 Faster R-CNN 系统的 COCO 数据集上改进了 mAP@0.5(但对 PASCAL VOC 的影响可以忽略不计)。

5 结论

我们提出了用于高效、准确生成区域提案的 RPN。通过和下游检测网络共享卷积特征,区域提议步骤几乎是免费的。我们的方法使基于深度学习的统一对象检测系统能够以接近实时的帧速率运行。学习到的 RPN 还提高了区域提议的质量,从而提高了整体目标检测的准确性。

《Probabilistic two-stage detection》

《概率两阶段检测》2021

摘要

我们开发了两阶段目标检测的概率解释。我们表明,这种概率解释激发了许多常见的经验培训实践。它还建议对两阶段检测管道进行更改。具体来说,第一阶段应该推断出适当的对象与背景的可能性,然后这应该告知检测器的总体得分。标准区域提议网络(RPN)无法充分推断出这种可能性,但许多单级检测器可以。我们展示了如何从任何最先进的一级检测器构建概率两级检测器。由此产生的探测器比其一级和两级前驱体更快、更准确。我们的检测器在 COCO test-dev 上通过单尺度测试实现了 56.4 mAP,优于所有已发布的结果。使用轻量级骨干网,我们的检测器在 Titan Xp 上以 33 fps 的速度在 COCO 上实现了 49.2 mAP,优于流行的 YOLOv4 模型。

1.简介

对象检测旨在找到图像中的所有对象并识别它们的位置和类别可能性(Girshick 等人,2014)。一级检测器在概率合理的框架中联合推断位置和类别可能性(Lin 等人,2017b;Liu 等人,2016;Redmon 和 Farhadi,2017)。它们经过训练,可以最大化带注释的真实对象的对数似然,并在推理时预测适当的似然得分。两级检测器首先找到潜在物体及其位置(Uijlings et al, 2013; Zitnick & Dollar´, 2014; Ren et al, 2015),然后(在第二阶段)对这些潜在物体进行分类。第一阶段旨在最大化召回率(Ren et al, 2015; He et al, 2017; Cai & Vasconcelos, 2018),而第二阶段则最大化第一阶段过滤的区域的分类目标。虽然第二阶段具有概率解释,但两个阶段的组合却没有。
在这里插入图片描述
在本文中,我们开发了两级探测器的概率解释。我们通过优化两个阶段联合概率目标的下界,对标准两阶段检测器训练进行了简单修改。概率处理建议对两阶段架构进行更改。具体来说,第一阶段需要推断校准的物体可能性。当前两级检测器中的区域提议网络(RPN)旨在最大化提议召回率,并且不会产生准确的可能性。然而,成熟的单级探测器可以。

我们在最先进的单级检测器之上构建了一个概率两级检测器。对于每个单阶段检测,我们的模型都会提取区域级特征并对它们进行分类。我们在第二阶段使用 Faster R-CNN (Ren et al, 2015) 或级联分类器 (Cai & Vasconcelos, 2018)。这两个阶段一起训练,以最大化地面实况对象的对数似然。在推理时,我们的检测器使用最终的对数似然作为检测分数。

概率两级探测器比其一级和两级前驱体更快、更准确。与基于锚点的两级检测器(Cai & Vasconcelos,2018)相比,我们的第一级更准确,并且允许检测器在 RoI 头中使用更少的建议(256 vs. 1K),从而使检测器整体更准确、更快。与单级检测器相比,我们的第一级使用更精简的头部设计,并且只有一个输出类用于密集图像级预测。由于类数量的大幅减少而带来的加速足以弥补第二阶段的额外成本。我们的第二阶段充分利用了两阶段检测多年来的进展(Cai & Vasconcelos,2018;Chen 等人,2019a),并且检测精度比单阶段基线显着提高。它还可以轻松扩展到大词汇量检测。

COCO(Lin 等人,2014)、LVIS(Gupta 等人,2019)和 Objects365(Shao 等人,2019)上的实验表明,我们的概率两阶段框架将强大的 CascadeRCNN 模型的准确性提高了 1-3 mAP ,同时还提高了其速度。使用带有 CenterNet(Zhou 等人,2019a)第一阶段的标准 ResNeXt101-DCN 主干网,我们的检测器在 COCO testdev 上实现了 50.2 mAP。凭借强大的 Res2Net-101-DCN-BiFPN(Gao 等人,2019a;Tan 等人,2020b)骨干和自我训练(Zoph 等人,2020),它在单尺度测试中达到了 56.4 mAP,优于所有已发布的结果。使用小型 DLABiFPN 主干和较低的输入分辨率,我们在 Titan Xp 上以 33 fps 的速度在 COCO 上实现了 49.2 mAP,优于相同硬件上流行的 YOLOv4 模型(33 fps 的 43.5 mAP)。代码和模型发布于https://github.com/xingyizhou/CenterNet2。

2.相关工作

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值