浅谈SSD检测算法

  • 什么是MobileNet-SSD

SSD本身就是一个基于VGG16的网络,MobileNet-SSD 顾名思义就是这两个网络的组合,具体怎样组合详见网络结构图,下面详细介绍SSD的算法原理及SSD的结构。

 

 

  1. SSD算法的主要网络结构是VGG16,只是将最后两个全连层改成卷积层,并又增加了4个卷积层来构造网络结构。
  2. 对5种不同的卷积层的输出(feature map)分别用两个不同的3x3卷积核进行卷积,一个输出分类用的confidence,每个default box(实际上是prior box)生成的21个类别(在VOC数据集上的训练为例)的confidence,另一个输出回归用的location,每个box生成4个坐标值(x,y,w,h)。

Priorbox:目标的预选框,得到预选框,后续就可以通过softmax分类

  1. 这5种feature map还经过priorbox 层生成的 priorbox(即坐标)。每个feature map层中的default box的数量在caffe 中是给定的即8732个,计算如下:

38x38x4+19x19x6+10x10x6+5x5x6+3x3x4+1X1X4=8732。最后将前面三个计算结构合并,然后传给loss层。

 

注:5种不同的卷积层大小分别为:38x38x(512ch)、19x19x(1024ch)、10x10x(512ch)、

 

训练时同样为conv1_1,conv1_2,conv2_1,conv2_2,conv3_1,conv3_2,conv3_3,conv4_1,conv4_2,conv4_3,conv5_1,conv5_2,conv5_3(512),fc6经过3*3*1024的卷积(原来VGG16中的fc6是全连接层,这里变成卷积层,下面的fc7层同理),fc7经过1*1*1024的卷积,conv6_1,conv6_2(对应上图的conv8_2),conv7_1,conv7_2,conv,8_1,conv8_2,conv9_1,conv9_2,loss。然后针对conv4_3(4),fc7(6),conv6_2(6),conv7_2(6),conv8_2(4),conv9_2(4)的每一个再分别采用两个3*3大小的卷积核进行卷积,这两个卷积核是并列的(括号里的数字代表prior box的数量,可以参考Caffe代码,所以上图中SSD结构的倒数第二列的数字8732表示的是所有prior box的数量,是这么来的38*38*4+19*19*6+10*10*6+5*5*6+3*3*4+1*1*4=8732),这两个3*3的卷积核一个是用来做localization的(回归用,如果prior box是6个,那么就有6*4=24个这样的卷积核,卷积后map的大小和卷积前一样,因为pad=1,下同),另一个是用来做confidence的(分类用,如果prior box是6个,VOC的object类别有20个,那么就有6*(20+1)=126个这样的卷积核)。

 

 

你可能感兴趣的:(浅谈SSD检测算法)