SSD目标检测算法(Single Shot MultiBox Detector)

先前所写的RCNN系列目标检测算法都是先生成一些假定的bounding boxes,然后在这些bounding boxes上使用CNN提取特征,然后在经过一个分类器,来判断是不是我们的目标样本标签,在经过一个回归器,将我们最后得到假定的bounding boxes进行位置的调整。但是这类方法所需要的计算时间过长,很难用于实时的目标检测,当前你可以用牺牲精度来增加速度。本文提出的实时检测方法,消除了中间的 bounding boxes、pixel or feature resampling 的过程。虽然本文不是第一篇这样做的文章(YOLO),但是本文做了一些提升性的工作,既保证了速度,也保证了检测精度。

1. SSD总体架构

在这里插入图片描述
SSD网络结构:
在这里插入图片描述
算法的主网络结构是VGG16,将最后两个全连接层改成卷积层,并随后增加了4个卷积层来构造网络结构。
SSD算法流程:

  1. 输入一幅图片(300x300),将其输入到预训练好的分类网络中来获得不同大小的特征映射,修改了传统的VGG16网络;
    将VGG16的FC6和FC7层转化为卷积层,如上图中的Conv6和Conv7;
    去掉所有的Dropout层和FC8层;
    添加了Atrous算法(hole算法)
    将Pool5从2x2-S2变换到3x3-S1;
  2. 抽取Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2层的feature map,然后分别在这些feature map层上面的每一个点构造6个不同尺度大小的Bounding Boxes,然后分别进行检测和分类,生成多个BB,如上图下面的图所示;
  3. 将不同feature map获得的Bounding Boxes结合起来,经过NMS(非极大值抑制)方法来抑制掉一部分重叠或者不正确的Bounding Boxes,生成最终的Bounding Boxes集合(即检测结果);
    SSD不仅获得了不同尺度的特征映射,同时在不同的特征映射上面进行预测,在增加运算量的同时增加了检测的精度,因为他考虑了更多尺度的特征。浅层的卷积后的feature map可以得到物理的边缘信息,而深层的卷积后的feature map可以得到更细节更抽象的特征,具体如下图所示:
    在这里插入图片描述
    对于Faster-rcnn而言,其在特定层的Feature map上面的每一点生成9个预定义好的Bounding Boxes,然后进行回归和分类操作进行初步检测,然后进行ROI Pooling和检测获得相应的BB;而SSD则在不同的特征层的feature map上的每个点同时获取6个不同的Bounding Boxes,然后将这些Bounding Boxes结合起来,最后经过NMS处理获得最后的Bounding Boxes。
    在这里插入图片描述
    如上图所示,在特征图的每个位置预测K个BB,对于每一个BB,预测C个类别得分,以及相对于Default box的4个偏移量值,这样总共需要(C+4)* K个预测器,则在mn的特征图上面将会产生(C+4) K * m * n个预测值。
    在这里插入图片描述
    SSD中的Defalut box和Faster-rcnn中的anchor机制很相似。就是预设一些目标预选框,后续通过softmax分类+bounding box regression获得真实目标的位置。对于不同尺度的feature map 上使用不同的Default boxes。如上图所示,我们选取的feature map包括38x38x512、19x19x1024、10x10x512、5x5x256、3x3x256、1x1x256,Conv4_3之后的feature map默认的box是4个,我们在38x38的这个平面上的每一点上面获得4个box,那么我们总共可以获得38x38x4=5776个;同理,我们依次将FC7、Conv8_2、Conv9_2、Conv10_2和Conv11_2的box数量设置为6、6、6、4、4,那么我们可以获得的box分别为2166、600、150、36、4,即我们总共可以获得8732个box,然后我们将这些box送入NMS模块中,获得最终的检测结果。
    这就会导致在不同的特征图上面会产生很多很多密密麻麻的候选框,如下图所示:
    在这里插入图片描述
    这个时候再使用NMS非极大值抑制就可以。
    SSD的损失函数:
    在这里插入图片描述
    N是match到GT(Ground Truth)的prior box数量;而α参数用于调整confidence loss和location loss之间的比例,默认α=1。其中在这里插入图片描述代表第i个prior box匹配到了第j个class为p类别的GT box。SSD中的confidence loss是典型的softmax loss。
    而location loss是典型的smooth L1 loss:
    在这里插入图片描述
    d表示真实框的参数,g表示预测框的参数,\hat{g}表示预测的偏移量。

在训练时,groundtruth boxes 与 default boxes(就是prior boxes预选框) 按照如下方式进行配对:
1:寻找与每一个groundtruth boxes有最大IOU的prior boxes,这样就能保证每一个我groungtruth boxes都能有一个prior boxes与之匹配
2:SSD之后又将还没有配对的prior boxes与任意一个groundtruth boxes尝试配对,只要两者的IOU大于阈值认定匹配(阈值0.5)
3:显然配对到groundtruth boxes的prior boxes就是positive,没有配对到的就是negative
在这里插入图片描述

因为一般情况下负样本negative prior boxes数量是远大于positive prior boxes的数量,如果直接训练的话会导致网络的预测重于负样本,从而导致loss不稳定
所以SSD在抽样的时候按照confidence error降序排序,选取误差较大的top-k作为训练的负样本,控制positive:negative=1:3,
因为作者发现这样可以导致模型更快的优化和更稳定的训练。
同时在数据增广方面:
作者为了使得模型对于各种输入图像大小和形状更加鲁棒,每一个训练图像通过以下选项之一随机抽样:
1:使用整张原始图像
2:采样一个区域,使得采样区域和原始图像最小的IOU为0.1,0.3,0.5,0.7,0.9
3:随机采样一个区域,每个采样区域的大小为原始图像大小的[0.1,1],长宽比在0.5和2之间,如果真实标注中心在采样框区域内,则保留2者重叠的部分作为新图片的真实标注,经过上述采样步骤之后,将每一个采样区域大小调整为固定的大小,并以0.5的概率水平翻转

SSD对于小目标的检测效果一般,可能是因为SSD用conv4_3浅层feature去检测小目标,而浅层特征卷积层数少,存在特征提取不充分的问题

参考[1]
2

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值