SSD 学习与研究

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/liuxiao214/article/details/81517038

目标检测–SSD

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

project:https://github.com/apache/incubator-mxnet/tree/master/example/ssd

其他参考链接:

1、https://blog.csdn.net/a8039974/article/details/77592395
2、https://www.cnblogs.com/fariver/p/7347197.html
3、https://www.sohu.com/a/168738025_717210
4、https://www.cnblogs.com/lillylin/p/6207292.html
5、https://cloud.tencent.com/developer/article/1052779


一、理解

1、对比

SSD的提出,为了解决实时性和准确性的问题。下面这种图给出了对比,SSD有两种模型,300和512代表不同size的输入图像。

在这里插入图片描述

SSD的主要思想就以下几点:

  1. 提出类似faster rcnn中的anchor机制,default box(与faster rcnn的区别:每个位置的default box一般是4~6个,Faster rcnn默认9个anchor;同时default box是设置在不同尺度的feature maps上的,且大小不同);
  2. 使用特征金字塔的方式,类似FPN,取多个feature map的预测结果,可以同时监测大目标和小目标;
  3. 同样是one-stage训练,采用回归的思想;
  4. 使用多种size的输入数据;

优缺点:

  1. 速度比YOLO快,准确率比faster rcnn高;
  2. 但是需要人工设置default box的min_size,max_size和aspect_ratio值,且每一层feature map下的值都不一样;
  3. 对小目标的召回仍然不理想,作者认为,这是由于SSD使用conv4_3低级feature去检测小目标,而低级特征卷积层数少,存在特征提取不充分的问题;

2、核心思想

2.0 特征金字塔

与YOLO直接在卷积层后加全连接不同,SSD使用多个卷积层进行预测,即不同size的feature map结果。SSD使用conv4_3、conv7(fc7)、conv8_2、conv9_2、conv10_2和conv11_2来预测定位和confidence,如下图所示。

在这里插入图片描述

特征金字塔的意思如下图所示。

在这里插入图片描述

2.1 default box

在这里插入图片描述

SSD中引入了default box,类似于faster rcnn中的anchor。但是不同于faster rcnn中,faster rcnn的默认anchor是9个,且只有最后特征层进行anchor提取。

下面介绍SSD中的default box。其优点就是default box在不同的feature层有不同的scale,在同一个feature层又有不同的aspect ratio,基本上可以覆盖输入图像中的各种形状和大小的object。

  • 以feature map的每个location,都会生成多个同心的default box;
  • 宽高比为1,2,3,1/2,1/3;
  • 当宽高比为1时,方形box,最小边长为min_size,最大边长为根号下(min_size*max_size);
  • 长方形的长和宽分别为根号下(aspect_ratio)*min_size、1/根号下(aspect_ratio)*min_size;
  • 每个feature map的min_size、max_size都不一样。

在这里插入图片描述

第一层feature map对应的min_size=S1,max_size=S2;第二层min_size=S2,max_size=S3;其他类推。在原文中,Smin=0.2,Smax=0.9,m是feature map的数量,SSD-300中m=6。

多个feature map生成的default box后,还经过 PriorBox 层生成 prior box(生成的是坐标)。每个feature map中每一层的default box的数量是给定的(8732个)。最后将前面三个计算结果分别合并然后传给loss层。

假定有8×8和4×4两种不同的feature map。假设每个feature map cell有k个default box,那么对于每个default box都需要预测c个类别score和4个offset,如果一个feature map的大小是m×n,则这个feature map就一共有(c+4)k * mn 个输出。

prior box,是指实际中选择的default box(每一个feature map cell 不是k个default box都取)。也就是说default box是一种概念,prior box则是实际的选取。

如果是图中的5层feature map,最后会得到(38384 + 19196 + 10106 + 556 + 334 + 114)= 8732个prior box。

2.2 匹配策略

  • 正样本:与每一个groundtruth box有最大交并比的default box;或者default box与任意有一个groundtruth box的交并比超过了阈值;
  • 负样本:正样本剩下的

由于负样本数量远大于正样本数量,所以在训练时,会挑选confidence高的box进行匹配,正负样本比为1:3;

2.3 损失函数

损失函数仍然分为两部分,confidence损失和location损失,如下面公式,其中N是所有default box的数量。

在这里插入图片描述

location损失采用smooth-L1损失,如下所示:

在这里插入图片描述

confidence损失使用softmax损失,如下,

在这里插入图片描述
其中
在这里插入图片描述
表示第i个default box匹配到了第j个groundtruth box,类别是p。

粘来别人的具体解释

在这里插入图片描述

2.4 训练

  • 使用数据增强:有6.7%的mAP提升;包括随机裁剪,使得裁剪部分与目标重叠为0.1, 0.3, 0.5, 0.7, 0.9,剪裁完resize到固定尺寸;以0.5的概率进行水平翻转;
  • 使用基础网络中的conv4_3进行检测,提升小目标的召回率;增加这一部分大概会提示4%mAP;
  • 使用不同宽高比的default box会提升2.9%mAP;
  • 使用atrous卷积,预训练模型VGG-16采用了atrous卷积,可以保持感受野不变的条件下,减少padding噪声。使用这种预训练模型会提高0.7mAP;

2.5 网络结构

SSD的结构在VGG16网络的基础上进行修改,

针对conv4_3(4),fc7(6),conv6_2(6),conv7_2(6) ,conv8_2(4),conv9_2(4)(括号里数字是每一层选取的default box种类)中的每一个再分别采用两个3*3大小的卷积核进行卷积,这两个卷积核是并列的,

  • 这两个33的卷积核一个是用来做localization的(回归用,如果prior box是6个,那么就有64=24个这样的卷积核,卷积后map的大小和卷积前一样,因为pad=1,下同),
  • 另一个是用来做confidence的(分类用,如果prior box是6个,VOC的object类别有20个,那么就有6*(20+1)=126个这样的卷积核)。

假设,conv6_2的localizaiton的33卷积核操作,卷积核个数是24(64=24,由于pad=1,所以卷积结果的map大小不变,下同),

这里的permute层就是交换的作用,比如你卷积后的维度是32×24×19×19,那么经过交换层后就变成32×19×19×24,顺序变了而已。

而flatten层的作用就是将32×19×19×24变成32*8664,32是batchsize的大小。

另一方面结合conv4_3(4),fc7(6),conv6_2(6),conv7_2(6),conv8_2(4),conv9_2(4)中的每一个和数据层(ground truth boxes)经过priorBox层生成prior box。

经过上述两个操作后,对每一层feature的处理就结束了。对前面所列的5个卷积层输出都执行上述的操作后,就将得到的结果合并:采用Concat,类似googleNet的Inception操作,是通道合并而不是数值相加。

二、论文翻译

1、摘要

提出一个比较小的深度神经网络用做图像中的目标检测。本文的方法称为SSD,对于每个feature map定位,将bounding box的输出空间描述为一组default box,有不同的宽高比、大小。在预测时,这个网络对每个default box,生成每个目标类别可能存在的分数,然后调整box以适合目标的shape。此外,这个网络结合了多种分辨率的feature map的预测,可以自然地处理各种大小的目标。SSD相对于那些需要目标proposal的方法来说要简单,因为它完全消除了proposal的产生和随后像素或特征的重采样步骤,将所有计算都压缩在一个简单网络中。这使得SSD很容易训练,并且可以直接整合到需要检测成分的系统中。在PASCAL VOC、COCO、ILSVR数据集上的实验结果证明,SSD对比那些使用额外目标proposal的方法具有可竞争性的准确率,并且比这些方法更快,为训练和推断提供了一个统一的框架。使用英伟达Titan X,对于300x300的输入,SSD在VOC2007测试数据集上,74.3%mAP,59FPS,对于512x512的输入,SSD是76.7%mAP,超过了faster RCNN。相对其他single-stage方法,SSD使用更小size的输入图像有更高的准确率。源码见: https://github.com/weiliu89/caffe/tree/ssd .

2、介绍

前面巴拉巴拉一堆废话。这篇论文提出第一个基于目标检测器的深度网络,而不依赖于对bounding box假设的像素或特征冲采样,并且同样准确。这个结果又很大的提升。在VOC2007测试集上,59FPS,74.3%mAP,而faster RCNN的7 FS,73.2%mAO,YOLO 45FPS,63.4%mAP。速度上的提高主要是消除了bounding box proposal和像素、特征的重采样步骤。本文并不是第一个做这些的,但是通过添加一系列的提高,我们比先前的尝试准确率有明显的提高。我们的提高包括,使用小的卷积核来预测目标类别和bounding box定位的偏移。分别使用不同比例的检测器预测,在网络的最后阶段,在多层feature map上应用这些filter,以实现多种scale的检测。这些修改,特别是使用不同scale的多层预测,我们可以实现相对低分辨率的输入的高准确率,进一步提高检测速度。尽管这些贡献似乎每个单独来说都比较小,但是对于在PASCAL VOC的实时检测上,YOLO只有63.4%mAP,而SSD有74.3%mAP。从最近有着高收益的残差网络来说,相对于检测正确来说,这个相对来说提升更大。进一步,高质量检测的速度显著提升可以扩展应用范围,计算机视觉是有用的。

本文的贡献点如下:

  • 我们介绍了SSD,一个针对多目标的single-shot的检测器。比之前state-of-the-art的single-shot的检测器YOLO要快,并且准确率更高。事实上,相同准确率更慢的技术,使用明确的region proposals和池化(包括faster RCNN)
  • SSD的核心是,对于一组default bounding box的修正集合,预测类别分数和box offset,对feature map使用小的卷积核。
  • 为了实现高的检测准确率,我们对不同scale的feature map产生预测,然后通过宽高比分别采用这些预测。
  • 这些设计的特征导致简单的端到端训练和高准确率,甚至是在低分辨率的输入图像上。进一步提高了速度。
  • 实验包括模型在PASCAL VOC, COCO, and ILSVRC数据集上,不同输入大小之间关于时间和准确率的分析。并且于最近的state-of-the-art方法进行了比较。

3、The Single Shot Detector (SSD)

这一部分介绍提出的SSD框架和相关的训练方法。然后给出具体数据集的模型细节和实验结果。

在这里插入图片描述

3.1 model

SSD方法是基于前馈卷积神经网络,该网络产生固定大小的bounding box的集合,和这些box是否存在目标类别实例的分数,然后使用非极大值一直产生最终的检测。早期的网络层是基于标准架构,使用高质量图像分类(在任何分类层中删除顶端),我们称之为基础网络,然后将辅助功能添加到网络中以产生检测,具有以下关键特征:

多尺度feature map检测. 我们在截断基础网络后添加了卷积层,这些层的尺寸逐渐减小,并允许在多个尺度上预测检测。用于预测检测的卷积层对每个特征层(操作在单个尺度的feature map)是不一样的(参见overfeat、YOLO)。

针对检测的卷积预测器. 每一个添加的feature层(或者是从基础网络中选择已存在的一组),使用一组卷积核,都可以产生一组固定的检测预测集合。这些可以在图2中,SSD网络架构的顶端看到。对于一个feature层,其size为mnp通道,潜在检测的预测参数的基础元素是33p的卷积核,用来生成类别的分数或者相对于default box坐标的shape偏移。对m*n的每一个位置采用卷积核,将产生一个输出值。对于每个feature map的location,bounding box偏移输出值是相对于default box的位置计算的(参加YOLO的结构,直接使用全连接层的而不是卷积滤波器用于这一步)

default box和宽高比. 对网络顶层的多个feature map,我们将一组default bounding box的集合与每一个feature map cell相关联。default box以卷积的方式平铺feature map,因此每一个box的位置与其相对的cell是固定的。对每一个feature map cell,我们预测每个cell相对default box的shape的偏移,同样,也预测每一个类别分数,表明在每个box中这个类别实例的存在可能性。特别地,对给定location的k个box的每一个,我们计算c个类别分数和4个相对于原始default box shape的偏移。在feature map的每个location,有(c+4)k个滤波器,因此,对m*n的feature map,有(c+4)kmn个输出。有关default box的说明,可以参见图1.我们的default box相对于faster rcnn中使用的anchor box要小,但是我们在不同分辨率的几个feature map上使用。在几个feature map上允许不同的default box shape使得我们可以有效地离散可能的输出输出box shape空间。

在这里插入图片描述

3.2 training

在训练SSD和训练使用region proposal的典型检测器来说,其关键区别就是,在固定检测器输出集合上,groundtruth信息需要指定特定的输出。一些版本训练时也需要指定,如YOLO,还有faster-rcnn、multibox中的region proposal阶段。一旦配置决定,损失函数和反向传播就可以端到端。训练时也涉及到选择检测的default box和scale的集合,同样需要困难负样本的挖掘的数据增强策略。

匹配策略. 在训练时,我们需要确认,哪个default box与groundtruth检测相关联,并且进行相关地训练。对每个groundtruth box,我们从default box中选择,这些box的宽高比、尺寸都不一样。通过将每个groundtruth box与default box进行最佳jaccard重叠(如multibox)匹配。但不同于multibox,我们然后将default box与所有groundtruth进行了jaccard重叠超过0.5的进行了匹配。这简化了学习问题,允许网络对预测多个重叠的default 认box的高分,而不是只选取最大重叠的那个。

训练目标. SSD的训练目标源自multibox,但是扩展为处理多个目标类别。在这里插入图片描述
可以认为是类别p的第i的default box和第j个groundtruth box的匹配。在以上的匹配策略中,可以使得在这里插入图片描述
整个目标损失是定位损失的加权和confidence损失,如下:
在这里插入图片描述
其中,N是匹配到的default box的数量。如果N=0,则损失设为0。定位损失采用预测box(l)和groundtruth box(g)参数之间的smooth l1损失。类似faster-rcnn,我们回归default bounding box(d)的中心偏置(cx, cy)和宽(w)、高(h)。
在这里插入图片描述
confidence损失是多个类别confidence©的softmax损失,其中权重参数α在交叉验证时设置为1。
在这里插入图片描述

为default box选择尺度和宽高比. 为了处理不同尺度的目标,一些方法建议处理不同size的图像,然后再结合结果。然而,通过利用一个网络中的不同层的feature map来做预测,可以模仿相同的效果,且共享了所有尺度的目标的参数。先前的工作展示出,使用低层的feature map可以提到语义分割质量,因为低层捕捉到了输入目标更细节的东西。类似的,xx论文展示出,从一个feature map上添加全局环境池化可以帮助平滑分割结果。受这些方法启发,我们使用了高层和低层的feature map用来检测。图1中,两个feature map(8x8和4x4)用在了这个框架中。事实上,我们可以用一点小的开销,使用更多的feature map。

一个网络中不同层的feature map已知是不同感受野大小的。幸运的是,SSD框架,default box不需要与每一层的实际感受野相关联。我们设计了default box的平铺,因此指定feature map学习相应的特定尺度的目标。假设我们想要使用feature map来预测,每个feature map default box的尺度如下计算:
在这里插入图片描述
其中,s_min=0.2,s_max=0.9,意味着最低层的scale是0.2,最高层是0.9,中间所有层都是规律间隔。我们对default box施以不同宽高比,表示
在这里插入图片描述在这里插入图片描述
我们可以为每一个default box计算其宽和高
在这里插入图片描述
对于宽高比为1,我们添加一个default box,其scale是
在这里插入图片描述
这样可以造成每个feature map location有6个default 认box。我们设置每个default box的中心是
在这里插入图片描述
其中|f_k|是第k个feature map的大小,切i,j属于[0, [f_k]]。事实上,也可以设计成default box的分布以最好的拟合特定数据集。如何设计最好tiling是一个开放的问题。

通过结果来自很多featuremap的所有location的不同scale和宽高比的所有default box的预测,我们有了大量预测集合。覆盖了不同size和shape的输入目标。例如,图一中,狗与4x4的feature map中的一个default 认box匹配,但是与8x8的feature map的所有default box都不匹配。这是因为这些不同scale的box不匹配狗的box,因此在训练中被认为是负样本。

hard negative挖掘. 在结束匹配后,大多数default box都是负的,特别是当可能的default box比较大的时候。这里介绍了一个明显的正负训练样本不均衡的例子。我们不使用所有的负样本,而是将这些负样本,按照每个default box的最高confidence 损失进行排序,并且选择最高的一个,因此正负样本的比例是1:3。我们发现,这可以导致更快的优化和更稳定的训练。

数据增强. 为了使得模型对于不同size和shape的输入更具有鲁棒性,每一个训练图像都使用下列方法进行随机采用:

  • 使用整个原始的输入图像
  • 采样一个图像块,使得与目标的最小jaccard重叠分别是 0.1, 0.3,0.5, 0.7, or 0.9.
  • 随机采样图像块

每一个采样的图像块的发现都是原来图像size的[0.1, 1],并且宽高比在12与2之间。如果groundtruth box的中心在采样图像块中,我们保留与groundtruth box重叠的部分。在上述提到的采样之后,每一个采样的图像块被resize为固定的size,并且以0.5的概率进行水平翻转,此外还添加一些测光扭曲等。

4、Experimental Results

基础网络. 我们的网络是基于VGG-16的,并且在ILSVRC CLS-LOC数据集上进行了预训练。类似于DeepLab-LargeFOV,我们将fc6和fc7转换成了卷积层,下采样fc6和fc7的参数,改变pool5的池化核,将2x2改为3x3,然后使用 `a trous 算法来充满”holes”。我们去除了所有的dropout层和fc8层。使用SGD,初始学习率为0.001,momentum=0.9,weight decay=0.0005,batch size=32,进行微调结果。学习率衰减策略每个数据集都略有不同,细节稍后给出。开源代码见:https://github.com/weiliu89/caffe/tree/ssd

4.1 PASCAL VOC2007

在PASCAL VOC2007数据集上与fast rcnn、faster rcnn方法进行了比较,测试集是4952张图像。所有方法都是在预训练的VGG-16模型上微调的。

在这里插入图片描述

图2是SSD-300模型的网络细节。我们使用conv4_3、conv7(fc7)、conv8_2、conv9_2、conv10_2和conv11_2来预测定位和confidence。设置conv4_3的default box,scale=0.1。

4.2 Model analysis

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.3 PASCAL VOC2012

在这里插入图片描述

4.4 COCO

在这里插入图片描述

4.5 Preliminary ILSVRC results

4.6 Data Augmentation for Small Object Accuracy

在这里插入图片描述

在这里插入图片描述

4.7 Inference time

在这里插入图片描述

5、结论

这篇论文介绍了SSD,一个基于多类别的快的single-shot的检测器。我们这个模型的关键特征是使用与网络顶层多个feature map匹配的mult-scale的卷积bounding box的输出。这种表示允许我们有效地训练可能的box的shape空间。我们进行实验验证了给定的合理的训练策略,一组数目很大的经过仔细选择的default box结果可以提高性能。与现有方法相比,我们建立的SSD模型,至少有一个数量级的box预测采样位置、scale、宽高比。我们表明,在给定相同的VGG-16基础架构,SSD相比之前的state-of-the-art目标检测器在准确率和速度上都实现了超越。我们的SSD-512明显地比state-of-the-art faster rcnn在PASCAL VOC 和 COCO数据集上的准确率要高,并且有3倍快。我们的实时SSD-300速度是59FPS,比目前的实时YOLO要快,且检测准确率更高很多。

除了这些独立的实用性,我们相信,我们的单片和相对简单的SSD模型为更大的需要目标检测的系统提供了有用的building block。一个充满希望的未来方向是探索使用RNN来检测,并同时跟踪视频目标,来作为系统的一部分使用。

猜你喜欢

转载自blog.csdn.net/liuxiao214/article/details/81517038
ssd