SSD 论文详解

SSD: Single Shot MultiBox Detector (ECCV 2016)

声明:笔者翻译论文仅为学习研究,如有侵权请联系作者删除博文,谢谢

源论文地址:https://arxiv.org/abs/1512.02325
源论文代码:https://github.com/weiliu89/caffe/tree/ssd

笔者践行代码:【tensorflow版本正在整理中~】

:文字中标粗和亮色的部分为笔者认为有创新改进余地和需要注意的地方,灰色背景部分为笔者的一些想法。因水平所限,部分笔触可能有不实和错误之处,敬请广大读者批评指正,让我们一起进步~

-----------------------------------------------------------------------------------------------------------------------------------------

摘要

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

SSD 将输出一系列 离散化(discretization) 的 bounding boxes,这些 bounding boxes 是在不同层次(layers)上的 feature maps 上生成的,并且有着不同的 aspect ratio。

在 prediction 阶段:要计算出每一个 default box 中的物体其属于每个类别的可能性,即 score。如对于PASCAL VOC 数据集,总共有 20 类,那么得出每一个 bounding box 中物体属于这 20 个类别的每一种的可能性得分。同时,要对这些 bounding boxes的 shape 进行微调,以使得其匹配目标物体的形状。还有就是,为了处理相同物体的不同尺寸的情况,SSD 结合了不同分辨率的 feature maps 的 predictions。

SSD 的简单是相对于 Faster R-CNN 来说的,前者生成默认框(也就是锚点框)后微调位置并直接具体分类,而后者在生成锚点并初次分类和回归位置后,得到 proposal 层,再进行 ROI Pooling。特征重采样成 7×7 像素,进行二次分类回归

1. 引言

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

现在的目标检测网络大多依然是:先生成一些假设的 bounding boxes(可以理解为锚点框),然后在这些 bounding boxes 中提取特征(或者先提取特征以后,再在特征图中假设 bboxes),之后再经过一个分类器,来判断里面是不是物体,是什么物体。

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

我们总结我们的贡献如下:

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

SSD 核心思想:Our improvements include using a small convolutional filter to predict object categories and offsets in bounding box locations, using separate predictors (filters) for different aspect ratio detections, and applying these filters to multiple feature maps from the later stages of a network in order to perform detection at multiple scales.

2. 单次检测器(SSD)

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

2.1 模型

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

这里与跟 YOLO / Faster R-CNN 一样,都是先用基础网络提取特征,然后添加些辅助结构进行关键特征的检测

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

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

FPN 论文中原话:SSD 方法在借鉴利用 featurized image pyramid上很是值得说,为了避免利用太低层的特征,SSD从偏后的 conv4_3 开始,又往后加了几层,分别抽取每层特征,进行综合利用。但是SSD对于高分辨率的底层特征没有再利用,而这些层对于检测小目标很重要。
在这里插入图片描述

       用于检测的卷积预测器每个添加的特征层(或者任选的来自基础网络的现有特征层)可以使用一组卷积滤波器产生固定的预测集合。这些在图2上部中的 SSD 网络架构指出。对于具有 p 通道的大小为 m×n 的特征层,使用的卷积滤波器是 3×3×p 的卷积核,可以得到归属类别的分数,或者相对于默认框坐标的shape偏移。在每一个 m×n 的 feature map 位置上,使用上面的 3×3 的卷积核,它会产生一个输出值。边界框偏移输出值是相对每个 feature map 位置的相对默认框位置来度量的(查阅 YOLO[5] 的架构,该步骤使用中间全连接层而不是卷积滤波器)。
       默认边界框和长宽比对于网络顶部的多个 feature map cells,我们将一组默认边界框与每个 feature map cell 相关联。默认边界框以卷积的方式平铺 feature map,以便每个边界框相对于其对应 cell 的位置是固定的。在每个 feature map cell 中,我们预测 cell 中相对于默认边界框形状的偏移量,以及指出每个边界框中存在的每个类别实例的类别分数。具体而言,对于给定位置处的 k 个边界框中的每一个,我们计算 c 个类别分数和相对于原始默认边界框形状的 4 个偏移量。这导致在 feature map 中的每个 cell 使用总共 (c+4)×k 个滤波器,对于 m×n 的 feature map 取得 (c+4)×k×m×n 个输出。有关默认边界框的说明,请参见图1。我们的默认边界框与 Faster R-CNN[2] 中使用的锚点框相似,但是我们将它们应用到不同分辨率的几个 feature map 上。在几个 feature map 中允许不同的默认边界框形状让我们有效地离散可能的输出框形状的空间。
在这里插入图片描述
图1:SSD框架。(a)在训练期间,SSD仅需要每个目标的输入图像和真实边界框。我们用卷积的方式评估具有不同尺度(例如(b)和(c)中的 8×8 和 4×4)的几个 feature maps 中每个位置处不同长宽比的默认框的小集合(例如4个)。对于每个默认边界框,我们预测所有目标类别((c1,c2,…,cp))的形状偏移量和置信度。在训练时,我们首先将这些默认边界框与实际的边界框进行匹配。例如,我们已经给猫匹配了两个默认边界框,与狗匹配了一个,这被视为积极的,其余的是消极的。模型损失是定位损失(例如,Smooth L1[6])和置信度损失(例如 Softmax)之间的加权和

feature map cell 就是将 feature map 切分成 8×8 或者 4×4之后的一个个格子;
default box 就是每一个格子上,一系列固定大小的 box,即图中虚线所形成的一系列 boxes。

SSD总结起来:就是先用基础网络提取特征,然后将多个尺度的特征图进行网格划分,每个特征图的网格里划分出x个默认框(锚点框),并对默认框预测目标类别和置信度以及与实际边界框进行偏移量匹配,再经过NMS后得到预测框

这就是Faster r-cnn和yolo v1的结合。 前者的锚点框机制 + 前者的实际框偏移计算 + 后者的网格化预测5个点(即直接分类回归,检测问题转化为回归问题。)然后 ssd 用的多尺度输出,被 FPN 升级后,又在 yolo v3 中被改进使用

2.2 训练

       训练SSD和训练使用 region proposal + pooling 的典型检测器之间的关键区别在于,SSD 训练图像中的 ground truth 需要赋予到那些固定输出的 boxes 上。在YOLO[5]的训练中、Faster R-CNN[2]和MultiBox[7]的region proposal阶段,一些版本也需要这样的操作。当这种将训练图像中的 groundtruth 与固定输出的 boxes 对应之后,就可以 end-to-end 的进行 loss function 的计算以及 back-propagation 的计算更新了。训练也涉及选择默认边界框集合和缩放检测,以及难例挖掘和数据增强策略。
       下面谈本文解决这些问题的方式,分为下面的几个部分。

在前面也已经提到了,SSD 输出的是事先定义好的,一系列固定大小的 bounding boxes。如图1中,狗狗的 ground truth 是红色的 bounding boxes,但进行 label 标注的时候,要将红色的 groundtruth box 赋予 图(c)中一系列固定输出的 boxes 中的一个,即 图(c)中的红色虚线框。

匹配策略

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

注:Jaccard重叠即IoU。

训练目标函数

       SSD 训练目标函数来自于 MultiBox 目标[7,8],但扩展到处理多个目标类别。xpij=1 表示 第 i 个 default box 与 类别 p 的 第 j 个 ground truth box 相匹配,否则若不匹配的话,则 xpij=0。根据上面的匹配策略,一定有 ∑ixpij≥1,意味着对于 第 j 个 ground truth box,有可能有多个 default box 与其相匹配。
       总体目标损失函数是定位损失(loc)和置信度损失(conf)的加权和
在这里插入图片描述
       其中N是匹配的默认边界框的数量。如果N=0,则将损失设为0。定位损失是预测框(l)与真实框(g)参数之间的Smooth L1损失[6]。类似于Faster R-CNN[2],我们回归默认边界框(d)的中心偏移量(cx,cy)和其宽度(w)、高度(h)的偏移量
在这里插入图片描述
       置信度损失conf是在多类别置信度©上的softmax损失。

在这里插入图片描述
       通过交叉验证权重项α设为1。

定位损失 loc 像 Faster R-CNN 中的一样,也是三个框,默认框d(锚点框)、预测框l 和真实框g。其中 g 与 d 相关联,首先用 g 和 d 的关系算出偏移量 g~ ,然后将 g~ 代入,构成 l 与 g~ 的Smooth L1损失。(具体见 Faster R-CNN 相关部分)
在这里插入图片描述

为默认边界框选择尺度和长宽比

       为了处理不同的目标尺度,一些方法[4,9]建议处理不同尺寸的图像,然后将结果合并。然而,通过利用单个网络中几个不同层的feature map进行预测,我们可以模拟相同的效果,同时还可以跨所有目标尺度共享参数。以前的工作[10,11]已经表明,使用低层的特征映射可以提高语义分割的质量,因为低层会捕获输入目标的更多细节。同样,[12]表明,从feature map上添加全局上下文池化可以有助于平滑分割结果。受这些方法的启发,我们使用较低和较高的feature map进行检测。图1显示了框架中使用的两个示例性feature map(8×8和4×4)。在实践中,我们可以使用更多的具有很少计算开支的feature map。
       已知网络中不同层的feature map具有不同的(经验的)感受野大小[13]。幸运的是,在SSD框架内,默认边界框不需要对应于每层的实际感受野。我们设计平铺默认边界框,以便特定的feature map学习相应目标的特定尺度。假设我们要使用 m 个 feature map 进行预测。每个 feature map 默认边界框的尺度计算如下:

在这里插入图片描述

在这里插入图片描述

哈哈哈哈,原谅我偷个小懒,这些公式打上去有点麻烦 ~ 。~

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

一般来说,一个 CNN 网络中不同的 layers 有着不同尺寸的 感受野(receptive fields)。这里的感受野,指的是输出的 feature map 上的一个节点,其对应输入图像上尺寸的大小
具体的感受野的计算,参见两篇 blog:
http://blog.csdn.net/kuaitoukid/article/details/46829355
http://blog.cvmarcher.com/posts/2015/05/17/cnn-trick/

难例挖掘

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

数据增强

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

  • 使用整个原始输入图像。
  • 采样一个图像块,使得与目标之间的最小Jaccard重叠为0.1,0.3,0.5,0.7或0.9。
  • 随机采样一个图像块。每个采样图像块的大小是原始图像大小的 [0.1,1],长宽比在12和2之间。如果实际边界框的中心在采用的图像块中,我们保留实际边界框与采样图像块的重叠部分。在上述采样步骤之后,除了应用类似于文献[14]中描述的一些光度变形之外,将每个采样图像块调整到固定尺寸并以0.5的概率进行水平翻转。

关于数据增广,推荐一篇文章:Must Know Tips/Tricks in Deep Neural Networks,其中的 section 1 就讲了 data augmentation 技术。

3. 实验结果

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

3.1 PASCAL VOC2007

       在这个数据集上,我们在VOC2007 test(4952张图像)上比较了Fast R-CNN[6]和Faster R-CNN[2]。所有的方法都在相同的预训练好的VGG16网络上进行微调。
在这里插入图片描述表1:PASCAL VOC2007 test检测结果。Fast和Faster R-CNN都使用最小维度为600的输入图像。两个SSD模型除了输入大小不同(300×300和512×512),其余使用完全相同的设置。很明显更大的输入尺寸会导致更好的结果,并且更大的数据同样有帮助。数据:“07”:VOC2007 trainval,“07+12”:VOC2007和VOC2012 trainval的联合。“07+12+COCO”:首先在COCO trainval35k上训练然后在07+12上微调。

在这里插入图片描述
图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,我们只在每个feature map位置上关联了4个默认边界框——忽略1/3和3的长宽比。对于所有其它层,我们像2.2节描述的那样放置了6个默认边界框。如[12]所指出的,与其它层相比,由于conv4_3具有不同的特征尺度,所以我们使用[12]中引入的L2正则化技术将feature map中每个位置的特征标准缩放到20,在反向传播过程中学习尺度。对于40k次迭代,我们使用103的学习率,然后继续用104和105的学习率训练10k迭代。当对VOC2007 trainval进行训练时,表1显示了我们的低分辨率SSD300模型已经比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。

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

在这里插入图片描述
图4:使用[21]在VOC2007 test设置上不同目标特性的灵敏度和影响。左边的图显示了bbox面积对每个类别的影响,右边的图显示了长宽比的影响。关键:bbox区域:XS=超小;S=小;M=中等;L=大;XL=超大。长宽比:XT=超高/窄;T=高;M=中等;W=宽;XW =超宽。

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

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更快

       如第3节所述,我们根据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]中使用这个策略,忽略在边界上的边界框。我们观察到了一些有趣的趋势。例如,如果我们使用非常粗糙的feature map(例如conv11_2(1×1)或conv10_2(3×3)),它会大大伤害性能。原因可能是修剪后我们没有足够大的边界框来覆盖大的目标。当我们主要使用更高分辨率的feature map时,性能开始再次上升,因为即使在修剪之后仍然有足够数量的大边界框。如果我们只使用conv7进行预测,那么性能是最糟糕的,这就强化了在不同层上扩展不同尺度的边界框是非常关键的信息。此外,由于我们的预测不像[6]那样依赖于ROI pooling,所以我们在低分辨率feature map中没有折叠组块的问题[23]。SSD架构将来自各种分辨率的feature map的预测结合起来,以达到与Faster R-CNN相当的精确度,同时使用较低分辨率的输入图像。

3.3 PASCAL VOC2012

在这里插入图片描述表4: PASCAL VOC2012 test上的检测结果. Fast和Faster R-CNN使用最小维度为600的图像,而YOLO的图像大小为448× 48。数据:“07++12”:VOC2007 trainval,test和VOC2012 trainval。“07++12+COCO”:先在COCO trainval135k上训练然后在07++12上微调。

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

3.4 COCO

在这里插入图片描述
       为了进一步验证SSD框架,我们在COCO数据集上对SSD300和SSD512架构进行了训练。由于COCO中的目标往往比PASCAL VOC中的更小,因此我们对所有层使用较小的默认边界框。我们遵循2.2节中提到的策略,但是现在我们最小的默认边界框尺度是0.15而不是0.2,并且conv4_3上的默认边界框尺度是0.07(例如,300×300图像中的21个像素)。
       我们使用trainval35k[24]进行训练。我们首先用103的学习率对模型进行训练,进行160k次迭代,然后继续以104和105的学习率各进行40k次迭代。表5显示了test-dev2015的结果。与我们在PASCAL VOC数据集中观察到的结果类似,SSD300在[email protected]和mAP@[0.5:0.95]中都优于Fast R-CNN。SSD300与ION 24]和Faster R-CNN[25]具有相似的[email protected],但是[email protected]更差。通过将图像尺寸增加到512×512,我们的SSD512在这两个标准中都优于Faster R-CNN[25]。有趣的是,我们观察到SSD512在[email protected]中要好5.3%,但是在[email protected]中只好1.2%。我们也观察到,对于大型目标,AP(4.8%)和AR(4.6%)的效果要好得多,但对于小目标,AP(1.3%)和AR(2.0%)有相对更少的改进。与ION相比,大型和小型目标的AR改进更为相似(5.4%和3.9%)。我们推测Faster R-CNN在较小的目标上比SSD更具竞争力,因为它在RPN部分和Fast R-CNN部分都执行了两个边界框细化步骤。在图5(展示图片,未放)中,我们展示了SSD512模型在COCO test-dev上的一些检测实例。

3.5 初步的ILSVRC结果

       我们将在COCO上应用的相同网络架构应用于ILSVRC DET数据集[16]。我们使用[22]中使用的ILSVRC2014 DETtrain和val1来训练SSD300模型。我们首先用103的学习率对模型进行训练,进行了320k次的迭代,然后以104继续迭代80k次,以105迭代40k次。我们可以在val2数据集上[22]实现43.4 mAP。再一次证明了SSD是用于高质量实时检测的通用框架。

3.6 为小目标准确率进行数据增强

在这里插入图片描述表6:我们使用图像扩展数据增强技巧在多个数据集上的结果。SSD300∗和SSD512∗是用新的数据增强训练的模型。
在这里插入图片描述图6:具有新的数据增强的目标尺寸在[21]中使用的VOC2007test数据集上灵敏度及影响。最上一行显示了原始SSD300和SSD512模型上每个类别的BBox面积的影响,最下面一行对应使用新的数据增强训练技巧的SSD300∗和SSD512∗模型。新的数据增强技巧显然有助于显著检测小目标。

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

3.7 推断时间

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

在这里插入图片描述
       表7显示了SSD,Faster R-CNN[2]和YOLO[5]之间的比较。我们的SSD300和SSD512的速度和精度均优于Faster R-CNN。虽然Fast YOLO[5]可以以155FPS的速度运行,但其准确性却降低了近22%的mAP。就我们所知,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合并的复杂性,并且更容易训练,更快且更直接地集成到其它任务中。
       与我们的方法直接相关的另一组方法,完全跳过region proposal步骤,直接预测多个类别的边界框和置信度。OverFeat[4]是滑动窗口方法的深度版本,在知道了底层目标类别的置信度之后,直接从最顶层的feature map的每个位置预测边界框。YOLO[5]使用整个最顶层的feature map来预测多个类别和边界框(这些类别共享)的置信度。我们的SSD方法属于这一类,因为我们没有region proposal,但使用默认边界框。然而,我们的方法比现有方法更灵活,因为我们可以在不同尺度的多个特征映射的每个特征位置上使用不同长宽比的默认边界框。如果我们只从最顶层的feature map的每个位置使用一个默认框,我们的SSD将具有与OverFeat[4]相似的架构;如果我们使用整个最顶层的特征映射,并添加一个全连接层进行预测来代替我们的卷积预测器,并且没有明确地考虑多个长宽比,我们可以近似地再现YOLO[5]。

5. 结论

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

-----------------------------------------------------------------------------------------------------------------------------------------

PS:

SSD值得学习的地方

SSD的主要贡献是在不同的输出层上使用不同尺度的默认边界框进行类别分数预测和边界框偏移定位

  • 吸纳了yolo和faster rcnn的优势(锚点和分块直接检测)
  • 数据增强用了抽样策略。(需要实验+别的方法可以用)

可能会更好的地方:

  • ssd增加更多的默认边界框形状会更好。(需要实验,根据检测物调整)
  • ssd增加更多的不同分辨率输出层会更好。(需要实验+与FPN结合)
  • 改变基础网络VGG16
  • 可以更好地定位目标,但对于类似的目标类别(特别是对于动物)有更多的混淆,部分原因是我们共享多个类别的位置
  • 在小目标的检测上差很多
  • 改进SSD的另一种方法是设计一个更好的默认边界框平铺,使其位置和尺度与feature map上每个位置的感受野更好地对齐。

借鉴资料:
https://blog.csdn.net/u010167269/article/details/52563573
Must Know Tips/Tricks in Deep Neural Networks

发布了10 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/dexterod/article/details/104825742
ssd
今日推荐