SSD代码详解(pytorch)

Prior Box生成

SSD中引入了prior box, 其实和anchor类似,就是一些目标的预选框;后续通过classification loss 和 bounding box regression loss确定真实的目标位置,SSD按照如下规则生成prior box:

  1. prior box生成由scale和aspect ratio决定,其中每个特征图的尺度计算公式如下:

    在论文SSD300网络中,其中的给出的和与公式并不完全匹配,因为论文给第一层conv4_3设置了默认的scale, 为0.1。其余5层满足上述公式计算,其中第二层至第五层scale分别为:0.2, 0.37, 0.54, 0.71, 0.88, 1.05。
  2. 以feature map上每个点为中心,生成矩形prior box,其中中心点部分偏移(offset=0.5) 。
  3. SSD提供两个默认的正方形,边长分别为和 , SSD论文中默认的和分别取0.2, 0.9。
  4. SSD会生成两个长方形,采用的长宽比 aspect ratio

Multi loss function

SSD损失函数包含两部分,一个是分类损失,一个是定位损失, 整个损失函数表示如下:

其中是先验框的正样本数量,是类别置信度预测值,是先验框对应的边界框预测值,是ground truth的位置参数,代表网络的预测值。
对于位置损失,采用 Loss, 位置信息都是后的值;
对于分类损失,首先需要使用 将正负样本按照1:3的比例把负样本抽样出来,抽样的方法是:针对所有batch的confidence,按照置信度误差进行降序排列,取出前top_k个负样本。

你可能感兴趣的:(SSD代码详解(pytorch))