1、摘要
本文提出了一个使用单一深度神经网络对图像中的目标进行检测的方法。本文的方法称为SSD,根据每个feature map位置不同的宽高比和尺度,将Bounding Box的输出离散为Bounding Box先验的集合。在预测时,网络产生置信度,认为每个先验对应感兴趣的目标,并对先验进行调整,以便更好地匹配目标的形状。此外,该网络结合了来自具有不同分辨率的多个特征图的预测,以自然地处理不同大小的目标。SSD模型相对于需要目标建议的方法(如R-CNN和MultiBox)是简单的,因为它完全抛弃了生成建议的步骤,并将所有计算封装在一个网络中。这使得SSD易于训练,并且易于集成到需要检测组件的系统中。在ILSVRC DET和PASCAL VOC数据集上的实验结果证实,SSD的性能与使用目标建议步骤的方法相当,但速度要快100-1000倍。与其他单阶段方法相比,SSD具有相似或更好的性能,为训练和推理提供了统一的框架。
2、简介
深度卷积神经网络在图像分类任务上表现出了令人印象深刻的性能水平。然而,目标检测是一个更困难的问题,因为除了对目标进行分类外,还需要对图像中的所有目标实例进行定位。基于区域的卷积神经网络(R-CNN)或其更快的版本将检测作为目标建议的分类问题,然后回归边界框坐标。另外,YOLO使用整个最顶层的功能图,直接预测固定网格上所有类别的边界框和置信度;在知道底层对象的类别之后,OverFeat会为每个feature map位置返回一个边界框。但是,这些单阶段方法的性能不如R-CNN类型方法。那么,R-CNN框架是实现高质量目标检测的唯一方法吗?在本文中,如图1所示,我们提出了单阶段多框检测器(SSD)。给定一组不同长宽比和尺度的固定bounding box先验,我们训练一个网络来选择哪些先验包含感兴趣的目标,并调整它们的坐标以更好地匹配目标的形状。我们定义的边界框先验集与Faster R-CNN中使用的锚框具有相同的思想。与Faster R-CNN不同,我们的网络可以检测多个目标类别,而不需要像Faster R-CNN那样共享卷积层。此外,SSD架构结合了来自网络中不同分辨率的多个特征映射的预测,自然地处理了不同大小的目标,提高了检测性能。
总的来说,SSD与目前许多工作的想法类似。然而,在ILSVRC DET和PASCAL VOC检测基准上,它是第一个将最有效的单阶段思想结合在一个统一的框架内,实现了与基于目标建议的方法的相当的性能,且速度比基于目标建议的方法快100-1000倍。我们总结了我们的贡献如下:
- SSD删除了目标建议步骤,这通常是昂贵的,低水平区域分组线索。该方法基于单个神经网络,能够直接生成目标边界框及其对大量目标类别的置信度。
- SSD是第一个将卷积边界框先验与预测多个目标类别的能力相结合的工作。在我们的方法中,相对于在MultiBox和YOLO中所做的整个feature map,我们通过feature map中每个位置的底层1×1 feature来预测每个先验的多个类别的偏移调整和置信度。这导致了一个更紧凑的网络,这对于有效地检测大量目标类别是至关重要的。此外,这增加了模型输出层的平移不变性,减少了过度拟合,提高了检测性能。
- SSD先验具有不同的宽高比和比例,密集地分布在特征图中的所有位置,因此可以覆盖不同的对象形状,而不是YOLO或OverFeat,后者使用更严格的基于网格的平铺。
- SSD是第一个将边界框先验与网络中不同空间分辨率的特征映射相关联的方法。相对于OverFeat和SPPnet,这两种技术需要将图像调整到不同的分辨率并进行单独处理,而OverFeat和SPPnet则需要将图像调整到不同的分辨率并进行单独处理。
- 整个SSD设计非常高效(比最好的区域建议检测器快100-1000倍),为训练和推理提供了统一的框架,甚至可以用于数百个目标类别。
3、详细的方法
SSD的灵感来自MultiBox,并具有相似的损失函数,但有许多不同之处和改进之处。虽然MultiBox通过训练一个目标检测器非常成功地生成了目标建议,但是对于完整的目标检测,它仍然需要对生成的建议进行后分类。然而,我们的SSD可以检测多个类别的单阶段评估的输入图像。现在我们将描述方法的关键区别。
3.1、训练方法
假设我们共有n 个先验,记作b_i ,其中i in[0, n) 。每个先验都与一个边界框形状和一组目标类别置信度相关联,对应于特定类别出现在先验指定位置的概率。具体来说,使c_{1}^{D} 为第i 个先验的第p 个置信度,I_{1} in R^{4} 是第i 个预测框的坐标,g_{f}^{p} in R^{4} 是类别P的第j 个ground truth坐标。注意,预测的框坐标是通过将网络输出的偏移量添加到相应的先验中计算出来的,并且先验和ground truth框都位于相对于完整图像的规范化坐标中。这种标准化确保了整个图像区域是单元框,这样我们就可以安全地比较坐标,而不用担心不同的输入图像大小。
3.1.1、匹配策略
就像Multibox一样,在训练时,我们需要建立ground truth box与先验之间的对应关系。我们既可以直接使用先验坐标,也可以在应用网络预测的偏移量后使用调整后的先验坐标。为了简单起见,将先前产生的坐标称为源框。与ground truth匹配的源框成为正样本,其余的则被视为负样本。我们考虑两种可能的匹配方法。第一个是bipartite匹配,其中每个ground truth框贪婪地匹配到具有最佳jaccard重叠的源框。这是原始Multibox使用的匹配方法,它确保每个ground truth box恰好有一个匹配的源框。我们还进行了perprediction匹配实验,该算法首先进行二部匹配,使每个ground truth box都有一个对应的source box。然后,如果jaccard重叠超过阈值(例如0.5),则将其余源框匹配到重叠最多的地面真相框。与bipartite匹配不同,perprediction匹配可以为每个ground truth生成多个正的先验匹配。这使得网络能够预测多个重叠先验的高置信度,而不是要求它总是选择可能的最佳先验——这是一个稍微简化的任务。请注意,SSD旨在检测多个类别,而MultiBox只检测与类无关的“目标”框,然后在分类后步骤中使用这些“目标”框来确定目标类别。为了检测多个(数百个或更多)类别,对于每个先验,SSD预测一个单独的边界框调整,该调整在所有对目标别中共享。换句话说,在匹配步骤中,源框被视为与类无关的。但是,在匹配之后,我们保留匹配的ground truth标签,因为它将用于计算置信损失。
3.1.2、训练的损失函数
SSD的损失函数来自由MultiBox的损失函数,对其进行扩展来处理多类。用x_{j, j}^{P}=1 代表第i 个源框匹配到第p 类的第j 个ground truth框。如上所示,对于双边匹配,我们有sum_{1} x_{j, f}^{p}=1 。如果我们使用预测匹配,sum_{1} x_{,, N}^{D} geqslant 1 ,意味着有更多的源框匹配到第j 个ground truth框。总体目标损失函数为定位损失(loc)和置信损失(conf)的加权和:
L(x, c, l, g)=L_{text {cont }}(x, c) alpha L_{text {loc }}(x, l, g)
其中定位损失为预测框(非先验)与地面真值框之间的L2损失:
L_{mathrm{loc}}=frac{1}{2} sum_{J, f} x_{J, f}^{p}left|f_{1}-g_{f}^{p}right|_{2}^{2}
置信度损失可以是多类logistic loss,也可以是softmax loss。我们使用多类logistic loss:
L_{c o n t}(x, c)=-sum_{nu, s, p} x_{,,}^{p} log left(c_{1}^{p}right)-sum_{1, p}left(1-sum_{1, sigma=p} x_{,, j}^{p}right) log left(1-c_{,}^{p}right)
和重量alpha 通过交叉验证设置为0.06。
3.2、全链接先验
多框方法的一个关键组成部分是它使用训练集边界框坐标的k均值中心点作为先验。在原始设计中,使用整个最上面的feature map来预测所有先验的偏移量。一个更好的策略可能是使用完全卷积先验,我们在feature map上为每个位置添加一小组先验,如图1所示。这不仅计算效率更高,而且还减少了参数的数量,从而降低了过度拟合的风险。
这些全卷积先验非常类似于RPN中使用的anchor。进一步简化了模型,将3×3卷积核替换为1×1核来预测偏移量和置信度,不需要中间层。更重要的是,RPN仍然被用来学习目标和生成建议,用于与Faster R-CNN合并。相反,SSD可以被直接训练来检测多个类别,这些类别之间有共享的边界框。具体地说,假设我们有一个m×m feature map, feature map上每个位置有k个先验(用左上角和右下角编码),总共有c个类别。我们将为k个先验值提供4k偏移量输出,为c个类别提供ck置信度输出,结果是每个feature map位置有(4 c)k个输出。通过对feature map上所有位置的预测进行累积,它总共有(4 c) k m^{2} 输出,但只需要学习(4 c)k参数。如果我们不共享不同类别的位置,那么总输出将为5 c k m^{2} ,并具有5ck参数。显然,当我们有许多类别需要检测时,这些数字可以快速增长(C>>1)。
3.3、结合来自多个特征图的预测
大多数卷积网络在更深层次上减小了特征图的大小。这不仅减少了计算和内存成本,而且还提供了一定程度的平移和缩放不变性。为了处理不同的目标尺度,一些方法建议将图像转换成不同的尺寸,然后分别处理每个尺寸,然后将结果组合起来。然而,通过在一个网络中使用来自多个不同层的特征图,我们可以模拟相同的效果。使用低层的feature map可以提高语义分割的质量,因为低层可以捕捉到更多的输入目标的细节。从最上面的feature map添加全局上下文池可以帮助平滑分割结果。在这些方法的驱动下,我们使用上下特征图进行检测预测。下图显示了框架中使用的两个示例特征图(8×8和4×4),当然在实践中我们可以使用更多的示例特征图,而计算开销可以忽略不计。
网络中不同层次的特征图具有不同的(经验上)感受野大小。幸运的是,在SSD框架中,卷积先验并不需要对应于每一层的感受野。我们可以设计平铺,使特定的特征映射位置学会对图像的特定区域和目标的特定比例做出响应。假设我们想用m(平方)特征图来做预测。为简便起见,我们将f_{k} 中的k∈[1,m]标注为第k个特征映射的大小,按递减顺序排列。每个feature map的先验比例尺计算如下:
s_{k}=s_{m n} frac{5_{max }-5_{m i n}}{m-1}(k-1)
当s_{m i n} 为0.1,而s_{max } 为0.7时,s_{m 1} 等于1。这意味着最低层的刻度为0.1,最高层的刻度为0.7,在这两层之间的所有层都有规则的间隔。我们对之前的边界框加不同的宽高比,表示为a_{r} inleft{1,2,3, frac{1}{2} frac{2}{3}right} 。对每个先验可以计算宽度(w_{k}^{s}=s_{k} sqrt{a_{r}} )和高度(h_{k}^{a}=5_{k} sqrt{a_{r}} )。对宽高比为1,也可以增加额外的先验尺度为s_{k}^{prime}=sqrt{s_{k} s_{k 1}} ,导致每个feature map位置有6个先验。将每个的中心设置为left(frac{i 0.5}{f_{k}}, frac{j 0.5}{f_{k}}right) ,其中i, j inleft[0, f_{k}right) 。截断先验的坐标使它们总是在[0,1]之内。在实践中,还可以针对不同的检测任务设计自己的先验。
通过结合来自许多feature map的所有位置的不同尺度和宽高比的所有先验的预测,我们得到了一组不同的预测,涵盖了不同的输入目标大小和形状。例如,在图1中,狗与4×4 feature map中的先验匹配,但与8×8 feature map中的任何先验不匹配。这是因为这些先验在不同的范围内,与狗的盒子不匹配,因此在训练中被认为是负样本。
3.4、难负挖掘
在匹配步骤之后,大多数源框都是负样本,特别是当先验数很大时。这在正样本和负样本的训练例子之间引入了一个显著的不平衡。我们没有使用所有的负样本,而是使用所有类别中对源框的最高置信度对它们进行排序,并选择最重要的例子,这样负样本和正样本之间的比例最多为3:1。我们发现这将导致更快的优化和更稳定的训练过程。
3.5、图像处理
为了使模型对各种输入对象的大小和形状具有更强的鲁棒性,每一幅训练图像都采用以下任意一种方法随机采样:
- 使用整个原始输入图像。
- 采样一个补丁,与目标的jaccard重叠最小为0.1、0.3、0.5或0.7。
- 采样一个补丁,与目标的jaccard重叠最大为0.5。
在上述采样步骤之后,每个采样块水平翻转的概率为0.5,并应用一些类似于中描述的photometric distortions。
4、实验结果
我们报告了两个数据集的结果:ILSVRC DET和PASCAL VOC,并与其他相关方法进行了比较。我们的实验从Inception的一个特定的早期变种开始,该变种在ILSVRC CLS-LOC val数据集上具有76.4%的top1精度,将学习率初始化为0.4,并使用BN和Adagrad对其进行微调。
4.1、ILSVRC 2014 DET结果
我们将SSD与高性能的两级检测器进行了比较。这两个检测器从完全相同的预先训练的Inception网络开始进行公平比较,并与ILSVRC2014 DET训练数据集进行微调,并在val2数据集上进行评估。
4.1.1、两阶段的baseline检测器
具体来说,MultiBox网络用于生成目标建议,然后使用一个单独的网络对200 DET类别进行后分类。MultiBox模型使用与SSD相同的底层网络结构和卷积先验,只是它将所有目标都视为与类无关的目标。MultiBox的输入图像大小为299×299,每个proposal的后分类也被调整为299×299。最新的两阶段44.7mAP在val2集合上的单模型。这个大改进是由于更好的建议网络(MultiBox),一种提升改建后分类网络(inception)和更大的网络输入(299对224)。
4.1.2、SSD和Baseline检测器的比较
SSD与MultiBox具有相似的目标,但它具有在单阶段评价中检测多个类别的能力,而不是使用两阶段法。表1显示了随着类别数量的增加,SSD性能如何变化。为了与baseline方法进行公平的比较,我们首先使用相同的输入图像大小(299×299)。SSD Person是一个整体的Person检测器,我们将Person视为正样本,而将所有其他199个类别视为正样本。与baseline结果51.5相比,SSD人达到了52.7,这略好一些,因为SSD学会了回溯先验,同时预测置信度,而不是使用两个解耦的步骤。
考虑到SSD的显著效率提高,以及两阶段方法由于使用了两个Inception网络,参数数目约为2×,因此这种方法很有吸引力。当我们将人、车和狗这三种类型包括在内时,我们发现(SSD 3)对人的性能比SSD人差。
我们假设这种差异是因为两阶段方法调整每个proposal使用了299x299的尺寸,保留了很细节甚至小物体的数据,而SSD需要整幅图像具有相同的分辨率,因此失去了许多细节。如果我们进一步对所有200 DET类别的SSD进行训练,我们会发现SSD Full在这三个类别上的性能与SSD 3类似。最后,SSD Full在val2数据集上实现了31.0 mAP,虽然这比两阶段方法(44.7)要差,但是考虑到SSD的速度约为100×更快,并且SSD更容易在需要检测的其他系统中进行训练和集成,因此仍然很有希望。
4.1.3、特征图越多越好
对于一些目标,例如dog,它们在输入图像中相对较大,与两阶段方法(88.7 vs. 90.4)相比,性能相差不大。然而,对于其他对象,例如car, SSD的性能要比两阶段方法差得多。这是因为SSD无法处理这些小目标,因为输入的图像太小,丢失了许多小目标的细节。例如,在训练时,我们将每个输入图像的大小调整为299×299,得到顶部的8×8 feature map。之后,我们进一步减少最顶层功能映射到6×6,4×4,3×3,2×2和1×1通过使用额外的回旋的层。这些层中描述,并使用所有这些特征图来做预测。这些特征映射都有较大的接受域,因此可以处理非常大的目标。但由于输入图像和特征图的下采样效应,它们无法检测到非常小的目标。受语义分割方面许多工作的启发,我们也使用较低层次的feature map进行预测,并将预测结合起来,得到最终的检测结果。例如,我们不仅使用8×8特征图,还使用17×17和35×35等较低的特征图,以便这些较低的特征图能够捕捉到输入目标的更多细节。因此,总共有9864个先验(每个位置有6个先验)。然而,计算开销是可以忽略的,因为我们使用1×1的特性进行预测,并且共享所有类别的先验。从表1可以看出,结合低层feature map预测的模型SSD Multi明显优于SSD Full 。因此,包含较低级别的feature map可以帮助提高性能,而额外的计算时间可以忽略不计。
4.1.4、输入图像尺寸越大越好
尽管使用较低的feature map来帮助改善小目标的SSD,这仍然是不够的,因为与ILSVRC DET上的平均图像分辨率(299×299 vs. 482×415)相比,输入图像的大小较小。尝试使用更大的输入图像大小(443×443),所有其他设置与之前相同,除了增加先验数(2704 vs. 1420),因为我们有更大的特征映射。从上表可以看出,使用较大的输入大小比使用相同输入大小的较低的feature map有更大的改进。例如,它使得人的AP增加5.7,汽车的AP增加6.1,使两者的性能与baseline相当。我们假设,更大的模型能够更好地检测小目标,因为它能看到更多的细节,从而减少类别之间的混淆。对于dog AP也增加了3.3,结果比两阶段方法的性能更好(92.0 vs. 90.4)。结果,tmAP由31.0提高到39.6;计算复杂度只增加了一倍。据我们所知,SSD是ILSVRC 2014 DET val2数据集上第一个也是最好的“单阶段”方法。虽然SSD与两阶段方法之间仍然存在差距,但是我们可以期望通过使用443×443模型的较低的feature map或者使用更大的输入图像尺寸。
4.2、VOC 2007结果
在此数据集上,我们主要与其他顶级的“单阶段”方法进行比较。我们特别使用VOC2007 trainval和VOC2012 trainval进行训练,并对VOC2007进行测试。注意,无论是Fast R-CNN还是Faster R-CNN都是从VGG进行微调的,并使用最小尺寸为600的输入图像。我们的SSD是根据Inception的特定版本进行微调的,并使用299×299或443×443输入图像大小。表2显示,Fast R-CNN和Faster R-CNN的性能略优于SSD,这可能是因为它们具有较大的输入图像大小。然而,Faster R-CNN要慢得多,因为它仍然需要提取proposal步骤。Faster R-CNN很难训练,因为它必须交替地微调共享卷积层和额外的RPN和Fast R-CNN预测层。SSD易于训练,并且完全抛弃了单独的目标proposal步骤。
表3为VOC2012测试集的比较,我们使用的模型与上表相同。Fast R-CNN和Faster R-CNN有更好的性能,因为他们使用额外的4952张来自VOC2007测试的图像进行训练。然而,如果Fast R-CNN只在VOC2012训练平台上进行训练,两者之间的差距会更小。与YOLO相比,SSD 299×299已经具有相当的性能(54.4 vs. 57.9)。当使用相同的输入大小时,我们的SSD比YOLO (63.3 vs.57.9)好得多。这是因为在训练中使用了多个feature map的卷积先验和匹配策略,使得SSD比YOLO更灵活、更好。
此外,我们使用检测分析工具from来了解哪些特征对SSD影响最大。图3显示SSD可以高质量地检测各种目标类别。它召回率在85-90%左右,如果使用“弱”(0.1 jaccard重叠)标准,召回率要高得多。与R-CNN相比,SSD的定位误差更小,这说明SSD可以更好地对目标进行定位,因为它直接学习对目标进行先验回溯,而不是使用两个解耦的步骤。然而,SSD与相似的目标类别有更多的混淆,部分原因是我们为多个类别共享位置,而输入大小太小,无法区分不同。
图2表明SSD bounding框的尺寸非常敏感。换句话说,它在较小目标上的性能比在较大目标上差得多。例如,如果输入大小为299×299,那么对于超小型目标(XS),它几乎有0个AP。这并不奇怪,因为这些XS目标甚至可能在最顶层(8×8)没有任何信息。增加输入大小(例如从299×299增加到443×443)可以帮助改进对XS目标的检测,但是仍然有很大的改进空间。从积极的方面来看,可以清楚地看到SSD在大型目标上执行得非常好。而且它对不同的长宽比和物体的视点非常健壮,因为我们为每个特征图位置设置了不同形状的先验。在未来,我们想尝试更大的输入尺寸(例如600×600)和/或使用更低的特征映射,就像在ILSVRC上的SSD Multi中所做的那样。我们希望这将进一步帮助纠正与类似类别问题的混淆,并提高小目标的性能。
4.3、训练时间
SSD需要一段时间来学习回归先验,以建立ground truth,同时预测所有类别的置信度。例如,从一个预先训练好的网络开始,使用32张批量大小的图像,如果在ILSVRC DET训练数据集上训练,网络需要3M步来收敛,而在PASCALVOC2012 VOC2007训练集上训练则需要500K步。其中一个原因是针对多个类别的多个feature map的所有位置都有很多检测。可以只更新所有的正样本和一小部分负样本(难负)来减少训练时间。通过这样做,性能在开始时增长得更快,但仍然需要类似数量的步骤来收敛。此外,将选择性搜索(selective search)或RPN proposal box回归到ground truth相比,SSD需要更多的训练步骤,因为SSD先验对于底层对象的空间信息要少得多,因此更难以学习。
4.4、设计选择分析
为了更好地理解SSD,我们还进行了几个控制实验,以检验每个组件如何影响最终性能。对于下面的所有实验,我们使用相同的底层网络和输入大小,并将批处理大小设置为32。这些实验是在ILSVRC 2014 DET数据集的子集上进行的,ILSVRC 2014 DET数据集与PASCAL具有相同或等效的20个类。
4.4.1、匹配源:先验还是预测?
在训练期间,一个关键的步骤是通过匹配源框和ground truth框来识别正样本和负样本。源框可以是先验的,也可以是实际的预测。如果我们使用先验,也就是作为“锚”的先验来进行匹配,我们就迫使网络将这些先验回归到ground truth,并避免让预测自由浮动。然而,如果我们使用预测结果进行匹配,网络将偏向于它自己的输出。从表4我们可以清楚地看到,使用先验进行匹配要比使用预测好得多。特别是对于perprediction匹配(我们将在后面详细介绍),使用先验进行匹配可以使平均精度提高一倍。
4.4.2、匹配源:先验还是预测?
有两种匹配策略:bipartite和pre-prediction。使用不同的匹配策略会影响训练过程中正样本和负样本的数量。表4显示了模型在训练期间开始饱和时的(平均)匹配次数。由于bipartite与ground truth盒进行贪婪的一对一匹配,在批大小为32的情况下,它平均有28个匹配,这意味着在一个批中平均有28个ground truth值盒。从上表中,我们可以看到使用预估匹配策略会得到更多的正面结果。例如,如果我们使用先验进行每次预测匹配,它比二分图(160对28)有更多的正性,而且性能也更好。但是如果我们有更多的积极因素,我们是否总是能得到更好的性能呢?不是真的。例如,如果我们使用预测来进行每次预测匹配,它大约有25000个匹配,这意味着几乎所有的预测都与ground truth框匹配——明显的过度匹配和对自身输出的偏移。实际上,性能比使用二部匹配差得多。
4.4.3、Target type: 0/1 or Jac
由于我们在反向传播步骤中使用了multi logistic loss,我们可以在目标函数中使用0/1或Jac (jaccard重叠)对每个类别进行回归。从上表可以看出,似乎总是首选0/1进行回归,尤其是在使用先验进行匹配时。
5、结论
本文介绍了一种适用于多类别、统一、快速的单阶段目标检测系统SSD。已经证明,SSD在ILSVRC DET和PASCAL VOC上与许多先进的方法具有可比性,并进行了许多实验来详细了解SSD。使用许多卷积先验函数并将先验函数平铺到多个尺度的特征映射中,这两种方法都提高了检测性能。似乎使用更多的“窗口”并不总是像中所说的那样导致更糟糕的结果,而且实际上可以从我们的实验中提高性能。在未来,我们希望探索更高分辨率的输入图像训练,并使用更低的特征图进行预测,进一步提高检测性能。此外,我们还将探索减少训练时间的新技术。目前SSD使用单一网络来预测多个类别的偏移量和置信度,这可能很难学习。在未来,我们希望使用两个独立的塔来进行定位和分类,这样每个塔对于特定的子任务都可以更轻的重量,从而解耦问题的复杂性,提高训练速度。