我们提出了一种使用单个深度神经网络进行目标检测的方法,叫做SSD,我们的方法在特征图的每个位置,将bbox离散化成一组不同长宽比和尺度的默认box。在测试阶段,网络对每个默认box中的每个目标类别是否存在生成一个分数,然后对box进行调整来更好地匹配目标形状。另外,网络组合了来自多个不同分辨率的特征图的预测来应对不同尺寸的目标。SSD相对简单,因为它消除了生成proposal以及之后的像素或特征的resampling过程,将所有的计算整合到一个网络中,这使得SSD很容易训练,且可以直接被应用。
对于如数为300 * 300的图像,在VOC2007 test上,SSD可以达到74.3% mAP,59FPS;对于512 * 512输入,取得76.9% mAP,超过了Faster R-CNN。相对于其他one-stage的方法,SSD有着更高的准确率。
目前SOTA目标检测方法都是按照以下流程:**提出假设的bbox,对于每个box resample像素或特征,然后使用一个高质量的分类器。**这种流程尽管准确,但是计算量很大,对于实时检测应用来说太慢。最快的Faster R-CNN也只能达到7FPS,目前也有很多尝试来加速某个过程,但是迄今为止,极大提升速度往往牺牲了很大的准确率。
本文提出了第一个基于深度网络,但是没有resample像素或特征图来提出bbox假设,并且可以取得与其他方法相当的准确率的目标检测方法。我们的方法在保持准确率的同时,大幅提升了速度,这主要是得益于我们取消了proposal生成以及resample的流程。我们不是第一个这样做的,但是我们的一些方法使得准确率保持很高的水平。**我们的方法包括使用一个小的卷积核来预测目标类别和bbox位置的offsets,对不同的长宽比目标的检测使用分离的predictors(filters),为了多尺度检测,将这些filters应用在多个不同分辨率的特征图上。**这种在多个尺度的预测极大提升了准确率。我们将我们的贡献总结如下:
SSD方法基于一个卷积网络,生成一系列固定尺寸的bbox,然后对这些box中的目标类别是否存在进行评分,之后使用NMS来产生最后的检测结果。前面的网络层基于标准用来分类的网络结构(分类层之前),我们称为base基础网络,我们增加了后面的结构来得到好的效果。
Multi-scale feature maps for detection。
我们在基础网络之后增加了卷积特征层,这些层在尺寸上逐渐递减,使得网络可以对不同尺度进行检测。每个特征层的卷积模型都不相同。
Convolutional predictors for detection。
每个增加的特征层(或base网络中已有的特征层),使用一组卷积核来生成固定的检测预测结果。如图2中的最后几层所示。对于尺寸为m * n,p通道的特征层来说,用于预测的卷积核为3 * 3 * p的小卷积核,生成bbox对于每一类目标的分数或相对于默认bbox坐标的offsets。对于m * n的每个位置都进行预测,bbox的offset输出值是相对于默认bbox的偏差。(YOLO使用的是一个中间的fc层而不是卷积层来进行这步操作。)
Default boxes and aspect ratios。
对于每个特征层的每个cell,我们设定了一系列的默认bbox。默认的bbox按照卷积的方式平铺在特征图上,因此每个box的位置相对于它对应的cell都是固定的。在每个卷积图cell上,我们预测相对于这个cell对应的box的offset以及box中每类目标存在的分数。
详细来说,**对于每个特征图位置,生成k个box,每个box我们计算c类别分数,以及4个offsets。结果就是(c+4)k,对于m * n的特征图,输出结果为(c+4)kmn。**我们的默认box与Faster R-CNN中的相似,见图1,但是我们在几个不同分辨率的特征图上使用。
训练SSD和其他使用region proposal的目标检测方法最关键的不同在于,**ground truth信息需要分配到fixed set of detector outputs中的某个特定输出。**YOLO个Faster R-CNN的region proposal阶段也需要这样。一旦分配完成,loss函数和反向传播就可以end-to-end,训练过程包括了选择默认box和尺度,以及hard negative mining和数据增强。
Matching strategy。
训练中我们需要决定哪些bbox与ground truth相关联,然后按照这个训练。开始我们将每个ground truth box与默认box中有着最好IoU的进行匹配。之后我们将默认box与任意一个ground truth box进行match,如果IoU大于某个阈值(0.5),那么就认为匹配成功。匹配到的就是正样本,没匹配到的就是负样本。这简化了学习过程,使得网络对多个重叠的默认box预测高分数,而不是只pick有着最高IoU的那一个box。
Training objective。
设置 x i j p = { 1 , 0 } x^p_{ij}=\{1,0\} xijp={1,0}作为第i个默认box和第j个groundtruth box相对于类别p的匹配指示器。按照上面的匹配策略可知,(因为至少有一个最大分数的默认box与这个ground truth相匹配)。总体的目标loss函数是loc loss和置信度loss的加权求和。
N为相匹配的默认boxes的个数,如果N=0,loss设为0。loc loss为预测的box(l)和ground truth(g)参数之间的L1 Loss。我们对默认box的中心坐标(cx,cy)以及宽度(w)高度(h)进行回归,得到offsets。
Choosing scales and aspect ratios for default boxes。
受到之前方法放入其他,我们既使用了lower的特征图,也使用了upper的特征图,来处理多尺度的目标。图1展示了两个示例,使用了8 * 8和4 * 4的特征图。实际上,我们可以使用少的计算使用更多的特征图。
不同等级特征图通常有不同的感受野尺寸,幸运的是在SSD中,默认box不需要和每层的真实感受野相关联。**我们设计将默认box平铺,为了使特定的特征图学习对特定尺寸的目标进行响应。**假设我们使用m个特征图用来预测,每层特征图的默认box的尺度由下面式子计算得出:
其中,**smin = 0.2,smax = 0.9,意味着最低的特征层尺度为0.2,最高的尺度为0.9,所有层之间等差递增。我们为默认box选择多个长宽比,记为 a r ∈ { 1 , 2 , 3 , 1 / 2 , 1 / 3 } a_r\in\{1,2,3,1/2,1/3\} ar∈{1,2,3,1/2,1/3}。**我们对每个默认box计算宽度和高度:
对于长宽比为1的,我们增加一个长宽比为1,尺度为的box,这样每个特征图的每个位置就生成了6个默认box。我们将每个默认框的中心坐标设置为,其中,fk为第k个特征图的尺寸,i,j范围在0-fk之间。实际上,可以针对特定的数据集来设定默认框,这是一个开放的问题。
对所有的默认框进行预测之后,我们得到了一系列预测,包含了不同的输入目标尺寸和形状。比如,在图1中,狗在4 * 4的特征图中被匹配到一个默认box中,而在8 * 8的特征图中,没有匹配。这是因为这些box的尺度不同,没有匹配到狗。
Hard negative mining。
在matching之后,大部分的默认box都是negatives,这就使得正负样本很不平衡。我们不使用所有的负样本,**我们对它们的置信度loss进行排序,选择loss最高的一些,使得负样本:正样本接近3:1。**我们发现这会使得优化更快,训练更稳定。
Data augmentation。
为了使模型对不同目标尺寸形状更加鲁棒,每张图像都是通过随机进行下面的一种操作取样的。
采样到的每一个patch尺寸是原图的0.1-1,长宽比在[0.5,2]。如果ground truth的中心在采样patch中,我们就保存与ground truth重叠的部分。上面的采样操作之后,每个patch被resize到固定尺寸,0.5的概率水平翻转,使用了一些光度失真。
**Base network。**我们实验基于在ILSVRC CLS-LOC预训练的VGG16网络,我们将fc6和fc7转换为卷积层,将pool5从2 * 2,s2变为3 * 3,s1,使用atrous算法来填“洞”。移除了fc8和所有的dropout。我们使用初始学习率0.001、0.9动量、0.0005权值衰减来进行SGD训练,进行微调,batch size为32。
我们在这个数据集上将SSD与Fast R-CNN和Faster R-CNN的结果进行对比。
图2展示了SSD300模型的结构细节。我们使用conv4_3、conv7、conv8_2、conv9_2、conv10_2、conv11_2作为多个特征图来预测loc和confidence。在conv4_3我们设置默认box尺度为0.1。对于conv4_3、conv10_2、conv11_2,我们每个位置产生4个默认bbox,省略长宽比3和1/3,其他层每个位置生成6个。我们使用L2归一化来对每个位置的特征范数置为20,然后再反向传播中学习这个scale。
表1展示了我们的低分辨率模型SSD300已经比Fast R-CNN更准确,使用512 * 512训练网络,效果超过了Faster R-CNN。
图3中展示了SSD可以高质量的检测多个目标类别。大部分的预测都是正确的,召回率有85-90%。与R-CNN相比,SSD有更少的定位错误,因为它直接学习去regress目标形状和分类,而不是当作两个步骤。然而对于相似的目标类别,SSD有更多的confusion(尤其是动物),可能是因为我们对多类别中共享了locations。
图4展示出SSD对于bbox size非常敏感,也就是说,对于小的目标比大的目标表现更差。这很容易理解,因为那些小的目标在后边的层可能没有任何信息。提升输入尺寸可以帮助提升检测小目标的效果,但是仍有很大提升空间。SSD对于不同尺寸长宽比的目标非常鲁棒。
为了更好地理解SSD,我们使用控制变量的实验来探究各部分的效果。
**Data augmentation is crucial。**Faster R-CNN使用原图和水平翻转来训练,我们使用了更expensive的策略,表2展示出,我们使用这种策略之后提升了8.8%mAP。
**More default box shapes is better。**如2.2中所讲,我们在特征图每个位置生成6个默认框,如果移除3和1/3,效果降低了0.6%,继续移除2和1/2长宽比,又下降了2.1%。使用更多的默认box尺寸使得效果更好。
**Atrous is faster。**我们使用Atrous版本的VGG16,如果我们使用原本的VGG16,pool5还是2 * 2—s2,不下采样fc6和fc7的参数,增加conv5_3用来预测,效果相似,但是速度下降了20%。
**Multiple output layers at different resolutions is better。**SSD的一个主要贡献就是在不同输出层使用了不同尺度的默认box。为了measure获得到优势,我们逐渐的移除层,然后比较结果,为了公平比较,我们每次移除一层,我们调整默认box平铺来保证box的总数不变。表3展示了,是由更少的层准确率降低了很多,最大从74.3降到62.4。
我们使用与在VOC2007上相同的设置进行训练,0.001学习率训练60k迭代,再使用0.0001训练20k迭代。表4展示了SSD300和SSD512的结果。
我们可以看到与VOC 2007test上相似的结果,将尺寸提升到512,我们比Faster R-CNN准确率高4.5%,相比于YOLO,我们更加准确。
当使用在COCO训练过的模型进行微调之后,我们SSD512达到80.0%mAP。
我们又在COCO上训练了SSD300和SSD512。COCO上的目标比VOC上的小,我们对所有层使用了更小的默认box,将最小的默认框尺度从0.2降到0.15,在conv4_3上的尺度为0.07。
表5展示了结果。SSD300在mAP@[0.5:0.95]上超过了Fast R-CNN,提升尺寸到512之后,在所有IoU上都超过了Faster R-CNN。
**我们推测Faster R-CNN相比于SSD来说,更擅长小目标,因为它有两次box refinement。**图5中,我们展示了一些检测样本。
我们使用与COCO上同样的网络结构来应用到ILSVRC DET数据集上,使用SSD300,我们在val2上得到43.4%的mAP,这验证了SSD是一个高质量实时检测的通用框架。
2.2中介绍的数据增强策略提升了模型的表现,尤其在PASCAL VOC数据集上。通过这种策略生成的crops可以看做是放大操作;**我们同样可以进行缩小操作来创建更多小的训练样本,我们开始在原图像大小16倍的canvas上随机放置图像,画布上的值为图像的均值。**我们将训练的迭代次数翻倍,如表6中所示,我们在多个数据集上都可以观察到2-3%的mAP提升。图6展示了这种数据增强方法对小目标的检测效果提升。
**另一种提升SSD的方式就是设计一种更好的默认框平铺策略,使它的位置和尺度与特征图每个位置的感受野更好的对齐。**我们留到未来的工作中。
考虑到我们的方法生成的box数量很大,因此测试阶段使用非极大值抑制NMS就十分关键。对置信度添加一个阈值0.01,我们可以过滤掉大部分box,然后使用nms,对于每类的IoU阈值0.45,每张图像保留200个预测结果。这一步对于SSD300在VOC上每张图像花费1.7ms,与所有新加层的花费时间(2.4ms)相近。
表7比较了SSD、Faster R-CNN、YOLO,我们的两种SSD在速度和准确率上都超过了Faster R-CNN;尽管Fast YOLO可以达到155FPS,但是它比我们的mAP低了22%,SSD300是第一个可以达到超过70%mAP的实时检测方法。超过80%的计算时间都是用在了base网络上,使用更快的base网络可能还会加速我们的方法。
图像中的目标检测主要有大类方法,基于滑窗的方法和基于region proposal classification的方法,早期的代表为DPM和SS。在R-CNN出现之后,基于region proposal的方法就变为主流,主要使用了深度卷积网络来提升proposal生成的质量。
我们的SSD与RPN网络非常相似,我们同样使用了一系列固定的默认box,类似于RPN中的anchor。但是我们没有对这些框进行池化得到特征,然后送入另一个分类器。我们的方法同时在每个box中生成每一类目标的分数和坐标的offset。因此我们的计算量很少比Faster R-CNN少得多。
对于另一种基于滑窗的方法,OverFeat在知道特征图每个位置的置信度之后直接预测bbox。YOLO使用最后的特征图同时预测置信度和bbox(bbox的坐标在所有类中共享,不是class-specific的)。**我们的SSD就使用这种策略,但是我们的方法更加灵活,因为我们使用了不同分辨率的特征图,使用了不同长宽比的默认框。**如果我们每个位置只产生一个默认框,我们就与OverFeat类似,如果我们只对最后一层特征图进行操作,且没有使用多个长宽比,那么我们就与YOLO类似。
本文提出了SSD,一个快速的single-shot目标检测器。我们模型的关键特征就是使用了多尺度的特征层以及多长宽比的默认框。我们验证发现,使用更多的默认框可以提高检测效果。我们验证了,使用VGG16作为基础网络,我们的SSD效果在准确率和速度上都达到SOTA。
我们相信我们的网络可以作为大型的系统中的一个小的目标检测单元。我们未来的研究方向就是研究它在系统中使用RNN网络同时对视频中的目标进行检测和跟踪。