关于SSD目标检测算法的理解

算法介绍

SSD目标检测算法出现在Faster-RCNN和YOLOv1算法之后,融合了二者的优点的one-stage算法。速度比faster-RCNN更快,比YOLOv1算法准确率更高。
如果你对YOLOv1算法不了解的话,可以先了解一下。
关于YOLOv1目标检测算法的理解

英文名 SSD: Single Shot MultiBox Detector
论文地址:https://arxiv.org/abs/1512.02325

下面是该算法的具体表现:
在这里插入图片描述
可以看出SSD算法比Faster-RCNN的mAP还高出一点点,而且FPS高出三倍以上。而相比于YOLOv1,mAP有很大的提升。所以SSD算法不仅兼顾速度也兼顾准确率。但是遗憾的是还是无法满足实时性的要求,依然只能在高端硬件上面运行。

算法分析

我们先介绍一下网络结构,以下是YOLOv1和SSD算法的网络结构:
在这里插入图片描述
SSD算法前段网络采用的是改进后的VGG-16的网络结构,后端是用多个卷积层多尺度进行预测图片位置和种类,运用3x3xp的小卷积进行识别预测,大的特征图预测小的特征,小的特征图预测大的特征。他所用的思想和YOLO一样,把整个问题看成是个回归问题。

我们先来说一下VGG-16。
VGG-16是牛津大学2016年提出来的卷积神经网络模型,一经提出,就在简洁性和实用性方面表现突出,并迅速成为主流的神经网络结构。
在这里插入图片描述D组的模型就是VGG-16,由16层结构,包括卷积层、最大池化层和全连接层加最后的soft-max层。

本文采用的是VGG-16前面的卷积层,保留部分网络到VGG-16的conv3-512层,去掉了后面的全链接层。
以上改进的VGG-16网络的作用是用来对图片进行特征提取。

后面不同尺度的卷积层用于多尺度特征的识别。
后面结构的目的是用来在不同的卷积层上进行检测。对于一个mxn大小p个通道的特征图。预测目标的基本元素是用3x3xp的小卷积核,用来产生种类的分数和默认框坐标的偏移值。SSD提取了不同尺度的特征图来做检测,大尺度特征图(较靠前的特征图)可以用来检测小物体,而小尺度特征图(较靠后的特征图)用来检测大物体。

默认框及它的长宽比:
把每个默认框与每个特征图的cell用卷积层的方式相关联,因此每个框与特征图的cell是一一对应的。在每个特征图的cell中,我们预测在cell里面的默认框的偏移值及每个种类的分数,每个点都有k个默认框,每个默认框由c个种类分数及4个坐标位置信息(xy坐标,及xy的偏移量),假设特征图为mxn,那么会产生(c+4)mnk个输出结果。

默认框的思想就是来自于Faster-RCNN的anchor和YOLO的回归思想。SSD算法是用多个个卷积层分别预测大小不同的物体。生成的特征图由大到小,大的特征图预测小物体,小的特征图预测大物体。

例如第一个特征图是38x38x1024,那么那张特征图的就有38x38个点,由于卷积的位置不变性可知,每个点都对应了输入图像的一个位置。那问题来了,为什么要有默认框呢?为什么不直接回归呢?就像YOLO算法一样。

为了提高速度,从而降低训练难度,每个点都有4个默认框或者6个。如下图:
在这里插入图片描述
那初始默认框是怎么产生的了?
初始的默认框也叫prior box

包括两个方面:中心点和长宽。
中心点的生成:
就以conv6那一层为例子,输入的图片为300x300x3,输出的特征图为19x19x1024,也就是每张特征图的大小为19x19。根据卷积神经网络的的位置不变性,那么特征图的每个点都对应着输入图像的一个中心点。
例如特征图的(2,2)位置对应在原图片的位置为(300/19x2,300/19x2)即(31,31)
长宽的生成:

在这里插入图片描述
本文中的 Smin为0.2,Smax为0.9
所以最靠前的prior boxes的Sk为0.2,最靠后的prior boxes为0.9,中间层按照上面公式来。

使用不同的ratio值[1,2,3,1/2,1/3] 用下面的公式计算默认框的长宽:
w = s k ∗ r a t i o 1 / 2 , w = s k / r a t i o 1 / 2 w=sk*ratio^{1/2}, w=sk/ratio^{1/2} w=skratio1/2,w=sk/ratio1/2
当ratio为1时,
s k 2 = ( s k ∗ s k + 1 ) 1 / 2 sk^2=({sk*s{k+1}})^{1/2} sk2=(sksk+1)1/2
这样的话我们就可以生成6个不同的 prior boxes

匹配策略:
安装上面的方式,我们每个不同大小的特征图上面的每个点都会生成6个prior boxes,那么一共会生成
38x38x4+19x19x6+10x10x6+5x5x6+3x3x4+1x1x4=8732
为啥有的特征图每个点只有4个prior box,有些却有6个呢?
我也不知道!

问题来了,一张图片上面真的需要这么多prior boxes,显然是不需要的。这会大幅度增加耗时而且准确率也不高。

我们在生成prior box后,与原图的每个ground truth boxes相匹配,选择与其IOU最大的的先验框(best jaccard overlap),保证每个ground truth boxes都有一个prior boxes相匹配。被选择出来的prior boxes就是default boxes,保证每一个default boxes预测一个ground truth boxes,其他的prior boxes作为负样本,这也造成了大量的负样本。面对如此大的负样本,我们不可能全都加入训练中,所以以1:3的正负比例提取负样本,这也会使优化更快训练更稳定。

同时,该算法为了取得更好的效果使用了数据增强
每个训练图像从以下中随机选择一个:
1.使用整个原始图像
2.从图像中采样一个patch,与目标的最小值IOU为0.1,0.3,0.5,0.7,0.9
3.随机采样这个patch:
每个采样的patch为原图像的0.1到1,长宽比为0.5到2之间。当ground truth boxes的采样中心在采样的patch中时,保留重叠部分。在这个采样步骤之后,每个采样的patch转化为固定尺寸,以0.5的概率翻转。

我们现在已经得到了相当数量的样本
下面我们继续说一下如何从default box实现目标检测
以conv6为例,生成19x19x1024特征图
本文舍弃了传统的全连接层,而是用3x3的卷积层代替它的工作,这样做的目的是减少参数,加快运算速度。
试想一下如果用全链接层来进行检测工作,那么将19x19x1024的参数铺平后,就有19x19x1024=369664,如果后面接100个全链接的神经元,那么参数高达369966400。这将大大拖慢运算速度。

下面是整体的损失函数
在这里插入图片描述
N代表的是匹配的default boxes的数量,N为0时损失值也为零。

你看的没错,位置和置信度的损失函数是一个公式。
在这里插入图片描述位置回归是典型的smooth L1 loss
在这里插入图片描述
下面是置信度的回归
在这里插入图片描述
采用的是softmax的损失函数

重要补充

IOU是目标检测算法中一个非常重要的函数
全称是Intersection over Union,也就是交并比
也就是default boxes和ground truth boxes的交并比
在这里插入图片描述
NMS算法:由于直接由神经网络训练出来的结果有大量重复和重叠的框,这将大大加大训练的难度,所以论文采用了NMS算法来抑制默认框的产生以加快运算速度。
在这里就不详细介绍了。
以上是SSD算法的细节流程,可能有很多遗落的,希望指正!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值