目标检测算法SSD结构详解

上期我们一起学习了Faster RCNN的损失函数以及如何进行模型训练的相关知识,如下:
Faster RCNN的损失函数以及模型训练流程

本文主要学习:

  • One-Stage / Two-Stage

  • SSD模型结构

我们知道之前学的RCNN系列需要选取候选框和分类回归两步操作,称为Two-Stage类算法。今天我们学习一种新的目标检测算法SSD(Single Shot MultiBox Detector),该算法属于One-Stage类算法范畴。首先我们先看一下One-StageTwo-Stage类算法到底有哪些区别。

One-Stage / Two-Stage

  • Two-Stage:Faster RCNN
    Two-Stage算法将检测问题划分为两个阶段,首先产生候选区域(Region Proposals),然后再对候选区域进行分类和位置回归。
    特点:错误率低,漏识别率低,但是速度较慢,不太能满足实时监测场景。

  • One-Stage:SSD YOLO
    One-Stage算法不需要Region Proposals阶段,可以直接产生物体的类别概率和位置坐标值,经过单次检测即可直接得到最终的检测结果。
    特点:有着更快的检测速度。

如下图,我们也可以从下图中看到One-StageTwo-Stage算法的性能差异:目标检测算法SSD结构详解_第1张图片
可以看到在VOC2007测试集上One-Stage算法有着更快的检测速度。

SSD模型结构

SSD算法的模型结构简单的说包括VGG16基础网络和后面的特征提取检测网络,我们逐一学习。

基础网络

SSD算法的基础网络是VGG16,我们先复习下VGG16的网络结构,如下图:

目标检测算法SSD结构详解_第2张图片 VGG16模型结构

可以看到:

  1. VGG16的网络输入是224*224*3的图像

  2. 经过两个卷积层(Conv1)得到224*224*64尺寸的特征图

  3. 经过一个池化层和两个卷积层(Conv2)后得到112*112*128尺寸的特征图

  4. 经过一个池化层和三个卷积层后(Conv3)得到56*56*256尺寸的特征图

  5. 经过一个池化层和三个卷积层后(Conv4)得到28*28*512尺寸的特征图

  6. 经过一个池化层和三个卷积层后(Conv5)得到14*14*512尺寸的特征图

  7. 经过一个池化层后得到7*7*512尺寸的特征图

  8. 最后经过全连接层(FC6&FC7)后再接一个softmax层后输出结果

上面的输入是224*224*3的图像,这里SSD算法有两种尺寸,一种是SSD300就是输入图像大小为300*300*3的,另外一种是SSD500,即输入图像尺寸为500*500*3。以SSD300为例,则上面第5步的Conv4后,将得到38*38*512的特征图。

SSD模型结构

了解了VGG16这个基础网络,我们来看下SSD的结构框架是什么样子的,如下图:

目标检测算法SSD结构详解_第3张图片 SDD结构框架

从图中我们可以看到,SSD算法结构流程如下:

  1. 将尺寸大小为300*300*3的图像输入到VGG16网络中,在VGG16的第5步也就是Conv4之后得到38*38*512的特征图

  2. 接着通过一个池化和3*3*1024的卷积层Conv6得到19*19*1024的特征图

  3. 之后再经过一个1*1*1024的卷积操作Conv7,得到19*19*1024的特征图

  4. 接着做一个1*1*2563*3*512-s2(s2stride=2)的卷积操作Conv8后得到10*10*512的特征图

  5. 继续做卷积操作Conv9,具体为1*1*1283*3*256-s2卷积之后得到5*5*256的特征图

  6. 继续做卷积操作Conv10,具体为1*1*1283*3*256-s1卷积之后得到3*3*256的特征图

  7. 继续做卷积操作Conv11,具体为1*1*1283*3*256-s1卷积之后得到1*1*256的特征图

SSD算法的大概结构如上,但是是如何进行分类和回归的呢?
我们发现,上图中Conv4,Conv7,Conv8,Conv9,Conv10Conv11都有指向后面的8732分类和最后的非极大值抑制。以Conv4为例,Conv4后得到的特征图尺寸为38*38*512,对该38*38的特征图上的每个像素类似前面Faster-RCNN中的anchor一样,映射到输入图片上产生4个候选框,总共产生38*38*4=5776个候选框,然后对每个候选框进行分类和回归,而该分类和回归是通过一个3*3*(4*(Classes+4))的卷积操作完成的。其他类似,比如对Conv7,Conv8Conv9特征图中每个像素产生6个候选框,对Conv10Conv11特征图中的每个像素产生4个候选框。总计产生8732个候选框,对每个候选框逐级分类和回归之后进行非极大值抑制操作,即得出目标检测结果。

SSD检测实例

我们知道根据特征图往输入图片上映射候选框会根据特征图大小进行不同比例的映射,也就是说前面的特征图,比如Conv4Conv7映射的候选框偏小,可以用来检测小物体;Conv8Conv9映射的候选框尺寸中等,可以用来检测中等大小的物体,而Conv10Conv11映射到原图的候选框偏大,则可以用来检测大物体。这样实现的检测不同尺度物体的目的。接下来,我们实例看一下SSD的预测过程,如下图:

目标检测算法SSD结构详解_第4张图片 SSD详细结构

在上图中,

  1. 输入图片size300*300*3,经过VGG16Conv4后得到38*38*512的特征图,对此特征图机芯正则化后对38*38*4=5776个候选框进行分类和回归,由于该特征图常用来检测小物体,所以在该特征图上并未检测到图片中的汽车。

  2. 接着对上一步的特征图进行卷积操作得到19*19*1024的特征图,对生成的19*19*6=2166个候选框进行分类和回归,在该特赠图上仍未检出物体。

  3. 继续做卷积操作,得到10*10*512的特征图,对生成的10*10*6=600个候选框进行分类和回归,仍未检出目标物体。

  4. 继续做卷积操作,得到5*5*256的特征图,对生成的5*5*6=150个候选框进行分类和回归,检出两个目标。

  5. 继续做卷积操作,得到3*3*256的特征图,对生成的3*3*4=36个候选框进行分类和回归,检出一个目标。

  6. 继续做卷积操作,得到1*1*256的特征图,对生成的1*1*4=4个候选框进行分类和回归,检出一个目标。

  7. 对这5776+2166+600+150+36+4=8732个候选框分类和回归之后,对检出结果进行非极大值抑制后得到最终的检测结果。

就这样,SSD算法得到了不同尺寸特征图的特征映射,同时在不同的特征映射上面进行预测,由于它考虑了更多尺度的特征,在增加运算量的同时增提高了检测精度。下期我们将一起学习下SSD算法的损失函数,Match策略以及训练过程中的注意点。
目标检测算法SSD结构详解_第5张图片

你可能感兴趣的:(目标检测算法SSD结构详解)