SSD核心设计理念总结为以下三点:
1.采用多尺度特征图用于检测
2.采用卷积进行检测
3.设置先验框
所谓多尺度采用大小不同的特征图,CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小,正如下所示,一个比较大的特征图和一个比较小的特征图,它们都用来做检测。这样做的好处是比较大的特征图来用来检测相对较小的目标,而小的特征图负责检测大目标, 8x8的特征图可以划分更多的单元,但是其每个单元的先验框尺度比较小。
在Yolo中,每个单元预测多个边界框,但是其都是相对这个单元本身(正方块),但是真实目标的形状是多变的,Yolo需要在训练过程中自适应目标的形状。而SSD借鉴了Faster R-CNN中anchor的理念,每个单元设置尺度或者长宽比不同的先验框,预测的边界框(bounding boxes)是以这些先验框为基准的,在一定程度上减少训练难度。一般情况下,每个单元会设置多个先验框,其尺度和长宽比存在差异,如图所示,可以看到每个单元使用了4个不同的先验框,图片中猫和狗分别采用最适合它们形状的先验框来进行训练,后面会详细讲解训练过程中的先验框匹配原则。
SSD的检测值也与Yolo不太一样
对于每个单元的每个先验框,其都输出一套独立的检测值,对应一个边界框,主要分为两个部分。
第一部分是各个类别的置信度或者评分,值得注意的是SSD将背景也当做了一个特殊的类别,如果检测目标共有 |c|个类别,SSD其实需要预测 |c+1|个置信度值,其中第一个置信度指的是不含目标或者属于背景的评分。
第二部分就是边界框的location,包含4个值 (cx,cy,w,h) ,分别表示边界框的中心坐标以及宽高。
网络结构
SSD采用VGG16作为基础模型,然后在VGG16的基础上新增了卷积层来获得更多的特征图以用于检测。
总结
总的来说SSD在大目标检测上表现的比较好,但是在小目标检测上均比较低,SSD最低。
大目标:首选SSD。Faster R-CNN也可以。
小目标:Faster R-CNN,R-FCN