文章提出SSD物体检测模型,将一系列bounding boxes(由不同的aspect ratio和scale的feature map生成)离散化(default boxes),在保证准确率的同时提高了速度,即使输入的图像很小,SSD仍具有比其他模型高的准确率。
预测阶段:
SSD没有使用proposal generation、subsequent pixel 和 feature resample ,这使得SSD更加容易训练并且更容易融合到需要使用检测模型的系统中。
在PASCAL VOC、COCO和ILSVRC数据集上的实验证明SSD比其他使用了object proposal step的模型要快得多。
对于300 × 300的图像输入,在VOC2007测试集上SSD实现了74.3%的mAP;对于512 × 512 的图像输入,SSD实现了76.9%的mAP,超过了Faster RCNN。
代码实现:
Caffe: a fast open framework for deep learning.
这篇论文的核心思想是:
using a small convolutional filter to predict object categories and offsets in bounding box locations, using separate predictors (filters) for different aspect ratio detections, and applying these filters to multiple feature maps from the later stages of a network in order to perform detection at multiple scales.
文章贡献:
文章的第二部分描述了SSD的架构以及训练时的方法,后续(第三部分)会展示模型细节以及实验结果
SSD基于前向传播卷积网络,产生一系列固定大小的bounding boxes以及每个box包含物体实例的得分(score),之后是一个non-maximum suppression step(非极大抑制)来预测最终结果。SSD模型最开始的部分被称为 base network(一个标准的图像分类架构),之后是这篇文章额外添加的辅助结构:
SSD与其他使用 region proposal 的检测模型的不同之处在于它需要将 ground truth 信息放入一系列固定输出的boxes里面,即SSD事先确定的一系列bounding boxes。
将ground truth 信息赋予到唯一的一个box之后,就可以进行end-to-end的损失函数的计算以及反向传播的计算了。
SSD的训练过程中包含了对default box 的选择、scale的选择、hard negative mining 以及扩张策略(augmentation strategies)。
训练过程中,我们需要从一堆不同位置,不同尺寸,不同aspect ratio的boxes中确定对应 ground truth 的唯一的default box。开始的使用我们跟 MultiBox 一样使用最佳的 jaccard overlap,但是跟 MultiBox 有区别的是,MultiBox使用的是覆盖度最大的box,而SSD则是从覆盖率大于某一阈值(0.5)的boxes中挑出一个box,简化了问题。
SSD的目标函数源于MultiBox的目标函数,但是对其进行扩展,使网络能够处理多目标类别。令第 i 个default box 对应第 j 个 ground truth 的第 p 个类别的值为:
其中,若值为1,则表示匹配,不匹配则为0。根据上面的策略,我们一定会有:
等于1表示刚好有唯一一个 default box 与 ground truth 相匹配,但是该式子表明可能存在多个default boxes 与之匹配。
总的损失函数是位置的损失函数(localization loss,loc)与分类置信度的损失函数(confidence loss,conf)的加权求和:
其中,N 是与 ground truth 相匹配的default boxes的数量。如果 N = 0,损失将被置为0。位置的损失函数(localization loss,loc)使用的是Faster R-CNN的Smooth L1 loss,用在预测的box(l)以及 ground truth(g)的参数中,来回归default bounding box(d)的中心位置(cx, cy)和它的宽(w)和高(h)。
分类置信度的损失函数(confidence loss,conf)使用的是softmax loss,输入每一类的置信度 c:
交叉验证中权重项 α被置为 1。
为了处理不同尺寸的目标,有些检测模型结合了图像在不同大小下的预测结果,然而SSD使用了网络中不同layer的feature maps也能产生相同的效果,同时还实现了所有目标尺寸的参数共享。
之前的工作已经表明,因为低层的layer保留的细节更多,故使用低层的feature map可以提高效果,获得更多的语义信息。(相似的,增加 global context pooled 可以帮助平滑分割结果)
因此,SSD同时使用低层和高层的feature map来检测。下图展示了 8 × 8 以及 4 × 4 的feature map:
一般来说,不同层次的layer的感受野(receptive field)的大小不同,但是,SSD模型的 default box 不需要与每一层的感受野相适应。本文设计的设计中特定的 feature map 可以适应特定尺寸的物体。假设我们使用 m 个 feature maps 来预测结果,计算每个 feature map 的 default box 的大小:
其中,smin表示最低层的 default box 的大小(取0.2),smax表示最高层的default box 的大小(取0.9)。再用不同的长宽比的 default box ,表示为ar ∈ { 1, 2, 3, 1/2, 1/3 },则每一个 default box 的宽(width)和高(height)可以计算出来:
对于长宽比等于1 的情况,本文还专门增加了一个default box大小为s’k:
所以现在每个 feature map 特定的位置一共有 6 个default boxes。每个 default box 的中心被设置为:
|fk| 是第 k 个 feature map 的大小,i, j ∈[ 0, |fk| )。
结合了所有来自所有不同大小的 feature maps 的所有位置的不同尺寸和长宽比的所有不同 default boxes 的预测结果,我们现在有许许多多的预测结果,包括目标物不同的大小和形状。例如,下图所示,狗匹配上了 4 x 4的feature map中的一个default box, 而 8 x 8 的 feature map 中却一个都没有匹配,这是因为那些有着不同尺寸的 boxes 不能很好的与狗的 box 相匹配,所以在训练时被认为是负样本(negative)。
匹配之后,大多数的 default boxes 被认为是负样本,特别是在 default boxes 的数量特别大时,产生的负样本更多,这种情况下训练时模型难以收敛。这里介绍了一种正样本(positive)和负样本数量极度不平衡的情况下的训练方法。本文没有使用所有的负样本,而是将 default boxes 的负样本根据 confidence loss 的大小进行排序,并选出其中最高的一些负样本,保证负样本与正样本的比例不超过 1 : 3 。这样的策略使得优化过程更快,并且训练时更稳定。
为了使输入大量不同的大小和形状的目标物体之后模型的鲁棒性(rubust)增强,每一张用于训练的图片都会被随机地进行下列选择其中之一:
采样的碎片大小是原始图像的 [0.1, 1] 倍之间,长宽比在 1/2 到 2 之间。当 ground truth 的重叠区域的中心是采样碎片(sample patch)时,我们保留这一部分的重叠部分。上述的采样步骤完成后,每一个采样碎片的大小将会被重新设置到一个固定的大小,并以 0.5 的概率被水平翻转(horizontally flipped)。
本文的实验都基于VGG16 (VGG16清楚的结构图可参考VGG16结构图),并在ILSVRC CLS-LOC数据集上进行与训练的,与 DeepLab-LargeFOV相似,本文将 fc6 、fc7 layer转换为卷积层,并从这两层的参数中采样。
此外,将 2 x 2 步长为 2 的池化层 p5 改成 3 x 3 步长为 1 ,并使用 atrous algorithm 来填补 “holes” 。关于 atrous algorithm 算法,其实就是带洞卷积,带洞卷积可以减小卷积核的大小。如下图所示,图©就是带洞卷积:
本文还移除了所有的 dropout 层以及 fc8 层。
文章使用初始学习率(learning rate)为 10-3 ,动量(momentum) 为0.9,weight decay 为0.0005,batch size 为32 的SGD(随机梯度下降)微调(fine-tune)了模型的结果。学习率下降的策略根据数据集的不同有细微的改变,我们会在后面讨论这一细节。
在这个数据集上与Fast R-CNN 以及 Fast R-CNN 作比较,所有网络均用相同的预训练网络(VGG16)。
如上图所示,SSD300使用 conv4_3, conv7(原来的 fc7 层), conv9_2, conv10_2, conv11_2来预测位置(location)以及置信度(confidence),并将 conv4_3 的 default box 的大小设置为 0.1还要使用 L2 normalization)。文章采用 xavier (关于这个初始化方法,我初略的看了一下,没有去了解推导过程,大概是在保证梯度不能为 0 的前提下保证各层的激活值和状态梯度的方差在传播过程中的方差保持一致,即Glorot条件)的初始化方法来初始化所有新加的卷积层。对于 conv4_3, conv10_2, conv11_2 卷积层,每个 feature map location 仅连接 4 个 default box 并且采用的是长宽比为 1/3 和 3,而在其他的卷积层则连接了 6 个 default box。
由于 conv4_3 有着同其他卷积层不一样的feature scale,所以还要使用 L2 normalization 将该卷积层的每个位置的feature scale 调整到 20 并且在反向传播时学习 scale。
文章使用10-3的学习率进行了 40k 次迭代,然后继续在训练集中分别用 10-4 和 10-5 的学习率进行 10k 次迭代。
下表显示低分辨率的SSD300模型确实比Fast R-CNN 准确,当输入为 512 x 512 的图像时(VOC2007 trainval), SSD300甚至更加准确,超过 Faster R-CNN 1.7% mAP。当使用更多的数据进行训练时,SSD300超过Faster R-CNN 1.1% 而SSD512超过Faster R-CNN 3.6%。
在COCO trainval135k 数据集上,SSD512获得最好的结果:81.6%。
SSD可以高质量的预测多种目标类别,大部分预测置信度是正确的,它的召回率(recall)达到 85% ~ 90%。可以看出,SSD在相似目标特别是动物的预测上错误率较高,可能是因为它共享了不同类别的location。
下图(Fig.4)说明SSD在小目标的预测上不如大目标的预测,这并不奇怪,因为在更高层的卷积网络中,小目标所留下的特征信息已经所剩无几了,增大输入的size可以帮助解决这一问题,但仍有提升空间。
为了更好的理解SSD,本文采用控制变量法来测试SSD模型中每一部分对实验最终结果的影响。
因为COCO数据集上的物体的scale比PASCAL VOC的小,所以我们每一层都使用更小的default box。
在COCO数据集上实验的结果如下:
由于在这个模型中会生成大量的 box,所以要采用非极大值抑制(non-maximum suppression,nms),当我们使用 0.01 的置信阈值时,我们可以过滤掉更多的 box,然后使用在 jaccard overlap 上非极大值抑制并且每张图片都只取前 200 个detection。