【转】SSD论⽂翻译和代码汇总
SSD代码汇总:
github(Official):
video:
github:
github:
github:
github:
github:
github(Caffe):
摘要
1. 引⾔
⽬前最先进的⽬标检测系统是以下⽅法的变种:假设边界框,每个框重采样像素或特征,并应⽤⼀个⾼质量的分类器。⾃从选择性搜索[1]通过在PASCAL VOC,COCO和ILSVRC上所有基于Faster R-CNN[2]的检测都取得了当前领先的结果(尽管具有更深的特征如[3]),这种流程在检测基准数据上流⾏开来。尽管这些⽅法准确,但对于嵌⼊式系统⽽⾔,这些⽅法的计算量过⼤,即使是⾼端硬件,对于实时应⽤⽽⾔也太慢。通常,这些⽅法的检测速度是以每帧秒(SPF)度量,甚⾄最快的⾼精度检测
器,Faster R-CNN,仅以每秒7帧(FPS)的速度运⾏。已经有很多尝试通过处理检测流程中的每个阶段来构建更快的检测器(参见第4节中的相关⼯作),但是到⽬前为⽌,显著提⾼的速度仅以显著降低的检测精度为代价。
本⽂提出了第⼀个基于深度⽹络的⽬标检测器,它不对边界框假设的像素或特征进⾏重采样,并且与其它⽅法有⼀样精确度。这对⾼精度检测在速度上有显著提⾼(在VOC2007测试中,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节介绍了数据集特有的模型细节和实验结果。
2.1 模型
SSD⽅法基于前馈卷积⽹络,该⽹络产⽣固定⼤⼩的边界框集合,并对这些边界框中存在的⽬标类别实例进⾏评分,然后进⾏⾮极⼤值抑制步骤来产⽣最终的检测结果。早期的⽹络层基于⽤于⾼质量图像分类的标准架构(在任何分类层之前被截断),我们将其称为基础⽹络。然后,我们将辅助结构添加到⽹络中以产⽣具有以下关键特征的检测:
⽤于检测的多尺度特征映射。我们将卷积特征层添加到截取的基础⽹络的末端。这些层在尺⼨上逐渐减⼩,并允许在多个尺度上对检测结果进⾏预测。⽤于预测检测的卷积模型对于每个特征层都是不同的(
查阅Overfeat[4]和YOLO[5]在单尺度特征映射上的操作)。
⽤于检测的卷积预测器。每个添加的特征层(或者任选的来⾃基础⽹络的现有特征层)可以使⽤⼀组卷积滤波器产⽣固定的检测预测集合。这些在图2中的SSD⽹络架构的上部指出。对于具有pp通道的⼤⼩为m×n的特征层,潜在检测的预测参数的基本元素是3×3×p3×3×p的⼩核得到某个类别的分数,或者相对于默认框坐标的形状偏移。在应⽤卷积核的m×n的每个位置,它会产⽣⼀个输出值。边界框偏移输出值是相对每个特征映射位置的相对默认框位置来度量的(查阅YOLO[5]的架构,该步骤使⽤中间全连接层⽽不是卷积滤波器)。
图2:两个单次检测模型的⽐较:SSD和YOLO[5]。我们的SSD模型在基础⽹络的末端添加了⼏个特征层,它预测了不同尺度和长宽⽐的默认边界框的偏移量及其相关的置信度。300×300输⼊尺⼨的SSD在VOC2007 test上的准确度上明显优于448×448的YOLO的准确度,同时也提⾼了速度。
默认边界框和长宽⽐。对于⽹络顶部的多个特征映射,我们将⼀组默认边界框与每个特征映射单元相关联。默认边界框以卷积的⽅式平铺特征映射,以便每个边界框相对于其对应单元的位置是固定的。在每个特征映射单元中,我们预测单元中相对于默认边界框形状的偏移量,以及指出每个边界框中存在的每个类别实例的类别分数。具体⽽⾔,对于给定位置处的k个边界框中的每⼀个,我们计算c个类别分数和相对于原始默认边界框形状的4个偏移量。这导致在特征映射中的每个位置周围应⽤总共(c+4)k个滤波器,对于m×n的特征映射取得(c+4)kmn个输出。有关默认边界框的说明,请参见图1。我们的默认边界框与Faster R-CNN[2]中使⽤的锚边界框相似,但是我们将它们应⽤到不同分辨率的⼏个特征映射上。在⼏个特征映射中允许不同的默认边界框形状让我们有效地离散可能的输出框形状的空间。
图1:SSD框架。(a)在训练期间,SSD仅需要每个⽬标的输⼊图像和真实边界框。以卷积⽅式,我们评估具有不同尺度(例如(b)和(c)中的8×8和4×4)的⼏个特征映射中每个位置处不同长宽⽐的默认框的⼩集合(例如4个)。对于每个默认边界框,我们预测所有⽬标类别((c1,c2,…,cp)(c1,c2,…,cp))的形状偏移量和置信度。在训练时,我们⾸先将这些默认边界框与实际的边界框进⾏匹配。例如,我们已经与猫匹配两个默认边界框,与狗匹配了⼀个,这被视为积极的,其余的是消极的。模型损失是定位损失(例如,Smooth L1[6])和置信度损失(例如Softmax)之间的加权和。
2.2 训练
训练SSD和训练使⽤区域提出的典型检测器之间的关键区别在于,需要将真实信息分配给固定的检测器输出集合中的特定输出。在YOLO[5]的训练中、Faster R-CNN[2]和MultiBox[7]的区域提出阶段,⼀些版本也需要这样的操作。⼀旦确定了这个分配,损失函数和反向传播就可以应⽤端到端了。训练也涉及选择默认边界框集合和缩放进⾏检测,以及难例挖掘和数据增强策略。
匹配策略。在训练过程中,我们需要确定哪些默认边界框对应实际边界框的检测,并相应地训练⽹络。对于每个实际边界框,我们从默认边界框中选择,这些框会在位置,长宽⽐和尺度上变化。我们⾸先将每个实际边界框与具有最好的Jaccard重叠(如MultiBox[7])的边界框相匹配。与MultiBox不同的是,我们将默认边界框匹配到Jaccard重叠⾼于阈值(0.5)的任何实际边界框。这简化了学习问题,允许⽹络为多个重叠的默认边界框预测⾼分,⽽不是要求它只挑选具有最⼤重叠的⼀个边界框。
为默认边界框选择尺度和长宽⽐。为了处理不同的⽬标尺度,⼀些⽅法[4,9]建议处理不同尺⼨的图像,然后将结果合并。然⽽,通过利⽤单个⽹络中⼏个不同层的特征映射进⾏预测,我们可以模拟相同的效果,同时还可以跨所有⽬标尺度共享参数。以前的⼯作[10,11]已经表明,使⽤低层的特征映射可以提⾼语义分割的质量,因为低层会捕获输⼊⽬标的更多细节。同样,[12]表明,从特征映射上添加全局上下⽂池化可以有助于平滑分割结果。受这些⽅法的启发,我们使⽤较低和较⾼的特征映射进⾏检测。图1显⽰了框架中使⽤的两个⽰例性特征映射(8×8和4×4)。在实践中,我们可以使⽤更多的具有很少计算开⽀的特征映射。
已知⽹络中不同层的特征映射具有不同的(经验的)感受野⼤⼩[13]。幸运的是,在SSD框架内,默认边界框不需要对应于每层的实际感受野。我们设计平铺默认边界框,以便特定的特征映射学习响应⽬标的特定尺度。假设我们要使⽤m个特征映射进⾏预测。每个特征映射默认边界框的尺度计算如下:
通过将所有默认边界框的预测与许多特征映射所有位置的不同尺度和⾼宽⽐相结合,我们有不同的预测集合,涵盖各种输⼊⽬标⼤⼩和形状。例如,在图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的概率进⾏⽔平翻转。
3. 实验结果
3.1 PASCAL VOC2007
在这个数据集上,我们在VOC2007 test(4952张图像)上⽐较了Fast R-CNN[6]和FAST 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个默认边界框——忽略1313和3的长宽⽐。对于所有其它层,我们像2.2节描述的那样放置了6个默认边界框。如[12]所指出的,与其它层相⽐,由于conv4_3具有不同的特征尺度,
所以我们使⽤[12]中引⼊的L2正则化技术将特征映射中每个位置的特征标准缩放到20,在反向传播过程中学习尺度。对于40k次迭代,我们使⽤10−3的学习率,然后继续⽤10−4和10−5的学习率训练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。
表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上微调。
为了更详细地了解我们两个SSD模型的性能,我们使⽤了[21]中的检测分析⼯具。图3显⽰了SSD可以检测到⾼质量(⼤⽩⾊区域)的各种⽬标类别。它⼤部分的确信检测是正确的。召回约为85−90%,⽽“弱”(0.1 Jaccard重叠)标准则要⾼得多。与R-CNN[22]相⽐,SSD具有更⼩的定位误差,表明SSD可以更好地定位⽬标,因为它直接学习回归⽬标形状和分类⽬标类别,⽽不是使⽤两个解耦步骤。然⽽,SSD对类似的⽬标类别(特别是对于动物)有更多的混淆,部分原因是我们共享多个类别的位置。
图4显⽰SSD对边界框⼤⼩⾮常敏感。换句话说,它在较⼩⽬标上⽐在较⼤⽬标上的性能要差得多。这并不奇怪,因为这些⼩⽬标甚⾄可能在顶层没有任何信息。增加输⼊尺⼨(例如从300×300到512×512)可以帮助改进检测⼩⽬标,但仍然有很⼤的改进空间。积极的⼀⾯,我们可以清楚地看到SSD在⼤型⽬标上的表现⾮常好。⽽且对于不同长宽⽐的⽬标,它是⾮常鲁棒的,因为我们使⽤每个特征映射位置的各种长宽⽐的默认框。
图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 =超宽。
3.2 模型分析
为了更好地了解SSD,我们进⾏了控制实验,以检查每个组件如何影响性能。对于所有的实验,我们使⽤相同的设置和输⼊⼤⼩(300×300),除了指定的设置或组件的更改。
数据增强⾄关重要。Fast和Faster R-CNN使⽤原始图像和⽔平翻转来训练。我们使⽤更⼴泛的抽样策略,类似于YOLO[5]。从表2可以看出,采样策略可以提⾼8.8%的mAP。我们不知道我们的采样策略将会使Fast和Faster R-CNN受益多少,但是他们可能从中受益较少,因为他们在分类过程中使⽤了⼀个特征池化步骤,这对通过设计的⽬标变换来说相对鲁棒。
表2:各种设计选择和组件对SSD性能的影响。
更多的默认边界框形状会更好。如2.2节所述,默认情况下,我们每个位置使⽤6个默认边界框。如果我
们删除长宽⽐为13和3的边界框,性能下降了0.6%。通过进⼀步去除1212和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]中使⽤这个策略,忽略在边界上的边界框。我们观察到了⼀些有趣的趋势。例如,如果我们使⽤⾮常粗糙的特征映射(例如conv11_2(1×1)或conv10_2(3×3)),它会⼤⼤伤害性能。原因可能是修剪后我们没有⾜够⼤的边界框来覆盖⼤的⽬标。当我们主要使⽤更⾼分辨率的特征映射时,性能开始再次上升,因为即使在修剪之后仍然有⾜够数量的⼤边界框。如果我们只使⽤conv7进⾏预测,那么性能是最糟糕的,这就强化了在不同层上扩展不同尺度的边界框是⾮常关键的信息。此外,由于我们的预测不像[6]那样依赖于ROI池化,所以我们在低分辨率特征映射中没有折
叠组块的问题[23]。SSD架构将来⾃各种分辨率的特征映射的预测结合起来,以达到与Faster R-CNN相当的精确度,同时使⽤较低分辨率的输⼊图像。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。