SSD: Single Shot MultiBox Detector

SSD: SingleShot MultiBox Detector

Wei Liu1 , DragomirAnguelov2 ,DumitruErhan3 ,Christian Szegedy3,

Scott Reed4 ,Cheng-Yang Fu1 ,Alexander C. Berg

摘要:我们提出了一种使用单个深层神经网络检测图像中目标(或对象)的方法。我们的方法,名为SSD,将边界框的输出空间离散化为一组默认框,该默认框在每个特征图位置有不同的宽高比和尺寸。在预测期间,网络针对每个默认框中的每个存在对象类别生成分数,并且对框进行调整以更好地匹配对象形状。另外,网络组合来自具有不同分辨率的多个特征图的预测,以适应处理各种尺寸的对象。我们的SSD模型相对于需要region proposal的方法是简单的,因为它完全消除了proposal生成和后续的像素或特征重采样阶段,并将所有计算封装在单网络中。这使得SSD容易训练和直接集成到需要检测组件的系统。PASCALVOCMS COCOILSVRC数据集的实验结果证实,SSD与使用额外的region proposal的方法具有可比较的准确性,并且速度更快,同时为训练和推理提供统一的框架。与其他单级方法相比,SSD具有更好的精度,即使输入图像尺寸更小。对VOC2007,在300×300输入,SSDNvidia Titan X58FPS时达到72.1%的mAP500×500输入SSD达到75.1%的mAP,优于类似的现有技术Faster R-CNN模型。代码链接:https://github.com/weiliu89/caffe/tree/ssd

关键词:实时对象检测; 卷积神经网络

1引言

        当前,现有对象检测系统是以下方法的变体:假设边界框,对每个bounding box重采样像素或特征,再应用高质量分类器。选择性搜索[1]方法后,Faster R-CNN[2]PASCAL VOCMSCOCOILSVRC检测取得领先结果,这种流程成为检测领域的里程碑,具有更深的特征,如[3]所述。尽管准确,但这些方法对于嵌入式系统来说计算量过大,即使对于高端硬件,对于实时或接近实时的应用来说也太慢。这些方法的检测速度通常以秒每帧数为单位进行测量,高精度检测器(基础 Faster R-CNN)最快仅以每秒7帧(FPS)运行。目前,已有广泛的尝试,通过研究检测流程的每个阶段(参见第4节中的相关工作)来建立更快的检测器,但是迄今为止,显著增加的速度仅仅是以显着降低的检测精度为代价。

        本文提出了第一个基于深层网络的对象检测器,它不会对边界框假设的像素或特征进行重新取样,但和这种做法一样准确。这使高精度检测速度有显着提高(在VOC2007测试, 58 FPS 72.1mAP,对Faster R-CNN 7 FPS mAP 73.2%,YOLO 45 FPS mAP 63.4%)。速度的根本改进来自消除边界框proposal和随后的像素或特征重采样阶段。这不是第一篇这么做的文章(cf [4,5]),但是通过增加一系列改进,我们设法提高了以前尝试的准确性。我们的改进包括使用不同宽高比检测的单独的预测器(滤波器),预测边界框中的对象类别和偏移,并且将这些滤波器应用于网络后期的多个特征图,以便执行多尺度检测。通过这些修改,我们可以使用相对低分辨率的输入实现高精度检测,进一步提高处理速度。虽然这些贡献可能独立看起来很小,但我们注意到,所得系统提高了PASCAL VOC的高速检测的准确性,从YOLO63.4mAP到我们提出的网络的72.1mAP。相比近期工作,这是在检测精度上的较大提高,残差网络上的卓越工作 [3]此外,显着提高高质量检测的速度可以拓宽计算机视觉有用使用范围。

总结我们的贡献如下:

--- 我们引用了SSD,一个单次检测器,用于多个类别,比先前技术的单次检测器(YOLO)速度更快,并且更准确很多,实际上和使用region proposalpooling的更慢技术一样准确(包括Faster RCNN)。

---  SSD方法的核心是使用小卷积滤波器来预测特征图上固定的一组默认边界框的类别分数和位置偏移

--- 为了实现高检测精度,我们从不同尺度的特征图产生不同尺度的预测,并且通过宽高比来明确地分离预测。

--- 总之,这些设计特性得到了简单的端到端训练和高精度,进一步提高速度和精度的权衡,即使输入相对低分辨率图像。

--- 实验包括在PASCAL VOCMS COCOILSVRC上评估不同输入大小下模型耗时和精度分析,并与一系列最新的先进方法进行比较。

2、单次检测器(SSD

        本节介绍我们提出的SSD检测架构(第2.1节)和相关的训练方法(第2.2节)。之后,3节呈现特定数据集的模型细节和实验结果。

                     SSD: Single Shot MultiBox Detector

1SSD架构。 aSSD在训练期间仅需要每个对象的输入图像和真实标签框。卷积处理时,我们在具有不同尺度(例如(b)和(c)中的8×84×4)的若干特征图中的每个位置处评估不同宽高比的小集合(例如4个)默认框。对于每个默认框,我们预测对所有对象类别((C 1C2...Cp))的形状偏移和置信度。在训练时,我们首先将这些默认框匹配到真实标签框。例如,两个默认框匹配到猫和狗,这些框为正,其余视为负。模型损失是位置损失(例如平滑L1 [6])和置信损失(例如Softmax)之间的加权之和。

2.1 模型

       SSD方法基于前馈卷积网络,其产生固定大小的边界框集合和框中对象类别的分数,接着是非最大化抑制步骤以产生最终检测。早期网络基于高质量图像分类(在任何分类层之前截断(译者注:特征提取网络,例如:VGGGooglenetAlexnet)的标准架构,我们将其称为基础网络(我们的试验中使用了VGG-16网络作为基础,其他网络也应该能产生好的结果)。然后,我们向网络添加辅助结构,产生了具有以下主要特征的检测:

多尺度特征图检测:我们将卷积特征层添加到截断的基础网络的末尾。这些层尺寸逐渐减小,得到多个尺度检测的预测值。检测的卷积模型对于每个特征层是不同的(参见在单个尺度特征图上操作的Overfeat [4]YOLO[5])。

                      SSD: Single Shot MultiBox Detector

2:两个单次检测模型之间的比较:SSDYOLO [5] 我们的SSD模型在基础网络的末尾添加了几个特征层,这些层预测了不同尺度和宽高比对默认框的偏移及其相关置信度。 300×300输入尺寸的SSDVOC2007测试中的精度显着优于448×448输入的YOLO的精度,同时还提高了运行速度,尽管YOLO网络比VGG16快。

检测的卷积预测器:每个添加的特征层(或可选的基础网络的现有特征层)可以使用一组卷积滤波器产生固定的预测集合。这些在图2SSD网络架构顶部已指出。对于具有p个通道的大小为m×n的特征层,使用3×3×p卷积核卷积操作,产生类别的分数或相对于默认框的坐标偏移。在每个应用卷积核运算的m×n大小位置处,产生一个输出值。边界框偏移输出值是相对于默认框测量,默认框位置则相对于特征图(参见YOLO [5]的架构,中间使用全连接层而不是用于该步骤的卷积滤波器)。

默认框与宽高比对于在顶层网络中的多个特征图我们将默认边界框集合与每个特征图单元关联起来。默认框对特征图作卷积运算,使得每个框实例相对于其对应单元格的位置是固定的。在每个特征映射单元中,我们预测单元格中相对于默认框形状的偏移,以及每个框中存在的类别实例的每类分数。具体来说,对于在给定位置的k个框中每个框,我们计算c类分数和相对于原始默认框的4个偏移量。这使得在特征图中的每个位置需要总共(c+4× k个滤波器,对于m×n特征图产生(c+4× k×m×n个输出。有关默认框的说明,请参见图1。我们的默认框类似于Faster R-CNN [2]中使用的anchor boxes,但我们将其应用于不同分辨率的特征图中。在多个特征图中使用不同的默认框形状,可以有效地离散可能的输出框形状空间。

2.2 训练

         训练SSD和训练使用region proposalpooling的典型分类器的关键区别在于,真实标签信息需要被指定到固定的检测器输出集合中的某一特定输出。Faster R-CNN [2]MultiBox [7]region proposal阶段、YOLO [5]的训练阶段也需要类似这样的标签。一旦确定了该指定,则端对端地应用损失函数和反向传播。训练还涉及选择用于检测的默认框和尺度集合,以及hard negativemining和数据增广策略。

匹配策略在训练时,我们需要确定哪些默认框对应一个真实标签检测,相应地,训练网络。请注意,对于每个真实标签框,我们从默认框中进行选择,这些默认框随位置、纵横比和比例而变化。启始时,我们匹配每个真实标签框与默认框最好的jaccard重叠。这是原始MultiBox [7]使用的匹配方法,它确保每个真实标签框有一个匹配的默认框。与MultiBox不同,匹配默认框与真实标签jaccard重叠高于阈值(0.5)的默认框。添加这些匹配简化了学习问题:它使得有多个重叠默认框时网络预测获得高置信度,而不是要求它选择具有最大重叠的那个。

              SSD: Single Shot MultiBox Detector

          SSD: Single Shot MultiBox Detector

             SSD: Single Shot MultiBox Detector

               SSD: Single Shot MultiBox Detector 

             SSD: Single Shot MultiBox Detector

              SSD: Single Shot MultiBox Detector

         SSD: Single Shot MultiBox Detector 

            SSD: Single Shot MultiBox Detector 

          SSD: Single Shot MultiBox Detector

         SSD: Single Shot MultiBox Detector
         SSD: Single Shot MultiBox Detector

        SSD: Single Shot MultiBox Detector

      SSD: Single Shot MultiBox Detector

        SSD: Single Shot MultiBox Detector

          SSD: Single Shot MultiBox Detector

注:部分借鉴网上资源,感谢网络资源,根据原文修改了其中一些东西。