论文阅读笔记:SSD: Single Shot MultiBox Detector

感想

SSD是在YOLO和faster R-CNN基础上进行构建的,它继承了YOLO的速度快的特点,和Faster R-CNN准确的特点,应该说是对现有框架的突破,我跑过SSD的目标检测模型,准确率确实比Faster R-CNN高了一大截,后面还提供了SSD实验的完整分析过程,有兴趣的可以看原论文,我是九月份看的这篇论文,然后写了一个简短的博客,可能有很多错误,现在我又重读了一遍,对博客进行了内容的增加和修改,增加了实验设置部分,如果有什么疑问,可以私聊一同探讨。

1 介绍

当前目标检测系统都是下列方法的变体:假定边界框(hypothesizebounding boxes),对每个方框进行重采样像素或者特征,应用一个高质量的分类器。这种流程在检测基准(detectionbenchmarks)上盛行,因为选择性搜索在PASCAL VOC,COCO和ILSVRC检测上的效果最好,这些都是基于Faster R-CNN的。这些方法在embedded系统中是高密集型的计算,甚至要有高端硬件支持,对于实时应用来说太慢了。这些方法的常用检测速度是每帧多少秒(seconds per frame,SPF),甚至是最快的检测器,faster R-CNN,也只能达到每秒7帧(frames per second,FPS).很多人在改进检测速度上做了很多尝试,但是增加速度大都以损失检测精度为代价。

这篇文章首先提出了基于目标检测器的网络(object detector),它不用为边界框假设进行重采样像素或特征,但是精度同样和其他方法一样。这个方法提高了高精度检测的速度,在VOC2007测试集上为59FPS,mAP为74.3%,而faster R-CNN是7FPS,mAP是73.2%,YOLO为45FPS,mAP为63.4%。这些基本的改进是来自消除边界框提议和与之相关的像素或特征重采样阶段。我们改进的地方是使用一个小卷积滤波器(small convolutional filter)去预测目标分类和边界框的位置的偏移,使用分开的滤波器去处理不同纵横比的检测(aspect ratio detections),把这些滤波器应用到后面网络阶段的特征图中(feature maps),这是为了把检测器用来检测不同比例的图片。修改这些以后,尤其是在使用不同层预测不同比例的刻度,我们可以得到一个在相对低分辨率输入下的高精度输出,还增加了检测的速度。这些贡献可能单个看的话贡献很小,但是我们注意到实时目标检测的精度从YOLO的 64.3%的mAP到SSD的74.3%mAP.这是相对于残差网络的一个在精度上的较大的改进。另外,还大大提高了高质量检测的速度,这可以拓宽应用的环境,在这个环境中计算机视觉是有用的。


贡献

1.     我们提出了SSD,一个多分类单杆检测器(single-shot detector),比现在的单杆检测器(YOLO)更快,和那些较慢技术精度一样,并且超过了区域提议(region proposals)和池化(pooling)的方法,包括faster R-CNN.

2.     SSD的核心部分是预测分类得分和一个固定集合的默认边界框的框偏移,这些是通过使用卷积滤波器到特征图上实现的。

3.     为了获得高检测精度,我们会从不同比例的特征图来产生不用比例的预测,通过纵横比来分开预测。

4.     这些设计特征可以进行端到端训练,精度还很高,在输入图片分辨率很低的情况下精度也能保持高精度。改进了速度和进度折中均衡的局面。

5.     实验包含模型之间速度和精度的分析,用了不同输入大小,数据集为PASCALVOC,COCO和ILSVRC,比较了最近的最新的方法。


2 The Single Shot Detector (SSD)

2.1模型

SSD基于前馈卷积网络,针对那些方框里的目标类别实例,产生一个固定大小的边界框的集合和分数,紧接着一个非最大抑制(non-maximum suppression)步骤去产生最后的检测。早期的网络是一个标准的结构,用于对高质量图片进行分类,舍弃了最后的分类层,我们叫做基网络。我们然后对网络增加放大结构去产生有下面主要特征的检测。

1.     多比例特征图检测(Multi-scale featuremaps for detection),我们在基网络最后增增加了卷积特征层。这些层按照大小减少的次序连接,能够进行多尺度预测。

2.     卷积检测预测器(Convolutionalpredictors for detection)每个添加的特征层或者现存的来自基网络的特征层,在使用一个卷积滤波器(convolutional filters)集合的情况下,可以产生一个固定集合的检测预测(detection predictions)。特征层的大小为m*n,有p个channels.预测参数的可能的基本单元是一个3*3的小核(small kernel),它要么产生一个类别的分数,要么一个相对默认方框坐标的形状偏移(shape offset)。每一个m*n的运用核的位置中,会产生一个输出值。边界框的偏移输出值是相对于默认的位置的,它使用一个中间全连接层,而不是一个卷积滤波器。


论文阅读笔记:SSD: Single Shot MultiBox Detector_第1张图片

上图是两个single shot detection模型的比较:SSD和YOLO.我们的SSD模型在基网络的末端增加了一些特征层,用来预测默认不同比例方框的偏移(offsets),纵横比和与之相关的置信度(confidences)。SSD的输入是300*300,在VOC2007测试集上,其性能超过了448*448输入大小的YOLO。输入变小也提高了网络的速度。

1.     默认方框和纵横比(Default boxes andaspect ratios),我们设置了默认边界框的集合和每个特征图单元(cell)关联,这是对于网络顶层的多特征图来说的。默认的方框(default boxes)以卷积的方式覆盖了卷积图,因此每一个方框对应的cell是固定的,在每个特征映射单元上,我们预测相对默认方框形状的偏移,和每一类的分数,这表明每一个方框中一个类的出现。特别的,对于给定位置的每一个方框(for each box out of k at a given location,根据我的理解翻译,智能做参考,英文原文已经贴出),我们计算c类别的分数,和4个相对于原来默认方框形状的偏移。结果总共有(c+4)个滤波器应用到卷积图的每个位置,产生了来自m*n的卷积图的(c+4)kmn个输出。默认方框的解释如下,他和Faster R-CNN的anchor方框相似,但是,我们把他们应用到不同分辨率的特征图上的时候,由于我们在一些特征图上面有不同的默认方框形状,这使得我们能高效的计算出离散化可能输出方框形状的空间。


论文阅读笔记:SSD: Single Shot MultiBox Detector_第2张图片

这是SSD框架,(a)SSD在训练期间仅需要一张输入图片和每个目标的ground truth的方框。在卷积操作中,我们评估评估一个默认方框的集合,这些方框在每一个位置又不同的纵横比,在一些特征图中有不同的比例(如(b)中的8*8和4*4),对每一个默认的方框,我们预测形状的偏移和所有物体分类的置信度((c1,c2,…,cp ))。在训练时间,我们首先把默认的方框和groundtruth的方框对应上。例如,我们已经把两个默认方框分别对应到猫和狗了,他们当成正量,剩下的当成负量。模型损失是一个位置权重损失之和(Smooth L1)置信损失(softmax).


2.2 训练


训练SSD和训练一个典型的使用区域提议(region proposals)检测器的主要区别,ground truth信息在固定检测器输出的情况下需要指定到特定的输出。SSD的某个版本也需要在YOLO上训练,和Faster R-CNN以及multibox的区域提议阶段,一旦这些指派决定了,损失函数和反向传播就可以端到端,训练包括选择默认盒子的集合,检测比例,Hard negative mining(对于目标检测问题就是图像中不存在目标的样本集合,具体解释见下面的参考文献),数据增强(data augmentation)策略等。

匹配策略

训练期间,我们需要决定那个默认盒子匹配一个ground truth,并且网络也相应的进行训练,对于每个我们从默认盒子中选择的ground truth盒子,在位置,纵横比,和比例上不同,我们用bestjaccard overlap 方法匹配ground truth的盒子和默认盒子。不像MultiBox, jaccard overlap的值高于一个阈值(0.5),我们就将二者匹配,这简化了学习问题,使得网络可以对多覆盖(multiple overlapping)默认盒子预测得到高分,而不是选出最大覆盖的那个覆盖。

训练目标

SSD训练目标是有MultiBox目标推导出来的,但是我们把它拓展成可以处理多目标分类问题,令x^pi,j={1,0}为一个指示器,代表匹配第i个默认盒子和第j个ground truth盒子的分类p。在以上匹配策略中,我们有Σix^pi,j>=1,整体的目标函数损失就是位置损失(localization loss,loc)和置信度损失(confidence loss,conf)的权重和:

其中N是匹配默认盒子的数量,如果N=0,我们设置损失为0.位置损失是一个Smooth L1损失,代表预测的box(l)和ground truth的box(g)参数。和Faster R-CNN相似。我们对下面参数尽心回归补偿,中心为(cx, cy)的默认包围盒子(d),以及默认包围盒子的宽(w)和高(h).


论文阅读笔记:SSD: Single Shot MultiBox Detector_第3张图片

置信损失是softmax多分类置信度(c)损失,



权重项α在交叉验证的时候设置为1。

为默认盒子选择不同比例和纵横比

为了解决不同目标的比例,一些方法是把图片处理成不同的大小,然后结果不同大小图片的结果。可是,通过利用一个网络的不同层的特征图,我们可以模仿达到相同的效果,所有比例的目标还可以共享参数。前面的研究表明使用底层的特征图可以提升语义分割的质量,因为低层捕获了输入目标更多的细节信息,这些信息可以帮助平滑语义结果。受这些方法的启发,我们使用特征图的高层和低层特征,最开始的样例特征图)(8*8,4*4)被应用到了这个框架,我们在一个小的计算负载下可以使用得更多。

特征图一个网络不通等级下有不同的接受域大小(receptive field sizes),幸运的是,在SSD框架之内,默认的盒子没必要匹配每层的真正接受域(receptive fields),我们设计了默认盒子的tiling(查了一下中文意思,觉得翻译不过来,就直接上中文意思了:盖瓦; 贴瓷砖; (总称)瓦; 瓦工;),这使得特定特征图学习对特定比例的目标进行响应。假设我们使用m特征图进行预测,每一个特征图的默认盒子的比例计算如下:


Smin是0.2,Smax是0.9,意思是最小层的比例是0.2,最高层的比例是0.9.所有层都在这两值之间,以固定间隔分隔开。我们对默认盒子加上不同的纵横比,即ar属于{1,2,3,1/2,1/3}.我们可以计算每个默认盒子(default box)宽和高:



对于纵横比为1,我们也加了一个默认盒子,比例(scale)为


每个特征图位置产生6个默认盒子,我们把默认盒子的的中心为:



|fk|是第k个正方形特征图的大小,I,j属于[0,fk)。

 

通过结合不同比例和纵横比预测所有的默认盒子,我们有一个离散的预测集合,覆盖不同输入目标大小和形状。例如,上面的那幅图,狗在4*4得特征图中匹配了一个默认盒子,但是没有匹配到8*8的特征盒子,这是因为这些盒子有不同的比例,不匹配够的盒子,因此被认为是训练期间的负样本。

Hard negative mining

匹配完之后,大多数的默认盒子是负值,特别是当默认盒子的数量很大的时候,这导致了正负训练样例不均衡的的情况。因此我们把训练样本进行分类,我们使用对每个默认盒子有最高置信损失的的负样本,取出排在前面的负样本,使得负正样本的比率最多3:1.使用了之后,网络优化更快和训练更稳定了。

数据增强(Data augmentation

为了识模型对不同输入目标大小,形状,表现得更加健壮,每个训练样例随机的按照下面进行采样:

l  使用完整的原图片输入

l  采样一个小块,使得目标的最小jaccard overlap是0.1,0.3,0.5,0.7,0.9.

l  随机采样一个小块

每个样本块的大小是原图片大小的[0.1,1],纵横比在1/2到2之间。如果ground truth的中心在样本块里,我们保留那个重叠部分的ground truth盒子,在完成前面的采样之后,我们把样本块重新调整成固定大小,以0.5的概率进行翻转。

 

3实验结果

Base network

我们的实验都是基于VGG16的,VGG16在ILSVRC CLS-LOC数据集上进行了预训练。和DeepLab-LargeFOV相似,我们把fc6和fc7转换成了卷积层,从fc6和fc7进行下采样,把pool5从2*2-s2变为3*3-s1.我们使用`a trous algorithm去填充“holes”。我们移除了所有的dropout层和fc8层。我们fine-tune模型,学习率为0.001,momentum为0.9,权重衰减为0.0005,batch size为32。衰减策略的学习率在每个数据集上稍有不同,稍后我们会详细描述,其caffe模型的训练和测试代码开源地址为:https://github.com/weiliu89/caffe/tree/ssd

3.1  PASCAL VOC2007

在这个数据集上,我们用VOCtest(4592)来和fast R-CNN和FasterR-CNN做对比。所有的方法都是用的同一个预训练的vgg16网络进行fine tune的。

论文阅读笔记:SSD: Single Shot MultiBox Detector_第4张图片

上图显示的是SSD300模型的结构,我们使用conv4_3, conv7(fc7), conv(8_2), conv(9_2), conv(10_2)和conv(11_2)来预测位置和置信度,设置conv4上的默认框的比例为0.1,我们对新加进来的卷积层使用“xavier”方法进行初始化。对于conv4_3,conv 10_2和conv11_2,我们在每个特征图位置上只关联4个默认框,省略的纵横比为1/3和3.对于所有其它的层,我们放置了6个默认框,conv4_3有一个不同于其它层的特征尺度,我们使用L规范技术,把特征图上每个位置的特征规范到20的比例,然后在反向传播期间来学习这个比例。我们使用0.001的学习率来做了40 000次迭代,只有用了0.0001和0.00001的学习率做了10000次迭代。,

论文阅读笔记:SSD: Single Shot MultiBox Detector_第5张图片

如上图,当在VOCtrainval上训练的时候,低分辨率SSD300模型比FastR-CNN更准确,当用SSD在512*512输入的图片上的时候,更精确了,比Faster R-CNN的mAP多了1.7%,如果我们用更多的数据(例如,07+12)训练,SSD300比Faster R-CNN精度高了1.1%,比SSD512的精度高了3.6%。如果我们用COCO trainval35k数据集进行训练,在07+12数据集上做fine-tuning,模型用得是SSD512,我们得到了最佳的结果:81.6%.

       为了更细节的理解我们的两个SSD模型的性能,我们使用了分析工具。

论文阅读笔记:SSD: Single Shot MultiBox Detector_第6张图片

上图显示的是SSD可以高质量的检测不同目标的类别(大白色区域),它的置信度检测的大多数是正确的,recall是85%-90%,比“weak”(0.1 jaccard overlap)标准更高一点。和R-CNN相比,SSD有着很少的定位错误,意味着SSD在定位上更好,因为它直接学习物体形状的回归,并且分类目标类别,而不是使用两个分离的步骤。可是,SSD对相似的目标类别(特别是对动物)有着困惑,部分是因为我们对多个类别共享位置。

论文阅读笔记:SSD: Single Shot MultiBox Detector_第7张图片

图4显示的是SSD对边界框的大小非常敏感,换句话说,它在小目标上比大目标的表现更差。这不惊讶,因为那些小目标可能在顶层没有任何信息。增加输入的大小(例如,从300*300到500*500)可以提升检测小目标的性能,但是仍然有很多的空间去改进。积极的一面是,我们很明显可以看到SSD在大目标上表现很好,并且对不同比例的目标是非常鲁棒的,因为我们对每个特征图位置使用不同比例的默认框。

3.2 模型分析

为了更好的理解SSD,我们做了控制实验,检测每个部分对性能的影响。对于所有的实验,我们使用相同的设置,输入的大小是300*300,当然除了对设置或者组件的特别改变的除外。

数据增强是关键

Fast 和Faster R-CNN使用原始图片,并且水平翻转来训练。我们使用了一个拓展的采样策略,和YOLO相似。

论文阅读笔记:SSD: Single Shot MultiBox Detector_第8张图片

上表结果表明,用了这个采样策略mAP提升了8.8%。我们不知道我们的采样策略会对Fast和Faster R-CNN产生多大的影响,但是他们可能受益很小,因为它们在分类期间做了一个特征池化操作,这对于设计的目标翻译(object translation)是相对鲁棒的。

默认框的形状越多越好

我们对每个特征图用了6个默认框,如果我们移除了1/3和3比例的方框,性能下降了0.6%。通过进一步移除比例为1/2和2的方框,性能又一次下降了2.1%,使用多样的默认框的形状会使得网络很容易做预测方框的任务。

Atrous 更快

我们使用的是VGG16子采样的atrous版本,跟DeepLab-LargeFOV差不多。如果我们使用完全的VGG16, 保留pool5的2*2-s2,不从fc6和fc7中下采样参数,增加conv5_3用于预测,结果是一样的,而速度满了20%。

不同分辨率的的多输出层更好

SSD的主要贡献是在不同的输出层上使用不同比例的默认框,为了衡量其优点,我们进一步移除了层数并且比较结果。为了公平比较,每次我们移除一层,我们调整默认框,进行平铺,使得方框的总数和原来的方框数目(8732)一样。我们通过在剩下的层上堆叠更多比例的方框,如果有必要,还会调整方框的比例,我们对每个设置没有详尽的进行平铺。

论文阅读笔记:SSD: Single Shot MultiBox Detector_第9张图片

上图显示的是只有少数几层的时候精度下降得很快,从74.3%下降到62.4%。当在一层上堆叠不同比例的的方框时,许多方框在图片边界,需要小心的处理。我们使用了Faster R-CNN的策略,忽略了边界上的方框。我们观察到了一些有趣的趋势,例如,如果我们使用特别粗糙的特征图(例如,conv11_2(1*1)或者conv10_2(3*3)),它会很明显影响到性能,理由可能是我们没有足够的大方框来覆盖剪枝后的大目标。当我们使用更精细的分辨图时,性能再次提升了,因为即使在修剪足够数量的大方框以后,也会保留。如果我们仅使用conv7做预测,性能表现更差,加强信息,在不同的层上传播不同比例的方框是至关重要的。此外还有,我们的预测不依赖于ROI pooling,因此就没有在低分辨率特征图上的collapsing bins问题,SSD结构结合来自不同分辨率的特征图的预测,可以取得比Faster R-CNN更好的效果,并且使用了低分辨率的输入。

3.3 PASCAL VOC2012

我们使用了相同的设置作为那些用于我们的基本的VOC2007的实验,此外,我们使用了VOC2012 trainval和VOC2007 trainval和test(21503张图片)用于训练,在VOC2012 test(10991张图片)上进行测试。我们用学习率0.001迭代了60 000次,随后用0.0001的学习率迭代了20 000次,

论文阅读笔记:SSD: Single Shot MultiBox Detector_第10张图片

上表显示的是我们的SSD300和SSD512的模型,我们观察到了这和VOC2007 test上的性能表现趋势一样,我们的SSD300与Fast/Faster R-CNN相比提升了精度,通过增加训练和测试图片大小到512*512,相比Faster R-CNN,精度提升了4.5%,和YOLO相比,SSD精度高多了,这可能是由于是使用了多种特征图的卷积默认框,训练期间的对应的策略。当我们fine-tune从COCO上训练的模型,我们的SSD 512取得了80%的mAP,比Faster R-CNN高了4.1%.

3.4 COCO

为了进一步验证SSD框架,我们在COCO数据集上训练了我们的SSD300和SSD512结构,因为SSD上的目标比PASCAL VOC上的小,我们对所有的层使用了更小的默认框,我们用了2.2部分的策略,但是现在我们的最小默认框的比例是0.15,而不是0.2. conv4_3上的默认框的比例是0.07(例如对于300*300的图片,像素为21)。

       我们使用trainval35k来进行训练,我们开始用学习率为0.001训练160 000次,继续用0.0001的学习率训练40 000次,最后用0.000 01的学习率迭代40 000次。

论文阅读笔记:SSD: Single Shot MultiBox Detector_第11张图片
表5显示的是test-dev2015的结果,和我们在PASCAL VOC dataset上观察到的一样,SSD300在[email protected]和mAP@[0.5:0.95]上比Fast R-CNN更好,SSD300在[email protected]和Faster R-CNN以及ION相似,但是在[email protected]上表现比较差。通过把图片的大小增加到512*512,SSD512比Faster R-CNN更好,有趣的是,我们观察到SSD512在[email protected]上比faster R-CNN高5.3%, 而在[email protected]上只高了1.2%。我们也观察到它对大目标有更好的AP(4.8%)和AR(4.6%),但是对小目标的改进很小,AP(1.3%),AR(2.0%)。和ION相比,对于大目标和小目标在AR上的提升是更相似的(5.4% vs 3.9%)。我们推测Faster R-CNN比SSD在小目标上跟强,因为它有两个步骤的方框改良,在RPN部分和Fast R-CNN 两部分。

论文阅读笔记:SSD: Single Shot MultiBox Detector_第12张图片

图5显示的是用SSD512在COCO-dev上的检测样例.

3.5 Preliminary ILSVRC results

我们把相同的用于COCO的网络结构应用到ILSVRC DET dataset上,我们训练了一个SSD300的模型,数据集为ILSVRC2014 DET train和val1.我们首先用学习率为0.001来迭代320 000次,继续以学习率0.000 1来迭代80 000次,最后以学习率0.000 01来迭代40 000次。我们在val2上得到了43.4 mAP。再次,它验证了SSD是一个有着高质量实时检测的一般框架。

3.6 Data Augmentation for Small Object Accuracy

在没有像Faster R-CNN的follow-up的resampling步骤,对于小目标的分类任务,SSD相对比较艰难,数据增强策略对性能的提升很大,特别是对小数据集,例如PASCALVOC,通过策略产生的随机分割可以被认为是一种放大操作,可以产生更大的训练样例,为了实现缩小操作,产生更多小的训练样本,在做随机分割操作之前,我们开始随机的把一幅图片放置在16x的原图大小的的画布上,用均值来填充。通过引入了这些数据放大的技巧,我们有更多的训练图片,我们得迭代两倍的次数,我们得到了在多种数据集上的2%-3%mAP的增加,如下表所示。

论文阅读笔记:SSD: Single Shot MultiBox Detector_第13张图片
论文阅读笔记:SSD: Single Shot MultiBox Detector_第14张图片

上图显示新的放大技巧可以提升对小目标的精度,结果强调了数据增强策略对最终模型精度的重要性。

  一个可以改进SSD的方式是设计一个更好的默认框的平铺,使得位置和比例可以更好的和每个位置和特征图的接受域对齐,我们把这个作为future work。

3.7 Inference time

考虑到从我们的方法中产生大量的方框,运用non-maximum suppression在推测阶段是必须的,通过使用置信度阈值为0.01,我们可以过滤掉大多数方框。我们之后应用nms,每个类别的jaccard overlap为0.45,保留每张图片的前200个检测。对于SSD300和20VOC类别,这个步骤对每张图片会花费1.7秒,这接近所有新加的层的总时间(2.4秒),我们用batch size为8, 使用TitanX,cuDNN v4,Intel Xeon [email protected]

论文阅读笔记:SSD: Single Shot MultiBox Detector_第15张图片

上表显示SSD,YOLO,Faster R-CNN的比较,SSD300和SSD512方法在精度和时间上超过了Faster R-CNN,即使YOLO可以运行155fps,但是精度下降了几乎22%mAP。据我们所知,SSD是第一个取得mAP超过70%的实时方法。注意到80%的前向时间都是花在了基网络。因此,使用一个更快的基网络可以进一步提升速度,可能会使得SSD512也达到实时。

单词

Pipeline  管道; 输油管道; 渠道,传递途径;

Scales  刻度( scale的名词复数 ); 水垢; 比例(尺); 鱼鳞;

参考文献

[1] rcnn中的Hardnegative mining方法是如何实现的?.

https://www.zhihu.com/question/46292829

[2]hard nagetivemining

[3] Wei Liu, Dragomir Anguelov, DumitruErhan, Christian Szegedy, Scott E. Reed, Cheng-Yang Fu, Alexander C. Berg:SSD:Single Shot MultiBox Detector. ECCV (1) 2016: 21-37

[4]. 翻译SSD论文(Single Shot MultiBox Detector),仅作交流~.    http://lib.csdn.net/article/deeplearning/53059

[5]. The à trous algorithm. http://www.eso.org/sci/software/esomidas//doc/user/98NOV/volb/node317.html




你可能感兴趣的:(目标检测)