文章目录[隐藏]
- SSD介绍:
- SSD网络结构:(可以达到在不同特征尺度上预测不同尺度的目标)
- 1、会对输入的图像进行缩放,必须是300*300*3的RGB图像。
- 2、接下来进入主干网络,采用的是VGG-16的Conv5_3(第5个卷积部分的第三层)及之前的部分结构,如图:详细了解深度学习图像处理之VGG网络模型_BIgHAo1的博客-CSDN博客。通过Conv4_3,得到第一个特征预测层,输出为38*38*512的特征矩阵。当通过该网络后,特征矩阵输出大小为19*19*512。
- 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中的Default Box的scale(尺度)以及aspect(比例)的设定:
- 原论中scale的计算:
- 在很多实现的方法中,都没有采用该方法去计算,所以在这里直接给出每个预测特征层的目标尺度以及对应比例:
- 为什么这里每个特征预测层会有两个scale?
- 因为在原论文当中,对于比例为1的情况,我们会额外增加一个default box。这个增加的default的scale的值为,其中sk指的是第一个scale值(如21),sk+1指的是第二个scale值(如45),其中sk+1对应着下一层的第一个scale值。
- 接下来,将直接给出6个特征预测层的default boxs的尺寸比例,以及数量:
- 如图:在第一个特征预测层,特征矩阵为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的再次理解:
- Predictor(预测器)的实现:
- 即如何在这6个预测特征矩阵层上进行预测?
- 原论文:对于预测为m*n*p的特征矩阵,用3*3*p的卷积层,生成概率分数以及坐标偏移量(边界框回归参数)(实现方法类似于Faster R-CNN)。
- 那对于每一个特征预测层,要使用多少个卷积核呢?
- 原论文:对于特征图上的每一个位置,都会生成 k个default box,对每一个default box分别计算c个类别分数以及4个坐标偏移量(边界框回归参数),所以就需要k*(c+4)个卷积核进行卷积处理。那么对于m*n的特征矩阵而言,就会生成m*n*k*(c+4)个输出值。
- 解释上文:(c+4)*k=c*k+4*k
- 每一个default box都会预测c个类别分数,这里的c个类别分数包括了背景类别(即会预测背景概率)。比如csk Voc测试集,所需预测的类别个数为20,所以它所对应的c为21,且第一个为背景的分数,后面依次为所预测目标的分数。
- 四个参数分别为中心坐标,宽度以及高度的预测。(注意这里与Faster R-CNN有点不同,这里对每个default box都只生成4个参数,而Faster R-CNN,会对每一个anchor box 进行分类生成,即4*c个参数,c为类别个数)。
- 训练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网络结构:(可以达到在不同特征尺度上预测不同尺度的目标)
1、会对输入的图像进行缩放,必须是300*300*3的RGB图像。
2、接下来进入主干网络,采用的是VGG-16的Conv5_3(第5个卷积部分的第三层)及之前的部分结构,如图:详细了解深度学习图像处理之VGG网络模型_BIgHAo1的博客-CSDN博客。通过Conv4_3,得到第一个特征预测层,输出为38*38*512的特征矩阵。当通过该网络后,特征矩阵输出大小为19*19*512。
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原论文示例:
如图:图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的计算:
在很多实现的方法中,都没有采用该方法去计算,所以在这里直接给出每个预测特征层的目标尺度以及对应比例:
为什么这里每个特征预测层会有两个scale?
因为在原论文当中,对于比例为1的情况,我们会额外增加一个default box。这个增加的default的scale的值为,其中sk指的是第一个scale值(如21),sk+1指的是第二个scale值(如45),其中sk+1对应着下一层的第一个scale值。
接下来,将直接给出6个特征预测层的default boxs的尺寸比例,以及数量:
如图:在第一个特征预测层,特征矩阵为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的再次理解:
上图给出预测特征图1以及预测特征图4,以及标注了预测特征层1和预测特征层4的scale以及aspect信息。并假设在feature map1的该点位置生成它的default boxs,
通过映射信息,找到该点对应原图的坐标,然后以它为中心,去绘制default box。如上图,对于左边的4个default box,三个较小的是通过该scale和aspect绘制而来;外面较大的是通过该绘制而来。
Predictor(预测器)的实现:
即如何在这6个预测特征矩阵层上进行预测?
原论文:对于预测为m*n*p的特征矩阵,用3*3*p的卷积层,生成概率分数以及坐标偏移量(边界框回归参数)(实现方法类似于Faster R-CNN)。
那对于每一个特征预测层,要使用多少个卷积核呢?
原论文:对于特征图上的每一个位置,都会生成 k个default box,对每一个default box分别计算c个类别分数以及4个坐标偏移量(边界框回归参数),所以就需要k*(c+4)个卷积核进行卷积处理。那么对于m*n的特征矩阵而言,就会生成m*n*k*(c+4)个输出值。
解释上文:(c+4)*k=c*k+4*k
每一个default box都会预测c个类别分数,这里的c个类别分数包括了背景类别(即会预测背景概率)。比如csk Voc测试集,所需预测的类别个数为20,所以它所对应的c为21,且第一个为背景的分数,后面依次为所预测目标的分数。
四个参数分别为中心坐标,宽度以及高度的预测。(注意这里与Faster R-CNN有点不同,这里对每个default box都只生成4个参数,而Faster R-CNN,会对每一个anchor box 进行分类生成,即4*c个参数,c为类别个数)。
训练SSD模型时,正负样本的选取:
原论文给出2个准则:1、对每一个ground truth box去匹配与它 iou值最大的default box,则也是正样本。 2、对于任意一个default box,只要它与任意一个ground truth box的iou值大于0.5,则是正样本。(与Faster R-CNN类似)
选取策略:在上面剩下的所有负样本,计算它们的最大confidence loss(可以理解为越大,越不能被选取),选取值较小的作为负样本,数量为正样本的3倍。
损失的计算:
(说明:以上各图并非原创)
版权声明:本文为CSDN博主「BigHao688」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/BIgHAo1/article/details/121108824
暂无评论