SSD(SingleShotDetector)论文解读
一、相关背景
- 速率问题:在目标检测的速率上明显存在问题,此前最快的检测模型为Faster R-CNN(速率为每秒钟7帧)
二、主要贡献
- 提出了第一个基于目标检测的深度神经网络,不需要为回归框重新取样像素或特征,而且和之前的方法同样精确。
- 在检测速率和检测精度上有了较大的提高。
- 为了实现高精度检测,作者对于不同尺寸的特征图提出了不同的预测,通过各个方面的比例调整明确分离了这些预测。
三、模型结构
作者此处把VGG-16作为一个基础网络,然后对这个网络进行添加修改,以下是添加的几个特征。
- Multi-scalefeaturemapsfordetection:作者把卷积特征图作为一层添加到了去端的基础网络上,这些层的尺寸逐渐减小,使得检测的预测在多尺度下进行。
- Convolutional predictors for detection:每一个添加进去的特征图层通过使用卷积过滤器可以产出一系列固定的检测预测结果。对于一个尺寸为mn且有p个通道的特征层来说,对于预测检测参数的基本因素是一个33*p的小核,他可以输出一个种类的分数或是和默认框相关的偏置值。
如图所示,作者在模型中插入了几个特征层(3、6、7、8、9、10、11),来预测不同尺寸、比例以及置信度的偏置值。 - Default boxes and aspect ratios :对于以上几个特征层,作者把一系列默认BB框和特征图的单元联系起来。在每一个特征图单元,我们预测和默认框形状相关的偏置值,以及在每一个框中预测一个类存在的分数。举个栗子,对于一个特征层,我们计算c个类的分数和4个最初默认框的偏置值,这样对于一个mn的特征图,就会有(c+4)kmn的输出。
对于SSD的框架:
SSD只需要输入图片和训练期间每个目标的真实框。在这几个不同尺寸的特征图中,我们在每一个位置用不同尺寸比例的默认框。对于每一个默认框,我们预测他的形状大小以及所有目标种类的置信度。在训练时,我们首先将这些默认框和真实框做匹配。例如:图中两个框和猫成功匹配,一个框和狗成功匹配。
-
loss函数:
主要包含两部分:一是位置损失函数loc;另一个是置信度损失函数conf.
N为匹配的默认框的数量,loc 损失是预测框(l)和真实框(g)之间的L1loss.
其中(cx,cy)是默认框的中心点,d为默认框,w/h分别为他的宽和高。 -
关于先验框的尺寸和比例:
对于每个特征图中的先验框尺寸计算公式如下:
s(min) = 0.2、s(max) = 0.9,分别表示最底层有0.2的尺度,最高层有0.9的尺度,其它层均在二者中间并均匀分布。a®∈{1,2,3,1/2、1/3}
每个默认框的中心坐标为:|f(k)|指的是第k个特征图的面积。 -
Hard negative mining:
这三个单词经常可以看到,它的意思是这样的:在匹配过程结束后,大多数的先验框其实都是负样本(即效果不好的),但是这时候正样本和负样本的比例会有较为严重的失衡,这时,就会选择负样本中得分最高的那些作为正样本(就是那些虽然不是很好,但也能勉强凑活的那种),从而使得正负样本比例为1:3.经过实验证明,这样使得模型有了更快地速度和更加稳定的训练过程。 -
Data augmentation:
为了让模型对于各种输入更加具有鲁棒性,数据扩容是一个常规操作。主要包括以下几点:
① 使用完整的原始输入图片
② 对原始图片进行分块截取,分别取和目标重合度为0.1 、0.3、0.5、0.7、0.9的部分。
③ 对这些部分随机取样。
四、实验设计
- 数据集: ILSVRC CLS-LOC 、PASCAL VOC、COCO、ILSVRC DET
- PASCAL VOC 2007
比较对象:Fast R-CNN、Faster R-CNN、SSD比较结果:
为了更好的理解模型各个组分的作用,作者对不同组分进行了选择实验:
可以看出数据扩容提高了8.8%的mAP,证明数据扩容对于提高SSD模型性能有着重要的作用。同时,更多的先验框也更有优势,用更多类型的先验框形状可以让神经网络的预测工作更加轻松。而Atrous的意思为空洞,作者在VGG16的下取样中采用了这种方式。对于空洞卷积,有如下解释方式(图源知乎):
由上表可知:多输出层的的结构更加有利。SSD很大的一个贡献就是在不同的输出层使用了不同尺寸的先验框。
- PASCAL VOC 2012
此处作者将SSD与YOLO进行比较,明显胜过YOLO模型: - COCO
一般来说,COCO数据集里的目标更小一点,因此对于所有层要用小一点的先验框。
如下是部分COCO检测结果:
为了证明数据扩容带来的影响,作者对不同数据集组合作了如下比较:
最后,作者对几种方法进行了综合比较,比较结果如下所示: