1 Inference
Single shot指明了SSD算法属于one-stage方法,MultiBox指明了SSD是多框预测。
SSD是一种one-stage方法,其主要思路是均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,然后利用CNN提取特征后直接进行分类与回归,整个过程只需要一步,所以其优势是速度快。
2 基本结构与设计理念
2.1 default box & feature map cell
- feature map cell 就是将 feature map 切分成 8 × 8 8×8 8×8 或者 4 × 4 4×4 4×4 之后的一个个格子;
- 而 default box 就是每一个格子上,一系列固定大小的 box,即图中虚线所形成的一系列 boxes。
2.2 Model
SSD 是基于一个前向传播 CNN 网络,产生一系列 固定大小(fixed-size) 的 bounding boxes,以及每一个 box 中包含物体实例的可能性,即 score。之后,进行一个 非极大值抑制(Non-maximum suppression) 得到最终的 predictions。
SSD 300中输入图像的大小是300x300,特征提取部分使用了VGG16的卷积层,并将VGG16的两个全连接层转换成了普通的卷积层(图中conv6和conv7),之后又接了多个卷积(conv8_1,conv8_2,conv9_1,conv9_2,conv10_1,conv10_2),最后用一个Global Average Pool来变成1x1的输出(conv11_2)。
2.3 设计理念
2.3.1 多尺度特征预测
-
采用多尺度特征图用于分类和位置回归:
SSD将conv4_3、conv7、conv8_2、conv9_2、conv10_2、conv11_2都连接到了最后的检测、分类层做回归。CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小。如下图所示,一个比较大的特征图和一个比较小的特征图,它们都用来做检测。这样做的好处是比较大的特征图来用来检测相对较小的目标,而小的特征图负责检测大目标,8x8的特征图可以划分更多的单元,但是其每个单元的先验框尺度比较小,可检测相对较小的目标。
2.2.2 采用卷积进行检测
SSD直接采用卷积对不同的特征图来进行提取检测结果。对于形状为 m × n × p m\times n \times p m×n×p的特征图,只需要采用 3 × 3 × p 3\times 3 \times p 3×3×p 这样比较小的卷积核得到检测值。
使用一系列 convolutional filters,去产生一系列固定大小的 predictions,
产生的 predictions有以下两种:
- 归属类别的一个得分
- 相对于 default box coordinate 的 shape offsets。
2.2.3 Anchor
Anchor的生成:
-
特征图的每个点都会生成一大一小两个正方形的anchor。 小方形的边长用min_size来表示,大方形的边长用 m i n _ s i z e ∗ m a x _ s i z e \sqrt{min\_size*max\_size} min_size∗max_size来表示(min_size与max_size的值每一层都不同)。
-
多个长方形的anchor。 长方形anchor的数目在不同层级会有差异,他们的长宽可以用下面的公式来表达,ratio的数目就决定了某层上每一个点对应的长方形anchor的数目:
w i d t h = r a t i o ∗ m i n _ s i z e width=\sqrt{ratio}*min\_size width=ratio∗min_size
l e n g t h = 1 / r a t i o ∗ m i n _ s i z e length=1/\sqrt{ratio}*min\_size length=1/ratio∗min_size
上面的min_size和max_size由下式计算得到, S m i n = 0.2 , S m a x = 0.95 Smin=0.2,Smax=0.95 Smin=0.2,Smax=0.95,m代表全部用于回归的层数,比如在SSD 300中m就是6。第k层的 m i n _ s i z e = S k min\_size=S_k min_size=S