目标检测:SSD——Single Shot Dectector

Abstract

文章提出SSD物体检测模型,将一系列bounding boxes(由不同的aspect ratio和scale的feature map生成)离散化(default boxes),在保证准确率的同时提高了速度,即使输入的图像很小,SSD仍具有比其他模型高的准确率。
预测阶段:

  • 生成每一个default box对每种类别的预测的分数(score)
  • 对box做出调整,以达到更加匹配物体形状的目的
  • 结合了不同分辨率的feature map的预测结果以处理不同尺寸的物体

SSD没有使用proposal generation、subsequent pixelfeature resample ,这使得SSD更加容易训练并且更容易融合到需要使用检测模型的系统中。

PASCAL VOCCOCOILSVRC数据集上的实验证明SSD比其他使用了object proposal step的模型要快得多。

对于300 × 300的图像输入,在VOC2007测试集上SSD实现了74.3%的mAP;对于512 × 512 的图像输入,SSD实现了76.9%的mAP,超过了Faster RCNN。

代码实现:
Caffe: a fast open framework for deep learning.

Introduction

这篇论文的核心思想是:

using a small convolutional filter to predict object categories and offsets in bounding box locations, using separate predictors (filters) for different aspect ratio detections, and applying these filters to multiple feature maps from the later stages of a network in order to perform detection at multiple scales.

文章贡献:

  1. 提出了SSD模型,比之前的YOLO模型更快且准确率更高,速度甚至与Faster R-CNN相媲美
  2. SSD的核心是预测分类的得分(score)以及使用小的卷积核预测一系列defaultboxes的box offsets
  3. 为了得到较高的准确率,在不同尺寸的feature map上进行预测,并得到了具有不同长宽比(aspect ratio)
  4. 这是一个简单的end-to-end的设计,同时即使是在低分辨率的图像上仍具有高精确度,在速度和准确率之间取得较好的trade-off
  5. 在PASCAL VOC、COCO和 ILSVRC 上都进行了测试(测试内容包括运行时间和准确率),与最近的 state-of-teh-art 模型都进行了比较

The Single Shot Dectector(SSD)

文章的第二部分描述了SSD的架构以及训练时的方法,后续(第三部分)会展示模型细节以及实验结果
SSD模型与YOLO的对比

Model

SSD基于前向传播卷积网络,产生一系列固定大小的bounding boxes以及每个box包含物体实例的得分(score),之后是一个non-maximum suppression step(非极大抑制)来预测最终结果。SSD模型最开始的部分被称为 base network(一个标准的图像分类架构),之后是这篇文章额外添加的辅助结构:

  • Multi-scale feature maps for detector 这部分使用一系列大小递减的卷积层,以实现多尺度的预测
  • Convolution predictors for detector 使用一系列卷积核产生一系列的预测结果,对于一个 m×n,通道数为p的图像采用3×3×p的小卷积核,产生的预测结果要么是各分类的得分,要么是default box的offset
  • Default boxes and aspect ratios 每个feature map中的box的位置都是固定的,在feature map的每个单元格中,我们需要预测得到的box与default box之间的offset以及对每个box中的物体分类预测的得分。 对于每个位置上的 k 个box,我们需要计算出关于 c 个类的score,还有这个 box 相对于 default box 的 4 个offsets(height、weight、。于是,在 feature map 中的每一个 feature map cell 上,就需要有 (c+4)×k(c+4)×k 个 filters。对于一张 m×nm×n 大小的 feature map,即会产生 (c+4)×k×m×n(c+4)×k×m×n 个输出结果。

Training

SSD与其他使用 region proposal 的检测模型的不同之处在于它需要将 ground truth 信息放入一系列固定输出的boxes里面,即SSD事先确定的一系列bounding boxes。

将ground truth 信息赋予到唯一的一个box之后,就可以进行end-to-end的损失函数的计算以及反向传播的计算了。

SSD的训练过程中包含了对default box 的选择、scale的选择、hard negative mining 以及扩张策略(augmentation strategies)。

Matching strategy

训练过程中,我们需要从一堆不同位置,不同尺寸,不同aspect ratio的boxes中确定对应 ground truth 的唯一的default box。开始的使用我们跟 MultiBox 一样使用最佳的 jaccard overlap,但是跟 MultiBox 有区别的是,MultiBox使用的是覆盖度最大的box,而SSD则是从覆盖率大于某一阈值(0.5)的boxes中挑出一个box,简化了问题。

Training object

SSD的目标函数源于MultiBox的目标函数,但是对其进行扩展,使网络能够处理多目标类别。令第 i 个default box 对应第 j 个 ground truth 的第 p 个类别的值为:
公式1其中,若值为1,则表示匹配,不匹配则为0。根据上面的策略,我们一定会有:
公式2等于1表示刚好有唯一一个 default box 与 ground truth 相匹配,但是该式子表明可能存在多个default boxes 与之匹配。

总的损失函数是位置的损失函数(localization loss,loc)与分类置信度的损失函数(confidence loss,conf)的加权求和:
公式3其中,N 是与 ground truth 相匹配的default boxes的数量。如果 N = 0,损失将被置为0。位置的损失函数(localization loss,loc)使用的是Faster R-CNN的Smooth L1 loss,用在预测的box(l)以及 ground truth(g)的参数中,来回归default bounding box(d)的中心位置(cx, cy)和它的宽(w)和高(h)。
公式4分类置信度的损失函数(confidence loss,conf)使用的是softmax loss,输入每一类的置信度 c:
公式5交叉验证中权重项 α被置为 1。

Choosing scales and aspect ratios for default boxes

为了处理不同尺寸的目标,有些检测模型结合了图像在不同大小下的预测结果,然而SSD使用了网络中不同layer的feature maps也能产生相同的效果,同时还实现了所有目标尺寸的参数共享。

之前的工作已经表明,因为低层的layer保留的细节更多,故使用低层的feature map可以提高效果,获得更多的语义信息。(相似的,增加 global context pooled 可以帮助平滑分割结果)

因此,SSD同时使用低层和高层的feature map来检测。下图展示了 8 × 8 以及 4 × 4 的feature map:
在这里插入图片描述
一般来说,不同层次的layer的感受野(receptive field)的大小不同,但是,SSD模型的 default box 不需要与每一层的感受野相适应。本文设计的设计中特定的 feature map 可以适应特定尺寸的物体。假设我们使用 m 个 feature maps 来预测结果,计算每个 feature map 的 default box 的大小:
在这里插入图片描述其中,smin表示最低层的 default box 的大小(取0.2),smax表示最高层的default box 的大小(取0.9)。再用不同的长宽比的 default box ,表示为ar ∈ { 1, 2, 3, 1/2, 1/3 },则每一个 default box 的宽(width)和高(height)可以计算出来:
在这里插入图片描述在这里插入图片描述对于长宽比等于1 的情况,本文还专门增加了一个default box大小为s’k
在这里插入图片描述所以现在每个 feature map 特定的位置一共有 6 个default boxes。每个 default box 的中心被设置为:
在这里插入图片描述|fk| 是第 k 个 feature map 的大小,i, j ∈[ 0, |fk| )。

结合了所有来自所有不同大小的 feature maps 的所有位置的不同尺寸和长宽比的所有不同 default boxes 的预测结果,我们现在有许许多多的预测结果,包括目标物不同的大小和形状。例如,下图所示,狗匹配上了 4 x 4的feature map中的一个default box, 而 8 x 8 的 feature map 中却一个都没有匹配,这是因为那些有着不同尺寸的 boxes 不能很好的与狗的 box 相匹配,所以在训练时被认为是负样本(negative)。
在这里插入图片描述

Hard negative mining

匹配之后,大多数的 default boxes 被认为是负样本,特别是在 default boxes 的数量特别大时,产生的负样本更多,这种情况下训练时模型难以收敛。这里介绍了一种正样本(positive)和负样本数量极度不平衡的情况下的训练方法。本文没有使用所有的负样本,而是将 default boxes 的负样本根据 confidence loss 的大小进行排序,并选出其中最高的一些负样本,保证负样本与正样本的比例不超过 1 : 3 。这样的策略使得优化过程更快,并且训练时更稳定。

Data augmentation

为了使输入大量不同的大小和形状的目标物体之后模型的鲁棒性(rubust)增强,每一张用于训练的图片都会被随机地进行下列选择其中之一:

  • 使用整张原始图像
  • 采样一个碎片(patch),使得目标物体最小的 jaccard overlap 是 0.1,0.3,0.5,0.7,0.9
  • 随机采样一个碎片(patch)

采样的碎片大小是原始图像的 [0.1, 1] 倍之间,长宽比在 1/2 到 2 之间。当 ground truth 的重叠区域的中心是采样碎片(sample patch)时,我们保留这一部分的重叠部分。上述的采样步骤完成后,每一个采样碎片的大小将会被重新设置到一个固定的大小,并以 0.5 的概率被水平翻转(horizontally flipped)。

Experimental Results

Base network

本文的实验都基于VGG16 (VGG16清楚的结构图可参考VGG16结构图),并在ILSVRC CLS-LOC数据集上进行与训练的,与 DeepLab-LargeFOV相似,本文将 fc6 、fc7 layer转换为卷积层,并从这两层的参数中采样。
此外,将 2 x 2 步长为 2 的池化层 p5 改成 3 x 3 步长为 1 ,并使用 atrous algorithm 来填补 “holes” 。关于 atrous algorithm 算法,其实就是带洞卷积,带洞卷积可以减小卷积核的大小。如下图所示,图©就是带洞卷积:
在这里插入图片描述
本文还移除了所有的 dropout 层以及 fc8 层。
文章使用初始学习率(learning rate)为 10-3 ,动量(momentum) 为0.9,weight decay 为0.0005,batch size 为32 的SGD(随机梯度下降)微调(fine-tune)了模型的结果。学习率下降的策略根据数据集的不同有细微的改变,我们会在后面讨论这一细节。

PASCAL VOC2007

在这个数据集上与Fast R-CNN 以及 Fast R-CNN 作比较,所有网络均用相同的预训练网络(VGG16)。
在这里插入图片描述如上图所示,SSD300使用 conv4_3, conv7(原来的 fc7 层), conv9_2, conv10_2, conv11_2来预测位置(location)以及置信度(confidence),并将 conv4_3 的 default box 的大小设置为 0.1还要使用 L2 normalization)。文章采用 xavier (关于这个初始化方法,我初略的看了一下,没有去了解推导过程,大概是在保证梯度不能为 0 的前提下保证各层的激活值和状态梯度的方差在传播过程中的方差保持一致,即Glorot条件)的初始化方法来初始化所有新加的卷积层。对于 conv4_3, conv10_2, conv11_2 卷积层,每个 feature map location 仅连接 4 个 default box 并且采用的是长宽比为 1/3 和 3,而在其他的卷积层则连接了 6 个 default box。
由于 conv4_3 有着同其他卷积层不一样的feature scale,所以还要使用 L2 normalization 将该卷积层的每个位置的feature scale 调整到 20 并且在反向传播时学习 scale。
文章使用10-3的学习率进行了 40k 次迭代,然后继续在训练集中分别用 10-4 和 10-5 的学习率进行 10k 次迭代。
下表显示低分辨率的SSD300模型确实比Fast R-CNN 准确,当输入为 512 x 512 的图像时(VOC2007 trainval), SSD300甚至更加准确,超过 Faster R-CNN 1.7% mAP。当使用更多的数据进行训练时,SSD300超过Faster R-CNN 1.1% 而SSD512超过Faster R-CNN 3.6%。
COCO trainval135k 数据集上,SSD512获得最好的结果:81.6%。在这里插入图片描述

SSD可以高质量的预测多种目标类别,大部分预测置信度是正确的,它的召回率(recall)达到 85% ~ 90%。可以看出,SSD在相似目标特别是动物的预测上错误率较高,可能是因为它共享了不同类别的location。在这里插入图片描述
下图(Fig.4)说明SSD在小目标的预测上不如大目标的预测,这并不奇怪,因为在更高层的卷积网络中,小目标所留下的特征信息已经所剩无几了,增大输入的size可以帮助解决这一问题,但仍有提升空间。
在这里插入图片描述

Model analysis

为了更好的理解SSD,本文采用控制变量法来测试SSD模型中每一部分对实验最终结果的影响。
在这里插入图片描述

  • Data augmentation is crucial Fast 和 Faster R-CNN 使用原始图像以及水平翻转进行训练,但是我们采用一种类似与YOLO的策略,额外使用了一种sampling 的策略,提高了 8.8% mAP。虽然不清楚这一策略会对 Fast 和 Faster R-CNN 有什么提高,但是效果一定没有那么好,因为它们在分类的时候采用了 feature pooling,这一做法更加rubust。
  • More default box shapes is better 根据前文所说,我们在每个位置连接了 6 个default box,但如果去除了长宽比为 1/3 和 3 的 box,模型的表现会下降 0.6%,更进一步除掉长宽比为 1/2 和 2 的 box 模型表现会下降 2.1%。
  • Atrous is faster 前文提到本文使用的模型是在VGG16的基础上进行改进,如果完全使用VGG16的模型,实验结果没什么区别,但是速度却下降了 20%。
  • Multiple output layers at different resolutions is better SSD的一个主要贡献是使用了不同输出layer的不同大小的default box,为了测量这一做法对结果的提高,我们移除了layers来比较结果。为了公平的比较,每移除一个layer,就调整 default box的数量(通过增加剩下的 layer 不同 scale 的 box 的数量)以保持它与原始数量相同。下表可以看出准确率从 74.3 下降到 62.4。在这里插入图片描述

PASCAL VOC2007

在PASCAL VOC2007上的实验结果如下:
在这里插入图片描述

COCO

因为COCO数据集上的物体的scale比PASCAL VOC的小,所以我们每一层都使用更小的default box。
在COCO数据集上实验的结果如下:
在这里插入图片描述

Interence time

由于在这个模型中会生成大量的 box,所以要采用非极大值抑制(non-maximum suppression,nms),当我们使用 0.01 的置信阈值时,我们可以过滤掉更多的 box,然后使用在 jaccard overlap 上非极大值抑制并且每张图片都只取前 200 个detection。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值