文章

快速了解一个网络:SSD, Single Shot MultiBox Detector

快速了解一个网络:SSD, Single Shot MultiBox Detector

以下内容偏向于记录个人学习过程及思考,非常规教学内容

背景

基于region proposals的二阶段目标检测网络太慢了

核心思想

提出一种一阶段的目标检测网络结构。基于规则,在不同层的不同位置产生不同形状的候选框,经过设计后这些候选框相对固定,规避了region proposals带来的时间。

不同深度的卷积层,其感受野不同。

  • 浅层的卷积层,感受野较小,此时的候选框面向的是小目标

  • 较深的卷积层,感受野较大,此时的候选框面向的是大目标

因此,从不同的卷积层提取的这些候选框,保证了网络对于不同大小和尺度目标的检出能力。

ssd-demo

Pipeline

如图所示。作者将VGG-16的fc6和fc7层用卷积层进行了替代,并在后续也使用一系列卷积,将每层的feature map大小逐步减小(感受野逐层提高)。

对于 m x n 的feature map,每个位置会设置k个不同比例的候选框,每个候选框会输出c个类别的置信度及4个检测框相对于候选框的offset。因此每个 m x n 的feature map共有 (c+4)kmn 个输出。

ssd-pipeline

亿些细节

Training

  • 与MultiBox不同,只要候选框与GT的IOU大于0.5,就将其认为是正例。因此,SSD推理阶段会输出大量的目标检测框,需要作NMS来保留置信度最高的框。

  • 假设我有m个feature map用于detection,如何针对不同层的feature map选择合适的scale呢?作者给出了一种线性的选择方式。设置好smin和smax后,即可推出中间层的s

ssd-formula

  • 基于本文的思路,不包含待检测物体的候选框的数量会远远大于正例,对于训练来说会非常困难。作者这里是将loss最高的一些负例挑出来作反向传播,其余负例丢弃。作者认为负例:正例 = 3:1时,训练的效果比较稳定。

  • 数据增强。这里作者考虑在以下3种策略中随机选取:
    • 使用整张原始图像
    • 按照和GT最小的IOU(0.1, 0.3, 0.5, 0.7, 0.9)随机截取一部分区域
    • 随机截取一部分区域
  • 对于小物体的检测精度提升,作者尝试将图片放置于基于平均方式的16倍上采样的图上,这样对小物体检测有一些提升。

进一步了解

原文和代码

https://arxiv.org/abs/1512.02325

参考资料

本文由作者按照 CC BY 4.0 进行授权