SSD:Single Shot MultiBox Detector(论文部分翻译+一些总结)

前言

目标检测算法可以分为两大类,一类是Faster R-CNN这种的,先生成候选区域,然后对这些候选区域进行分类与回归,这是将目标检测视为一种分类问题。一般这类算法的检测精度较高,但是检测速度有待提升,对于实时监测系统并不适用。另一类是YOLO这种整个检测过程由一个单一神经网络实现的,它将目标检测视为一种回归问题,检测速度虽然有所提升,但是检测精度不如第一类算法。尤其YOLO对于较小目标的检测并不友好。可以说是牺牲检测精度来提升检测速度。
本篇论文提出一种SSD的目标检测算法,在检测速度和精度上都有所提升。在提升检测速度上,去掉了生成候选框和特征提取阶段。在提升检测精度上,一是用一个卷积滤波器预测目标类别和边界框的偏移值,二是用一些分离的预测器(滤波器)来应对不同长宽比的检测器,即将这些滤波器应用到网络不同层得到的特征图上,以在不同尺度上进行目标检测。通过这些改变,当输入像素相对较低的图像时,也能得到很高的检测精度,进一步提升了检测速度。


本文做出的贡献

  1. 提出了一种新的目标检测算法SSD,它比同为single-shot的YOLO的检测速度和检测精度要高,事实上检测精度和需要生成候选框的目标检测算法差不多(比如Faster R-CNN)。
  2. SSD的核心部分是预测类别分数,和offset(边界框的真实预测值,由边界框相对于预设框的转换得到),这是通过在特征图上使用较小的卷积滤波器来实现的。
  3. 从不同尺度的特征图中生成不同尺度的预测值,并将这些预测值以不同的长宽比分离开来。这是提高检测精度最重要的一步。
  4. 通过2和3的设计,即使输入较低像素的图像,也能实现端到端的训练和较高的检测精度,实现了速度和精度之间的权衡。
  5. 实验在PASCAL VOC,COCO和ILSVRC上进行,对检测时间和检测精度与另外一些目标检测算法进行对比。

SSD的实现过程

SSD:Single Shot MultiBox Detector(论文部分翻译+一些总结)_第1张图片
首先根据上图来说明几个概念:

  1. 特征图单元(feature map cell)。如上图(b)是一个8 × 8的特征图,那么每个小格就是一个特征图单元。接下来的部分把特征图单元称为cell
  2. 真实框(ground truth box)。可以理解为目标所对应的唯一正确的那个框。
  3. 预设框(default box)。如上图(b)和(c),在每个cell中的虚线框就是预设框,可以看到在每个cell上都会有一组数目相同的预设框,它们的长宽比是不同的。预设框其实和Faster R-CNN中的anchor差不多。
  4. 边界框(bounding box)。每个预设框对应一个边界框,需要经过一个边界框相对于预设框的转换,得到边界框的真实预测值,也就是下面的内容里提到的offset。最终的检测结果来自于对边界框的处理。

SSD在训练时只需要一个输入图像和每个目标的真实框(ground truth box),如上图(a)中分别框住喵和汪的蓝色框和红色框。对于每个预设框,要预测offset,和每个目标的类别置信度((c1, c2, · · · , cp))。在训练时,首先将这些预设框与真实框匹配,比如上图(a)中,两个预设框分别与喵和汪的两个真实框匹配,这两个预设框就是正样本(positive),其他的预设框就是负样本(negative)。SSD的损失函数是位置损失函数(比如Fast R-CNN中的Smooth L1)和置信度损失函数(比如Softmax)的权重和


SSD的具体设计

SSD基于前馈神经网络,该网络会生成一组大小固定的边界框,然后给边界框中的目标类实例打分,然后进行NMS(non-maximum suppression)操作来产生最终检测结果。下面介绍一下具体设计理念。

1.多尺度特征图

在基础网络后添加卷积层,这些卷积层的大小是逐层递减的,由此可以对不同尺度的特征图进行预测。每个层的卷积模型都是不同的。

2.用卷积层进行检测

在YOLO中是用全连接层来进行检测,但在SSD中,是用卷积层处理特征图来产生预测结果。对于一个m × n × p的特征图,用一个3 × 3 × p这样较小的卷积核来得到检测值。

3.预设框

在每个cell中设置了一组尺度或者长宽比不同的预设框,每个预设框相对于与其对应的cell的位置是固定的。对于每个cell的每个预设框,要预测各个类别的分数,和一个offset。

接下来说一下怎么计算offet。参考的是Faster R-CNN中根据anchor计算预测的边界框坐标的方法。在Faster R-CNN中,设 t i t_{i} ti表示边界框的4个坐标经过转换后的预测值,( x x x y y y w w w h h h)表示边界框,( x a x_{a} xa y a y_{a} ya w a w_{a} wa h a h_{a} ha)表示anchor,计算如下:
在这里插入图片描述
在SSD中,预设框其实和anchor差不多,那么我们可以根据预设框和边界框得到边界框的预测值,也就是offset。设预设框用 d d d=( d c x d^{cx} d

你可能感兴趣的:(目标检测,计算机视觉,神经网络)