美文网首页
SSD代码详解(pytorch)

SSD代码详解(pytorch)

作者: BlueCCircle | 来源:发表于2020-03-04 21:17 被阅读0次

Prior Box生成

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

  1. prior box生成由scale和aspect ratio决定,其中每个特征图的尺度计算公式如下:
    S_k = S_{min} + \frac{S_{max} - S_{min}}{m-1}*(k-1), k\in[1,m]
    在论文SSD300网络中,其中的给出的minsizemaxsize与公式并不完全匹配,因为论文给第一层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提供两个默认的正方形,边长分别为minsize\sqrt{minsize*maxsize}, SSD论文中默认的minsizemaxsize分别取0.2, 0.9。
  4. SSD会生成两个长方形,采用的长宽比 aspect ratio

Multi loss function

SSD损失函数包含两部分,一个是分类损失L_{loc},一个是定位损失L_{conf}, 整个损失函数表示如下:
L(x,c,l,g) =\frac{1}{N}*(L_{conf}(x,c)+L_{loc}(x,l,g))
其中N是先验框的正样本数量,c是类别置信度预测值,l是先验框对应的边界框预测值,g是ground truth的位置参数,x代表网络的预测值。
对于位置损失,采用smooth L1 Loss, 位置信息都是encode后的值;
对于分类损失,首先需要使用hard negative mining将正负样本按照1:3的比例把负样本抽样出来,抽样的方法是:针对所有batch的confidence,按照置信度误差进行降序排列,取出前top_k个负样本。

相关文章

网友评论

      本文标题:SSD代码详解(pytorch)

      本文链接:https://www.haomeiwen.com/subject/pnrllhtx.html