菜单导航

SSD: Single Shot MultiBox Detector 深度学习笔记之SSD物体

作者: 酷学中国网 发布时间: 2020年11月21日 12:07:23

SSD: Single Shot MultiBox Detector 深度学习笔记之SSD物体检测模型

2017-08-31 23:11 来源:AI研习社

原标题:SSD: Single Shot MultiBox Detector 深度学习笔记之SSD物体检测模型

本文原作者杨韬。AI研习社已获授权发布。

算法概述

本文提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法。

与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度。针对不同大小的目标检测,传统的做法是先将图像转换成不同大小(图像金字塔),然后分别检测,最后将结果综合起来(NMS)。

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

此外,这5个feature map还经过 PriorBox 层生成 prior box(生成的是坐标)。上述5个feature map中每一层的default box的数量是给定的(8732个)。最后将前面三个计算结果分别合并然后传给loss层。

Default box

文章的核心之一是作者同时采用lower和upper的feature map做检测。

如图Fig 1 所示,这里假定有8×8和4×4两种不同的feature map。第一个概念是feature map cell,feature map cell 是指feature map中每一个小格子,如图中分别有64和16个cell。另外有一个概念:default box,是指在feature map的每个小格(cell)上都有一系列固定大小的box,如下图有4个(下图中的虚线框,仔细看格子的中间有比格子还小的一个box)。

假设每个feature map cell有k个default box,那么对于每个default box都需要预测c个类别score和4个offset,那么如果一个feature map的大小是m×n,也就是有m*n个feature map cell,那么这个feature map就一共有(c+4)*k * m*n 个输出。这些输出个数的含义是:采用3×3的卷积核对该层的feature map卷积时卷积核的个数,包含两部分(实际code是分别用不同数量的3*3卷积核对该层feature map进行卷积):数量c*k*m*n是confidence输出,表示每个default box的confidence,也就是类别的概率;数量4*k*m*n是localization输出,表示每个default box回归后的坐标)。训练中还有一个东西:prior box,是指实际中选择的default box(每一个feature map cell 不是k个default box都取)。

也就是说default box是一种概念,prior box则是实际的选取。训练中一张完整的图片送进网络获得各个feature map,对于正样本训练来说,需要先将prior box与ground truth box做匹配,匹配成功说明这个prior box所包含的是个目标,但离完整目标的ground truth box还有段距离,训练的目的是保证default box的分类confidence的同时将prior box尽可能回归到ground truth box。

展开全文

举个列子:假设一个训练样本中有2个ground truth box,所有的feature map中获取的prior box一共有8732个。那个可能分别有10、20个prior box能分别与这2个ground truth box匹配上。训练的损失包含定位损失和回归损失两部分。

作者的实验表明default box的shape数量越多,效果越好。

SSD: Single Shot MultiBox Detector 深度学习笔记之SSD物体

这里用到的 default box和Faster RCNN中的 anchor很像,在Faster RCNN中 anchor 只用在最后一个卷积层,但是在本文中,default box 是应用在多个不同层的feature map上。

那么default box的scale(大小)和aspect ratio(横纵比)要怎么定呢?假设我们用m个feature maps做预测,那么对于每个featuer map而言其default box的scale是按以下公式计算的:

Sk=Smin+Smax−Sminm−1(k−1),k∈[1,m]

这里smin是0.2,表示最底层的scale是0.2;smax是0.9,表示最高层的scale是0.9。

至于aspect ratio,用a_r表示为下式:注意这里一共有5种aspect ratio

a_r = {1, 2, 3, 1/2, 1/3}

因此每个default box的宽的计算公式为:

w_k^a=s_ksqrt{a_r}

高的计算公式为:(很容易理解宽和高的乘积是scale的平方)

h_k^a=s_k/sqrt{a_r}

另外当aspect ratio为1时,作者还增加一种scale的default box:

s_k^{'}=sqrt{s_{k}s_{k+1}}

因此,对于每个feature map cell而言,一共有6种default box。