SSD特点

  • 从YOLO中继承了将detection转化为regression的思路,一次完成目标定位与分类
  • 基于Faster RCNN中的Anchor,提出了相似的Prior box
  • 加入基于特征金字塔(Pyramidal FeatureHierarchy)的检测方式,即在不同感受野的feature map上预测目标。

SSD结构简述

pytorch ssd目标检测_ios

主网络结构是VGG16,将最后两个全连接层改成卷积层,并随后增加了4个卷积层来构造网络结构。对其中5种不同的卷积层的输出(feature map)分别用两个不同的 3×3的卷积核进行卷积,一个输出分类用的confidence,每个default box 生成21个类别confidence;一个输出回归用的 localization,每个 default box生成4个坐标值(x, y, w, h)。

Multi-scale feature maps for detection(多尺度特征映射)

pytorch ssd目标检测_pytorch ssd目标检测_02


SSD(右图)在base network之后加入多个卷积层,获得不同尺度的feature map, 这些层的大小逐渐减小,可以进行多尺度预测。

Convolutional predictors for detection

对于一个大小为mn、p通道的特征层,使用33的卷积核进行预测,在某个位置上预测出一个值,该值可以是某一类别的得分,也可以是相对于default bounding boxes的偏移量,并且在图像的每个位置都将产生一个值。

Default boxes and aspect ratio

SSD在不同的特征层的feature map上的每个feature map cell生成K个default boxes。

pytorch ssd目标检测_ios_03


对于每个box,预测C个类别得分,以及相对于default bounding box的4个偏移值,这样需要(C+4)k个预测器,在mn的特征图上将产生(C+4)km*n个预测值。

Choosing scales and aspect ratios for default boxes(default boxes 生成规则)

以feature map上每个点的中点为中心(offset=0.5)生成一系列同心的Defult box(然后中心点的坐标会乘以step,相当于从feature map位置映射回原图位置)。

对于每个feature map,default box的尺度计算如下:

pytorch ssd目标检测_ios_04


其中,smin = 0.2,smax = 0.9

default box的aspect ratios 有:{1, 2, 3,1/2,1/3},对于 aspect ratio = 1,额外增加一个default box,该box的尺度为

pytorch ssd目标检测_ide_05


每一个default box,宽度、高度、中心点计算如下:

pytorch ssd目标检测_卷积_06


pytorch ssd目标检测_pytorch ssd目标检测_07


可以看出这种default box在不同的feature层有不同的scale,在同一个feature层又有不同的aspect ratio,因此基本上可以覆盖输入图像中的各种形状和大小的object。

Matching strategy

在训练过程中,需要从不同位置,不同大小,不同长宽比的一系列Default boxes中选出与Ground truth 拥有最佳jaccard overlap的boxes,在SSD中,当jaccard overlap大于某一阈值(0.5),则认为该box与ground truth匹配成功, 作为训练的正样本,如果匹配失败,则作为负样本。

Jaccard overlap

pytorch ssd目标检测_ide_08


显然,负样本的数据要远远多于正样本,为了控制正负样本的数量满足一定比例(1:3),所以采用Hard negative mining对负样本进行选择。

Hard negative mining

先将每一个物体位置上对应 predictions(default boxes)是 negative 的 boxes 进行排序,按照 default boxes 的 confidence 的大小。 选择最高的几个,保证最后 negatives、positives 满足比例 。

Trainning objective

总的损失函数是localization loss (loc) 和 confidence loss (conf) 的加权和。

pytorch ssd目标检测_ide_09


localization loss:

pytorch ssd目标检测_ide_10


confidence loss:

pytorch ssd目标检测_ide_11