(目标检测篇)系列文章目录
第一章:R-CNN网络详解
第二章:Fast R-CNN网络详解
第三章:Faster R-CNN网络详解
第四章:SSD网络详解
第五章:YOLO v1网络详解
第六章:YOLO v2网络详解
第七章:YOLO v3网络详解
文章目录
- 系列文章目录
- 技术干货集锦
- 前言
- 一、摘要
- 二、正文分析
- 1.引入库
- 2.读入数据
- 总结
技术干货集锦
0.摘要
摘要:本文提出了一种使用单个深度神经网络在图像中检测物体的方法。我们的方法名为SSD,它将边界框的输出空间离散化为每个特征图位置上不同长宽比和尺度的一组默认框。在预测时,网络为每个默认框中每个物体类别的存在生成得分,并对框进行调整以更好地匹配物体形状。此外,网络结合了具有不同分辨率的多个特征图的预测,以自然地处理不同大小的物体。相对于需要物体提议的方法,SSD非常简单,因为它完全消除了提议生成和后续像素或特征重采样阶段,并将所有计算封装在一个网络中。这使得SSD易于训练,并且可以直接集成到需要检测组件的系统中。在PASCAL VOC、COCO和ILSVRC数据集上的实验结果证实,SSD与利用额外物体提议步骤的方法具有竞争性的准确性,并且速度更快,同时为训练和推理提供了统一的框架。对于300×300输入,在Nvidia Titan X上以59 FPS的速度在VOC2007测试集上实现了74.3%的mAP1,对于512×512输入,SSD达到了76.9%的mAP,优于具有可比较性的最先进的Faster R-CNN模型。与其他单阶段方法相比,即使输入图像尺寸较小,SSD的准确性也更高。代码可在GitHub - weiliu89/caffe at ssd 上找到。 关键词:实时目标检测;卷积神经网络
1.前言
引言:当前最先进的目标检测系统都是以下方法的变体:假设边界框,为每个框重新采样像素或特征,并应用高质量的分类器。自从Selective Search工作[1]至基于Faster R-CNN[2]的当前PASCAL VOC、COCO和ILSVRC检测的领先结果(尽管使用了更深的特征如[3]),这个流程在检测基准上占据主导地位。尽管准确,但这些方法对于嵌入式系统而言计算量太大,即使在高端硬件上,对于实时应用而言速度也太慢。这些方法的检测速度通常以每帧秒数(SPF)来衡量,即使是最快的高准确性检测器Faster R-CNN,每秒也只能处理7帧。已经有很多尝试通过攻击检测流程的每个阶段来构建更快的检测器(见第4节的相关工作),但到目前为止,显著提高的速度只是以明显降低的检测准确性为代价。
本文提出了第一个基于深度网络的目标检测器,它不需要对边界框假设重新采样像素或特征,而且与需要重新采样的方法一样准确。这导致高准确性检测速度的显著提高(在VOC2007测试中,mAP为74.3%,帧率为59FPS,而Faster R-CNN的mAP为73.2%,帧率为7FPS,YOLO的mAP为63.4%,帧率为45FPS)。速度的根本改善来自于消除边界框提议和随后的像素或特征重采样阶段。虽然我们不是第一个做到这一点的(参考[4,5]),但通过添加一系列的改进,我们成功地在准确性上显著提高了先前尝试的结果。我们的改进包括使用小型卷积滤波器来预测目标类别和边界框位置的偏移量,为不同长宽比的检测使用单独的预测器(滤波器),并将这些滤波器应用于网络后期的多个特征图,以便在多个尺度上进行检测。通过这些修改,特别是在不同尺度上使用多层进行预测,我们可以使用相对较低分辨率的输入实现高准确性,进一步增加检测速度。虽然这些贡献在独立进行时可能看起来很小,但我们注意到,所得到的系统将PASCAL VOC的实时检测准确性从YOLO的63.4%mAP提高到我们的SSD的74.3%mAP。这是比最近的关于残差网络[3]的非常高调的工作在检测准确性上取得的更大的相对改进。此外,显著提高高质量检测的速度可以扩大计算机视觉有用的范围。
我们的贡献总结如下:
- 我们引入了SSD,一个适用于多个类别的单次检测器,比之前的单次检测器(YOLO)更快,并且显著更准确,事实上与执行显式区域提议和池化的较慢技术(包括Faster R-CNN)一样准确。
- SSD的核心是使用小型卷积滤波器应用于特征图,为一组固定的默认边界框预测类别分数和框偏移量。
- 为了实现高检测准确性,我们从不同尺度的特征图产生不同尺度的预测,并根据长宽比明确分离预测。
- 这些设计特点导致了简单的端到端训练和高准确性,即使在低分辨率输入图像上也能进一步提高速度和准确性的权衡。
- 实验包括对具有不同输入尺寸的模型进行的计时和准确性分析,评估了在PASCAL VOC、COCO和ILSVRC上,并与一系列最新的先进方法进行了比较。
2.正文分析
(图1:SSD框架。(a)在训练过程中,SSD只需要输入图像和每个物体的真实边界框。我们以卷积的方式,在几个具有不同尺度(例如8×8和4×4)的特征图中的每个位置评估一小组(例如4个)具有不同长宽比的默认边界框。(b)和(c)展示了这些特征图的示例。对于每个默认边界框,我们预测了所有物体类别(c1;c2;···;cp)的形状偏移和置信度。在训练时,我们首先将这些默认边界框与真实边界框进行匹配。例如,我们将两个默认边界框与猫匹配,将一个默认边界框与狗匹配,将其视为正样本,将其余的视为负样本。模型损失是定位损失(例如Smooth L1 [6])和置信度损失(例如Softmax)的加权和)
2 单次检测器(SSD) 本节描述了我们提出的用于检测的SSD框架(第2.1节)以及相关的训练方法(第2.2节)。之后,第3节介绍了特定数据集的模型细节和实验结果。
2.1 模型 SSD方法基于一个前向卷积网络,该网络在一组固定大小的边界框和分数中产生目标类别实例的存在,并通过非最大抑制步骤生成最终的检测结果。该网络的早期层基于用于高质量图像分类的标准架构(在任何分类层之前截断),我们将其称为基础网络2。然后,我们在网络中添加辅助结构,以产生具有以下关键特征的检测结果: 多尺度特征图进行检测 我们在截断的基础网络末尾添加了卷积特征层。这些层逐渐减小尺寸,并允许在多个尺度上进行检测的预测。用于预测检测的卷积模型对于每个特征层都是不同的(与Overfeat[4]和YOLO[5]操作在单个尺度特征图上的方式相比)。
用于检测的卷积预测器 每个添加的特征层(或可选地来自基础网络的现有特征层)可以使用一组卷积滤波器生成一组固定的检测预测。这些在SSD网络架构的顶部显示在图2中。对于一个尺寸为m × n且具有p个通道的特征层,用于预测潜在检测参数的基本元素是一个3 × 3 × p的小核,它可以产生一个类别的分数,或者是相对于默认边界框坐标的形状偏移量。在应用核的m × n个位置上,它会产生一个输出值。边界框偏移输出值是相对于每个特征图位置上的默认边界框位置来度量的(与YOLO[5]的架构相比,该架构在此步骤中使用一个中间的全连接层而不是卷积滤波器)。 默认边界框和长宽比 我们将一组默认边界框与每个特征图单元关联起来,用于网络顶部的多个特征图。默认边界框以卷积方式铺设在特征图上,以使每个边界框相对于其对应的单元的位置固定。在每个特征图单元中,我们预测相对于单元中的默认边界框形状的偏移量,以及每个框中类别实例的类别分数。具体而言,对于给定位置上的k个框中的每个框,我们计算c个类别分数和相对于原始默认边界框形状的4个偏移量。这导致每个特征图位置周围应用了(c + 4)k个滤波器,为m × n个特征图产生了(c + 4)kmn个输出。有关默认边界框的示例,请参见图1。我们的默认边界框类似于Faster R-CNN[2]中使用的锚框,但我们将它们应用于不同分辨率的几个特征图中。允许在几个特征图中使用不同的默认边界框形状,可以有效地离散化可能的输出边界框形状空间。
2.2 训练
训练SSD与训练使用区域提议的典型检测器的关键区别在于,需要将真实信息分配给固定的检测器输出集中的特定输出。在YOLO[5]的训练和Faster R-CNN[2]以及MultiBox[7]的区域提议阶段中,也需要进行某种形式的分配。确定了这种分配后,将应用损失函数和反向传播进行端到端的训练。训练还涉及选择用于检测的默认边界框和尺度,以及困难负样本挖掘和数据增强策略。 匹配策略 在训练过程中,我们需要确定哪些默认边界框与真实检测结果相对应,并相应地训练网络。对于每个真实边界框,我们从位置、长宽比和尺度上变化的默认边界框中选择匹配的边界框(与MultiBox[7]类似)。与MultiBox不同的是,我们将默认边界框与任何具有Jaccard重叠度高于阈值(0.5)的真实边界框进行匹配。这简化了学习问题,使网络能够预测多个重叠的默认边界框的高分数,而不是要求其仅选择具有最大重叠度的边界框。
训练目标
SSD的训练目标源自于MultiBox[7,8]的目标函数,但扩展为处理多个物体类别。令xp ij = f1;0g表示将第i个默认边界框与第j个类别为p的真实边界框进行匹配的指示符。在上述匹配策略中,我们可以有Pi xp ij ≥1。整体目标损失函数是定位损失(loc)和置信度损失(conf)的加权和:L(x;c;l;g) = 1/N * Σ(Lconf(x;c) + αLloc(x;l;g)) (1),其中N是匹配的默认边界框的数量。如果N=0,则将损失设置为0。定位损失是预测边界框(l)和真实边界框(g)参数之间的平滑L1损失[6]。类似于Faster R-CNN[2],我们回归到默认边界框(d)的中心(cx;cy)和宽度(w)以及高度(h)的偏移量。Lloc(x;l;g) = ΣΣsmoothL1(lim - g^jm)g^jcx = (gjcx - dcx i) / dw i g^jcy = (gjcy - dcy i) / dh i g^jw = log(dgjw / w i) g^jh = log(dgjh / h i) (2)置信度损失是多类别置信度(c)上的softmax损失。Lconf(x;c) = -ΣΣxp p ij * log(^cp i) - Σlog(^c0 i),其中c^p i = Pexp(p exp(cp ic)p i) (3),权重项α经过交叉验证设为1。
选择默认边界框的尺度和长宽比
为了处理不同的物体尺度,一些方法[4,9]建议在不同的尺度下处理图像,然后将结果进行合并。然而,通过在单个网络中利用来自几个不同层的特征图进行预测,我们可以模拟相同的效果,同时还可以在所有物体尺度上共享参数。先前的研究[10,11]表明,使用来自较低层的特征图可以提高语义分割的质量,因为较低层更好地捕捉了输入物体的细节。类似地,[12]表明,从特征图中获取的全局上下文可以帮助平滑分割结果。受到这些方法的启发,我们在检测中使用较低和较高的特征图。图1展示了两个示例特征图(8×8和4×4),它们在框架中被使用。在实践中,我们可以使用更多的特征图,而只需很小的计算开销。网络中不同层级的特征图已知具有不同(经验)的感受野大小[13]。幸运的是,在SSD框架中,默认边界框不必与每个层的实际感受野相对应。我们设计了默认边界框的平铺,使得特定的特征图能够对对象的特定尺度有响应。假设我们想要使用m个特征图进行预测。每个特征图的默认边界框的尺度计算为:sk = smin + (smax - smin) * (m - 1) * (k - 1), k ∈ [1, m] (4),其中smin为0.2,smax为0.9,意味着最低层的尺度为0.2,最高层的尺度为0.9,而中间的所有层则是均匀分布的。我们为默认边界框设置不同的长宽比,并将它们表示为ar ∈ {1, 2, 3, 1/2, 1/3}。我们可以计算每个默认边界框的宽度(wka = sk * par)和高度(hak = sk / par)。对于长宽比为1的情况,我们还添加一个默认边界框,其尺度为s0k0k = √(sksk+1),从而每个特征图位置有6个默认边界框。我们将每个默认边界框的中心设置为(i+0.5, j+0.5),其中j是第k个方形特征图的大小,i和j ∈ [0, j]。在实践中,我们还可以设计一种默认边界框的分布,以最适应特定的数据集。如何设计最优的平铺也是一个开放的问题。通过将来自许多特征图所有位置的具有不同尺度和长宽比的默认边界框的预测进行合并,我们得到了一个多样化的预测集,涵盖了各种输入物体的大小和形状。例如,在图1中,狗与4×4特征图中的一个默认边界框匹配,但与8×8特征图中的任何默认边界框都不匹配。这是因为这些边界框具有不同的尺度,与狗的边界框不匹配,在训练过程中被认为是负样本。
硬负样本挖掘
在匹配步骤之后,大多数默认边界框都是负样本,特别是当可能的默认边界框数量很大时。这导致了正样本和负样本之间存在显著的不平衡。我们不使用所有的负样本,而是根据每个默认边界框的最高置信度损失进行排序,并选择前面的负样本,以使负样本和正样本之间的比例最多为3:1。我们发现这样做可以加快优化速度并使训练更加稳定。 数据增强 为了使模型对不同的输入物体大小和形状更加鲁棒,每个训练图像都是通过以下选项之一进行随机采样的:
- 使用整个原始输入图像。
- 采样一个补丁,使其与物体之间的最小Jaccard重叠为0.1、0.3、0.5、0.7或0.9。
- 随机采样一个补丁。每个采样的补丁的大小是原始图像大小的[0.1,1],宽高比在1/2和2之间。如果中心点位于采样的补丁中,则保留与之重叠的部分的真实边界框。 在进行上述采样步骤之后,每个采样的补丁都被调整为固定大小,并且以0.5的概率进行水平翻转,除此之外还应用了一些类似于[14]中描述的光度失真。
3.实验结果
基于VGG16 [15]作为基础网络,在ILSVRC CLS-LOC数据集 [16]上进行了预训练。与DeepLab-LargeFOV [17]类似,我们将fc6和fc7转换为卷积层,从fc6和fc7中进行子采样,将pool5从2×2-s2改为3×3-s1,并使用a trous算法 [18]填充“holes”。我们删除了所有的dropout层和fc8层。使用SGD进行微调,初始学习率为10^-3,动量为0.9,权重衰减为0.0005,批量大小为32。每个数据集的学习率衰减策略略有不同,我们将在后面描述详细信息。完整的训练和测试代码构建在Caffe [19]上,并在https://github.com/weiliu89/caffe/tree/ssd上开源。
3.1 PASCAL VOC2007
在这个数据集上,我们在VOC2007测试集(4952张图像)上与Fast R-CNN [6]和Faster R-CNN [2]进行比较。所有方法都在相同的预训练VGG16网络上进行微调。图2显示了SSD300模型的架构细节。我们使用conv4 3、conv7(fc7)、conv8 2、conv9 2、conv10 2和conv11 2来预测位置和置信度。我们在conv4 3上设置了默认框的尺度为0.1。我们使用“xavier”方法 [20]对所有新添加的卷积层的参数进行初始化。对于conv4 3、conv10 2和conv11 2,我们在每个特征图位置上只关联了4个默认框,省略了1:3和3的宽高比。对于其他所有层,我们按照第2.2节中描述的方式放置了6个默认框。正如[12]中指出的那样,由于conv4 3具有与其他层不同的特征尺度,我们使用[12]中介绍的L2归一化技术将特征图中每个位置的特征范数缩放到20,并在反向传播过程中学习这个尺度。我们使用10^-3的学习率进行40k次迭代,然后使用10^-4和10^-5继续训练10k次。当在VOC2007 trainval上训练时,表1显示我们的低分辨率SSD300模型已经比Fast R-CNN更准确。当我们在更大的512×512输入图像上训练SSD时,它会更加准确,超过Faster R-CNN 1.7%mAP。如果我们使用更多的数据(即07+12数据)来训练SSD300,我们会发现SSD300已经比Faster R-CNN高出1.1%,而SSD512比Faster R-CNN高出3.6%。如果我们采用在COCO trainval35k上训练的模型(如第3.4节所述)并在07+12数据集上进行微调,使用SSD512可以得到最佳结果:81.6%mAP。
为了更详细地了解我们两个SSD模型的性能,我们使用了[21]中的检测分析工具。图3显示,SSD可以高质量地检测各种物体类别(白色区域较大)。大部分有自信度的检测结果是正确的。召回率在85-90%左右,并且在使用“弱”(0.1 jaccard overlap)标准时更高。与R-CNN [22]相比,SSD的定位误差较小,这表明SSD可以更好地定位物体,因为它直接学习回归物体形状并分类物体类别,而不是使用两个解耦的步骤。然而,SSD在相似的物体类别(特别是动物类)之间容易混淆,部分原因是我们在多个类别之间共享位置。图4显示,SSD对于边界框大小非常敏感。换句话说,它对于较小的物体比较差,比较大的物体表现更好。这并不奇怪,因为这些小物体可能在最顶层甚至没有任何信息。增加输入尺寸(例如从300×300增加到512×512)可以帮助改善对小物体的检测,但仍有很大的改进空间。积极的一面是,我们可以清楚地看到SSD在大物体上表现非常好。而且它对于不同的物体宽高比非常稳健,因为我们在每个特征图位置使用具有不同宽高比的默认框。
(表1:PASCAL VOC2007测试集的检测结果。Fast R-CNN和Faster R-CNN使用最小尺寸为600的输入图像。这两个SSD模型除了输入尺寸不同(300×300 vs. 512×512)之外,其他设置完全相同。很明显,较大的输入尺寸会导致更好的结果,而更多的数据总是有帮助的。数据:“07”:VOC2007 trainval,“07+12”:VOC2007和VOC2012 trainval的并集。“07+12+COCO”:首先在COCO trainval35k上进行训练,然后在07+12上进行微调。)
3.2 模型分析 为了更好地了解SSD,我们进行了一系列受控实验,以检查每个组件对性能的影响。对于所有实验,除了特定的设置或组件的更改外,我们使用相同的设置和输入尺寸(300×300)。
(表2:不同设计选择和组件对SSD性能的影响)
数据增强非常关键。
Fast R-CNN和Faster R-CNN使用原始图像和水平翻转进行训练。我们采用了一种更广泛的采样策略,类似于YOLO [5]。表2显示,使用这种采样策略可以提高8.8%的mAP。我们不知道我们的采样策略对Fast R-CNN和Faster R-CNN会有多大的益处,但它们可能会受益较少,因为它们在分类过程中使用了特征池化步骤,这在设计上对目标的平移相对稳健。
(图3:SSD512在VOC2007测试集中对动物、车辆和家具的性能可视化。顶部一行显示的是由于定位不准确(Loc)、与类别混淆(Sim)、与其他目标(Oth)或与背景(BG)导致的正确检测(Cor)或假阳性的累积比例。实线红线反映了在检测数量增加时,使用较强的标准(0.5的Jaccard重叠)时召回率的变化。虚线红线是使用较弱的标准(0.1的Jaccard重叠)。底部一行显示了排名靠前的假阳性类型的分布。)
(图4:使用[21]在VOC2007测试集上显示不同目标特征的敏感性和影响。左侧的图表显示了每个类别的边界框面积的影响,右侧的图表显示了宽高比的影响。键值解释:边界框面积:XS=特小;S=小;M=中等;L=大;XL=特大。宽高比:XT=特高/窄;T=高;M=中等;W=宽;XW=特宽。)
更多的默认框形状更好。
如2.2节所述,我们默认每个位置使用6个默认框。如果我们移除宽高比为1:3和3:1的框,1:3的性能下降了0.6%。进一步移除宽高比为1:2和2:1的框,性能再下降了2.1%。使用多种默认框形状似乎使网络更容易预测框的任务。Atrous更快。如3节所述,我们使用了经过子采样的VGG16的atrous版本,遵循DeepLab-LargeFOV [17]的方法。如果我们使用完整的VGG16,保留pool5的2×2−s2和不对fc6和fc7进行子采样,并添加conv5 3用于预测,结果大致相同,但速度会慢大约20%。
表3:使用多个输出层的效果。
使用不同分辨率的多个输出层效果更好。SSD的一个重要贡献是在不同的输出层上使用不同尺度的默认框。为了衡量所获得的优势,我们逐步移除层并比较结果。为了公平比较,每次移除一层时,我们调整默认框的平铺方式,以保持总框数与原始设置(8732个)相似。这是通过在剩余层上堆叠更多尺度的框,并在需要时调整框的尺度来完成的。我们没有对每个设置进行详尽的平铺优化。表3显示随着层数减少,准确性下降,从74.3降至62.4。当我们在一层上堆叠多个尺度的框时,许多框位于图像边界上,需要仔细处理。我们尝试了Faster R-CNN [2]中使用的策略,忽略位于边界上的框。我们观察到一些有趣的趋势。例如,如果我们使用非常粗糙的特征图(例如conv11_2(1×1)或conv10_2(3×3)),性能会受到严重影响。原因可能是在剪枝后,我们没有足够多的大框来覆盖大物体。当我们主要使用更细的分辨率图时,性能开始再次增加,因为即使在剪枝后,仍然保留了足够数量的大框。如果我们只使用conv7进行预测,性能是最差的,这再次强调了在不同层上分布不同尺度的框的重要性。此外,由于我们的预测不像[6]中的ROI池化那样依赖于低分辨率特征图[23]中的折叠容器问题。SSD架构将各种分辨率的特征图的预测组合起来,以实现与Faster R-CNN相当的准确性,同时使用较低分辨率的输入图像。
3.3 PASCAL VOC2012
我们使用与上述基本VOC2007实验相同的设置,只是我们使用VOC2012的trainval和VOC2007的trainval和test(21503张图片)进行训练,并在VOC2012的test集(10991张图片)上进行测试。我们使用10^-3的学习率进行60k次迭代的训练,然后使用10^-4的学习率进行20k次迭代的训练。表4显示了我们SSD300和SSD512模型的结果。我们观察到与VOC2007测试集上相同的性能趋势。我们的SSD300在准确性上优于Fast/Faster R-CNN。通过将训练和测试图像的尺寸增加到512×512,比Faster R-CNN准确性提高了4.5%。与YOLO相比,SSD的准确性显著更高,可能是由于使用了来自多个特征图的卷积默认框以及我们在训练过程中的匹配策略。当从在COCO数据集上训练的模型进行微调时,我们的SSD512达到了80.0%mAP,比Faster R-CNN高出4.1%。
(表4:PASCAL VOC2012测试集的检测结果。Fast和Faster R-CNN使用最小尺寸为600的图像,而YOLO的图像尺寸为448×448。数据集:“07++12”:VOC2007的trainval和test以及VOC2012的trainval的并集。“07++12+COCO”:首先在COCO的trainval35k上进行训练,然后在“07++12”上进行微调。)
3.4 COCO
为了进一步验证SSD框架,我们在COCO数据集上训练了SSD300和SSD512架构。由于COCO中的物体往往比PASCAL VOC更小,我们为所有层使用了更小的默认框。我们遵循第2.2节中提到的策略,但现在我们最小的默认框的尺度为0.15,而不是0.2,conv4 3上的默认框的尺度为0.07(例如对于300×300的图像,为21个像素)。我们使用trainval35k进行训练。我们首先使用10^-3的学习率进行160k次迭代的训练,然后继续使用10^-4进行40k次迭代的训练,最后使用10^-5进行40k次迭代的训练。表5显示了在test-dev2015上的结果。与我们在PASCAL VOC数据集上观察到的情况类似,SSD300在mAP@0.5和mAP@[0.5:0.95]两个指标上都优于Fast R-CNN。SSD300在mAP@0.75上与ION和Faster R-CNN相似,但在mAP@0.5上较差。通过将图像尺寸增加到512×512,我们的SSD512在两个指标上都优于Faster R-CNN。有趣的是,我们观察到SSD512在mAP@0.75上比Faster R-CNN好5.3%,但在mAP@0.5上只好1.2%。我们还观察到,它在大物体的AP(4.8%)和AR(4.6%)上有很好的改进,但在小物体的AP(1.3%)和AR(2.0%)上改进相对较少。与ION相比,对于大和小物体,AR的改进更加相似(5.4%对比3.9%)。我们推测,由于Faster R-CNN在RPN部分和Fast R-CNN部分都进行了两次框精炼步骤,所以在较小的物体上,它与SSD相比更具竞争力。在图5中,我们展示了在COCO test-dev上使用SSD512模型的一些检测示例。
3.5 ILSVRC初步结果
我们将在COCO上使用的相同网络架构应用于ILSVRC DET数据集[16]。我们使用ILSVRC2014 DET的train和val1训练了一个SSD300模型,与[22]中使用的相同数据集。我们首先使用10^-3的学习率进行320k次迭代的训练,然后继续使用10^-4进行80k次迭代的训练,最后使用10^-5进行40k次迭代的训练。我们在val2数据集上获得了43.4的mAP[22]。再次验证了SSD是一个用于高质量实时检测的通用框架。
3.6 用于小物体准确性的数据增强
由于SSD没有像Faster R-CNN那样的后续特征重采样步骤,所以对于小物体的分类任务相对较难,正如我们的分析所示(见图4)。在第2.2节中描述的数据增强策略有助于显著提高性能,特别是在PASCAL VOC等小数据集上。该策略生成的随机裁剪可以被看作是一种"放大"操作,并且可以生成许多更大的训练样本。为了实现一种"缩小"操作,生成更多的小训练样本,我们首先将图像随机放置在一个填充有均值值的原始图像大小的16倍的画布上,然后再进行任何随机裁剪操作。由于引入了这种新的"扩展"数据增强技巧,我们通过加倍训练迭代次数来获得更多的训练图像。我们在多个数据集上一致看到了2%-3%的mAP增加,如表6所示。具体来说,图6显示了新的增强技巧在小物体上显著提高了性能。这个结果强调了数据增强策略对最终模型准确性的重要性。改进SSD的另一种方法是设计更好的默认框平铺,使其位置和尺度与特征图上每个位置的感受野更好地对齐。这留待以后的工作。
(图5:使用SSD512模型在COCO test-dev上的检测示例。我们展示了得分高于0.6的检测结果。每种颜色对应一个物体类别。)
(表6:当我们添加图像扩展数据增强技巧时,多个数据集上的结果。SSD300和SSD512是使用新的数据增强进行训练的模型。)
(图6:使用[21]在VOC2007测试集上,通过新的数据增强对目标尺寸的敏感性和影响。顶行显示了原始的SSD300和SSD512模型的每个类别的边界框面积效果,底行对应使用新的数据增强技巧训练的SSD300和SSD512模型。显然,新的数据增强技巧显著有助于检测小物体。)
3.7 推理时间
考虑到我们方法生成的大量边界框,对于推理过程来说,高效地执行非最大值抑制(NMS)是至关重要的。通过使用置信度阈值为0.01,我们可以过滤掉大部分边界框。然后,我们对每个类别使用0.45的Jaccard重叠进行NMS,并保留每个图像的前200个检测结果。这一步对于SSD300和包含20个VOC类别的图像,每个图像大约耗时1.7毫秒,接近于所有新添加层所花费的总时间(2.4毫秒)。我们使用Titan X和cuDNN v4以及Intel Xeon E5-2667v3@3.20GHz在批量大小为8的情况下进行速度测量。表7显示了SSD、Faster R-CNN[2]和YOLO[5]之间的比较。我们的SSD300和SSD512方法在速度和准确性方面都优于Faster R-CNN。尽管Fast YOLO[5]可以以155FPS的速度运行,但准确性较低,几乎比mAP低了22%。据我们所知,SSD300是首个达到70%mAP以上的实时方法。需要注意的是,前向时间的约80%用于基础网络(在我们的情况下是VGG16)。因此,使用更快的基础网络甚至可以进一步提高速度,可能也可以使SSD512模型实时运行。
4 相关工作
在图像中进行目标检测的方法可以分为两类:一类基于滑动窗口,另一类基于区域建议分类。在卷积神经网络出现之前,这两种方法的最先进技术——变形部件模型(DPM)[26]和选择性搜索[1]的性能相当。然而,在R-CNN[22]的显著改进后,结合选择性搜索区域建议和基于卷积网络的后分类的区域建议目标检测方法变得普遍。原始的R-CNN方法已经以多种方式得到了改进。第一组改进方法是提高后分类的质量和速度,因为它需要对成千上万个图像进行分类,这是昂贵且耗时的。SPPnet [9]显著加速了原始的R-CNN方法。它引入了一个空间金字塔池化层,对于区域的大小和尺度更加鲁棒,并允许分类层重用在多个图像分辨率下生成的特征图上计算的特征。Fast R-CNN [6]扩展了SPPnet,使其可以通过最小化置信度和边界框回归的损失来端到端地微调所有层,这在学习物体性质方面首次引入了MultiBox [7]中。
第二组方法通过使用深度神经网络改进了提议生成的质量。在最近的工作中,如MultiBox [7,8],基于低级图像特征的选择性搜索区域建议被直接从独立的深度神经网络中生成的提议所取代。这进一步提高了检测的准确性,但结果是一个稍微复杂的设置,需要训练两个具有依赖关系的神经网络。Faster R-CNN [2]通过从区域建议网络(RPN)中学习到的建议替换了选择性搜索提议,并引入了一种将RPN与Fast R-CNN集成的方法,通过交替对这两个网络的共享卷积层和预测层进行微调。这样,区域建议被用来汇集中级特征,最终的分类步骤更加节约。我们的SSD与Faster R-CNN中的区域建议网络(RPN)非常相似,因为我们也使用一组固定的(默认的)边界框进行预测,类似于RPN中的锚框。但是,我们不是使用这些边界框来汇集特征并评估另一个分类器,而是同时为每个边界框中的每个目标类别生成一个得分。因此,我们的方法避免了合并RPN和Fast R-CNN的复杂性,并且更容易训练、更快速,并且容易集成到其他任务中。
另一组与我们的方法直接相关的方法完全跳过了提议步骤,直接预测多个类别的边界框和置信度。OverFeat [4]是滑动窗口方法的深度版本,它在知道底层物体类别的置信度后,直接从顶层特征图的每个位置预测边界框。YOLO [5]使用整个顶层特征图来预测多个类别的置信度和边界框(这些边界框是共享的)。我们的SSD方法属于这一类方法,因为我们没有提议步骤,而是使用默认的边界框。然而,我们的方法比现有方法更灵活,因为我们可以在不同尺度的多个特征图上的每个特征位置上使用具有不同长宽比的默认边界框。如果我们仅在顶层特征图的每个位置使用一个默认边界框,我们的SSD的架构将与OverFeat [4]类似;如果我们使用整个顶层特征图并添加一个全连接层用于预测,而不是使用我们的卷积预测器,并且不明确考虑多个长宽比,我们可以近似地重现YOLO [5]的结果。
总结
结论 本文介绍了SSD,一种用于多类别的快速单次检测器。我们模型的一个关键特点是在网络顶部附加到多个特征图上的多尺度卷积边界框输出。这种表示方式使我们能够高效地建模可能的边界框形状空间。我们通过实验证实,在适当的训练策略下,选择更多仔细选择的默认边界框可以提高性能。我们构建的SSD模型在采样位置、尺度和长宽比方面预测了至少一个数量级更多的边界框,比现有方法[5,7]更多。我们证明,在相同的VGG-16基础架构下,SSD在准确性和速度方面与最先进的目标检测器相比表现优异。我们的SSD512模型在PASCAL VOC和COCO上的准确性明显优于最先进的Faster R-CNN [2],同时速度快3倍。我们的实时SSD300模型以59 FPS的速度运行,比目前的实时YOLO [5]替代方案更快,同时产生明显更高的检测准确性。除了作为独立工具的实用性之外,我们认为我们的单体且相对简单的SSD模型为使用目标检测组件的更大系统提供了一个有用的构建模块。一个有前途的未来方向是探索它作为一个系统的一部分,使用递归神经网络同时检测和跟踪视频中的对象。