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图像。
第5个卷积部分的第三层)及之前的部分结构,如图:通过Conv4_3,得到第一个特征预测层,输出为38*38*512的特征矩阵。当通过该网络后,特征矩阵输出大小为19*19*512。
3、接下来通过3*3*1024的卷积层,输出19*19*1024的特征矩阵(可以看成是VGG16的第一个全连接层)。
第二个特征预测层,输出19*19*1024的特征矩阵(可以看成是VGG16的第二个全连接层)。
第三个特征预测层,输出10*10*512的特征矩阵。
第四个特征预测层,输出为5*5*256的特征矩阵。
第五个特征预测层,输出为3*3*256的特征矩阵。
第6个特征预测层,输出为1*1*256的特征矩阵。
注意卷积层步距为2的padding则为1,步距为0的padding则为0。
随着抽象程度加深,让后面的特征预测层去检测更大的目标。
SSD原论文示例:
抽象程度较低一些,所以它会保留更多的细节信息,就可以预测较小的目标。在图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
特征层①⑤⑥会生成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个预测特征矩阵层上进行预测?
用3*3*p的卷积层,生成概率分数以及坐标偏移量(边界框回归参数)(实现方法类似于Faster R-CNN)。
那对于每一个特征预测层,要使用多少个卷积核呢?
对于m*n的特征矩阵而言,就会生成m*n*k*(c+4)个输出值。
解释上文:(c+4)*k=c*k+4*k