版权声明:本文为博主原创文章,未经博主允许不得转载。
论文原文:SSD
title:《SSD: Single Shot MultiBox Detector》
author:Wei Liu1, Dragomir Anguelov2, Dumitru Erhan3, Christian Szegedy3Scott Reed4, Cheng-Yang Fu1, Alexander C.
Abstract.我们提出了一个用于图片中检测目标的新方法,这个方法只需要 a single deep neural network.方法取名为SSD,SSD在每一个feature map的位置上将输出空间的bounding box 离散化成一系列默认的不同横纵比和尺度的boxs。在预测的时候,网络在默认box中生成每一个object类别的分数,调节box使其更好的匹配object的形状。而且为了处理各种大小的object,网络结合了不同分辨率的各特征图。SSD相对于需要目标区域的方法来说更为简单,因为它完全消除了区域生成和随后像素或特征的重采样步骤并且将所有的计算压缩到单个网络中。这使得SSD更容易训练,并且能直接集成到需要检测成分的系统中。PASCAL
VOC, COCO, 和ILSVRC数据集上的实验结果证实当提供一个统一的用于训练和推理的框架时,SSD相比于那些利用额外的目标区域步骤的方法精度更高也更快。
1 Introduction.当前最先进的目标检测系统都是以下方法的变种:假设bounding box,对每一个box重采样像素或者特征,利用一个高质量的分类器。这种方法在目标检测中已经十分流行。但是现在这种方法对于嵌入式系统来说计算量太复杂,对于需要实时的设备来说太慢。这些检测方法的检测速度通常用秒每帧(SPF)来度量,即使现在最高精度的Faster R-CNN,也只能达到7帧每秒。在构建更快的检测器有很多尝试,,但是到目前为止,加快速度的最重要的方法还是基于减少检测精度。这篇paper提出了第一个基于目标检测器的网络,这个网络不需要为bounding box 假设对像素或特征重采样并且这是一个精度很高的方法。SSD提速的根本原因是消除bounding box 候选区和随后的像素或重采样步骤。通过一系列的提升,我们相较于以前的尝试明显的提升了精度。我们的提升方法包括:对object分类使用小卷积滤波,使用bounding box 位置的偏置,对不同横纵比的检测物使用不同的预测器,然后将这些滤波器应用到不同的特征图,这是为了适应不同大小的检测。这些修改-尤其是预测不同尺度使用multi layer-我们在相对低分辨率的输入上取得了高精度和速度。
这篇paper的contribution总结如下:
---介绍SSD比之前最先进的YOLO更快,并且精度更高,事实上准确率跟慢速的直接使用候选区域和池化的技术(比如Faster R-CNN)一样好。
---SSD的核心是用小的卷积滤波为一系列默认的bounding box预测类别的分数和box偏置。
---为了达到高的预测精度,我们用来自不同尺度的特征图的不同规模的预测,通过横纵比划分。
---这些设计特征产生了一个端到端的训练和极高精度,即使在低分辨率的输入图像中,即提高了速度又提高了精度。
---实验包括对各种size的输入的模型的时间和精度分析,训练集选择有 PASCAL VOC, COCO, 和 ILSVRC,并且和最近最先进的方法做了比较。
2 The Single Shot Detector (SSD),这个部分描述我们提出的SSD检测框架(Sec. 2.1)和相关训练方法 (Sec. 2.2).然后 Sec. 3展示了具体数据集上的模型细节和实验结果。
Fig. 1::SSD框架。a)在训练时SSD只需要一个输入图像和ground truth,在卷积的方式下,在多个不同尺度的特征图上,对于每一个位置,我们估计了一个小的不同横纵比的默认集合框(例如8*8和4*4如 b),c)),对每一个默认box,我们预测形状的偏置和所有种类(c1,c2......cp)的置信度。在训练时我们首先将这些默认box和ground truth匹配。例如我们给猫匹配两个默认box,给狗子匹配一个box,这些框都被认为是正样本,剩下的是负样本。模型的loss是定位loss和置信度loss的加权和。
2.1 Model.SSD方法是基于一个前向卷积网络,这个网络产生一个固定大小的bouding box集合和其对应框出现object实例的分数,随后采用一个非极大抑制产生最后的检测结果,早期的网络基于一个用于高质量图像分类的结构(截去了分类层),然后我们添加了附加的结构到网络里,产生带有下列关键特征的检测:
用于检测的多尺度特征图 ,我们添加了一个卷积层在被截断的网络的后面,这些层在尺度上逐渐减小,允许在多尺度上预测。这个为预测检测的卷积模型不同于每个特征层(overfeat和YOLO都在一个单独的特征图上操作)
用于检测的卷积预测器,每一个添加的特征层(或者随意来自基本网络的已经存在的特征层)可以使用一组卷积滤波器来产生一组固定的检测预测。这些已经在SSD网络结构的顶端指明,见 Fig. 2.对于p个通道m*n的特征层,一个预测参数的基本元素是一个3*3*p的小卷积核,它可以产生一个分数,这个分数是关于类别或者默认框坐标的偏置。在每一个m*n的位置,当应用一个卷积核的时候产生一个输出值。边界框的偏移输出值是相对于默认框,而边界框的位置是相对于每个特征图的位置,(参见YOLO的结构,YOLO使用一个全连接层而不是该步骤的卷积滤波器)。
Fig. 2:一个关于两个单次检测器的比较:SSD和YOLO,我们的SSD模型在基本网络上添加了几个特征层,这些层预测不同尺度和横纵比的默认框的偏移和置信度。
默认框和横纵比,我们将一组默认的边界框和顶层网络多个特征图单元关联起来,默认框以卷积的形式在特征层的后面连接,因此每个框的位置相对于它对应的单元来说是固定的。在每个特征映射单元,我们预测了单元内相对于默认框形状饿偏移,还有对每个框,指示每个类别存在的分数。特别的在一个给定的位置,对于k个框中的每一个框,我们计算c个类别的分数和关于原始默认框形状的4个偏移,这将会在特征图上的每一个位置应用一共(c+4)*k个滤波器,对于一个m*n的特侦图产生(c+4)*k*m*n个输出。请参考图1.我们的默认框与在Faster R-CNN中应用的锚点框很相似,但是我们将它们应用于不同分辨率的多个特征图。允许在不同特征图上的默认box形状使得我们更加高效的离散化可能输出的边框形状的空间。
2.2 Training
训练SSD和训练一个用候选区的检测器最关键的区别是ground truth需要被指定到检测器一组固定输出的某一特定输出。一旦这个指定被确定,损失函数和反向传播将被应用于端到端训练,训练也涉及到选择一组默认框和其大小,还有困难负样本挖掘(hard negative mining)和数据增强策略。
匹配策略 在训练时我们需要确定默认框和ground truth 的对应关系,然后训练这个相应的网络。对于每一个ground truth 框,我们选择来自不同位置,不同横纵比和尺度的默认框。我们刚开始使用jaccard重叠率(比如在MultiBox中)来为每一个ground truth 和默认框做匹配。与 MultiBox不同,我们接着使用高于阈值0.5的jaccard来为ground truth框匹配默认框。这简化了学习问题,时网络在有多个默认的重叠框的时候预测更高的分数,而不仅仅是选择有最大重叠率的box。
训练目标 SS的训练目标是离散来源于 MultiBox的目标,但是被扩展为处理多目标分类任务,设置为一个匹配类别p第i个默认box和第j个ground truth 的框的指示器。在上述的匹配策略中我们有,总的目标损失函数是定位loss(loc)和置信度loss(conf)的加权和:,N是匹配的默认框的数量。如果N=0,我们就设loss=0.这个定位loss是一个介于预测框(l)和ground truth框(g)之间的Smooth L1 loss,类似于Faster R-CNN,我们为默认框(d)回归它的中心(cx,cy)和宽度(w)和高度(h)的偏差。
置信度loss是多类别的置信度(c)的softmax损失
其中权重项a在交叉验证的时候设置为1.
选择默认框的尺寸和横纵比 为了处理不同的目标尺寸,一些方法提出用不同的大小并且结合之后的结果来处理。然而,通过利用在一个单一网络里来自不同层的特征图来预测我们可以模仿相同的结果。同时在所有目标尺度之间共享参数,之前的一个研究表明使用来自低层的特征能够提高语义分割质量,因为低层特征能捕捉到输入目标更多细节的信息。[12]表明增加一个来自特征图的全局语义池化能够帮助平滑分割的结果,受这些方法的启发,我们为检测联合使用来自高层和低层的特征图。图1.展示了用于网络结构里面的两个示例特征图(8*8和4*4)。事实上,我们可以使用更多计算量小的特征图。一般来说,同一个网络里面来自不同层的特征图有不同的感受野大小。幸运的是,在SSD框架下,默认框不需要对应于每层的实际感受野,我们设计默认框的结构,使得特定的特征图学习对特定尺寸的目标做出响应。假设我们为预测使用了m个特征图,每一个特征图的默认框的尺寸按此方式计算:,smin是0.2,smax是0.9,意味着最低层的尺寸是0.2,最高层的尺寸是0.9,且其中所有的层是规则间隔的,我们给默认框加上不同的横纵比,将他们表示为{1,2,3,1/2,1/3},我们能计算每一个默认框的宽度和高度。对于横纵比为1,我们还添加了一个默认框,他的尺寸是:,每一个特征图的位置产生6个默认框,我们将每个默认框的中心设置为:,其中|fk|是第k个矩形框的大小,,事实上,我们也能设计默认框的分布使其最适合某一个具体的数据集,通过组合许多特征图在所有位置的不同尺寸和横纵比的所有默认框的预测,我们具有多样化的预测集合,覆盖各种输入object的大小和形状。比如在图1中,狗子的匹配的默认框是4*4的特征图而不是8*8d的特征图,这是因为这些框有不同的大小并不匹配狗子的框,因此在预测时被认为时负样本。
Hard negative mining 在匹配步骤之后,大多数的默认框都是负样本,尤其当默认框的数量很大的时候,这显示了一种训练时正负样本量的严重不平衡。我们不使用所有的负样本,我们给每一个默认框用置信度loss排序,并选择前面的那些,使得正负样本之比最多为3:1,我们发现这个比例将导致更快的优化和更稳定的训练。
数据增广 为了使模型对不同大小和形状输入的图像具有更高的鲁棒性,每个训练图像都通过一下选项之一随机采样:
---使用原始的全图作为输入
---采样一个patch,使object最小的jaccard重叠率最小为:0.1,0.3,0.5,0.7,0.9.
---随机的采样一个patch
每一个采样的patch的大小是原图的【0.1,1】倍,横纵比在1/2到2之间,如果ground truth的中心在采样框内,则保持重叠部分。在上述采样步骤之后,将每个采样patch大小调整为固定大小,并以0.5的概率水平翻转。
基础网络 我们的实验都基于VGG6,,将其在 ILSVRC CLS-LOC数据集上预训练,我们将fc6和fc7转换为卷积层,下采样的参数从fc6和fc7中获得,将pool5从2*2——s2转换为3*3——s1,并使用atrous算法填“洞”。我们删除了所有的dropout层和fc8层,使用SGD对这个模型进行fine-tune,初始学习率 ,0.9 momentum, 0.0005 weight decay, batch大小32。每个数据集的学习速率衰减策略略有不同,稍后我们将描述详细信息。所有训练和测试代码在caffe框架编写,开源地址:https://github.com/weiliu89/caffe/tree/ssd
3.1 PASCAL VOC2007
在这个数据集上,我们比较了Fast R-CNN [6]和Faster R-CNN [2]。所有方法使用相同的训练数据和预训练的VGG16网络。特别地,我们在VOC2007train val和VOC2012 train val(16551images)上训练,在VOC2007(4952图像)测试。
图2显示了SSD300模型的架构细节。我们使用conv4_3,conv7(fc7),conv8_2,conv9_2,conv10_2和pool11来预测位置和置信度(对SSD500模型,额外增加了conv11_2用于预测),用“xavier”方法初始化所有新添加的卷积层的参数[18]。由于conv4_3的大小较大(38×38),因此我们只在其上放置3个默认框 :一个0.1比例的框和另外纵横比为1/2和2的框。对于所有其他层,我们设置6个默认框,如第 2.2节。如[12]中所指出的,由于conv4_3与其他层相比具有不同的特征尺度,我们使用[12]中引入的L2正则化技术,将特征图中每个位置处的特征范数缩放为20,并在反向传播期间学习比例。我们使用 学习速率进行40k次迭代,然后将其衰减到 ,并继续训练另外20k次迭代。表1显示,我们的SSD300模型已经比Fast R-CNN更准确。当以更大的500×500输入图像训练SSD,结果更准确,甚至惊人的超过了Faster R-CNN 1.9% mAP。
为了更详细地了解我们的两个SSD模型的性能,我们使用了来自[19]的检测分析工具。图3显示SSD可以高质量检测(大、白色区域)各种对象类别。它的大部分置信度高的检测是正确的。召回率在85-90%左右,并且比“弱”(0.1 jaccard重叠)标准高得多。与R-CNN [20]相比,SSD具有较少的定位误差,表明SSD可以更好地定位对象,因为它直接回归对象形状和分类对象类别,而不是使用两个去耦步骤。然而,SSD对相似对象类别(尤其是动物)有更多的混淆,部分是因为多个类别分享了位置。
Table 1: PASCAL VOC2007 test detection results. Fast和Faster R-CNN输入图像最小尺寸为600,两个SSD模型除了输入图像尺寸(300*300和500*500),其他设置与其相同。很明显,较大的输入尺寸得到更好的结果。
图4显示SSD对边界框尺寸非常敏感。换句话说,它对较小的对象比较大的对象具有更差的性能。这毫不意外,因为小对象在最顶层可能没有任何信息保留下来。增加输入尺寸(例如从300×300到500×500)可以帮助改善检测小对象,但是仍然有很大改进空间。积极的一面是,我们可以清楚地看到SSD在大对象上表现很好。并且对于不同的对象宽高比非常鲁棒,因为我们对每个特征图位置使用各种长宽比的默认框。
3.2 模型分析
为了更好地理解SSD,我们还进行了几个人为控制的实验,以检查每个组对最终性能的影响。对于所有以下实验,我们使用完全相同的设置和输入大小(300×300),
数据增广是十分重要的
Fast和Faster R-CNN使用原始图像和水平翻转(0.5概率)图像训练。我们使用更广泛的采样策略,类似于YOLO [5],但它使用了我们没有使用的光度失真。表2显示,我们可以用这个抽样策略提高6.7%的mAP。我们不知道我们的采样策略将对Fast和Faster R-CNN提升多少,但可能效果不大,因为他们在分类期间使用了pooling,比人为设置更鲁棒。
Fig. 3: VOC2007测试集上SSD512对动物、车辆和家具和视觉效果,第一行显示由于定位不良(Loc),与类似类别(Sim)、其他类别(Oth)或背景(BG)混淆的正确检测(Cor)、假阳性检测的累积分数。
越多的默认框形状效果越好 如第2.2节所述,默认情况下,每个位置使用6个默认框。如果我们删除具有1/3和3宽高比的框,性能下降0.9%。通过进一步移除1/2和2纵横比的框,性能再下降2%。使用多种默认框形状似乎使网络预测任务更容易。
Atrous算法更快 如第3节所述,我们使用了VGG16的atrous版本,遵循DeepLabLargeFOV[16]。如果我们使用完整的VGG16,保持pool5与2×2-s2,并且不从fc6和fc7的采集参数,添加conv5_3,结果稍差(0.7%),而速度减慢大约20%。
不同分辨率的多输出层效果更好 SSD的一个主要贡献是在不同输出层使用了不同尺度的默认框。为了测量所获得的提高,我们移除了这些层并和对应的结果比较,为了比较公平,每次我们移除一层,我们就调整默认box的结构来保持box的数量与原始数量一致,Table3显示了减少多输出层精度的下降,从74.3下降到62.4.
3.3 PASCAL VOC2012
用和VOC2007上一样的设置,这次,用VOC2012的训练验证集和VOC2007的训练验证集、测试集(21503张图像)训练,在VOC2012测试集(10991张图像)测试。由于有了更多的训练数据,模型训练时以 学习率进行60K次迭代,再减小到 继续迭代20K次。