SSD: Single Shot MultiBox Detector(单步多框检测器)论文综述

SSD: Single Shot MultiBox Detector(单步多框检测器)论文综述

SSD算法是在YOLO的基础上改进的单阶段方法,通过融合多个feature map上的BB,在提高速度的同时提高了检测的精度,性能超过了YOLO和Faster-rcnn(大目标条件)。
单步算法,无需proposal,类似一个优化了的rpn网络。
从每个fm(feature map)上的每个像素点都输出一组不同大小、不同高宽比的默认BB(bounding box)。测试阶段,每个默认BB都输出每个类别物体是否出现的得分,同时调整BB的大小位置以更好的包裹物体。而且此网络混合不同分辨率的fm的预测以更好的检测不同大小的物体。
效果:
300300输入:59fps, 74%mAP(VOC)/
512
512输入:76.9%mAP。

1、概要
目前主流检测网络套路:预设BB,然后对BB重采样(resample)修正,并且应用一个分类器分类,如faster r-cnn。这种套路一般能保证准确率,但最大的问题:慢!faster r-cnn才7fps。

本文所提网络SSD没有重采样,当可以做到和有重采样的网络一样准,并且速度快。快的原因就是没有提poposal这一步,也没有后续的重采样像素或特征这一步。
本文主要贡献:
1) 提出SSD,比yolo快,准,和faster r-cnn差不多准。
2) SSD的核心是在一系列默认BB上、用小的滤波器预测分类得分和框的偏移
3) 为了提高预测准确度,对不同尺度的特征图上的不同尺度的bb(anchor box)都做预测, 并且根据高宽比来区分。
4) 能够端到端训练,即使在低分辨率的输入也能有高准确率,达到速度与准确率的权衡。
5) 在速度和准确度上都做了实验,并与其他模型对比。

2 SSD

在这里插入图片描述

1)只有一张输入图片如(a)图。
2)每个输入在不同层产生不同大小的fm, 如(b)(c)。
3)每个fm中的每个像素点都有一系列默认框(default box类似anchor box),每个默认框上都做框修正和所有分类得分的预测。
4)训练阶段,首先把默认框映射到标签框。如把fm中猫狗所对应的框映射到输入图片上的框,模型损失是定位损失和分类损失取权重相加。

2.1 模型
主干网络是经过修剪的VGG16,用于产生不同尺度的fm,在主干网络上加入了一些辅助结构来产生预测,辅助结构有如下特征:
1) 在多尺度的fm上做预测。在修剪过的主干网络后加入卷积层,
2) 卷积预测。每一张fm用一组卷积核器做预测,如一张mnp的fm(p是通道数),可以用33p的卷积核预测分类得分或者是对默认框(相对于fm上的默认框)修正,对比yolo这一步是在中间用全卷积而非全连接。

在这里插入图片描述

3) 默认框与高宽比。每个fm中的每个像素点有默认的k给框,每个框计算共计c中类别的得分,及4个框修正值。这样每个位置共计有(c+4)k个滤波器??,每张fm共产生(c+4)kmn个输出值。这与faster r-cnn中anchor boxes很类似,只不过是应用于多尺度的fm上。

2.2 训练
SSD与带proposal的模型训练的最大不同点在于,ssd需要把标签框映射到每一层的fm上去。一旦这种映射完成,就可以做端到端的应用损失函数和反响传播了。

匹配策略:
训练期间我们要确定哪个默认框对应到哪个标签框,然后相应的训练网络。
1) 每一个标签框都为之选择在位置、高宽比、尺度不同的一组默认框。先把标签框对应到与之jaccard overlap(在multiBox中所提到,推测即iou)最大的那个默认框上去。
2) 然后把剩余没有配对的默认框与任意一个标签狂尝试配对,只要两者之间的iou大于阈值(0.5)即可。
3) 配对到标签框的默认框认为是positive,没有配对的就是negative.

训练目标函数:
在这里插入图片描述
定位损失和分类损失的加权和。N为标签框所匹配的默认框数,如果N为0,取loss为0。
在这里插入图片描述
是一个表示第i个默认框和第j个标签框(类别号为p)的标识。
分类损失:
在这里插入图片描述
在验证集上取1。

为默认框设置大小和高宽比:
用了m个fm做预测(不同层),最底层的fm的scale值Smin=0.2, 最高层Smax=0.9,其他第k层计算公式:
在这里插入图片描述
根据不同的高宽比1、2、3、1/2、1/3 (表示为ar)确定每层默认框的宽w和高度h:

           ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190114210839331.png)

在这里插入图片描述

在这里插入图片描述

疑问:狗匹配到了44的fm中的box, 但是在88的fm中却没匹配不到任何框。能匹配到为什么默认框尺度不一样就匹配不到狗的框??

Hard negative mining:
训练时大部分默认框都是负样本,会给模型性能带来巨大影响,针对此问题,并不对所有的负样本都训练,而是根据最高分类得分进行排序,选最高的一批,这样使得正负样本比例得分为3:1。

数据增强:原图,随机分割等多种

3 实验结果
主干网络:VGG16,经过在ILSVC上预训练,把fc6和fc7转换成卷积层,从fc6和fc7下采样,把pool5从22 s2装换成33 s1,用atrous算法来填充holes.除去dropout layers 及fc7层,SGD:lr:0.001, 0.9momentum, 0.0005weight decay, bt:32.
在这里插入图片描述

结果表明:
对小物体识别效果很差,因为高层基本没有小物体的信息。
对动物类别容易弄混,可能是由于多雷被共享位置。

模型分析(消融实验):
在这里插入图片描述
1) 数据增强很有用(1、5列)。
疑问:为什么分类时有feature pooling步骤(对目标平移有鲁棒性)使得数据增强对Faster r-cnn系列获益更少??
2) 高宽比为1/2 2和1/3 3有对检测有一定提高(对比2、3、5列)。因为这两种box可以在一定程度上正大较大和较小的BB,可以更加准确的检测较大和较小的目标,且VOC
上的目标一般比较大。
3) Atrous算法可以轻微提高算法性能但其主要作用时用来提速,论文中表明可提速20%。主要原因是该算法可以获得更大fm和接收场,但是SSD本身利用了多个fm来获取BB,BB的多样性已经够多了,故由于fm的扩大二多得到的BB可能时重复的,并没有起到提升检测性能的作用。
在这里插入图片描述
4) 不同分辨率的多输出层使得性能更好。在是否忽略靠边界的框时发现,若忽略,则比较粗糙的fm(即fm下采样到很小的层)会大幅影响性能。

3.3 pascal voc2012
在这里插入图片描述

3.4 coco表现

在这里插入图片描述

3.7测试阶段
用了NMS, 阈值0.45, 每张图片保留前200个检测结果??

5 分析ssd快的原因
1) 单步网络,只需一个阶段就能输出结果,肯定快。而faster r-cnn是两步网络,虽然BB少很多,但是需要大量的前向推理和反向推理(训练1阶段),而且需要交替训练两个网络。
2) Yolo虽然看起来比ssd简单,但是yolo中含有大量的全连接层,而SSD讲VGG中的全连接层换成了卷积层,所有层都是卷积层。
3) 用latrous算法,提速20%。
4) Ssd中设置了输入图片大小,将不同大小的图片裁剪成300300和500500,而faster r-cnn是1000*600左右的,在输入上就少了很多计算。

6 ssd算法的优缺点
优点:速度快过yolo,精度超过faster r-cnn(一定条件下,对于稀疏场景的大目标而言)。
缺点:
1) 需要人工设置默认框的大小(min_size, max_size和高宽比),每一层的默认框的大小和形状都不一样,导致调试过程很依赖经验。而yolo2使用了聚类找出了anchor box的形状,可直接套用在ssd上。
2) 对小物体识别较差,faster r-cnn在小物体上效果更优。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值