SSD目标检测算法解读

小白一枚,欢迎吐槽~

SSD:Single Shot MultiBox Detector.

one-stage和two-stage网络说明

one-stage网络会讲图片分成许多image patch,之后在每个patch上设置不同宽高的anchor框,网络对该框的数据进行分类和回归即可得到结果。two-stage网络则是会先生成建议目标候选区域,然后送入分类器分类。

特点:one-stage网络速度要快很多,但是准确性稍低。one-stage网络反之。

two-stage网络会首先生成若干候选区域,讲这些候选区域放入分类器进行分类,候选区域其实并不多,所以不会造成严重的正负样本不均衡,而one-stage网络例如yolo3就不同了,它存在三种尺度,13x13,26x26,52x52,每种尺度的每个像素点生成三种anchor而一张图片的目标是较少的,会存在正负样本失衡,目标置信度损失会受到影响。one-stage网络进入分类器的anchor框较多,但是只有少数anchor对最终网络的学习是有利的,而大部分ancor对最终网络的学习都是不利的,负样本很大程度上影响了整个网络的学习,拉低了整体的准确率;而two-stage网络进入分类器的anchor框相对不多,但是负样本也就是对网络学习不利的anchor减少了,与one-stage网络相比,负样本对two-stage网络的影响要小,所以它的准确率比one-stage肯定要高。

SSD网络就是一种one-stage网络。

SSD网络框架:

SSD网络采用VGG16做基本网络,将VGG16的全连接层fc6,fc7转换成3x3卷积层conv6和1x1卷积层conv7,然后移除dropout层和fc8层,并新增一系列卷积层。

用于检测的多尺度特征图

每一个卷积层都添加到了网络的末尾,而且这些层的尺度大小逐渐减小,允许在多个尺度上预测检测,也就是大的特征图和小的特征图都可以用作检测目标,而这样做大的特征图(低层卷积)就可以检测小的目标,小的特征图(高层卷积)可以检测大的目标,提高检测的准确度。

如图所示,8x8的特征图先验框尺度与4x4的特征图相比,尺寸要小一些,因此8x8的特征图用来检测较小的物体会更加优秀。

用于检测的卷积预测因子

这一点与yolo相比SSD采用的是卷积滤波器而不是全连接层,每个添加的特征层(或者可选地来自基础网络的
现有特征层)可以使用一组卷积滤波器产生一组固定的检测预测结果。对于具有 p 个通道的大小为 m×n 的特征层,用于
预测潜在检测的参数的基本元素是 3×3×p 小内核,其产生类别的分数或相对于先验框的形状偏移坐标。

先验框尺寸和宽高比的设置

SSD利用了faster R_CNN中anchor的概念,只不过不是通过检测找到这些候选框,而是每个单元设置尺度或者长宽比不同的先验框,之后的预测的边界框就是以这些先验框为基准的。对于每一个先验框对应得输出都是独立的两部分。第一部分为评分,这个分数也可以理解为置信度,SSD网络有一个不同之处在于,会把背景也算作一类,所以实际的类别会比分析的类别多一种。在预测过程中,置信度最高的那个类别就是边界框所属的类别;第二部分就是对于先验框的形状偏移坐标,包含4个值(cx,cy,w,h),分别表示边界框的中心坐标以及宽高。对于一个大小m×nm×n的特征图,每个单元设置的先验框数目记为k,我们计算 c 类分数和相对于原始默认框形状的4 个偏移。这导致总共(c+4) k 在特征图中的每个单元周围应用的滤波器,产生(c+4) kmn 输出m×n 特征图。

先验框的大小在不同的卷积层也是不同的,先验框的设置包含了两个方面:尺度和长宽比。

 

sk表示先验框大小相对于图片的比例其中S{min}是0.2,S{max}为0.9,我们对默认框施加不同的宽高比,并用\alpha {\gamma }\epsilon \left \{ 1,2,3,1/2,1/3 \right \}表示它们,对于第一个特征图,其先验框的尺度比例一般设置为S{min}/2=0.1,那么尺度为300×0.1=30。后面的特征图先验框的尺度就利用公式计算。在具体实现的过程中,Conv4_3,Conv10_2和Conv11_2层仅使用4个先验框,它们不使用长宽比为3,1/3的先验框。所以SSD300可以预测

 

38×38×4+19×19×6+10×10×6+5×5×6+3×3×4+1×1×4=8732个边界框。

 

先验框匹配原则

在训练过程中,我们需要确定哪些先验框对应于 ground truth,对于每个 ground truth box,我们从默认框中选择,这些框在位置,宽高比和比例上有所不同。我们首先将每个 ground truth box 与先验框具有最大的IOU值匹配。与MultiBox 不同,我们将默认框与IOU高于阈值(0.5)的任何 ground truth 匹配。通俗的说,对于图片中每个ground truth,找到与其IOU最大的先验框,该先验框与其匹配,这样,可以保证每个ground truth一定与某个先验框匹配。称与ground truth匹配的先验框为正样本,否则就是负样本,一个图片中ground truth是非常少的, 而先验框却很多,如果仅按第一个原则匹配,很多先验框会是负样本,正负样本极其不平衡,就是使准确率下降。为了防止出现这种情况,对未匹配的先验框,若某个ground truth的IOU大于某个阈值(一般是0.5),那么该先验框也与这个ground truth进行匹配。这意味着某个ground truth可能与多个先验框匹配。尽管一个ground truth可以与多个先验框匹配,但是ground truth相对先验框还是太少了,所以负样本相对正样本会很多。为了保证正负样本尽量平衡,SSD采用了hard negative mining,就是对负样本进行抽样,抽样时按照置信度误差(预测背景的置信度越小,误差越大)进行降序排列,选取误差的较大的top-k作为训练的负样本,以保证正负样本比例接近1:3。

数据增强

因为训练样本足够多,理论上模型越可靠,所以为了增强SSD的性能,对图像进行缩放,水平翻转等。

性能分析

每个数据集的学习率衰减策略略有不同完 整 的 培 训 和 测 试 代 码 建 立 在 Caffe上 , 并 在
https://github.com/weiliu89/caffe/tree/ssd 上开源。亲测可用。

在对 VOC2007 trainval 进行训练时,如下表显示我们的低分辨率 SSD300 型号已经比 Fast R-CNN 更精确。当我们在更大的 512×512 输入图像上训练 SSD 时,它甚至更准确,超过 Faster R-CNN1.7% mAP。

根据下表我们可以看到数据扩充对于性能有较大的帮助,可以提高 8.8%的 mAP,默认情况下,我们每个位置使用 6 个默认框。如果删除具有 1/3 和 3 之间的宽高比的框,性能下降 0.6%。通过删除具有 1/2 和 2 之间的宽高比的框,性能下降 2.1%。使用各种默认的 box形状似乎使网络预测框的任务更容易。


SSD 的主要贡献是在不同的输出层上使用不同比例的先验框。通过逐个删除卷继层可以看出单调下降从 74.3 降至 62.4。说明在不同层上传播不同比例的 boxes 至关重要。

参考资料:

https://blog.csdn.net/xiaohu2022/article/details/79833786

https://blog.csdn.net/donkey_1993/article/details/81460386

SSD:Single Shot MultiBox Detector

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值