谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)

谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)

谷歌团队在2017年CVPR上发表了一篇论文,主要讲述了从业者该如何选择目标检测的架构。以及根据应用场合及需要的条件进行速度及精度的权衡。本文主要是原论文的翻译。
原论文链接

现代卷积目标检测器的速度/精度权衡

摘要

本文的目的是作为选择一种检测架构的指南,该架构能够为给定的应用程序和平台实现正确的速度/内存/精度平衡。为此,我们研究了在现代卷积目标检测系统中以精度换取速度和内存使用的各种方法。近年来,人们提出了许多成功的系统,但由于不同的基本特征抽取器(如VGG、残差网络)、不同的默认图像分辨率以及不同的硬件和软件平台,实现最佳应用比较困难。我们提出了faster R-CNN的统一实现[30],R-FCN[6]和SSD[25]系统,我们将其视为“元架构”,并通过使用替代特征提取器和在每个元架构中改变其他关键参数(如图像大小)来跟踪速度/精度权衡曲线。速度和内存是至关重要的,我们提出了一个探测器,实现实时速度,并可以部署在移动设备上。另一方面,准确度是关键,我们提出了一个探测器,在COCO训练家集上实现了最先进的性能测量。

一 介绍

由于卷积神经网络(CNNs)的应用,近年来在目标检测方面取得了很大的进展。基于这些网络的现代目标探测器-例如faster R-CNN[30]、R-FCN[6]、Multibox[39]、SSD[25]和YOLO[28]-现在已经足够好,可以部署在消费产品(例如Google Photos、Pinterest Visual Search)中,有些已经显示足够快,可以在移动设备上运行。
然而,从业者很难决定什么架构最适合他们的应用程序。由于对于计算机视觉系统的实际部署,运行时间和内存使用也是至关重要的,因此平均精度(mAP)等标准度量并不能说明全部情况。例如,移动设备通常需要较小的内存占用,而自动驾驶汽车则需要实时性能。服务器端的生产系统,如Google、Facebook或Snapchat中使用的系统,在优化准确性方面有更大的回旋余地,但仍受到吞吐量限制的影响。虽然赢得比赛的方法,如COCO challenge[24],是为了精确性而优化的,但它们通常依赖于模型集成和multicrop方法,这些方法在实际应用中速度太慢。
不幸的是,只有一小部分论文(如RFCN[6]、SSD[25]YOLO[28])详细讨论了运行时间。此外,这些论文通常只说明它们达到了一定的帧速率,但没有给出速度/精度权衡的全貌,这取决于许多其他因素,例如使用哪个特征提取器、输入图像大小等。
在本文中,我们试图以一种详尽和公平的方式探讨现代检测系统的速度/精度权衡。虽然这已经被研究用于全图像分类(例如,[3]),但检测模型往往要复杂得多。我们主要研究单模型/单通道检测器,我们指的是不使用集成、多裁剪方法或其他“技巧”如水平翻转的模型。换句话说,我们只通过一个网络传递一个图像。为了简单起见(而且对于使用这项技术的用户来说更为重要),我们只关注测试时的性能,而不关注这些模型需要多长时间来训练。
尽管比较最近提出的每一种探测系统都是不切实际的,但幸运的是,许多最先进的方法在高水平上都集中在一种共同的方法上。这使得我们能够以统一的方式实现和比较大量的检测系统。特别是,我们创建faster R-CNN、R-FCN和SSD元架构的实现,它们都由一个单独的卷积网络组成,使用混合回归和分类目标进行训练,并使用滑动窗口式预测。
总而言之,我们的主要贡献如下:
(1)我们简要介绍了现代卷积检测系统,并描述了领先的卷积检测系统如何遵循非常相似的设计。
(2)我们描述了我们在Tensorflow中灵活和统一地实现三种元结构(fasterRCNN,R-FCN和SSD),我们用它做了广泛的实验,跟踪不同检测系统的精度/速度折衷曲线,变化的元结构,特征提取器,图像分辨率,等。
(3)我们的研究结果表明,使用较少的proposal,fasterR-CNN可以大大加快它的速度,而不会在准确性上有很大损失,使其与SSD和RFCN竞争。结果表明,SSD的性能对特征抽取器的质量的敏感度要低于fasterR-CNN和R-FCN。我们在精度/速度折衷曲线上确定了“最佳点”,只有牺牲速度(在我们的探测器系列中)才能提高精度。
(4)我们报告的一些元架构和特征提取器组合以前从未出现在文献中。我们将讨论如何使用这些新颖的组合来训练2016年COCO目标检测挑战赛的获奖模型。

二 卷积检测元结构

近年来,神经网络已成为高质量目标检测的主要方法。在本节中,我们将介绍一些本文献的亮点。Girshick等人的R-CNN论文。[11]是基于卷积网络的检测的第一个现代化算法模型。受最近在图像分类方面取得的成功的启发[20],R-CNN方法采用了直接的方法,即从输入图像中裁剪外部计算的方框建议,并在这些方框上运行神经网络分类器。然而,这种方法可能很昂贵,因为许多crop是必需的,这导致重叠crop的大量重复计算。Fast R-CNN[10]通过将整个图像通过特征提取器推理一次,然后从中间层裁剪,从而使裁剪分担了特征提取的计算量,从而缓解了这一问题。
虽然R-CNN和Fast R-CNN都依赖于外部的提议生成器,但最近的研究表明,使用神经网络也可以生成box提议[40、39、8、30]。在这些论文中,典型的做法是在图像的不同空间位置、比例和纵横比上叠加一组框作为“锚”(有时称为“优先框”或“默认框”)。然后训练一个模型为每个锚进行两个预测:(1)每个锚的离散类预测,以及(2)锚需要移动以适应地面真值边界框的偏移量的连续预测。
遵循这种锚定方法的论文然后最小化我们现在描述的组合分类和回归损失。对于每个锚,我们首先找到最佳匹配地真相框(如果存在的话)。如果能找到这样的匹配,我们称之为“正锚”,并给它(1)一个类标签ya∈{1…K}和(2)一个关于锚的box向量编码(称之为box编码)。如果找不到匹配项,则调用“负锚”,并将类标签设置为ya=0。如果对于锚,我们预测box编码(I;a,θ)和相应的类(I;a,θ),其中I是图像和模型参数,则测量的损失为位置损失和分类损失的加权和。为了训练模型,方程1在锚上取平均值,并相对于参数最小化。α,βθ
锚的选择对精度和计算都有重要意义。在(第一篇)multibox论文[8]中,这些锚(作者称之为“优先框”)是通过对数据集中的ground truth框进行聚类而生成的。在最近的作品中,锚是通过在图像中按不同比例和纵横比平铺一组框来生成的。具有规则锚网格的优点是,这些框的预测可以写为具有共享参数(即卷积)的图像上的平铺预测器,并且使人想起传统的滑动窗口方法,如[43]fasterR-CNN论文[30]和(第二)multibox论文[39]是第一篇采用这种新方法的论文。

2.1元架构

在本文中,我们主要关注三种最新的(元)体系结构:SSD(Single Shot Multibox Detector[25])、fasterR-CNN[30]和R-FCN(Region-based Fully-confolutional Networks[6])。虽然这些论文最初提出了一个特定的特征抽取器(如VGG、Resnet等),但我们现在回顾这三种方法,将元架构的选择与特征抽取器分离,以便在概念上,任何特征抽取器都可以与SSD、fasterR-CNN或R-FCN一起使用。
谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)
(1)SSD
尽管SSD论文是最近才发表的(Liu等人,[26]),但我们使用SSD一词广泛地指代使用单一前馈卷积网络直接预测类和锚偏移而不需要第二阶段的提议分类操作的架构(图1(a))。在这个定义下,SSD元体系结构已经在[25]的一些前身中进行了探索。Faster RCNN的多框和区域建议网络(RPN)阶段[39,30]都使用这种方法来预测类不可知的框建议。[32、28、29、9]使用类似于SSD的体系结构来预测最终(1个)类标签。
(2)faster R-CNN
在faster R-CNN设置中,检测分两个阶段进行(图1(b))。在第一阶段,称为区域建议网络(RPN),图像被处理通过特征抽取器(例如,VGG-16),并且一些选定的中间层(例如,“conv5”)的特征被用来预测类不可知的box提议。第一阶段的损失函数采用方程1的形式,使用平铺在空间、比例和长宽比中的锚网格。
在第二阶段中,这些(通常为300个)建议框用于从相同的中间特征映射裁剪特征,这些中间特征映射随后被馈送到特征提取器的其余部分(例如,“fc6”后跟“fc7”),以便预测每个建议的类和类特定的框改进。第二级箱型分类器的损失函数也采用方程1的形式,使用从RPN生成的建议作为锚。值得注意的是,不直接从图像中裁剪建议,而通过特征提取器重新运行裁剪,这将是重复计算。但是,有一部分计算必须在每个区域运行一次,因此运行时间取决于RPN建议的区域数。
自2015年出现以来,fasterR-CNN尤其具有影响力,并带来了许多后续工作[2、34、33、45、13、5、19、44、23、46](包括SSD和R-FCN)。值得注意的是,截至2016年11月,提交给COCO目标检测服务器的文件中,有一半在某种程度上是基于fasterR-CNN系统。
(3)R-FCN
虽然fasterR-CNN比fast R-CNN快一个数量级,但事实上每个图像的区域特定组件必须应用几百次。为了提出类似于fasterR-CNN(基于区域的完全卷积网络)的R-FCN(基于区域的完全卷积网络)方法,但不是从预测区域建议的同一层cropping feature,而是从预测之前的最后一层特征中获取crop(图1(c))。这种将裁剪推到最后一层的方法将每个区域必须完成的计算量最小化。Dai等人认为目标检测任务需要考虑平移方差的定位表示,因此提出了一种位置敏感的裁剪机制来代替[10,30]中使用的更标准的ROI pooling操作和[5]中的可微裁剪机制。fasterR-CNN通常在faster运行时间。最近,R-FCN模型也被用于最近的TA-FCN模型中的实例分割[21],该模型赢得了2016年COCO实例分割挑战赛。

三 检测实验平台

近年来,Imagenet[31]和COCO[24]等标准基准的引入使得比较检测方法的准确性变得更加容易。然而,在速度和内存方面,比较就比较难了。以前的研究依赖于不同的深度学习框架(如distbelture[7]、Caffe[18]、Torch[4])和不同的硬件。有些论文为了准确度而优化,有些论文为了速度而优化。最后,在某些情况下,使用稍微不同的训练集(例如,COCO训练集与组合训练+验证集)报告度量。
为了更好地进行比较,我们在Tensorflow[1]中创建了一个检测平台,并在此平台上重建了SSD、fasterR-CNN和R-FCN元结构的训练管道。有了一个统一的框架,我们就可以轻松地交换特征抽取器架构、损失函数,而将其放在Tensorflow中,就可以轻松地移植到不同的平台进行部署。在接下来的文章中,我们将讨论如何在我们的平台上配置模型架构、损失函数和输入——这些如何调整改变来交换速度和准确性。

3.1架构配置

(1)特征提取器
在所有的元结构中,我们首先将卷积特征抽取器应用于输入图像以获得高级特征。特征抽取器的选择至关重要,因为参数的数量和层的类型直接影响探测器的内存、速度和性能。本文选取了六个具有代表性的特征抽取器进行比较,除了MobileNet[14]之外,它们都有开源的Tensorflow实现,并对vision社区产生了相当大的影响。
更详细地说,我们考虑以下六个特征提取器。我们使用的是VGG-16[36]和Resnet-101[13],它们都赢得了许多比赛,如ILSVRC和COCO 2015(分类、检测和分割)。我们还使用了Inception v2[16],它为ILSVRC 2014分类和检测挑战设定了最先进的技术,以及它的后续版本Inception v3[41]。两个初始网络都采用了“inception unit”,这使得在不增加计算预算的情况下增加网络的深度和宽度成为可能。最近,Szegedy等人[38]inception Resnet(v2),它结合了残差网络赋予的优化效益和inception单元的计算效率。最后,我们将其与新的MobileNet网络进行比较[14],结果表明,在成像网络上实现VGG-16级精度,计算量和模型尺寸仅为VGG-16级精度的1/30。MobileNet是为各种移动视觉应用中的有效推理而设计的。其构造块是将标准卷积分解为一个depthwise convolution和一个1×1卷积,有效地降低了计算成本和参数数目。
对于每个特征抽取器,都有在元架构中使用它的选择。对于faster R-CNN和R-FCN,必须选择用于预测区域建议的层。在我们的实验中,如果可能的话,我们使用原始论文中列出的选择。例如,我们使用VGG-16[30]中的“conv5”层和Resnet-101[13]中conv 4 x层的最后一层。对于其他的特征抽取器,我们也做了类似的选择。
Liu等人[26]表明在SSD设置中,使用多个特征映射在多个尺度上进行位置和置信度预测对于良好的性能至关重要。对于VGG特征抽取器,他们使用conv4 3、fc7(转换为卷积层)以及一系列添加的层。在我们的实验中,我们严格遵循他们的方法,总是在较低的层次上选择最顶层的卷积特征图和较高分辨率的特征图,然后添加空间分辨率衰减因子为2的卷积层序列,每增加一层用于预测。然而,与[26]不同的是,我们在所有附加层中使用BN。
为了进行比较,前面工作中使用的特征提取程序如表1所示。在这项工作中,我们评估了元架构和特征抽取器的所有组合,其中大多数是新颖的。值得注意的是,Inception网络从未在faster R-CNN框架中使用过,直到最近才被开源[36]。到目前为止,在检测文献中还没有出现Inception Resnet(v2)和MobileNet。
谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)
(2)proposal的数量
对于faster R-CNN和R-FCN,我们还可以选择在测试时发送到box分类器的区域建议数。通常,在这两种设置下,这个数字都是300,但是一个简单的节省计算的方法是发送更少的框,但是代价是可能降低召回率。在我们的实验中,我们在10到300个建议之间改变这个数字,以便探索这种权衡。
(3)Resnet和Inception Resnet的输出步长设置
我们对Resnet-101的实现在原来的基础上稍加修改,使其有效输出步幅为16而不是32;我们通过将conv5 1层修改为步幅1而不是2(并通过在进一步的层中使用膨胀卷积来补偿减少的步幅)来实现这一点,如[6]。对于faster R-CNN和R-FCN,除了默认步幅为16之外,我们还试验了(更昂贵的)步幅8 Resnet-101,其中conv4 1的block被修改以使步幅为1。同样地,我们对Inception Resnet network的stride 16和stride 8版本进行了实验。我们发现用8步代替16步可以提高mAP的5%,但是增加了63%的运行时间。

3.2损失函数配置

除了选择特征抽取器外,还可以选择配置损失函数(方程式1),这会影响训练的稳定性和最终性能。这里我们描述了我们在实验中所做的选择,表1再次比较了在其他工作中如何配置类似的损失函数。

(1)匹配
确定每个锚的分类和回归目标需要将锚与ground truth实例匹配。常见的方法包括贪婪的二分匹配(例如,基于Jaccard重叠)或多对一的匹配策略,其中不需要二分性,但如果锚和ground truth之间的Jaccard重叠太低,则会丢弃匹配。我们分别将这些策略称为二部策略或Argmax策略。在我们的实验中,我们始终使用Argmax匹配,并为每个元体系结构设置原始论文中建议的阈值。匹配后,通常有一个抽样程序设计,使正锚和负锚的数量达到某个期望的比率。在我们的实验中,我们还将这些比率固定为论文为每个元架构推荐的比率。
(2)框编码
为了根据匹配的锚对一个ground truth框进行编码,我们使用box编码函数φ(ba; a) = [10 · xc/wa
, 10· yc/ha , 5·log w, 5·log h] (也用于在[11,10,30,25]。注意,标量乘法器10和5通常用于所有这些先前的工作中,即使没有明确提到为什么这么多。
(3)位置损失(以下[10,30,25],我们在所有实验中都使用了Smooth L1(或Huber[15])损失函数。

3.3输入尺寸配置。

在faster R-CNN和R-FCN中,模型在较短的边缘上缩放到M像素的图像上被训练,而在SSD中,图像总是被调整到固定的形状M×M。我们探索在缩小的图像上评估每个模型,作为一种以精度换取速度的方法。特别是,我们已经训练了每个模型的高分辨率和低分辨率版本。在“高分辨率”设置中,我们设置为600,在“低分辨率”设置中,我们设置为300。在这两种情况下,这意味着SSD方法处理的像素平均比R-CNN或R-FCN模型更快,所有其他变量保持不变。

3.4训练与超参数整定

我们在分布式集群上使用异步梯度更新来端到端地联合训练所有模型[7]。对于faster RCNN和R-FCN,我们使用批大小为1的动量SGD(由于这些模型使用不同的图像大小进行训练),对于SSD,我们使用批大小为32的RMSProp[42](在少数例外情况下,我们由于内存原因减小了批大小)。最后,我们为每个特征抽取器分别手动调整学习速率。对于符合文献[30,6,13,25]的模型配置,我们已经复制或超过了报告的mAp结果。
注意,对于faster R-CNN和R-FCN,这种端到端的方法与通常使用的4阶段训练程序略有不同。此外,我们没有使用[30,6]使用的ROI pooling和位置敏感的ROI pooling,而是使用Tensorflow的“crop和resize”操作,该操作使用双线性插值将图像的一部分重采样到固定大小的网格上。这类似于[5]的可微裁剪机制,[12]的注意模型以及空间变换网络[17]。然而,我们禁用了关于边界框坐标的反向传播,因为我们发现这在训练期间是不稳定的。
我们的网络是在COCO数据集上训练的,使用所有的训练图像和验证图像的子集,提供8000个验证示例。最后,在测试时,我们使用0.6的IOU阈值对非最大抑制的过程检测进行后处理,并将所有框裁剪到图像窗口。为了评估我们的最终检测结果,我们使用了官方的COCO API[22],它在其他指标中测量了超过IOU阈值的mAP平均值[0.5:0.05:0.95]。

3.5基准测试程序。

为了给我们的模型计时,我们使用了一台32GB内存的机器、Intel Xeon E5-1650 v2处理器和一个Nvidia GeForce GTX Titan X GPU卡。在GPU上报告批量大小为1的计时。用于计时的图像是COCO图像的大小调整以后的,使得最小边的大小至少是k像素长,然后根据模型裁剪为k×k,其中是300或600。我们超过500张照片进行平均计时。
我们在计时中包括后处理,包括非最大抑制(NMS),目前只在CPU上运行。NMS可以占用最快的模型在40ms的运行时间的大部分,目前上限我们的最大帧率为25 FPS。这意味着虽然我们的计时结果彼此可比,但它们可能无法直接与文献中报告的其他速度进行比较。其他潜在差异包括硬件、软件驱动程序、框架(在我们的例子中是Tensorflow)和批大小(例如Liu等人。[25]使用批量8)报告计时。最后,我们使用tfprof[26]来度量模型在推理过程中的总内存需求;这给出了一个更独立于平台的内存需求度量。我们平均了三幅图像的内存测量值。

四 结果和讨论

在本节中,我们将分析通过培训和基准测试检测器收集到的数据,如上文所述全面检查模型配置。每个配置都包括元架构、特征提取器、stride(用于Resnet、Inception Resnet)、分辨率和建议数量(用于faster R-CNN和R-FCN)的选择。
对于每一个这样的模型配置,我们测量GPU上的计时、内存需求、参数数量和浮点操作,如下所述。我们在补充材料中提供了整个结果表,注意到截至提交本文时,我们已经包括了147个模型配置;用于一小部分实验配置(即一些高分辨率SSD模型)的模型尚未收敛,因此我们目前在分析中忽略了它们。

4.1分析

(1)精度和时间
图2是一个散点图,显示了每个模型配置的mAp(不同的颜色代表了不同的特征提取器,不同的形状代表不同的元架构)。每张图像的运行时间从几十毫秒到几乎1秒不等。一般来说,我们观察到R-FCN和SSD模型平均速度更快,而faster R-CNN往往会导致模型速度较慢但更精确,每张图像至少需要100毫秒。然而,正如我们在下面讨论的,如果我们限制提出的区域的数量,faster R-CNN模型也可以同样快。我们还覆盖了一个虚构的“最优性边界”,表示只有牺牲速度才能在这一系列检测器中获得更好的精度的点。在接下来的文章中,我们将突出最优性边界沿线的一些关键点作为最佳检测器来使用,并单独讨论各种模型配置选项的效果。
谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)
图2
(2)最优性边界上的临界点。
(最快:SSD w/MobileNet):在这一优化前沿最快的一端,我们看到具有Inception v2和MobileNet的SSD模型是最快模型中最精确的。注意,如果我们忽略后处理,Mobilenet的速度大约是Inception v2的两倍,而准确性稍差。(最佳点:R-FCN w/Resnet或faster RCNN w/Resnet,只有50个建议框):在R-FCN模型使用剩余网络特征抽取器占据的最优性边界中间有一个“肘部”,它似乎在我们的模型配置中达到了速度和精度之间的最佳平衡。正如我们下面讨论的,如果我们将提案数量限制在50个,faster R-CNN w/Resnet模型可以达到类似的速度。(最准确:R-CNN w/Inception Resnet在步长为8的速度更快):最终,具有密集输出的R-CNN Inception Resnet模型在我们的最优性边界上获得尽可能高的准确度,达到(在提交时)最初单模型性能的状态。然而,这些模型速度很慢,需要将近一秒钟的处理时间。
(3)特征提取器的影响。
直观地说,较强的分类性能应该与较强的COCO检测性能正相关。为了验证这一点,我们研究了不同模型的整体映射与用于初始化每个模型的预训练特征提取器获得的Top-1 Imagenet分类精度之间的关系。图3表明分类和检测性能之间确实存在整体相关性。然而,这种相关性似乎只对faster R-CNN和R-FCN有效,而SSD的性能似乎对其特征提取器的分类精度依赖性较小。
谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)
图3
(4)目标尺寸的影响
谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)
图4
图4显示了不同模型在不同大小对象上的性能。毫不奇怪,所有的方法在大型对象上都做得更好。我们还看到,尽管SSD模型在小对象上的性能通常(非常)差,但它们在大对象上与faster RCNN和R-FCN是可以竞争的,甚至在更快和更轻的功能扩展方面优于这些元架构。
(5)图片尺寸的影响
其他作者也观察到,输入分辨率会显著影响检测精度。从我们的实验中,我们观察到,降低分辨率,会持续降低精确度(平均降低15.88%),但同时也会将推理时间平均降低27.4%。这种效应的原因是高分辨率的输入使得小的object更容易被检测出来。图5比较了在大型物体和小型物体上探测器的性能,证实了高分辨率模型可以显著地改善小型物体上的mAp效果(在许多情况下是2倍),也可以使大型物体上的mAP更好。我们还看到,在小对象上的强性能意味着在我们的模型中的大对象上的强性能(但反之亦然,因为SSD模型在大对象上表现良好,但在小对象并不是这样)。
谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)
图5
(6)proposal数量的影响
对于faster R-CNN和R-FCN,我们可以调整由区域建议网络计算的建议数。两篇论文的作者都使用了300个盒子,然而,我们的实验表明,这个数字可以在不影响mAP的情况下显著减少。在某些特征抽取器中,faster R-CNN的“盒子分类器”部分的成本是很昂贵,这会导致显著的计算。图6(a)显示了faster R-CNN模型的折衷曲线,该模型具有不同特征提取器的高分辨率输入。我们看到Inception Resnet,如果有300个提议(proposal)的话,它有35.4%的mAP,只有10个提议的话仍然有令人惊讶的高精度(29%的mAP)。最棒的地方可能是50个提议,在这里我们可以获得96%的使用300个提案的准确性,同时将运行时间减少3倍。虽然计算上的节省对于Inception Resnet来说最为显著,但是我们看到类似的折衷对于所有的功能提取器都是有效的。
图6(b)显示了R FCN模型的相同折衷曲线,并显示了在R-FCN设置中使用较少建议所节省的成本是最小的,这并不奇怪,因为box分类器(昂贵的部分)每个图像只运行一次。事实上,在100个方案下,使用ResNet的更快R-CNN模型的速度和精度与使用300个方案的等效R-FCN模型在mAP和GPU速度上的速度和精度相当。
谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)
图6
(7)内存分析
对于内存基准测试,我们衡量的是总使用量,而不是峰值使用量。图10a,10b根据GPU和cpuwall时钟时间绘制内存使用情况。总的来说,我们观察到运行时间与需要更多内存和更强大的特征提取器之间具有很强的相关性。
谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)
图10
图9更详细地描绘了一些相同的信息,通过元架构和特征抽取器选择向下钻取。与速度一样,Mobilenet也是最便宜的,几乎所有设置都需要小于1Gb的内存
谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)
图9
(8)0.75 IOU的良好localization意味着所有IOU阈值的良好localization
图11显示了事实上[email protected][email protected]的性能几乎与[email protected][.5:.95]完全线性相关。因此,在较高的IOU阈值下性能较差的检测器在较低的IOU阈值下也总是表现出较差的性能。这就是说,我们还观察到,[email protected]稍微更紧密一些,所以如果我们用一个IOU上的mAP代替标准的COCO度量的话,我们会选用IOU=0.75
谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)
图11

4.2 COCO的最新检测技术

最后,我们简要介绍了如何整合我们的一些模型,以实现2016年COCO目标检测挑战赛的最新表现。我们的模型在COCO测试集上达到41.3%的[email protected][.5,.95],是基于Resnet和Inception Resnet特征抽取器的5个faster R-CNN模型的集合,并且优于MSRA使用的3个Resnet-101模型的集合之前的最佳结果(37.1%的[email protected][.5,.95])。表4总结了我们的模型的性能,并强调了我们的模型在所有COCO度量中是如何改进的。最值得注意的是,我们的模型在小对象召回方面比之前的最佳结果提高了近60%。尽管这种与最新数字的集成可以被视为速度/精度折衷曲线上的一个极端点(每幅图像需要50个端到端网络评估),但我们选择单独呈现该模型,因为它与我们重点分析的“单一模型”结果不可比。
谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)
表4
谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)
表5
谷歌团队告诉你如何选择目标检测的架构!!!Github已有60k个star(太多技巧可以学习)
表6
为了构建我们的集成,我们从收集的faster R-CNN模型中选择了一组5个模型。每个模型都基于Resnet和Inception-Resnet特征提取器,具有不同的输出步幅配置,使用不同的损失函数的和训练数据的不同随机顺序重新训练。模型被选择使用按照他们在一个固定的验证集的表现。然而,为了利用具有互补优势的模型,我们还通过删减与先前选择的模型过于相似的模型来明确地鼓励多样性。为此,我们计算了每个模型的每个COCO类别的平均精度结果向量,并声明如果两个模型的类别相关AP向量的余弦距离大于某个阈值,则这两个模型过于相似。
表5总结了最终选定的模型规范以及它们作为单一模型在COCO上的单独性能。使用[13]中描述的程序(附录A)将这五个模型进行整合,并使用multicrop推理,然后得出我们的最终模型。请注意,我们不使用多尺度训练、水平翻转、框优化、框投票或全局上下文(有时在文献中使用)。表6将单个模型的性能与两种集成方式进行了比较,并显示(1)鼓励多样性确实有助于对抗手动选择的集成,并且(2)集成和multicrop比单个模型提高7个百分点。

4.3检测的例子

在图12到17中,我们将COCO数据集图像上的检测可视化,显示了速度-精度权衡图“最优性边界”上五个检测器的并排比较。为了可视化,我们选择得分大于阈值的检测,并在每个图像中绘制前20个检测。对于更快的R-CNN和R-FCN,我们使用0.5的阈值,对于SSD,使用0.3的阈值。这些阈值是手动调整的(主观)视觉吸引力,而不是使用严格的标准,所以我们提醒观众不要从这些视觉效果中过多地阅读。尽管如此,我们看到在我们的例子中,所有的探测器在大物体上的表现都相当不错—SSD只在小物体上显示出它的弱点,在第一张图片中缺少一些较小的风筝和人,在最后一张图片中也缺少餐桌上较小的杯子和瓶子。

五 结论

我们对影响现代目标探测器速度和精度的几个主要方面进行了实验比较。我们希望这能帮助实践者在现实世界中部署对象检测时选择合适的方法。我们还发现了一些新的技术来提高速度而不牺牲太多的准确性,例如使用比通常fasterR-CNN更少的proposal。