/ COMPUTERVISION, DEEPLEARNING, SSD

目标检测(one stage)-SSD

一. YOLO和SSD的对比

yolo和ssd两个模型结构如下图所示:

两个模型之间最主要的差别:

  • 在特征抽取层其实相差不大:YOLO用的是器自己的conv架构;SSD用的是VGG-16
  • 主要差别在结果预测上:YOLO用的是全连接层后得到7*7的grid,利用每个grid的boundingbox来做目标检测;SSD利用不同大小的feature map来做目标检测。

二. 模型结构

2.1 特征抽取层

那么如何从VGG-16的结构变成SSD的结构呢?下图是一个VGG-16的示意图。

将VGG-16的最后一层pooling层变成3*3 的卷积层,再接一个atrous conv(空洞卷积)拿到不同大小的feature map。如下所示。

2.2 空洞卷积

这里运用atrous conv layer而不是普通的conv layer的目的:

  • 在相同的感受野的同时,能获得更快的运算速度

如下图所示,是5 * 5 的卷积的kernel和3 * 3的atrous conv的kernel的感受野。

可以看到,如果是3 * 3的conv层接5 * 5的conv层,那么feature map中单一点的感受野其实是7个像素点;而如果是3 * 3的conv层接3 * 3的atrous conv层,能达到相同的感受野,且计算速度更快。

2.2 推理层

下图是SSD的推理层的示意图。

可以看到,图片经过vgg16之后,首先会得到较浅的feature map,随后经过几层卷积之后,得到较为深层的feature map(所以在上图中仅有较深层的能检测到车这种大物体),同时每层的feature map都会经过一个检测器和分类器得到检测结果,最后经过NMS得到最终的检测结果。

那么整个SSD的anchor box的数量是: \(38*38*3+19*19*6+10*10*6+5*5*6+3*3*6+1*1*6 = 7308\)

三. 模型训练

3.1训练loss

SSD和YOLO的loss中的检测类别值有所不同:假定检测目标一共A个类别,那么YOLO的预测类别数位A个,而SSD的预测类别则是A+1个(包含了背景类)。如下图所示。

3.2 难负例挖掘

对于正负样本不均衡的情况,SSD采用了hard negative mining(难负例挖掘)技巧来解决。hard negative是指在图片中容易将负样本(背景)看成是正样本(前景)的样本。而mining的操作就是将这类样本放入模型进行学习,从而减少模型的false positive。

那么SSD是如何引用hard negative mining技巧呢?如下图,其中蓝色的box的我们希望它的confidence较低,而绿色的confidence较高。

  • 对于一张图而言,选出其中anchor box中negative置信度较高的box。
  • 正负比例的anchor box = 1:3

3.2 数据增强

SSD模型在论文中也使用了很多不同的data augmentation(数据增强)的操作。

方式一:

  • 针对原始输入图片和ground truth进行IOU的操作
  • 对其中iou = 0.1,0.3,0.5,0.7和0.9来进行采样。
  • 对采样后的图片进行resize成相同大小的图片,然后进行水平翻转的操作。

方式二(Random Expansion-得到的小目标训练样本):

  • 对原始图像做不同比例的缩小。
  • 然后放在相同大小图片中不同的地方。

四. 结果比较

可以看到,SSD相较于YOLO在准确性上有很大的提升,同时预测速度上也能达到很高的fps。