Bootstrap

Paper-----SSD: Single Shot MultiBox Detector

论文标题:SSD: Single Shot MultiBox Detector

论文作者:Wei LiuDragomir AnguelovDumitru ErhanChristian SzegedyScott ReedCheng-Yang Fu,Alexander C. Berg

论文地址:https://arxiv.org/abs/1512.02325

SSD 的GitHub地址:https://github.com/balancap/SSD-Tensorflow

目标检测近些年来已经取得了很重要的进程,主流算法主要分为两个类型:

  • (1)Two-stage 方法:如R-CNN系列算法,其主要思想就是通过Selective Search或者RPN网络产生一系列稀疏矩阵的候选框,然后对这些候选框进行分类和回归,two-stage 的方法优势就在于准确率高
  • (2)One-stage 方法:如YOLO,SSD,其主要思想就是均匀地在图片上不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,然后利用CNN提取特征后直接进行分类和回归,整个过程只需要一步,所以优势就在于速度快,但是均匀密集采样的一个重要缺点就是训练比较困难,这主要是因为正样本和负样本极度不均衡,导致模型准确率比较低。

  SSD 作为经典算法,同样是必不可少的学习重点,SSD算法的英文全称是Single Shot MultiBox Detector,Single Shot指明了SSD算法属于one-stage方法,MultiBox Detector指明了SSD是多框预测。相对于Faster R-CNN先通过RPN得到候选框,然后进行分类和回归,YOLO和SSD可以一步完成检测,相对YOLO,SSD采用CNN来直接进行检测,而不是像YOLO那样采用全连接层后做检测。相对比YOLO而言,还有其他两个特点的改变:

  • 1,SSD提取了不同尺度的特征图来做检测,大尺度特征图可以用来检测小物体,而小特征图用来检测大物体
  • 2,SSD采用了不同尺度和长宽比的先验框,在Faster R-CNN中称为Anchors,YOLO算法缺点是难以检测小物体,而且定位不准,但是对于这几点,SSD在一定程度上克服这些困难。

  下面先看看其算法流程:

  • 1,输入一幅图片,让图片经过卷积神经网络(CNN)提取特征,并生成 feature map
  • 2,抽取其中六层的 feature map,然后在 feature map的每个点上生成 default box(各层的个数不同,但每个点都有)
  • 3,将生成的所有 default box 都集合起来,全部丢到 NMS(极大值抑制)中,输出筛选后的 default box,并输出

摘要

  我们提出了一种使用单个深度神经网络来检测图像中的目标的方法。我们的方法命名为SSD,将边界框的输出空间离散化为不同长宽比的一组默认框并缩放每个特征映射的位置。在预测时,网络会在每个默认框中为每个目标类别的出现生成分数,并对框进行调整以更好地匹配目标形状。此外,网络还结合了不同分辨率的多个特征映射的预测,自然地处理各种尺度的目标。相对于需要目标提出的方法,SSD非常简单,因为它完全消除了提出生成和随后的像素或特征重新采样阶段,并将所有计算封装到单个网络中。这使得SSD易于训练和直接集成到需要检测组件的系统中。PASCAL VOC,COCO和ILSVRC数据集上的实验结果证实,SSD对于利用额外的目标提出步骤的方法具有竞争性的准确性,并且速度更快,同时为训练和推断提出了统一的框架。对于300*300的输入,SSD在 VOC 2007测试中以 59fps 的速度在NVIDIA Titan X 上达到 74.3%的mAP,对于 512*512 的输入,SSD达到了 76.9%的mAP,优于参照的最先进Faster R-CNN 模型。与其他单阶段方法相比,即使输入图像尺寸较小,SSD也具有更高的精度。代码获取:https://github.com/weiliu89/caffe/tree/ssd

  关键字:实时目标检测;卷积神经网络

1,引言

  目前最先进的目标检测系统是以下方法的变种:假设边界框,每个框重采样像素或特征,并应用到一个高质量的分类器。自从选择性搜索【1】通过在PASCAL VOC , COCO和ILSVRC上所有基于Faster R-CNN【2】的检测都取得了当前领先的结果(尽管具有更深的特征如【3】),这种流程在检测基准数据上留下开来。尽管这些方法准确,但对于嵌入式系统而言,这些方法的计算量过大,即使是高精度检测器,Faster R-CNN,仅以每秒7帧(FPS)的速度运行。已经有很多尝试通过处理检测流程中的每个阶段来构建更快的检测器(参见第4节中的相关工作),但是到目前为止,显著提高的速度仅以显著降低的检测精度为代价。

  本文提出了第一个基于深度网络的目标检测器,它不对边界框假设的像素或特征进行重采样,并且与其他方法有一样精确度。这对高精度检测在速度上有显著提高(在VOC 2007测试中,59fps和 74.3%的mAP,与Faster R-CNN 7FPS和 73.2%的mAP或者YOLO 45 FPS和63.4%的mAP相比)。速度的根本改进来自消除边界框提出和随后的像素或特征重采样阶段。我们并不是第一个这样做的人(查询【4.5】),但是通过增加一系列改进,我们设法比以前的尝试显著提高了准确性。我们的改进包括使用小型卷积滤波器应用于网络后期的多个特征映射中,以执行多尺度检测。通过这些修改——特别是使用多层进行不同尺度的预测——我们可以使用相对较低的分辨率输入实现高精度,进一步提高检测速度。虽然这些贡献可能单独看起来很小,但是我们注意到由此产生的系统将PASCAL VOC实时检测的准确度从 YOLO的 63.4%的mAP提高到我们的SSD的 74.3%的mAP。相比于最近备受瞩目的残差网络方面的工作【3】,在检测精度上这是相对更大的提高。而且,显著提高的高质量检测速度可以扩大计算机视觉使用的设置范围。

 我们总结了一下我们的贡献,如下:

  • 我们引入了SSD,这是一种针对多个类别的单次检测器,比先前的先进的单次检测器(YOLO)更快,并且准确的多,事实上,与执行显式区域提出和池化的更慢的技术具有相当的精度(包括 Faster R-CNN)
  • SSD的核心是预测固定的一系列默认边界框的类别分数和边界框偏移,使用更小的卷积滤波器应用到特征映射上
  • 为了实现高检测精度,我们根据不同尺度的特征映射生成不同尺度的预测,并通过纵横比明确分开预测
  • 这些设计功能使得即使在低分辨率输入图像上也能实现简单的端到端训练的高精度,从而进一步提高速度与精度之间的权衡
  • 实验包括在PASCAL VOC,COCO和ILSVRC上评估具有不同输入大小的模型和时间精度分析,并与最近的一系列最新方法进行比较

2,单次目标检测器(SSD)

  本节描述我们提出的SSD检测框架(2.1节)和相关训练方法(2.2 节)。之后,2.3节介绍了数据集特有的模型细节和实验结果。

  图 1:SSD架构。(a)在训练期间,SSD仅需要每个目标的输入图像和真实边界框。以卷积方式,我们评估具有不同尺度(例如(b)和(c)中的 8*8和 4*4)的几个特征映射中每个位置处不同长宽比的默认框的小集合(例如4个)。对于每个默认边界框,我们预测所有目标类别(c1, c2, ....cp)的形状偏移量和置信度。在训练时,我们首先将这些默认边界框与实际的边界框进行匹配。例如,我们已经与猫匹配两个默认边界框,与狗匹配了一个,这被视为积极地,其余的是消极的。模型损失是定位损失(例如,Smooth L1【16】和置信度损失(例如Softmax)之间的加权和)。

  图中(b,  c)中的虚线框就是生成的 default box,总共怎么算呢?就是 38*38*4, 19*19*6, 10*10*6, 5*5*6, 3*3*4, 1*1*4, 也就是说 5773, 2166, 600, 150, 36, 4,加起来一共有 8732 个 box,然后我们将这些 box 送入 NMS 模块中,获得最终的检测结果。

   SSD和YOLO一样都是采用一个CNN网络来进行检测,但是SSD却采用了多尺度的特征图,基本架构如上图所示。

2.1 模型

  SSD方法基于前馈卷积网络,该网络产生固定大小的边界框集合,并对这些边界框中存在的目标类别实例进行评分,然后进行非极大值抑制步骤来产生最终的检测结果。早期的网络层基于用于高质量图像分类的标准架构(在任何分类层之前被截断),我们将其称为基础网络。然后,我们将辅助结构添加到网络中以产生具有以下关键特征的检测:

用于检测的多尺度特征映射:我们将卷积特征层添加到截取的基础网络的末端。这些层在尺度上逐渐减小,并允许在多个尺度上对检测结果进行预测。用于预测检测的卷积模型对于每个特征层都是不同的(查阅Overfeat【4】和YOLO【5】在但尺度特征映射上的操作)。

  所谓多尺度检测是采用大小不同的特征图,CNN网络一般前面的特征图比较大,后面逐渐采用stride=2的卷积或者pooling层来降低特征图大小。一般比较大的特征图和比较小的特征图都用来做检测,这样做的好处就是比较大的特征图用来检测相对比较小的目标,而小的特征图负责用来检测大的物体,如图所示:(8*8的特征图可以划分更多的单元,但是其每个单元的先验框尺度比较小。)

采用卷积做检测:每个添加的特征层(或者任选的来自基础网络的现有特征层)可以使用一组卷积滤波器产生固定的检测预测集合。这些在图2的SSD架构的上部指出。对于具有 p 通道的大小为 m*n 的特征层,潜在检测的预测参数的基本元素是 3*3*p 的小核得到某个类别的分数,或者相对默认框坐标的形状偏移。在应用卷积核的 M*N 的每个位置,它会产生一个输出值。边界框偏移输出值是相对每个特征映射位置的相对默认框位置来度量的(查阅YOLO【5】的架构,该步骤使用中间全连接层而不是卷积滤波器)。

  YOLO 最后采用的是全连接层,SSD直接采用卷积对不同的特征图进行提取检测结果,对于形状为 n*n*p 的特征图,只需要采用 3*3*p 这样小的卷积核得到检测值。

默认边界框和长宽比:对于网络顶部的多个特征映射,我们将一组默认边界框与每个特征映射单元相关联。默认边界框以卷积的方式平铺特征映射,以便每个边界框相对于其对应单元的位置是固定的。在每个特征映射单元中,我们预测单元中相对于默认边界框形状的偏移量,以及指出每个边界框中存在的每个类别实例的类别分数。具体而言,对于给定位置处的 k 个边界框中的每一个,我们计算 c 个类别分类和相对于原始默认边界框形状的 4个偏移量。这导致在特征映射中的每个位置周围应用总共(c+4) k 个滤波器,对于 m*n 的特征映射取得(c+4)kmn个输出。有关默认边界框的说明,请参见图1.我们的默认边界框与Faster  R-CNN 【2】中使用的默认边界框相似,但是我们将他们应用到不同分辨率的几个特征映射上,在几个特征映射中允许不同的默认边界框形状让我们有效的离散可能的输出框形状的空间。

  图2:两个单次检测模型的比较:SSD和YOLO【5】。我们的SSD模型在基础网络的末端添加了几个特征层,它预测了不同尺度和长宽比的默认边界框的偏移量及其相关的置信度。300*300输入尺寸的 SSD在 VOC 2007 test 上的 准确度上明显优于 448*448的YOLO的准确度,同时也提高了速度。

  上图是SSD和YOLO的网络结果,通过对比可以发现,SSD的优点就是它生成的 default box 是多尺度的,这是因为SSD生成 default box 的 feature map 不仅仅是 CNN的输出的最后一层,还有利用比较浅层的 feature map 生成的 default box。所以SSD对于小目标的检测一定会优于YOLO v1(小目标经过高层卷积后特征几乎都消失了)。同时,又因为SSD生成的多尺度 default box一定会有更高概率找到更加贴近与Ground Truth的候选框,所以模型的稳定性是肯定比YOLO强的(YOLO的 bounding box很少,只有 98个,如果距离 GT 比较远,那么修改 bounding box 的线性回归就不成立,训练时模型可能会跑飞)。但是SSD的候选框数量是三种经典网络中最多的,有 8732个,所以训练时应该会比较慢。

2.2 训练

  训练SSD和训练使用区域提出的典型检测器之间的关键区别在于,需要将真实信息分配给固定的检测器输出集合中的特定输出。在YOLO【5】的训练中,Faster R-CNN【2】和MultiBox【7】的区域提出阶段,一些版本也需要这样的操作。一旦确定了这个分配,损失函数和反向传播就可以应用端到端了。训练也涉及选择默认边界框集合和缩放进行检测,以及难挖掘和数据增强策略。

  匹配策略:在训练过程中,我们需要确定哪些默认边界框对应实际边界框的检测,并相应的训练网络。对于每个实际边界框,我们从默认边界框中选择,这些框会在位置,长宽比和尺度上变化。我们首先将每个实际边界框与具有最好的 Jaccard 重叠(如 MultiBox【7】)的边界框相匹配。与MultiBox不同的是,我们将默认边界框匹配到 Jaccard 重叠高于阈值(0.5)的任何实际边界框,这简化了学习问题,允许网络为多个重叠的默认边界框预测高分,而不是要求它只挑选具有最大重叠的一个边界框。

训练目标函数:SSD训练目标函数来自于MultiBox目标【7,8】,但扩展到处理多个目标类别,设 Xij = {1,0} 是第 i 个默认边界框匹配到类别 p 的第 j 个实际边界框的指示器。在上面的匹配策略中,我们有 sigmai Xij >=1 。总体目标损失函数是定位损失(loc)和置信度损失(conf)的加权和:

  其中N是匹配的默认边界框的数量,如果N=0,则将损失设为0,定位损失是预测框(l)与真实框(g)参数之间的 Smooth L1损失【6】。类似于 Faster R-CNN【2】,我们回归默认边界框(d)的中心偏移量(cx, cy)和其宽度(w),高度(h)的偏移量。

  置信度损失是在多类别置信度(c)上的Softmax损失。

  通过交叉验证权重项 alpha 设为1。

为默认边界框选择尺度和长宽比:为了处理不同的目标尺度,一些方法【4, 9】建议处理不同尺寸的图像,然后将结果合并。然而,通过利用单个网络中几个不同层的特征映射进行预测,我们可以模拟相同的效果,同时还可以跨所有目标尺度共享参数。以前的工作【10, 11】已经表明,使用底层的特征映射可以提高语义分割的质量,因为底层会捕获输入目标的更多细节。同样,【12】表明,从特征映射上添加全局上下文池化可以有助于平滑分割结果,受这些方法的启发,我们使用较低和较高的特征映射进行检测。图1显示了框架中使用的两个示例性特征映射(8*8 和 4*4)。在实践中,我们可以使用更多的具有很少计算开支的特征映射。

  已知网络中不同层的特征映射具有不同的(经验的)感受野大小【13】。幸运的是,在SSD框架内,默认边界框不需要对应与每层的实际感受野。我们设计平铺默认边界框,以便特定的特征映射学习响应目标的特定尺度。假设我们要使用 m个特征映射进行预测。每个特征映射默认边界框的尺度计算如下:

  其中 Smin为 0.2, Smax为 0.9,意味着最底层具有 0.2 的尺度,最高层具有  0.9 的尺度,并且在他们之间的所有层是规则间隔的。我们为默认边界框添加不同的长宽比,并将他们表示为 ar = 1, 2, 3, 1/2, 1/3 。我们可以计算每个边界框的宽度和高度。对于长宽比为1,我们还添加了一个默认边界框,其尺度为sk,在每个特征映射位置得到 6 个默认边界框。我们将每个默认边界框的中心设置为(。。),其中 |fk| 是第 k 个平方特征映射的大小,在实践中,也可以设计默认边界框的分布以最适合特定的数据集。如何设计最佳平铺也是一个悬而未决的问题。

  通过将所有默认边界框的预测与许多特征映射所有位置的不同尺度和高宽比相结合,我们有不同的预测集合,涵盖各种输入目标大小和形状。例如,在图1中,狗被匹配到 4*4 特征映射中的默认边界框,而不是 8*8 特征映射中的任何默认框。这是因为那些边界框有不同的尺度,不匹配狗的边界框,因此在训练期间被认为是负例。

难例挖掘:在匹配步骤之后,大多数默认边界框为负例,尤其是当可能的默认边界框数量较多时。这在正的训练实例和负的训练实例之间引入了显著的不平衡。我们不使用所有负例,而是使用每个默认边界框的最高置信度损失来排序他们,并挑选最高的置信度,以便负例和整理之间的比例至多为3:1,我们发现这会导致更快的优化和更稳定的训练。

数据增强:为了使模型对各种输入目标大小和形状更鲁棒,每张训练图像都是通过以下选项之一进行随机采样的:

  • 使用整个原始输入图像
  • 采样一个图像块,使得目标与目标之间的最小Jaccard 重叠为 0.1,0.3,0.5,0.7或 0.9
  • 随机采样一个图像块

  每个采样图像块的大小是原始图像大小的 [0.1, 1],长宽比在1/2 和 2之间。如果实际边界框的中心在采用的图像块中,我们保留实际边界框与采样图像块的重叠部分。在上述采样步骤之后,除了英语类似于文献【14】中描述的一些光度变形之外,将每个采样图像块调整到固定尺寸并以 0.5的概率进行水平翻转。

  采用数据扩增(Data Augmentation)可以提升SSD的性能,主要采用的技术有水平翻转(horizontal flip),随机裁剪加颜色扭曲(random crop & color distortion),随机采集块域(Randomly sample a patch)(获得小目标训练样本),如下图所示:

2.3  预测过程

  预测过程比较简单,对于每个预测框,首先根据类别置信度确定其类别(置信度最大者)与置信度值,并过滤属于背景的预测框。然后根据置信度阈值(如0.5)过滤掉阈值较低的预测框。对于留下的预测框进行解码,根据先验框得到其真实的位置参数(解码后一般还需要做clip,防止预测框位置超出图片)。解码之后,一般需要根据置信度进行降序排列,然后仅保留 top-k(如 400)个预测框。最后就是进行NMS算法,过滤掉哪些重叠度较大的预测框。最后剩余的预测框就是检测结果了。

3,实验结果

  基础网络:我们的实验全部基于VGG16【15】,它是在ILSVRC CLS-LOC 数据集【16】上预先训练的。类似于DeepLabLargeFOV【17】,我们将 fc6 和 fc7转换为卷积层,从 fc6 和 fc7中重采样参数,将 pool6 从 2*2 -S2 更改为 3*3-S1,并使用空洞算法【18】来填补这个“小洞”。我们删除所有的dropout层和 fc8层。我们使用 SGD对得到的模型进行微调,初始学习率为 10-3,动量为 0.9,权重衰减为 0.0005,批数据大小为 32。每个数据的学习速率衰减策略略有不同,我们将在后面详细描述。完整的训练和测试代码建立在Caffe【19】上并开源:https://github.com/weiliu89/caffe/tree/ssd

3.1  PASCAL VOC 2007

  在这个数据集上,我们在VOC 2007 test (4952张图像)上比较了Fast R-CNN【6】和Faster R-CNN【2】。所有的方法都在相同的预训练好的 VGG16网络上进行微调。

  图2 显示了SSD 300模型的架构细节,我们使用 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,在反向传播过程中学习尺度。对于 40K 次迭代,我们使用 10-3 的学习率,然后继续使用 10-4 和 10-5 的学习率训练 10k 迭代。当对VOC 2007 trainval 进行训练时,表1显示了我们的低分辨率 SSD 300模型已经被 Fast R-CNN更准确。当我们用更大的 512*512 输入图像上训练SSD时,它更加准确,超过了 Faster R-CNN 1.7%的mAP。如果我们用更多的(即07+12)数据来训练SSD,我们看到SSD300已经比Faster R-CNN好1.1%,SSD512比Faster R-CNN好3.6%。如果我们将SSD512用3.4节描述的COCO trainval35k来训练模型并在07+12数据集上进行微调,我们获得了最好的结果:81.6%的mAP。

  为了更详细的了解我们两个SSD模型的性能,我们使用了【21】中的检测分析工具。图3显示了SSD可以检测到高质量(大白色区域)的各种目标类别。它大部分的确信检测是正确的。召回约 85~90%,而“弱”(0.1 的 Jaccard 重叠)标准则要高得多。与R-CNN【22】相比,SSD具有更小的定位误差,表明SSD可以更好地定位目标,因为它直接学习回归目标形状和分类目标类别,而不是使用两个解耦步骤。然而,SSD对类似的目标类别(特别是对于动物)有更多的混淆,部分原因是我们共享多个类别的位置。图4显示SSD对边界框大小非常敏感。换句话说,它在较小目标上比较大目标上的性能要差很多。这并不奇怪,因为这些小目标甚至可能在顶层没有任何信息。增加输入尺寸(例如从300*300到 512*512)可以帮助改进检测小目标,但仍然有很大的改进空间。积极的一面,我们可以清楚地看到SSD在大型目标上的表现非常好。而且对于不同长宽比的目标,它是非常鲁棒的,因为我们使用每个特征映射位置的各种长宽比的默认框。

   表1:PASCAL VOC 2007测试检测结果。Fast 和 Faster R-CNN都使用最小维度为 600的输入图像。两个SSD模型使用完全相同的设置除了他们有不同的输入大小(300*300和 512*512)。很明显更大的输入尺寸会导致更好的结果,并且更大的数据同样有帮助。数据:“07”:VOC 2007 trainval,“07+12”:VOC 2007 和 VOC 2012trainval 的联合。“07+12 + COCO”:首先在COCO trainval 35k 上训练然后在 07+12 上微调。

  表2:各种设计选择和组件对SSD性能的影响。

3.2  模型分析

  为了更好地了解SSD,我们进行控制实验,以检查每个组件如何影响性能。对于所有的实验,我们使用相同的设置和输入大小(300*300),除了指定的设置或组件的更改。

数据增强至关重要:Fast 和 Faster R-CNN 使用原始图像和水平翻转来训练。我们使用更广泛的抽样策略,类似于YOLO【5】。从表2可以看出,采样策略可以提高 8.8%的mAP。我们不知道我们的采样策略将会使 Fast 和 Faster R-CNN 受益多少,但是他们可能从中受益较小,因为他们在分类过程中使用了一个特征池化步骤,这对通过设计的目标变换来说相对鲁棒。

更多的默认边界框形状会更好:如2.2节所述,默认情况下,我们每个位置使用 6个默认边界框。如果我们删除长宽比为 1/3 和 3的边界框,性能下降了 0.6%。通过进一步去除 1/2 和 2长宽比的盒子,性能再下降 2.1%。使用各种默认边界框形状似乎使网络预测边界框的任务更容易。

 Atrous更快:如第三节所述,我们根据DeepLab-LargeFOV[17],使用子采样的VGG16的空洞版本。如果我们使用完整的VGG16,保持 pool5为 2*2 -s2,并且不从 fc6和 fc7中子采样参数,并添加 conv5_3进行预测,结果大致相同,而速度慢了大约 20%。

多个不同分辨率的输出层更好: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.3 PASCAL VOC 2012

  除了我们使用 VOC 2012 trainval 和 VOC 2007 trainval ,test(21503张图像)进行训练,以及在VOC 2012 test(10991张图像)上进行测试之外,我们使用与上述基本的 VOC 2007实验相同的设置,我们用 10-3的学习率对模型进行 60K 次的迭代训练,然后使用 10-4的学习率进行 20K次迭代训练。表4显示了我们的SSD300和SSD512模型的结果,我们看到了与我们在 VOC 2007 test中观察到的相同的性能趋势。我们的 SSD 300比 Fast/Faster R-CNN提高了准确性。通过将训练和测试图像大小增加到 512*512,我们比 Faster R-CNN的准确率提高了 4.5%。与YOLO相比,SSD更精确,可能是由于使用了来自多个特征映射的额卷积默认边界框和我们在训练期间的匹配策略。当对从COCO上训练的模型进行微调后,我们的SSD 512达到了 80%的mAP,比Faster R-CNN 高了 4.1%。

   表4:PASCAL VOC 2012 test上的检测结果,Fast和Faster R-CNN 使用最小维度为 600的图像,而YOLO的图层大小为 448*448.数据:“07++12”:VOC 2007 trainval,test和VOC 2012 trainval。“07++12+COCO”:先在COCOtrainval 135k上训练然后在 07++12 上微调。

   为了进一步验证SSD框架,我们在COCO数据集上对SSD300和SSD512架构进行了训练。由于COCO中的目标往往比PASCAL VOC中的更小,因此我们对所有曾使用较小的默认边界框。我们遵循2.2节中提到的策略,但是现在我们最小的默认边界框尺度是 0.15 而不是 0.2,并且 conv4_3 上的默认边界框尺度是 0.07(例如:300*300 图像中的 21个像素)。

  我们使用 trainval135k 【24】进行训练。我们首先用 10-3 的学习率对模型进行训练,进行 160K 词迭代,然后继续以 10-4 和 10-5的学习率各进行 40K次迭代。表5显示了 test-dev 2015的结果,与我们在PASCAL VOC数据集中观察到的结果类似,SSD 300 在[email protected]和mAP@【0.5:0.95】中都由于Fast R-CNN。SSD 300与ION【24】和 Faster R-CNN【25】具有相似的 [email protected].有趣的是,我们观察到SSD512在[email protected]中要好 5.3%,但是在[email protected]中只好 1.2%。我们也观察到,对于大型目标,AP(4.8%)和AR(4.6%)的效果要好很多,但对于小目标,AP(1.3%)和AR(1.2%)有相对更少的改进。与ION相比,大型和小型目标的AR改进更为相似(5.4%和3.9%),我们推测 Faster R-CNN 在较小的目标上比SSD更具有竞争力,因为它在RPN部分和Fast R-CNN部分都执行了两个边界框细化步骤。在图5中,我们展示了SSD512模型在COCO test-dev 上的一些检测实例。

   表5:COCO test-dev 2015 检测结果

3.5  初步的 ILSVRC 结果

  我们将在COCO上应用的相同网络架构应用于ILSVRC DET数据集【16】。我们使用【22】中使用的ILSVRC 2014 train和val 1来训练SSD 300模型。我们首先用 10-3 的学习率对模型进行训练,进行了 320K次的迭代,然后以 10-4继续迭代 80k次,以 10-5迭代 40K次。我们可以在 val2 数据集上【22】实现 43.4 mAP。再一次证明了SSD是用于高质量实时检测的通用架构。

3.6 小目标精度的数据增强

   SSD没有如Faster R-CNN中后续的特征重采样步骤,小目标的分类任务对SSD来说相对困难,正如我们的分析(见图4)所示。2.2描述的数据增强有助于显著提升性能,特别是在PASCAL VOC等小数据集上。策略产生的随机裁剪可以被认为是“放大”操作,并且可以产生许多更大的训练样本。为了实现创建更多小型训练样本的“缩小”操作,我们首先将图像随机放置在填充了平均值的原始图像大小为 16x 的画布上,然后再进行任意的随机裁剪操作。因为通过引入这个新的“扩展”数据增强技巧,我们有更多的训练图像,所以我们必须将训练迭代次数加倍。我们已经在多个数据集上看到了一致的 2%~3%的mAP增长,如表6所示。具体来说,图6显示新的增强技巧显著提高了模型在小目标上的性能。这个结果强调了数据增强策略对最终模型精度的重要性。

  改进SSD的另一种方法是设计一个更好的默认边界框平铺,使其位置和尺度与特征映射上每个位置的感受野更好的对齐。我们将这个工作留给未来。

   表6:我们使用突出扩展数据增强技巧在多个数据集上的结果。SSD300*和SSD512*是用新的数据增强训练的模型。

   图6:具有新的数据增强的目标尺寸在【21】中使用的VOC 2007 test数据集上灵敏度及影响。最上面一行显示了原始SSD300和SSD512模型上每个类别的 BBox面积的影响,最下面一行对应使用新的数据增强训练技巧的SSd300*和 SSD 512*模型。新的数据增强技巧显然有助于显著检测小目标。

3.7 推断时间

  考虑到我们的方法产生大量边界框,在推断机器执行非极大值抑制(NMS)是必要的。通过使用 0.01 的置信度阈值,我们可以过滤大部分边界框。然后,我们应用NMS,每个类别 0.45的 Jaccard重叠,并保留每张图像的前 200个检测。对于SSD 300和20个VOC类别,这个步骤每张图像花费大约 1.7毫秒,接近在所有新增层上花费的总时间(2.4毫秒)。我们使用 Titan X,cuDNN v4,Intel Xeon [email protected]以及批大小为 8来测量速度。

  表7显示了SSD,Faster R-CNN【2】和YOLO【5】之间的比较。我们的SSD 300和 SSD512的速度和精度均优于 Faster R-CNN。虽然Fast YOLO【5】可以让 155PFS的速度运行,但其准确性却降低了近22%的mAP。就我们所知,SSD 300是第一个实现 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】。

    表7:PASCAL VOC 2007 test的结果。SSD 300是唯一可以取得 70%以上mAP的实现检测方法。通过使用更大的输入图像,SSD512在精度上超过了所有方法同时保持近似实时的速度。

5,结论

  本文介绍了SSD,一种快速的单次多类别目标检测器。我们模型的一个关键特征是使用多个特征映射的多尺度卷积边界框输出。这种表示使我们能够高效的建模可能的边界框形状空间。我们通过实验验证,在给定合适训练策略的情况下,大量仔细选择的默认边界框会提高性能。我们构建的SSD模型比现有的方法至少要多一个数量级的边界框预测采样位置,尺度和长宽比【5, 7】。我们证明了给定相同的VGG-16基础架构,SSD在准确性和速度方面与其对应的最先进的而目标检测器相比毫不逊色。在PASCAL VOC 和COCO上,我们的SSD512模型的性能明显优于最先进的 Faster R-CNN【2】,而速度提高了3倍。我们的实时SSD 300模型允许速度为 59fps,比目前的实时YOLO【5】更快,同时显著提高了检测精度。

  除了单独使用之外,我们相信我们的整体和相对简单的SSD模型为采用目标检测组件的大型系统提高了有用的构建模块。一个有前景的未来方向是探索它作为系统的一部分,使用循环神经网络来同时检测和跟踪视频中的目标。

   图3:SSD 512 在VOC 2007 test中的动物,车辆和家具上的性能可视化。第一行显示由于定位不佳(loc),与相识类别(Sim)混淆,与其他(Oth)或背景(BG)相关的正确检测(Cor)或假阳性的累积分数。红色的实现表明随着检测次数的增加,强标准(0.5  Jaccard 重叠)下的召回变化。红色虚线是使用弱标准(0.1 Jaccard重叠)。最下面一行显示了排名靠前的假阳性类型的分布。

   图4:使用【21】在VOC 2007 test 设置上不同目标特征的灵敏度和影响。左边的图显示了BBox面积对每个类别的影响。右边的图显示了长宽比的影响。关键:BBox区域:Xs=超小;S=小;M=中等;L=大;XL=超大。长宽比:XT=超高/窄;T=高;M=中等;W=宽;XW=超宽。

   图5:SSD512模型在COCO test-dev上的检测实例。我们展示了分数高于 0.6的检测。每一种颜色对应一个目标类别。

;