6. SSD算法

306 阅读3分钟

Faster RCNN带来的问题是:

  1. 对小目标检测效果差。
  2. 模型大,检测速度慢。

个人认为SSD更像是去掉了RPN和ROI的Faster RCNN,和yolo v1还是不像的。

1. SSD结构

SSD的结构为三大部分组成:

1.提取特征的卷积池化层;

2.用于产生default box、分类参数、回归参数的检测层;

3.softmax和bounding box regression层。

1.1 提取网络的卷积层

图片.png

图1-1 VGG16在SSD中用了5块卷积块

  • SSD使用了VGG16中的前5块卷积层在backbone中编号为Conv1,Conv2,Conv3,Conv4,Conv5。其中VGG16中的第4块卷积层的第3个卷积核即Conv4_3为第一个预测层。
  • SSD后面分别将VGG16的全连接层FC6和FC7转换成3x3的卷积层Conv6和1x1的卷积层Conv7。

图片.png

图1-2 SSD VS. YOLO v1

1.2 用于产生default box、分类参数、回归参数的检测层

20190121170001454.png

图1-3 SSD具体结构

  • 由图1-3可以观察到SSD获得不同尺度的feature map,同时在不同feature map上进行预测,SSD在增加运算量的同时可能会提高检测的精度。浅层输出的feature map具备边缘信息,深层输出的feature map具备复杂特征、语义信息。

我们进一步探究得到feature map后做了什么操作:

未命名文件.png

图1-4位置和分类

  • 由第四个检测层生成的feature map分成了3条线,如图1-4所示,第一条线生成该feature map的所有default box,第二条线生成用于位置回归参数矩阵(5,5,24),第三条线生成用于分类的参数矩阵(5,5,126)。后续一层通过softmax分类+bounding box regression即可从default box中预测到目标。

有多少个default box,有多少个类别和边界回归参数?

假设feature map中每个点有k个default box,每个default box有c个类别(包括背景类别,Pascal VOC 的话,c=21),那么feature map一个点类别有c×k。每个default box有4个边界框参数(x,y,h,w),那么feature map一个点位置参数有4×k。

1.3 SSD与Faster RCNN

图片.png

图1-5 SSD VS. Faster RCNN

  • 不同:由图1-5,对Faster RCNN而言,用RPN在最后一层feature map每个点生成9个Anchor;对SSD而言,每个预测层的feature map生成6个或4个bounding box,最后将这所有的bounding box进行NMS处理。SSD的default box细节如表1-1所示。
  • 相同:个人认为,SSD的后续softmax分类和bounding box回归操作是一样的,连损失函数都一样。

图片.png

表1-1 Default box的尺寸和数量细节

以上的操作都是在特征图上的操作,如果映射到原始图像上,会获得一个密密麻麻的bounding box集合。如图1-6所示:

图片.png

图1-6 SSD的Default boxes

2. 损失函数

SSD的损失函数与Faster RCNN的损失函数基本一致,包括类别损失和定位损失。

图片.png

类别损失:xijp={0,1}x^p_{ij}=\{0,1\},前景为1,背景为0。CipC_i^p为第ii个预测框对类别pp的预测概率。Ci0C_i^0为第ii个预测框对类别00(即背景类别)的预测概率。

图片.png

定位损失:定位损失只针对正样本进行损失计算。xijk=1x^k_{ij}=1liml^m_{i}是预测的第i个正样本的回归参数。gjmg^m_{j}(帽)是第i个正样本相对于其匹配的第j个ground truth的回归参数,其计算方法如下。

图片.png