目标检测(二)SSD

一、背景

针对YOLO和Faster R-CNN的各自不足与优势,WeiLiu等人提出了Single Shot MultiBox Detector,简称为SSD算法(单步多框检测),其英文全名是Single Shot MultiBox Detector,属于one-stage方法,YOLO速度是比较快,但是会有许多漏检,尤其是小目标,SSD算法同时融合YOLO的无显示候选框提取和Faster-CNN 的Anchor 机制,并在特征空间中融合了不同卷积层的特征进行预测。本文详细介绍SSD的相关特性与网络结构,并在后面用tensorflow实现SSD。

二、特性

多尺度网络结构

目标检测(二)SSD

上图是SSD和YOLO的网络结构,通过对比可以发现,SSD的优点就是它生成的 default box 是多尺度的,这是因为SSD生成default box 的 feature map 不仅仅是CNN输出的最后一层,还有利用比较浅层的feature map 生成的default box。所以SSD对于小目标的检测一定会优于YOLO v1(小目标经过高层卷积后特征几乎都消失了)。同时,又因为SSD生成的多尺度default box一定有更高概率找到更加贴近于 Ground Truth 的候选框,所以模型的稳定性是肯定比YOLO强的(YOLO的bounding box很少,只有98个,如果距离GT比较远,那么修正 bounding box 的线性回归就不成立,训练时模型可能会跑飞)。但是SSD的候选框数量是三种经典网络中最多的,有8732个,所以训练时应该会比较慢。

特征分层提取 (大特征图(靠前的特征图)检测小目标,小特征图(靠后的特征图检测大目标)

SSD网络主体设计的思想是特征分层提取,并依次进行边框回归和分类。
目标检测(二)SSD

多尺度采用大小不同的特征图,CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小,在前面大的特征图中,如8X8的FeatureMap cell中,每个cell 中会产生k个先验框(default box), 此先验框会根据公式算出比例,大的特征图比例会小一些,因此在大的特征图上检测小目标更加精准。 每个先验框包括两部分,第一部分是各个类别的置信度或者评分,第二部分边界框的location,包含边界框的中心坐标以及宽高。

具体scale公式与loss函数参考https://zhuanlan.zhihu.com/p/33544892

如图

目标检测(二)SSD
目标检测(二)SSD

三、总流程

1、 基于VGG 前几层,每一层都得出一个feature map, 大的feature map检测小目标,小的feature map检测大目标;

2、 在feature map上使用scale 等公式计算框的多少与大小, 每个feature map cell 都有k个大于自己的框;

3、 将框与边界框标注的中心 作匹配,得出正负样本;

4、 每个框有类别与坐标值,参与训练,之后再后向传播;

5、 最后利用边框回归得出正确的框;

四、具体实现

balancap/SSD-Tensorflow

五、附录

目标检测|SSD原理与实现

深度学习 – SSD 算法流程详解