SSD: Single Shot MultiBox Detector
摘要:我们提出了一个用单个深层神经网络进行目标检测的算法。SSD的算法将区域离散到一系列每个特征图区域上不用比例与尺度的默认区域。预测时,网络对存在的每个目标类在默认区域的概率进行预测,并对框的位置进行微调使之框的更精确。此外,网络将多特征图的预测结果与不同解决方案进行融合,来处理不同尺寸的区域。我们的SSD算法对区域提取的要求不高,因为它没有将区域产生,特征提取等步骤,将所有的计算量压缩到一个网络中进行。这使得SSD容易进行训练,并且可以很容易的加到需要目标检测功能的系统中。PASCAL VOC,MS COCO与ILSVRC数据集上的实验证明SSD对比那些需要额外区域提取的方法有相似的准确率,并且速度更快。与其它一步的方法相比,SSD即使使用更小样本准确率也更高。处理300*300大小的输入并使用titanX时,SSD在VOC2007上有72.1%的mAP,时间为50FPS。处理500*500样本时区域75.1%mAP,效果超过了最新的Faster R-CNN模型。代码发布在https://github.com/weiliu89/caffe/tree/ssd。
关键词: 实时目标检测 卷积神经网络
当前流行的目标检测系统遵循以下的流程:预测目标区域,提取每个区域的像素或者特征最后使用高质量的分类器进行分类。无论是Slective Serarch【1】,还是在PASCAL VOC,MS COCO,ILSVRC等测试中结果领先的基于fasterr-cnn【2】的方案,或者在它的基础上加深了特征的方案【3】都是使用这样的流程。尽管准确率不错,这些方法的计算量都比较大,特别是对于嵌入式系统。即使使用高端的硬件,也很做实时或者接近实时的应用。通常这些方法的检测一帧的时间是以秒为单位计算的,即使是最快的高准确率检测器,基本的Faster R-CNN方法都只能达到7帧每秒。目前有大量的尝试来改进这个检测流程的各个步骤(见相关工作)用来提高检测速度。但是目前为止,当前的提速都是以检测准确率降低来实现的。
本文提出了一种检测网络的第一步不是通过重采样像素或者特征提取来取得假设目标区域的检测方法,而且检测的准确率不降低。这种方法对高准确率的目标检测算法的时耗有大幅优化,在VOC2007上,mAP为72.1%时速度为58FPS,同样情况下Faster R-CNN 的mAP为73.2%速度为7FPS,YOLO的mAP为63.4%速度为45FPS。时间的优化主要是建立在取消了区域提取与之后的像素或者特征重采样步骤。我们并不是第一个做这件事的【4,5】,但是我们通过一些列改进是的准确率远远高于之前的方法。我们的改进包括使用小卷积滤波器来预测目标的类别与目标区域的偏离,使用不同的预测器(滤波器)来处理不同比例样本的检测,利用这些滤波器在网络的最后生成的多特征图来处理不同尺寸目标的检测问题。通过这些改进,我们可以用较低分辨率的样本作为输入得到高准确率的检测结果,而且还提高了运行效率。经过这些改进单个来看可能都不明显,实验表明整个系统在PASCAL VOC上的高速检测效果从YOLO的63.4的mAP提升到如今的72.1mAP.。这种检测准确率相对较大的提升源于residual【3】网络高效的表现。此外,高质量检测速度的大幅提升可以扩展设置的范围,这在计算机视觉中是十分有效的。
我们将本文的贡献展示如下:
1、 我们介绍了SSD算法,一种单步多类别的目标检测算法,并且比目前效果最好的单步目标检测算法那YOLO速度要快,并且更加准确。与想faster-rcnn这样使用区域提取与池化的方法相比,准确率差不多,速度却大幅提升。
2、 SSD算法的核心是在较少的确定的默认区域框的基础上,使用小卷积核来取得特征图,并预测目标的类别得分与区域的偏置。
3、 为了得到较高的准确率,我们用不同尺度的特征图来解决多尺度问题,并且不同比例的样本分配进行预测。
4、 同时,这种特征可以支持简单的端到端的训练与即使使用分辨率较低的样本取得高的检测准确率。并且更好的平衡了速度与准确率的关系。
5、 测试包含了在PASCALVOC MS COCO ILSVRC数据集中不同尺寸样本的时耗与准确率,并与当前主流的算法进行了对比。
本章主要介绍我们提出的SSD检测算法框架(2.1)与相关的训练技巧(2.2)。之后2.3展示了一个专门数据集训练建模的过程与实验的结果。
图1、SSD框架。(a)SSD每个目标在训练时只需要一个输入样本与真实区域。在卷积时我们使用不同尺度(b: 8*8,c: 4*4)得到的特征图与不同的比例的一系列默认区域。我们预测每个默认区域的区域偏置与不同类别的置信度()。在训练时,我们先将这些默认区域与标定的区域进行匹配。如果有两个默认区域匹配为猫,另外一个匹配为狗,那么这两个为正样本,其它的为负样本。最终的权重是定位的损失(smooth L1【6】)与置信度的损失(softmax)的加权和。
SSD算法是一种基于前向传播的卷积神经网络的方法,他产生固定数目的可能区域,并对这些目标可能的类别估计概率,最后用一个非极大值抑制来产生最终的检测结果。前几个网络层基于标准的高质量图像分类模型的结构(分类层之前),我们称为基础网络。之后我们添加辅助网络进行检测,有如下特征:
1、 用于检测的多尺度特征图。我们在缩减了的基础网络的基础上添加了卷积特征层。这些层的大小随着尺寸的减少而减少,是的我们可以检测不同尺度的目标区域。卷积模型的区域检测的每一层跟处理单一尺度特征图的Overfeat【4】或者YOLO【5】都不一样。
2、 用于目标检测的卷积预测器。每个新增的特征层或者基础网络的特征层都可以利用一系列卷积核产生一系列固定数目的区域预测。这些在SSD网络结构的最上端展示(图2)。假设特征曾大小为m*n通道数为p,检测的基本参数是一个3*3*p大小的卷积核用来产生每一类的得分或者默认区域坐标的偏置。每一个卷积核卷积过的mxn区域里都会产生一个输出值。区域的偏置输出是基于默认预期位置的在每个特征图上的相对位置,类似YOLO中使用中间全连接层来替代卷积核的结构。
3、 默认区域与比例。在网络最顶层的多特征图中,我们将一系列默认区域与每个特征图上的区域进行相关。默认区域以卷积的形式框在特征图上,所以每个真实区域对应的区域是固定的。每个特征图元组中,我们同时预测相对于默认区域的偏置与用来确定区域属于哪一类的类别的得分。对应k个已经知道位置的区域,我们计算c类的得分与4个相对偏置。这样在特征图的每个位置产生了总使用了个卷积核。为了理解默认区域,请参考图1。我们的默认区域与Faster R-CNN中的锚点的概念相似,只是我们应用到了不同分辨率的不同特征图上。使用不同默认区域都多个特征图的方法使我们可以区分不同输出区域的坐标。
图2 对比两个单步目标检测模型:SSD与YOLO。SSD模型在基础网络的最后新增了一些特征层,用来预测不同尺寸与比例的默认区域的偏置以及相关的置信度。SSD算法使用300*300输入可以达到YOLO使用448*448大小的准确率在VOC2007上,同时提高了运行的效率,尽管YOLO定制的网络比VGG16快。
训练SSD与训练其它在最终分类前使用区域提取与池化的典型目标检测器的一个关键不同是真实区域的信息需要分配到一系列固定检测结果输出上。有些版本需要在YOLO,区域提取需要Faster R-cnn与MutiBox。一旦分配完成,损失函数与反向传播都是端到端的了。训练还涉及到默认区域的选择,检测尺寸的选择以及疑难样本的优化与数据策略。
1、 匹配策略。训练时我们需要建立真实区域与默认区域的对应关系。对每个真实的区域我们从不同位置尺度比例的默认区域中选出与之配对的。我们首先选择与真实区域有最好重叠率的默认区域。这是原始MultiBox中使用的匹配方式,这种方式保证每个真实区域只有一个匹配的默认区域。与MultiBox不同的是我们匹配到所有与真实区域的重叠率大于0.5的默认区域。使用这种配对方式简化了学习的问题:这样允许网络预测多个高置信度的重叠默认区域而不是只挑一个重叠率最大的。
2、 训练目标函数。SSD的目标函数是从MultiBox的目标函数【7,8】中衍生出来的,扩展了处理多类目标的功能。我们将匹配到p类的j真实区域的第i个默认区域表示为,否则。通过以上提到的匹配策略,我们有,表示每个j真实区域可以有不止一个默认区域与值匹配。最终的目标损失函数是定位loss与置信度loss加权产生:
这里N表示匹配的默认区域的个数,定位的损失函数是由预测区域l与真实区域g的Smooth L1 loss【6】来计算。与Faster R-CNN相似,我们回归出目标区域的中心以及宽和高。我们的置信度loss是计算多类分类的置信度,交叉验证的时候权重序列设为1。
3、 选择默认区域的比例与尺寸。大多数卷积网络在较深的层里面减少特征图的大小。这样的策略带来的不止是计算量与内存的减少,还提供了一定的平移与尺度不变性。为了处理目标不同尺度的问题,有些方法【4,9】将样本转换为不同尺寸,并单独进行处理,最后将结果合并。然而,利用一个预测网络中几个不同层的特征图也可以达到同样的效果,而且不同尺寸的目标还可以共享参数。之前的论文【10,11】中展示底层的特征图可以提高更好的语义分割质量,因为底层特征往往包含目标的更多细节。同时,【12】中展示了最后的特征图的池化可以帮助平滑分割结果。图1展示了本框架中的特征图样本(8*8与4*4)。当然我们还额外在使用了其它相关计算。
同一网络中的不同层的特征图从经验上来说感受野的大小是不同的【13】。幸运的是SSD框架中默认区域不用回馈每一层的感受野。我们可以通过设计分块(tiling)的方法来学习图片上的指定区域与特别尺寸的目标在特征图区域上的回馈。假设我们需要使用m特征图做预测。每个特征图上默认区域的尺寸由下式进行计算:
这里是0.2,为0.95,意思是底层的尺寸为0.2,高层的尺寸为0.95,中间的其它层在这两个值之间等距分布。我们给默认区域加了不同的比例,将他们表示为 。我们可以计算每个默认区域的宽度与高度。对于比例为1的我们增加尺寸,在每个特征图位置产生了6个默认区域。我们设置每个默认区域为,这里表示第k特特征图的大小,。我们将默认区域的坐标归一化到【0,1】之间。实践中,也可以自己设计一系列最适合数据集的默认区域分布。
通过组合所有许多特征图上不同尺寸与比例的默认区域的预测结果产生了我们的预测结果序列,包含了多输入目标的尺寸与形状。例如图1中,狗在4*4的特征图的默认区域中,缺不在8*8的区域中。这是因为默认区域有不同的尺寸,而且并不匹配狗的框,因此作为负样本进行训练。
4、 疑难样本优化。匹配步骤后,大多数默认框都是负样本,特别是当正样本默认区域比较多的时候。这样训练的正负样本处于一种极度不均匀的状态。我们并不直接使用所有的负样本,而是将他们按照每个默认框的置信度进行排序,然后取置信度较高的。这样使得正负样本的比例保持在1:3左右。我们发现这样训练可以更快的收敛而且训练过程也更加稳定。
5、 数据参数。为了使模型对不同尺寸与外形的输入更加鲁棒,每个训练样本遵循以下方式进行随机取样:(1)使用整张原始样本。(2)取一个图像块,使得与目标的最小重叠率分别为0.1,0.5,0.7或者0.9。(3)随机取用与图像块。每个采样图像块与原始图片的比例时【0,1,1】之间,比例时0.5到2之间。我们留下真实框的重叠部分,如果它的中心在取样块中。在这种取样步骤后,每个取样的样本被变化为固定的尺寸,并取其中的百分之五十进行水平翻转。