❝上期我们一起学习了
Faster RCNN
的损失函数以及如何进行模型训练的相关知识,如下: Faster RCNN的损失函数以及模型训练流程❞
本文主要学习:
我们知道之前学的RCNN
系列需要选取候选框和分类回归两步操作,称为Two-Stage
类算法。今天我们学习一种新的目标检测算法SSD
(Single Shot MultiBox Detector
),该算法属于One-Stage
类算法范畴。首先我们先看一下One-Stage
和Two-Stage
类算法到底有哪些区别。
Two-Stage
算法将检测问题划分为两个阶段,首先产生候选区域(Region Proposals
),然后再对候选区域进行分类和位置回归。
特点:错误率低,漏识别率低,但是速度较慢,不太能满足实时监测场景。One-Stage
算法不需要Region Proposals
阶段,可以直接产生物体的类别概率和位置坐标值,经过单次检测即可直接得到最终的检测结果。
特点:有着更快的检测速度。如下图,我们也可以从下图中看到One-Stage
和Two-Stage
算法的性能差异:
可以看到在VOC2007
测试集上One-Stage
算法有着更快的检测速度。
SSD
算法的模型结构简单的说包括VGG16
基础网络和后面的特征提取检测网络,我们逐一学习。
SSD
算法的基础网络是VGG16
,我们先复习下VGG16
的网络结构,如下图:
VGG16模型结构
可以看到:
VGG16
的网络输入是224*224*3
的图像Conv1
)得到224*224*64
尺寸的特征图Conv2
)后得到112*112*128
尺寸的特征图Conv3
)得到56*56*256
尺寸的特征图Conv4
)得到28*28*512
尺寸的特征图Conv5
)得到14*14*512
尺寸的特征图7*7*512
尺寸的特征图FC6&FC7
)后再接一个softmax
层后输出结果上面的输入是224*224*3
的图像,这里SSD
算法有两种尺寸,一种是SSD300
就是输入图像大小为300*300*3
的,另外一种是SSD500
,即输入图像尺寸为500*500*3
。以SSD300
为例,则上面第5
步的Conv4
后,将得到38*38*512
的特征图。
了解了VGG16
这个基础网络,我们来看下SSD
的结构框架是什么样子的,如下图:
SDD结构框架
从图中我们可以看到,SSD
算法结构流程如下:
300*300*3
的图像输入到VGG16
网络中,在VGG16
的第5
步也就是Conv4
之后得到38*38*512
的特征图3*3*1024
的卷积层Conv6
得到19*19*1024
的特征图1*1*1024
的卷积操作Conv7
,得到19*19*1024
的特征图1*1*256
和3*3*512-s2
(s2
为stride=2
)的卷积操作Conv8
后得到10*10*512
的特征图Conv9
,具体为1*1*128
和3*3*256-s2
卷积之后得到5*5*256
的特征图Conv10
,具体为1*1*128
和3*3*256-s1
卷积之后得到3*3*256
的特征图Conv11
,具体为1*1*128
和3*3*256-s1
卷积之后得到1*1*256
的特征图SSD
算法的大概结构如上,但是是如何进行分类和回归的呢?
我们发现,上图中Conv4
,Conv7
,Conv8
,Conv9
,Conv10
和Conv11
都有指向后面的8732
分类和最后的非极大值抑制。以Conv4为例,Conv4
后得到的特征图尺寸为38*38*512
,对该38*38
的特征图上的每个像素类似前面Faster-RCNN
中的anchor
一样,映射到输入图片上产生4
个候选框,总共产生38*38*4=5776
个候选框,然后对每个候选框进行分类和回归,而该分类和回归是通过一个3*3*(4*(Classes+4))
的卷积操作完成的。其他类似,比如对Conv7
,Conv8
和Conv9
特征图中每个像素产生6
个候选框,对Conv10
和Conv11
特征图中的每个像素产生4
个候选框。总计产生8732
个候选框,对每个候选框逐级分类和回归之后进行非极大值抑制操作,即得出目标检测结果。
我们知道根据特征图往输入图片上映射候选框会根据特征图大小进行不同比例的映射,也就是说前面的特征图,比如Conv4
和Conv7
映射的候选框偏小,可以用来检测小物体;Conv8
和Conv9
映射的候选框尺寸中等,可以用来检测中等大小的物体,而Conv10
和Conv11
映射到原图的候选框偏大,则可以用来检测大物体。这样实现的检测不同尺度物体的目的。接下来,我们实例看一下SSD
的预测过程,如下图:
SSD详细结构
在上图中,
size
为300*300*3
,经过VGG16
的Conv4
后得到38*38*512
的特征图,对此特征图机芯正则化后对38*38*4=5776
个候选框进行分类和回归,由于该特征图常用来检测小物体,所以在该特征图上并未检测到图片中的汽车。19*19*1024
的特征图,对生成的19*19*6=2166
个候选框进行分类和回归,在该特赠图上仍未检出物体。10*10*512
的特征图,对生成的10*10*6=600
个候选框进行分类和回归,仍未检出目标物体。5*5*256
的特征图,对生成的5*5*6=150
个候选框进行分类和回归,检出两个目标。3*3*256
的特征图,对生成的3*3*4=36
个候选框进行分类和回归,检出一个目标。1*1*256
的特征图,对生成的1*1*4=4
个候选框进行分类和回归,检出一个目标。5776+2166+600+150+36+4=8732
个候选框分类和回归之后,对检出结果进行非极大值抑制后得到最终的检测结果。就这样,SSD
算法得到了不同尺寸特征图的特征映射,同时在不同的特征映射上面进行预测,由于它考虑了更多尺度的特征,在增加运算量的同时增提高了检测精度。下期我们将一起学习下SSD
算法的损失函数,Match
策略以及训练过程中的注意点。