SSD: Single Shot MultiBox Detector
intro: ECCV 2016 Oral
arxiv: http://arxiv.org/abs/1512.02325
paper: http://www.cs.unc.edu/~wliu/papers/ssd.pdf
slides: http://www.cs.unc.edu/%7Ewliu/papers/ssd_eccv2016_slide.pdf
github(Official): https://github.com/weiliu89/caffe/tree/ssd
video: http://weibo.com/p/2304447a2326da963254c963c97fb05dd3a973
github: https://github.com/zhreshold/mxnet-ssd
github: https://github.com/zhreshold/mxnet-ssd.cpp
github: https://github.com/rykov8/ssd_keras
github: https://github.com/balancap/SSD-Tensorflow
github: https://github.com/amdegroot/ssd.pytorch
github(Caffe): https://github.com/chuanqi305/MobileNet-SSD
针对YOLO类算法的定位精度问题,2016年12月北卡大学教堂山分校的Wei Liu等提出SSD算法,将YOLO的回归思想和Faster R-CNN的anchor box机制结合。通过在不同卷积层的特征图上预测物体区域,输出离散化的多尺度、多比例的default boxes坐标,同时利用小卷积核预测一系列候选框的边框坐标补偿和每个类别的置信度。
在整幅图像上各个位置用多尺度区域的局部特征图边框回归,保持YOLO算法快速特性的同时,也保证了边框定位效果和Faster R-CNN类似。但因其利用多层次特征分类,导致其对于小目标检测困难,最后一个卷积层的感受野范围很大,使得小目标特征不明显。
主要贡献
- 引用了SSD,一个单次检测器,用于多个类别,比先前技术的单次检测器(YOLO)速度更快,并且更准确很多,实际上和使用regionproposal、pooling的更慢技术 一样准确(包括Faster RCNN)
- SSD方法的核心是使用小卷积滤波器来预测特征图上固定的一组默认边界框的类别分数和位置偏移。
- 为了实现高检测精度,我们从不同尺度的特征图产生不同尺度的预测,并且通过宽高比来明确地分离预测。
- 总之,这些设计特性得到了简单的端到端训练和高精度,进一步提高速度和精度的权衡,即使输入相对低分辨率图像。
- 实验包括在PASCAL VOC,MS COCO和ILSVRC上评估不同输入大小下模型耗时和精度分析,并与一系列最新的先进方法进行比较。
SSD方法基于前馈卷积网络,其产生固定大小的边界框集合和框中对象类别的分数,接着是非最大化抑制步骤以产生最终检测。
下图为SSD与YOLO模型比较:
SSD模型在基础网络的末尾添加了几个特征层,这些层预测了不同尺度和宽高比对默认框的偏移及其相关置信度。
创新点
1. 多尺度特征图检测
将卷积特征层添加到截断的基础网络的末尾。这些层尺寸逐渐减小,得到多个尺度检测的预测值。检测的卷积模型对于每个特征层是不同的(参见在单个尺度特征图上操作的Overfeat [4]和YOLO[5])。
2. 检测的卷积预测器
每个添加的特征层(或可选的基础网络的现有特征层)可以使用一组卷积滤波器产生固定的预测集合。这些上图中SSD网络架构顶部已指出。对于具有p个通道的大小为m×n的特征层,使用3×3×p卷积核卷积操作,产生类别的分数或相对于默认框的坐标偏移。在每个应用卷积核运算的m×n大小位置处,产生一个输出值。边界框偏移输出值是相对于默认框测量,默认框位置则相对于特征图(参见YOLO 架构,中间使用全连接层而不是用于该步骤的卷积滤波器)。
3. 默认框与宽高比
将一组默认边界框与顶层网络每个特征图单元关联。默认框对特征图作卷积运算,使得每个框实例相对于其对应单元格的位置是固定的。在每个特征映射单元中,我们预测相对于单元格中的默认框形状的偏移,以及每个框中实例的每类分数。具体来说,对于在给定位置的k个框中每个框,我们计算c类分数和相对于原始默认框的4个偏移量。这使得在特征图中的每个位置需要总共(c+4)k个滤波器,对于m×n特征图产生(c+4)k*m*n个输出。默认框类似于Faster R-CNN [2]中使用的anchor boxes,但将其应用于不同分辨率的特征图中。在多个特征图中使用不同的默认框形状,可以有效地离散可能的输出框形状空间。
4. 匹配策略
在开始的时候,用 MultiBox 中的 best jaccard overlap 来匹配每一个 ground truth box 与 default box,这样就能保证每一个 groundtruth box 与唯一的一个 default box 对应起来。
但是又不同于 MultiBox ,本文之后又将 default box 与任何的 groundtruth box 配对,只要两者之间的 jaccard overlap 大于一个阈值,这里本文的阈值为 0.5。
附:jaccard overlap公式如下图所示:
通过上边的公式能够发现其实jaccard overlap就是IOU,即两个集合的交集除以两个集合的并集。
5. 数据增广
每一张训练图像,随机的进行如下几种选择:
1. 使用原始的图像
2. 采样一个 patch,与物体之间最小的 jaccard overlap (IOU)为:
0.1,0.3,0.5,0.7与0.9
0.1
,
0.3
,
0.5
,
0.7
与
0.9
3. 随机的采样一个 patch
采样的 patch 是原始图像大小比例是 [0.1,1] [ 0.1 , 1 ] ,aspect ratio 在 12 1 2 与 2 2 之间。当 groundtruth box 的 中心(center)在采样的 patch 中时,保留重叠部分。在这些采样步骤之后,每一个采样的 patch 被 resize 到固定的大小,并且以 的概率随机的 水平翻转(horizontally flipped)
6. 修改VGG16结构
将 VGG 中的 FC6 layer、FC7 layer 转成为 卷积层,并从模型的 FC6、FC7 上的参数,进行采样得到这两个卷积层的 parameters。
还将 Pool5 layer 的参数,从
2×2−s2
2
×
2
−
s
2
转变成
3×3−s4
3
×
3
−
s
4
,外加一个 pad(1)
7.加入atrous
修改网络结构以后改变感受野(receptive field)的大小。因此,采用了 atrous algorithm 的技术,这里所谓的 atrous algorithm,就是 hole filling algorithm。如下图所示:
8. 整理
从上边的图片中能够看出:
1. 数据增广
数据增广对识别精度的提升有着很大的帮助,可以将mAPcong 65.5提升为74.3,在所有的创新点上起到了最为重要的作用。Fast R-CNN 与 Faster R-CNN 使用原始图像,以及 0.5 的概率对原始图像进行水平翻转(horizontal flip),进行训练。如上面写的,本文还使用了额外的 sampling 策略,
2. 使用更多的 default boxes能够提升检测精度。
SSD 中我们默认使用 6 个 default boxes(除了 conv4_3 因为大小问题使用了 3 个 default boxes)。如果将 aspect ratios 为
13
1
3
、
3
3
的 boxes 移除,performance 下降了 。如果再进一步的,将
12
1
2
、
2
2
default boxes 移除,那么 performance 下降了近 。
3. atrous算法
如前面所描述,我们根据 ICLR 2015, DeepLab-LargeFOV,使用结合 atrous algorithm 的 VGG16 版本。
如果我们使用原始的 VGG16 版本,即保留 pool5 的参数为:
2×2−s2
2
×
2
−
s
2
,且不从 FC6,FC7 上采集 parameters,同时添加 conv5_3 来做 prediction,结果反而会下降
0.7
0.7
,同时最关键的,速度慢了
50
50
。