多尺度学习——SSD算法
目标检测算法分为两类
1、two-stage检测算法:
将检测问题分为两个阶段,首先产生候选区(region proposals),然后对候选区域进行分类。
eg:Fast R-CNN、Faster R-CNN
优点:识别错误率低,漏识别率也较低。
缺点:速度慢
算法需要完成4个任务:
(1)特征抽取
(2)生成RP
(3)分类
(4)定位回归
2、one-stage检测算法:
不需要region proposal阶段,直接产生物体的类别概率和位置坐标值,经过单次检测即可直接得到最终的检测结果,速度快。
eg:YOLOv1、SSD、YOLOv2、RetinaNet、YOLOv3
算法需要完成3个任务:
(1)特征抽取
(2)分类
(3)定位回归
SSD算法
SSD–Single Shot MultiBox Detector(one-stage)
- 不同尺度的特征图上进行检测
大尺度特征图(较靠前的特征图)可以用来检测小物体,而小尺度特征图(较靠后的特征图)用来检测大物体 - MultiBox指明了SSD是多框预测
SSD采用了不同尺度和长宽比的先验框 - 采用卷积进行检测
SSD直接采用卷积对不同的特征图来进行提取检测结果。对于形状为m * n *p的特征图,只需要采用 3 x 3 x p的卷积核获取检测值
一、网络结构
- 主干网络:VGGNet:
SSD以VGG16作为基础模型,然后在VGG16的基础上新增了卷积层来获得更多的特征图以用于检测。
SSD主干网络不仅可以使用VGG,还可以使用ResNet这种更优秀的卷积神经网络结构来提取相应的特征;还可以采用一些轻量级的网络提高目标检测时间和压缩计算量,如MobileNets。
- 多尺度Feature Map检测:
对其中5种不同的卷积层的输出(feature map)分别用两个不同的 3×3的卷积核进行卷积,一个输出分类用的confidence,每个default box 生成21个类别confidence;一个输出回归用的 localization,每个 default box生成4个坐标值(x, y, w, h);此外,这5个feature map还经过 PriorBox 层生成 prior box(生成的是坐标)。上述5个feature map中每一层的default box的数量是给定的(8732个)。最后将前面三个计算结果分别合并然后传给loss层。
- NMS筛选层:
SSD综合了各个不同feature map上的目标检测输出的default box,先过滤掉类别概率低于阈值的default box,再采用NMS非极大值抑制,筛掉重叠度较高的。
二、算法过程
SSD网络的详细结构:
基本步骤:
- 输入一幅图片,让图片经过卷积神经网络(CNN)提取特征,并生成 feature map。
- 抽取其中六层的feature map,然后再 feature map 的每个点上生成 default box(各层的个数不同,但每个点都有)。
- 将生成的所有 default box 都集合起来,全部丢到 NMS(极大值抑制)中,输出筛选后的 default box,并输出。
三、损失函数
SSD算法的损失函数分为两部分:计算相应的default box与目标类别的confidence loss以及相应的位置回归。
四、数据扩增
采用数据扩增(Data Augmentation)可以提升SSD的性能,主要采用的技术有水平翻转(horizontal flip),随机裁剪加颜色扭曲(random crop & color distortion),随机采集块域(Randomly sample a patch)(获取小目标训练样本)