论文笔记:SSD: Single Shot MultiBox Detector

论文:https://arxiv.org/abs/1512.02325

中心思想:

  • 直接通过一个神经网络实现目标检测。关键:不对特征进行重采样
  • 在不同的尺度&比例的default box下(其实就是Anchor),将BBox的输出空间离散化成每个Feature Map中的点
  • 使用了Multi-scale输出,预测时输出的是分数 + 偏移量(adjustment)
  • 减少了Two-stage中的Proposal -> ROIPooling -> RCNN这种结构(SSD并非第一个这么做的,前面有YOLO,但是做了一系列的改进)
  • 使得模型易于训练,并且能够达到Two-stage近似的效果同时,提升了速度
  • (这种通过Feature Map中的某一个点,根据Anchor来encode gt bbox的one-stage检测方法,由RPN产生,也奠定了之后one-stage检测的基础)

Model

  • 在骨干网络上加上如下特性形成检测模型:
    • Multi-scale feature map:在骨干网络的背后接上一个检测头部,并融合了多尺度的信息
    • 每个尺度下通过一个 p ∗ c ∗ ( 3 ∗ 3 ) p * c * (3 * 3) pc(33)的卷积层,输出p维的feature map(这个feature map是多尺度的)
    • Default Map(anchor):实际上就是给每个输出Feature Map K个先验值,一个输出Feature Map有 ( m , n , k ∗ ( 4 + c l s ) (m, n, k * (4+cls) (m,n,k(4+cls) 的维度。这里跟Faster RCNN不同的是,将Anchor应用到了多个scale中
  • GT匹配准则
    • 对于一个GT,首先找到和他IOU最大的anchor,并将该具体匹配到这个anchor上
    • 此外,anchor & IOU > 0.5就认为是该类别的positive,所以一个anchor box可以被分到多个类别。这样做使得训练更容易,均衡了正负样本,并且一个样本可以有很多个类别,学习变得更简单

Loss

  • 注意:单个图片中,总的Loss的归一化系数是正样本的个数!如果没有正样本,Loss = 0,意味着这张图不参与训练,换句话说 L ( x , c , l , g ) = 1 / N ( L c o n f ( x , c ) + α L l o c ( x , l , g ) ) L(x,c,l,g) = 1/N (L_{conf}(x,c) + \alpha L_{loc}(x,l,g)) L(x,c,l,g)=1/N(Lconf(x,c)+αLloc(x,l,g))
  • L l o c ( x , l , g ) ) L_{loc}(x,l,g)) Lloc(x,l,g))只针对正样本,具体通过对数的形式回归bbox的宽高,通过线性的方式回归bbox的中心点,通过smooth L1作为Loss
  • L c o n f ( x , c ) L_{conf}(x,c) Lconf(x,c)针对正样本&负样本,用的是softmax Loss

Anchor的选取

  • 首先,SSD的multi-scale包括6个scale的输出
  • 每个scale下给定正方形anchor(aspect ratio = 1)的最小边长 s m i n s_{min} smin,最大边长 s m a x s m i n \sqrt{s_{max}s_{min}} smaxsmin
  • 每个scale下给定若干个aspect ratio a r a_r ar。(正方形)是一个aspect ratio的特例。一个 a r a_r ar对应2个defatult,长宽分别为 ( a r ⋅ s m i n , 1 / a r ⋅ s m i n ) (\sqrt{a_r} \cdot s_{min}, 1/\sqrt{a_r} \cdot s_{min}) (ar smin,1/ar smin), ( 1 / a r ⋅ s m i n , a r ⋅ s m i n ) (1/\sqrt{a_r} \cdot s_{min}, \sqrt{a_r} \cdot s_{min}) (1/ar smin,ar smin) a r a_r ar的取值,除1以外: ( 2 , 3 ) (2,3) (2,3)。总之,一个非1的 a r a_r ar能够生成2个长方形,如果有取了3个aspect ratio(1,2,3),能够得到6个default box
  • 每个scale下对应的 s m i n s_{min} smin s m a x s_{max} smax具体数值如下表:
layer name s m i n s_{min} smin s m a x s_{max} smax
conv4_3 30 60
fc7 60 111
conv6_2 111 162
conv7_2 162 213
conv8_2 213 264
conv9_2 264 315

数据增广

  • 可参考:https://blog.csdn.net/mzpmzk/article/details/100161187

  • 整体来说包括3部:

    • 执行亮度,对比度等像素内容变换
    • 图像扩展:将原图“镶嵌”在一个更大的画布中(画布的大小可能是原图的1-4倍),画布中镶嵌的位置是随机的
    • 从大画布中裁出一块ROI,并调整相应的GT BBox
    • 将ROI resize 到(300, 300)
  • 上述ROI的选取:

    • 可以是原图(也就是不做图像扩展)
    • 随机裁剪一个ROI(宽和高的大小至少是原图的0.3倍,宽高比在0.5~2之间)
    • 随机裁剪一个ROI(宽和高的大小至少是原图的0.3倍,宽高比在0.5~2之间,这个ROI和任意BBox的IOU分别在0.1或0.3或0.5或0.7或0.9)
    • 综上,总共有7种等可能性结果
    • 将7种等可能性结果取其中的一种:
      • 如果是原图的话,就返回图像扩展前的结果
      • 如果是随机ROI,需要保证任一bbox的中心在ROI中,尝试N次,如果N次都得到结果,则返回原图
      • 如果是带IoU的ROI,则需要保证IoU大于特定的阈值,尝试N次,如果N次都得到结果,则返回原图

你可能感兴趣的:(论文笔记)