论文:SSD: Single Shot MultiBox Detector
Github : SSD
SSD类似YOLO,和YOLO同属于目标检测算法中基于回归的算法。
Abstract
作者提出了SSD模型,把输出的bounding boxes看成一组不同尺度,不同大小的boxes。说白了,就是在不同尺度上的feature map上设置一系列不同大小的default boxes。实现了多尺度的检测,这个思路有点类似于faster rcnn里面的anchor boxes。不过anchor boxes实现多尺度的方法不是在不同的feature map上做回归,而是直接设置不同比例的boxes。SSD模型相比于rcnn系列模型,取消了region proposal的过程,即没有像素,特征重采样(对应于faster rcnn 的ROI Pooling)的过程,提升了运行速度,并且得益于多尺度的检测,精度上并没有损失,甚至在512x512大小的图片上超过了faster rcnn。
Introduction
基于深度学习的目标检测网络主要有两大类,一类是以RCNN为代表的region proposals方法,该类方法速度较慢,最快的faster rcnn在GPU上也只有7FPS,另一类是以YOLO为代表的基于回归的算法。YOLO虽然在速度上很快(45 FPS),但是精度很低。作者本文就是解决了速度与精度的矛盾问题,提升了模型的速度,同时避免了精度的损失,SSD和YOLO同属一类基于回归的算法。
SSD
1.预测过程
- 图片统一被缩放到固定大小(300x300),然后送入base network(作者用的是VGG),之后再通过多次卷积,每次卷积具有一定的stride,使得每次卷积后的特征图变小。这样就得到了一系列不同尺度的特征图。然后在这些不同尺度的特征图直接回归出目标的位置和类别信息。
- 所谓“直接回归出”:以上述结构中Conv7(FC7)特征图为例,该特征图大小为19x19x1024,此时,对于该19x19大小的特征图中,用(c+4) x k个滤波器去卷积,每个滤波器的大小应该为1024 x kernel_size x kernel_size(这里作者的kernel_size = 3)。那么卷积之后输出的就是19 x 19 x (c+4) x k 的张量。(c + 4) x k表示对于19 x 19特征图中的每一个像素都预测k个框,每个框有c+4个评分,c表示物体的属于哪一个类别,4表示框相对于default box(宽,高,中心位置坐标)的偏移量
2.训练过程
- 首先需要对每一个ground truth匹配相应的default box,一个ground truth可以匹配多个default box。如果ground truth和default box的重叠率大于一个阈值,则匹配为正样本,否则为负样本。
-
目标函数:偏置偏差损失+类别置信度损失
其实就是位置偏移量以及是目标的置信度两项的和。具体计算公式参见论文,不赘述
- default boxes大小设置
根据相应的特征图的尺度,设置不同大小的default box,具体计算公式参见论文。作者用了6个default box - 其他trick
Hard negative mining: 只有那些有最高训练损失(training loss)的负面样本(negative example)子集才会在每次训练迭代中被使用。SSD 的「正负」比一直保持在 1:3。
Data augmentation: 随机裁剪
实验结果
取得了速度上的提升,精度也还不错。作者做的工作其实就是速度和精度的一个trade-off。主要创新之处在于:
- 多尺度的特征图上回归出坐标位置信息,这是精度的保证
- 相比于YOLO,SSD利用卷积而不是全连接进行回归出位置信息,这样参数少了很多,这是速度的保证
- 利用default boxes进行粗定位,类似于anchor机制,相比于YOLO直接划分cell进行回归一定程度上也可以保证其精度。