目标检测—SSD

       近年来目标检测算法主要包括两种类型:One Stage和Two Stage。 之前已经介绍了R-CNN、Fast-RCNN以及Faster-RCNN三种目标检测网络的算法流程和理论,这三种网络都属于Two Stage,Two Stage字面意思就是需要两步完成检测,这种目标检测网络有个比较明显的缺陷是检测速度较慢。为了加快检测速度,出现了另外一种One Stage的目标检测网络,常见地例如SSD、Yolo算法。

        首先看下目前比较流行目标检测网络的性能和速度对比,如下图。从图中可以看到R-CNN、Fast-RCNN、Faster-RCNN的检测速度比较慢,准确率一般,相比之下,SSD与YOLO的速度就快很多,同时SSD的检测准确率要明显高于YOLO。下面具体介绍SSD算法

不同目标检测网络对比

        一、SSD基本框架和流程

图一

图二

                首先SSD网络结构基于VGG16进行调整,修改全连层FC6与FC7为卷积层Conv6与Conv7,后面再用卷积层获得不同尺度的特征图。算法步骤:

                    1、预训练VGG16网络参数,并修改网络结构

                    2、输入图像,抽取6中不同尺度的特征图,并且对这6种尺度特征图中每个元素点生成各种各样的Default box(生成规则后面介绍)

                    3、通过NMS(非极大值抑制)进行筛选,减少Default box数量,得到正负样本,训练模型loss

        二、多尺度检测

                SSD多尺度思路其实很简单,就是使用不同深度的特征图进行预测,SSD使用了六种尺度特征图——conv4_3,conv_7,conv8_2,conv7_2,conv8_2,conv9_2,conv10_2,conv11_2。如下图,8\times 84\times 4的特征图能够检测不同大小物体,左侧属于浅层特征,特征图中的元素能够映射到原图中范围较小,适用于检测小物体;右侧属于深层特征,每个像素点映射到原图中的范围较大,所以能够检测较大物体

在这里插入图片描述

        三、Default box生成与预测

                 SSD借鉴了Faster R-CNN的anchor思想,对特征图中每个元素设置不同尺度和长宽比的Default box,然后对这些Default box进行分类和位置回归,初步筛选出一些符合条件的Default box。如下图

在这里插入图片描述

                1、Default box数量:特征图中每个元素生成一定数量的Default box,不同尺度特征图设置的数量也不一样,例如SSD中,六种尺度特征图conv4_3,conv_7,conv8_2,conv7_2,conv8_2,conv9_2,conv10_2,conv11_2,对应的大小为(38,38),(19,19),(10,10),(5,5),(3,3),(1,1),设置的先验框数量分别为4,6,6,6,4,4,因此可以获得的总Default box数量为

38\times 38\times 4+19\times 19\times 6+10\times 10\times 6+5\times 5\times 6+3\times 3\times 4+1\times 1\times 4=8732个。


                2、Default box大小:先验框的大小主要与特征图大小有关,越深的特征图先验框越大,否则反之。先验框面积比例遵循如下公式

在这里插入图片描述

其中m表示特征图尺度个数,SSD为5,按正常数量来讲应该为6,但是SSD的conv4_3层是单独设置的;s_{k} 表示先验框相对于原图的比例;s_{min} s_{man} 表示比例的最小值和最大值,SSD的s_{min} s_{man} 分别为0.2,0.9。

1)conv4_3:其先验框的尺度比例单独设置为s_{min} /2=0.1,则相对于原图的大小为300\times 0.1=30

2)其他5层:对于后面的特征图,先验框尺度按照上面公式线性增加,但是先将尺度比例先扩大100倍,\frac{(s_{man}\times 100 ) - (s_{min}\times 100 )}{m-1} =17,则各个尺度的s_{k} 分别为20,37,54,71,88,将这些比例除以100,然后再乘以图片大小,可以得到各个特征图的尺度为60,111,162,213,264

至此,得到了每种特征图先验框的大小,然后就是设置不同长宽比即可。SSD设置了6中比例(1,2,3,\frac{1}{2} ,\frac{1}{3},1^,)

                3、Default box分类与回归:怎么对这些Default box进分类和回归呢?先来看看特征图中每个元素点需要多少个输出,假设分类类别为20,每个元素会生成6个Default box,则分类需要(20+1)\times 6个输出,+1表示背景也算一类,边框回归需要4\times 6个输出。每一个元素都需要这么多输出,SSD使用3\times 3卷积分别对先验框类别和位置进行预测,所以分类需要的卷积核数量为(20+1)*6,位置回归需要4*6个卷积核。

        四、正负训练样本

                    通过第三部分得到非常多的先验框,一般不会使用所有的先验框进行训练,需要进行筛选。首先使用的NMS(非极大值抑制,这是一种常用于目标检测减少先验框的方法)减少重复度高的先验框。现在再来确定训练需要的正负样本,筛选规则如下:

                    1、首先,对于图片中每个Ground truth,找到与其IOU最大的先验框,该先验框与其匹配,标记为正样本,反之,若先验框没有与任意一个ground truth匹配则为负样本。这样可以保证每个Ground truth一定与某个先验框匹配。

                    2、第一步存在一个问题是,会造成过多的负样本,正样本非常少。因此需要增加正样本数量,对于剩余的未匹配先验框,若某个Ground truth的IOU大于某个阈值(一般是0.5),那么该先验框也与这个Ground truth进行匹配。这意味着某个ground truth可能与多个先验框匹配,这是可以的。但是反过来不可以,一个先验框只能匹配一个Ground truth,如果多个ground truth与某个先验框IOU大于阈值,那么先验框只与IOU最大的那个ground truth进行匹配。

                    3、如果某个Ground truth所对应最大IOU先验框小于阈值,并且所匹配的先验框却与另外一个Ground truth的IOU大于阈值,那么该先验框应该匹配谁,答案应该是前者。(首先要确保某个ground truth一定有一个先验框与之匹配)

正负样本

                    如图所示,TP、FP表示正样本和负样本,GT表示Ground truth

                    尽管一个ground truth可以与多个先验框匹配,但是正样本还是太少了,所以负样本相对正样本会很多。为了保证正负样本尽量平衡,SSD采用了hard negative mining,就是对负样本进行抽样,抽样时按照置信度误差(预测背景的置信度越小,误差越大)进行降序排列,选取误差的较大的top-k作为训练的负样本,以保证正负样本比例接近1:3。

        五、损失函数

                    损失函数与Faster RCNN基本差不多包括分类损失和坐标回归损失。分类损失使用多分类交叉熵损失,位置坐标回归损失与Fast RCNN一样使用Smooth_{L1} (可以看之前RCNN和Fast RCNN),回归坐标偏移量。公式如下:

![总损失](https://img-blog.csdnimg.cn/20210514190032830.png)

位置坐标回归损失

多分类交叉熵损失

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值