最全的目标检测入门系列(六)SSD系列

内容分享1周前发布
0 0 0

最全的目标检测入门系列(六)SSD系列

最全的目标检测入门系列(六)SSD系列

盛年不重来,一日难再晨。及时宜自勉,岁月不待人。——陶渊明

最全的目标检测入门系列(六)SSD系列

引言

相对于two stage目标检测算法而言,one stage目标检测算法可以一步到位完成检测,不需要先生成候选区域再进行分类和边界框回归,因此one stage目标检测算法在速度上有很大的优势。

one stage的经典算法是Yolo、SSD,以及后续对其进行改善的系列算法。Yolo算法中,图片经过缩放及CNN特征提取后,输出7*7*30大小的张量,对于每个单元格进行类别预测和边界框回归,从效果来看,Yolo存在定位不准、难以检测小目标等问题。针对这些问题,SSD做了三个主要的改善:

  1. SSD提取了不同尺度的特征图来做检测,大尺度特征图可以用来检测小物体,而小尺度特征图用来检测大物体;
  2. 使用卷积层来预测类别和坐标;
  3. SSD采用了不同尺度和长宽比的先验框(Prior boxes),也就是Faster R-CNN中的锚(Anchors)。

这几点重大改善使得SSD在必定程度上克服这些缺点,下面我们详细讲解SDD算法的原理。

SSD算法

SSD和Yolo一样都是采用一个CNN网络来进行检测,但是却采用了多尺度的特征图,其基本架构如图1所示。下面将SSD核心设计理念总结为以下三点:

最全的目标检测入门系列(六)SSD系列

图1 SSD算法架构图

1).采用多尺度特征图用于检测

SSD 网络结构采用 VGG16 作为基础模型,然后在 VGG16 的基础上新增了卷积层来获得更多的特征图用于检测。主要改变是将第六层(FC6)第七层(FC7)的全连接层转换成两个卷积层,并在第七层(FC7)之后额外增加了四个卷积层,SSD 网络结构如图 1 所示。预测过程中,在 Conv4_3、FC7 及新增的四个卷积层所产生的六个特征图进行目标类别与位置的预测。

2).采用卷积进行检测

与Yolo最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果。具体缘由是,全连接层会破坏特征的空间结构。具体做法是使用3*3的卷积进行位置、类别的预测,然后使用reshape缩放维度,可参考SSD源码中的multibox_layer函数。

3).设置先验框

Yolo中,一张图片经过backbone进行特征提取后,生成一个宽高为7*7的feature map,也就是49个grid,然后对每个grid预测类别、置信度、坐标等信息,这样的做法使得召回率较低。SSD中借鉴了Faster R-CNN中anchor的理念,设置不同尺度或者不同长宽比的先验框,预测框有七千多个,因此在很大程度上解决了召回率低的问题。一般情况下,每个单元会设置多个先验框,其尺度和长宽比存在差异,如图2所示。对于有 p 个通道、尺寸大小为m × n的特征图,使用3 × 3 × p的卷积核操作,产生一个相对于默认框的坐标偏移值以及类别分数。对于在给定位置的 k 个默认框中,需要计算 c+1 (包含背景类)个类别分数和相对于原始默认框的 4 个坐标偏移量,因此对于m × n的特征图产生(c +1 + 4) × k × m × n个输出。

最全的目标检测入门系列(六)SSD系列

图2 SSD算法先验框

在训练过程中,第一要确定训练图片中的ground truth(真实目标)与哪个先验框来进行匹配,与之匹配的先验框所对应的边界框将负责预测它。在Yolo中,ground truth的中心落在哪个单元格,该单元格中与其IOU最大的边界框负责预测它。但是在SSD中却完全不一样,SSD的先验框与ground truth的匹配原则主要有两点。

第一,对于图片中每个ground truth,找到与其IOU最大的先验框,该先验框与其匹配,这样,可以保证每个ground truth必定与某个先验框匹配。一般称与ground truth匹配的先验框为正样本,反之,若一个先验框没有与任何ground truth进行匹配,那么该先验框只能与背景匹配,就是负样本。一个图片中ground truth是超级少的, 而先验框却许多,如果仅按第一个原则匹配,许多先验框会是负样本,正负样本极其不平衡,所以需要第二个原则。

第二个原则是:对于剩余的未匹配先验框,若某个ground truth的IOU大于某个阈值(一般是0.5),那么该先验框也与这个ground truth进行匹配。这意味着某个ground truth可能与多个先验框匹配,这是可以的。但是反过来却不可以,由于一个先验框只能匹配一个ground truth,如果多个ground truth与某个先验框IOU大于阈值,那么先验框只与IOU最大的那个先验框进行匹配。

尽管在先验框匹配中,已经做了一点正负平衡的工作,但是这还是远远不够的。因此为了保证正负样本尽量平衡,SSD采用了难例挖掘(hard negative mining)。原理就是,就是对负样本按照置信度从大到小进行排序,然后选取误差较大的top-k作为训练的负样本,以保证正负样本比例接近1:3。这样在训练过程中,负样本的损失误差主要由难例样本贡献,使得模型可以聚焦与难例样本,进一步提升模型的精度。训练样本确定了,然后就是损失函数了。损失函数定义为位置误差与置信度误差的加权和:

最全的目标检测入门系列(六)SSD系列

DSSD算法

SSD算法虽然在准确率及速度上取得了较高的水准,但仍存在对小目标不够友善的问题。因此DSSD在在SSD的基础上进行了一系列改善,第一是使用ResNet101作为backbone来提取特征;其次优化了特征金字塔网络(FPN),提出一个基于top dowm的网络结构,并用反卷积取代传统的双线性差值;最后在预测分支中引入了残差结构,提高候选框回归和分类任务的精度。如图3所示为SSD与DSSD的网络结构对比图,总结DSSD相比于SSD改善点如下:

最全的目标检测入门系列(六)SSD系列

图3 SSD和DSSD算法结构图对比

1).backbone替换成更加先进的ResNet101

在SSD中backbone使用的是VGG16,而在DSSD中作者使用了特征提取能力更强的ResNet101作为backbone,并在conv5之后添加额外的conv block,然后在conv3、conv5以及新增的conv block上进行目标类别及位置的预测。但是在论文里,作者提到了只是简单的替换backbone,并不能提升准确率,因此作者提出了Deconvoluational Module和Prediction Module。

2).Deconvoluational Module

如图4所示为Deconvoluational Module结构图,Deconvoluational Module和借鉴特征金字塔的思想(FPN),目的是将深层特征图与浅层特征图进行融合,这样融合后的特征图同时具有深层特征图的语义信息和浅层特征图的位置信息。方法就是把图3中的红色层做反卷积操作,使其和上一级蓝色层尺度一样,再把二者融合在一起,得到的新的红色层用来做预测。值得注意的是,在Deconvoluational Module中上采样用的是反卷积而不是双线性插值,同时在每一个conv之后使用BN层,在融合阶段采用的是Element-wise product(元素对应相乘)。作者也通过对比实验,证明了元素点积的方式比元素求和的方式能得到更好的精度。整个DSSD呈沙漏型结构。

最全的目标检测入门系列(六)SSD系列

图4 Deconvoluational Module结构图

3).Prediction Module

SSD中在六层feature map上进行类别预测和位置预测,由于使用了anchor机制,预测的box多大7000多,梯度计算量很大。因此在DSSD中,作者在每一个预测层后增加残差模块,并且对于多种方案进行了对比,如图5所示,其中a为SSD采用的方案,b、c、d为作者改善的方案。结果表明,增加残差预测模块后,高分辨率图片的检测精度比原始SSD提升明显,并且作者得出结论,c结构准确率最高。

最全的目标检测入门系列(六)SSD系列

图5 不同模块图

FSSD算法

同样思考到ssd算法独立的利用浅层与深层的特征图进行预测,不能很好的提取不同尺度物体的特征,FSSD提出了一种新的特征融合(feature fusion module)的方式,有效改善了SSD的精度,并只带来很小的速度损失。其主要思想为:将vgg16产生的不同尺度的特征图,利用双线性插值变换为conv4-3层的特征图尺度大小,然后融合所有特征图,利用得到的特征图重新进行下采样得到不同的特征图尺度,输入预测网络进行预测。如图6所示为FSSD网络架构图,相比于SSD网络提升如下:

最全的目标检测入门系列(六)SSD系列

图6 FSSD网络结构图

1).backbone

FSSD中使用的backbone与SSD的backbone基本一致,均是VGG16,只是在把Conv6_2的步长从2调到了1,这样conv7_2和Conv6_2一样也是10*10,由于论文中认为小于10的feature 能够合并的信息量太少了。

2).Feature Fusion Module

原始SSD中独立的利用浅层与深层的特征图进行预测如图4-31 d所示;而在FPN、DSSD中,使用的是一个top-down的逐层特征融合机制,如图4-31 (c),新生成的特征金字塔上每层feature map,仅能融合同层和高层的特征,且二者的element-wise融合操作耗时很大。因此FSSD提出了一个轻量级、高效的特征融合方案,以克服以上弊端,将vgg16产生的不同尺度的特征图,缩放到必定的尺度大小,然后融合所有特征图,利用得到的特征图重新构建特征金字塔,如图7 e所示。同时在concate后,需要一个BN层操作,以正则化concate后的feature map,如图7。

最全的目标检测入门系列(六)SSD系列

图7 Feature Fusion Module结构图

3).Pyramid feature generators

和原始SSD一样,使用特征金字塔来生成目标检测结果。论文中测试了三种不同的结构,并比较结果来选择最佳结构。如图8所示:

  • (a)中使用简单步长为2的conv依次降采样
  • (b)中同增加步长为1的conv来增加特征提取能力
  • (c)中使用了bottleneck结构。作者通过实验表明第二种结构最佳。

最全的目标检测入门系列(六)SSD系列

图8 Pyramid feature generators结构图

RFBNet算法

虽然 SSD 算法采取了多尺度预测,但是浅层特征图包含的语义信息较少,不利于分类。空洞卷积(Dilated Convolution)正好弥补了这个不足,空洞卷积是在保持参数数目不变的情况下,增加普通卷积中卷积的感受野,使每个卷积的输出包含更大的信息范围。其一维数学表达形式为:

最全的目标检测入门系列(六)SSD系列

如图9所示:(a)图的空洞率为 1,感受野大小为3 × 3 = 9;(b)图的空洞率为 2,即卷积核的相邻像素点间距为 1 个空洞,填 0 补充,感受野大小为7 × 7 = 49;(c)图的空洞率为 4,感受野大小为15 × 15 = 225。因此可以看出空洞卷积的优点是:可以增加感受野,使得每个卷积的输出包含更大的信息范围。不过,使用单一得空洞率便会产生一种网格效应:部分的像素未能参与计算,损失了信息的连续性。RFBNet算法相比于SSD 算法改善点如下:

最全的目标检测入门系列(六)SSD系列

图9 空洞卷积

1).RFB Module

在RFB模型中,为使SSD浅层特征图包含较大范围的信息,使用一系列具有不同空洞率的空洞卷积,每个空洞卷积均使用单独的分支处理,最后将不同空洞率的空洞卷积提取出的特征进行拼接生成最后的结果。提出的空洞卷积模块,如图10所示。整体结构借鉴了Inception的思想,主要不同点在于引入3个空洞卷积层,空洞率分别为 1、3、5, 然后通过对特征图拼接进行信息融合。该模块能学习到多尺度信息的模型,从而最大限度地表达特征图的特征信息,能够提升模型对图像的整体表达能力。在RFB-s结构中一方面用3*3卷积层取代5*5卷积层,另一方面用1*3和3*1卷积层取代3*3卷积层,主要目的应该是为了减少计算量,类似Inception后期版本对Inception结构的改善。

最全的目标检测入门系列(六)SSD系列

图10 RFB模块

2).Model Structure

RFB-Net300的整体结构示意图,基本上和SSD类似,和SSD不同的是:主干网上用两个RFB结构替换原来新增的两层;conv4_3和conv7_fc在接预测层之前分别接RFB-s和RFB结构,这两个结构的示意图如前面图10所示。

最全的目标检测入门系列(六)SSD系列

图11 RFB-Net300的整体结构

总结

总的来说,SSD通过多尺度预测,利用卷积进行检测,设置先验框等方法全面改善了Yolo;而DSSD、FSSD、RFB除了改backbone之外,更多的是从特征融合模块入手。其主要思想是,深层特征图虽然对应于原图的语义信息丰富、特征表达能力强,但是由于对应于原图的感受野大,缺少目标的细节信息,容易造成小目标物体的漏检。而浅层特征图由于对应于原图的感受野小,能够用来检测图像中的小目标,但是由于浅层特征图前的卷积层较少,造成其语义信息较少、特征表达能力有限,容易造成欠拟合。因此为提高小目标物体检测能力,特征图一方面应包含较小的感受野以获得关于目标的细节信息;另一方面需要具备更强的特征提取能力及更全局的语义信息。相关的研究还可以参考PANet、ASFF、NAS-FPN、BiFPN、Recursive-FPN等。

参考文献

文章链接:

  • SSD:https://arxiv.org/abs/1512.02325
  • DSSD:https://arxiv.org/abs/1701.06659
  • FSSD:https://arxiv.org/abs/1712.00960
  • RFBNet:https://arxiv.org/abs/1711.07767

代码链接:

  • SSD:https://github.com/weiliu89/caffe/tree/ssds
  • DSSD:https://github.com/chengyangfu/caffe/tree/dssd
  • FSSD:https://github.com/lzx1413/CAFFE_SSD/tree/fssd
  • RFBNet:https://github.com/ruinmessi/RFBNet

前期回顾

最全的目标检测入门系列(一)概述

最全的目标检测入门系列(二)评价指标

最全的目标检测入门系列(三)数据集

最全的目标检测入门系列(四)传统目标检测方法

最全的目标检测入门系列(五)YOLO系列

后期预告

最全的目标检测入门系列(六)SSD系列

欢迎点、藏、关三连

有共同兴趣的同学,可以私信探讨

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...