深度学习目标检测之SSD网络(超级详细)

SSD介绍:

        是作者Wei Liu在ECCV 2016上发表的论文提出的。对于输入尺寸300*300的SSD网络使用Nvidia Titan X在VOC 2007测试集上达到74.3%mAP以及59FPS(每秒可以检测59张图片);对于输入512*512的SSD网络,达到了76.9%mAP,超越了当时最强的Faster RCNN(73.2%mAP)。达到真正的实时检测。

SSD网络结构:(可以达到在不同特征尺度上预测不同尺度的目标

深度学习目标检测之SSD网络(超级详细)_第1张图片

         1、会对输入的图像进行缩放,必须是300*300*3的RGB图像。

         2、接下来进入主干网络,采用的是VGG-16的Conv5_3(第5个卷积部分的第三层)及之前的部分结构,如图:详细了解深度学习图像处理之VGG网络模型_BIgHAo1的博客-CSDN博客。通过Conv4_3,得到第一个特征预测层,输出为38*38*512的特征矩阵。当通过该网络后,特征矩阵输出大小为19*19*512。

深度学习目标检测之SSD网络(超级详细)_第2张图片

        3、接下来通过3*3*1024的卷积层,输出19*19*1024的特征矩阵(可以看成是VGG16的第一个全连接层)。

        4、接下来通过1*1*1024的卷积层,得到第二个特征预测层,输出19*19*1024的特征矩阵(可以看成是VGG16的第二个全连接层)。

        5、接下来通过1*1*256和3*3*512(这个卷积层的步距为2)的卷积层,得到第三个特征预测层,输出10*10*512的特征矩阵。

        6、接下来通过1*1*128和3*3*256(此步距为2)的卷积层,得到第四个特征预测层,输出为5*5*256的特征矩阵。

        7、接下来通过1*1*128和3*3*256的卷积层,得到第五个特征预测层,输出为3*3*256的特征矩阵。

        8、最后通过1*1*128和3*3*256的卷积层,得到第6个特征预测层,输出为1*1*256的特征矩阵。

        注意卷积层步距为2的padding则为1,步距为0的padding则为0。

        通过上述过程,则得到了SSD的6个特征层,可以在这6个预测层,分别预测不同大小的目标。比如在第一个特征预测层,会让它检测相对较小的目标(因为此时抽象程度较小,细节的信息保留更多),随着抽象程度加深,让后面的特征预测层去检测更大的目标

SSD原论文示例:

 深度学习目标检测之SSD网络(超级详细)_第3张图片

        如图:图a是标注好的原图,图b和图c分别是8*8和4*4的特征矩阵。8*8的特征矩阵相比4*4的特征矩阵,抽象程度较低一些,所以它会保留更多的细节信息,就可以预测较小的目标。在图a猫的面积相对于狗的面积较小一些,所以就在8*8的feature map进行预测猫的目标边界框。很显然在图c中,4*4的Default Box(类似于Faster R-cnn的anchor box)可以很好的匹配GT box。

SSD中的Default Box的scale(尺度)以及aspect(比例)的设定:

        原论中scale的计算:  深度学习目标检测之SSD网络(超级详细)_第4张图片

         在很多实现的方法中,都没有采用该方法去计算,所以在这里直接给出每个预测特征层的目标尺度以及对应比例:

深度学习目标检测之SSD网络(超级详细)_第5张图片

         为什么这里每个特征预测层会有两个scale

因为在原论文当中,对于比例为1的情况,我们会额外增加一个default box。这个增加的default的scale的值为,其中sk指的是第一个scale值(如21),sk+1指的是第二个scale值(如45),其中sk+1对应着下一层的第一个scale值。

         接下来,将直接给出6个特征预测层的default boxs的尺寸比例,以及数量:

        深度学习目标检测之SSD网络(超级详细)_第6张图片

        如图:在第一个特征预测层,特征矩阵为38*38,其中default box的尺寸有两种:

1、scale大小为21,有三种比例:1:2,1:1,2:1

2、scale大小为,只有一种比例:1:1

        依次类推。注意:根据每个尺寸及比例的不同,在各个特征预测层输出的特征图中,每个位置生成的default box数量也不同,如图:特征层①⑤⑥会生成4个,特征层②③④会生成6个

        所以,对于特征图层①,因为其特征图的大小为38*38以及每个位置会生成4个default box,所以在该特征层中,总计会生成38*38*4个defaul box。

        依次类推,总计8732个default box,与原论中一样。

对于Default Box的再次理解:

深度学习目标检测之SSD网络(超级详细)_第7张图片

        上图给出预测特征图1以及预测特征图4,以及标注了预测特征层1和预测特征层4的scale以及aspect信息。并假设在feature map1的该点位置生成它的default boxs,

        通过映射信息,找到该点对应原图的坐标,然后以它为中心,去绘制default box。如上图,对于左边的4个default box,三个较小的是通过该scale和aspect绘制而来;外面较大的是通过该绘制而来。

Predictor(预测器)的实现:

        即如何在这6个预测特征矩阵层上进行预测?

深度学习目标检测之SSD网络(超级详细)_第8张图片

        原论文:对于预测为m*n*p的特征矩阵,用3*3*p的卷积层,生成概率分数以及坐标偏移量(边界框回归参数)(实现方法类似于Faster R-CNN)。 

        那对于每一个特征预测层,要使用多少个卷积核呢?

深度学习目标检测之SSD网络(超级详细)_第9张图片

        原论文:对于特征图上的每一个位置,都会生成 k个default box,对每一个default box分别计算c个类别分数以及4个坐标偏移量(边界框回归参数),所以就需要k*(c+4)个卷积核进行卷积处理。那么对于m*n的特征矩阵而言,就会生成m*n*k*(c+4)个输出值

        解释上文:(c+4)*k=c*k+4*k

        深度学习目标检测之SSD网络(超级详细)_第10张图片

 每一个default box都会预测c个类别分数,这里的c个类别分数包括了背景类别(即会预测背景概率)。比如csk Voc测试集,所需预测的类别个数为20,所以它所对应的c为21,且第一个为背景的分数,后面依次为所预测目标的分数。

深度学习目标检测之SSD网络(超级详细)_第11张图片

 四个参数分别为中心坐标,宽度以及高度的预测。(注意这里与Faster R-CNN有点不同,这里对每个default box都只生成4个参数,而Faster R-CNN,会对每一个anchor box 进行分类生成,即4*c个参数,c为类别个数)。

训练SSD模型时,正负样本的选取:

        深度学习目标检测之SSD网络(超级详细)_第12张图片

        原论文给出2个准则:1、对每一个ground truth box去匹配与它 iou值最大的default box,则也是正样本。   2、对于任意一个default box,只要它与任意一个ground truth box的iou值大于0.5,则是正样本。(与Faster R-CNN类似)

深度学习目标检测之SSD网络(超级详细)_第13张图片

         选取策略:在上面剩下的所有负样本,计算它们的最大confidence loss(可以理解为越大,越不能被选取),选取值较小的作为负样本,数量为正样本的3倍。


损失的计算:

深度学习目标检测之SSD网络(超级详细)_第14张图片

        (说明:以上各图并非原创)

你可能感兴趣的:(目标检测,深度学习,ssd)