admin 管理员组

文章数量: 887021

SSD

关于对SSD的个人理解

背景

在此之前,二阶段的目标检测网络Faster-RCNN已经出来,但本文的作者发现Faster之所以慢主要还是因为它将检测这个问题分成了两个步骤,也就是说本文的作者想要设计出一种一阶段的网络就可以预测出目标的边界框。

思想

利用一阶段网络代替二阶段网络实现目标检测,即不需要再像之前的二阶段网络先由anchor生成候选区域,再由候选区域生成box,而是直接将设定好的anchor得到预测的box,并且作者也发现了Faster对小目标的检测效果十分的不友好,因此还加入了多尺度预测的思想。

模型结构

以下便是本文的模型结构,从图上我们可以知道:输入为整张图像,输出为6个不同尺度的预测特征图,紧接着在不同的预测特征层上设定不同尺寸、数量的anchor来检测相应尺寸大小的目标,核心思想就是:大尺度特征图预测小目标,小尺度特征图预测大目标。
相应的输出特征图的尺寸依次为:38 * 38,19 * 19,10* 10,5 * 5,3 * 3,1 * 1,每一个特征图的每一个grid设定的anchor的尺寸和数量分别为:(21,45)【1,2,0.5】,(45,99)【1,2,0.5,3,0.3】,(99,153)【1,2,0.5,3,0.3】,(153,207)【1,2,0.5,3,0.3】,(207,261)【1,2,0.5】,(261,315)【1,2,0.5】。举(21,45)【1,2,0.5】这个例子来看:首先anchor的面积为 2 1 2 21^2 212,宽高的比例为【】内的比值,因此首先会得到3个anchor,然后再将面积= ( 21 ∗ 45 ) 1 / 2 (21 * 45)^{1/2} (21∗45)1/2,仅生成宽高1:1比例的anchor,此时总共就会得到4个anchor。同理其他特征图将会得到的anchor的数量依次为:4,6,6,6,4,4(当然这只是针对一个grid)。在设计好anchor之后,将预测特征图分别接上一个k=3,s=1,p=1,c= c l a s s ∗ n i class*n_i class∗ni​(class代表所要预测的类别个数,会经过Softmax函数归一化, n i n_i ni​代表每一个grid对应的anchor数量)的卷积层预测box的类别概率以及另一个k=3,s=1,p=1,c= 4 ∗ n i 4*n_i 4∗ni​(4代表每一个box相对于anchor的位置参数的个数)的卷积层预测box位置参数。

训练阶段

那么作者是如何训练模型的呢。与之前介绍的YOLO采用的损失函数类似,不同的是SSD是不会直接预测置信度的,即没有置信度损失,这也就出现了一个与YOLO在损失函数上不同的地方,在YOLO中由于存在所有样本(包含正负样本)的置信度损失,使得在计算类别损失时只计算正样本的类别损失。而在SSD中,因为没有预测置信度,因此在类别损失公式上仍需要计算负样本的类别损失(这是唯一在结构上的不同)。在SSD中包含正负样本的类别损失(多分类交叉熵)以及正样本的box位置参数损失,总损失公式如下图所示,N=正样本的个数。既然提到了正负样本,就需要简单的介绍一下判定方式,我们现在都知道该模型将会产生大量的anchor,那么考虑到正负样本平衡的问题,我们不可能将所有的anchor都参与损失计算。在SSD中总共会产生8732个anchor,先将这8732个anchor与GT计算IOU,与Faster类似,1、首先将IOU大于阈值(默认0.5)的anchor标为正样本,2、如果还有GT没有匹配到正样本,则在剩余的anchor取IOU最大的anchor为正样本,要保证每一个GT都能够匹配到正样本。而对于负样本的判定方式与Faster不一样,将剩余的anchor与所有的GT计算得到置信度(将得到的类别概率 * IOU)按照从大到小的顺序排列,从最顶部开始选取负样本anchor,然后保证负样本:正样本=3:1。

  1. 类别损失
    以下为类别损失公式:
  2. box位置损失
    以下为box位置损失公式:与YOLO的做法是一样的,这里不再赘述。

测试阶段

与以往目标检测采用NMS方法一样,不详细讲解。

总结

如理解存在纰漏,敬请指正,谢谢!

本文标签: ssd