Advertisement

SSD: Single Shot MultiBox Detector

阅读量:

SSD: Single Shot MultiBox Detector

背景介绍


基于“Proposal + Classification” 的 Object Detection 的方法,R-CNN 系列(R-CNN、SPPnet、Fast R-CNN 以及 Faster R-CNN),取得了非常好的结果,但是在速度方面离实时效果还比较远

在提高 mAP 的同时兼顾速度,逐渐成为 Object Detection 未来的趋势。在之前的 博客 YOLO,提到的方法 YOLO 虽然能够达到实时的效果,但是其 mAP 与刚面提到的 state of art 的结果有很大的差距。上篇博文中简单分析了一下 YOLO 的缺陷:每个网格只预测一个物体,容易造成漏检;对于物体的尺度相对比较敏感,对于尺度变化较大的物体泛化能力较差。

针对 YOLO 中的这些不足,该论文提出的方法 SSD 在这两方面都有所改进,同时兼顾了 mAP 和实时性的要求。在满足实时性的条件下,接近 state of art 的结果。对于输入图像大小为 300*300 在 VOC2007 test 上能够达到 58 帧每秒( Titan X 的 GPU ),72.1% 的 mAP。输入图像大小为 500 *500 , mAP 能够达到 75.1%。

论文概要


该论文提出的网络框架也是基于传统的用于分类的基础网络结构,如 AlexNet、VGG等,使用通用的结构(如前 5个conv 等)作为基础网络,然后在这个基础上增加其他的层。这些增加的卷积层的 feature map 的大小变化比较大,允许能够检测出不同尺度下的物体。对于通过卷积操作得到的 feature map 上的每个点,按照不同的 scale 和 ratio 生成,k 个 default boxes,这种结构有点类似于 Faster R-CNN 中的 Anchor。

新增加的每个卷积层的 feature map 都会通过一些小的卷积核操作,得到对于相应的 default boxes 对于不同物体类别 (c_1,c_2,…, c_p) 的偏移 (shape offsets) 以及其置信度。在 size 为 mn, 通道数为 p 的 feature map 上,使用的卷积核大小为 33*p,如果 feature map 上的每个点对应 k 个 default boxes,物体的类别数为 c,那么就需要使用 (c+4)k 个这样的卷积滤波器,最后有 (c+4)kmn 个输出。

在训练阶段,给定输入图像,以及每个物体的 ground truth。每个 default box 与 任意一个 ground truth 的 IOU 大于 0.5,就表示匹配好,作为正样本,其他的作为负样本。这样的话,一个 ground truth 可能对应多个 default box。下图的例子是:给定输入图像,及 ground truth,分别在两种不同尺度(feature map 的大小为 88,44)下的匹配情况。有两个 default box 与猫匹配(88),一个 default box 与狗匹配(44)。在预测阶段,直接预测每个 default box 的偏移以及对于每个类别相应的得分。最后通过 nms 的方式得到最后检测结果。
示意图

网络结构


该论文采用 VGG16 的基础网络结构,使用前面的前 5 层,然后利用 astrous 算法将 fc6 和 fc7 层转化成两个卷积层。再格外增加了 3 个卷积层,和一个 average pool层。不同层次的 feature map 分别用于 default box 的偏移以及不同类别得分的预测,最后通过 nms得到最终的检测结果。给出的是 SSD 和 YOLO 的对比网络结构。
网络结构

训练策略


该论文是在 ImageNet 分类和定位问题上的已经训练好的 VGG16 模型中 fine-tuning 得到,使用 SGD,初始学习率为 10^{-3}, 冲量为 0.9,权重衰减为 0.0005,batchsize 为 32。不同数据集的学习率改变策略不同。新增加的卷积网络采用 xavier 的方式进行初始化。

目标函数

训练的目标函数,和常见的 Object Detection 的方法目标函数相同,分为两部分:计算相应的 default box 与目标类别的 score(置信度),以及相应的回归结果(位置回归)。置信度是采用 Softmax Loss,位置回归则是采用 Smooth L1 loss。

Default Box 的生成

该论文中利用不同层的 feature map 来模仿学习不同尺度下物体的检测。假定使用 m 个不同层的feature map 来做预测,最底层的 feature map 的 scale 值为 s_{min} = 0.2,最高层的为 s_{max} = 0.95,其他层通过下面公式计算得到

使用不同的 ratio值 {1, 2, \frac{1}{2}, 3, \frac{1}{3}} 计算 default box 的宽度和高度:w_k{a} = s_k\sqrt{a_r}, h_k{a} = s_k/\sqrt{a_r}。另外对于 ratio = 1 的情况,额外再指定 scale 为 s_k{'} = \sqrt{s_ks_{k+1}},也就是总共有 6 中不同的 default box。每个 default box的中心位置设置成 (\frac{i+0.5}{f_k}, \frac{j+0.5}{f_k}),其中 i,j 分别表示为在大小为 f_k*f_k 的 feature map上点的位置。

用于预测的 feature map 上的每个点都对应有 6 个不同的 default box,绝大部分的 default box 都是负样本。在训练过程中,采用了 Hard Negative Mining 的策略来平衡正负样本的比率。策略很直观,根据 default boxes 的置信度排序,选取置信度较高的 boxes,最后将正负样本的比率设置成 1:3。

数据扩展

在训练过程中,为了使得结果更加 robust,这里引入了一些 Data Augmentation 的策略,训练图像从下面的方式中获取:

  • 使用原始图像全图
  • 从原图中抠出一些 patch,这些 patch 在原图的大小的 [0.1,1] 之间, 相应的宽高比在[1/2,2]之间,同时考虑与物体的最小 IOU 比值,用于生成一些 Hard Negative
  • 将抠好 patch 缩放到统一的大小,并以 0.5 的概率进行水平翻转

实验结果


不同模块的性能
Pascal VOC2012 test上的效果

最后总结


该论文提出的方法无论是在 mAP 上,还是在速度上都取得了非常好的效果。其充分利用不同网络层的信息来模拟不同 scale 下的图像特征辅助预测,这个想法非常得棒。

通过比较 Faster R-CNN、YOLO,未来在做通用物体检测的时候,初始的 Boungding Box 的获取可能是直接根据原图的大小,以某种固定的方式来获取,然后通过回归的方式来获得好的 localization结果。

全部评论 (0)

还没有任何评论哟~