SSD是一种one-stage的通用物体检测算法,在2016年被提出,另外一个常听到的one-stage算法为YOLO,只是SSD算法的性能与速度优于YOLO。SSD算法有以下特点
- 去掉了候选框的操作,采用了Anchor的机制。Anchor机制实际上是每一个点都做为候选区域的中心点。至于如何完成,一会再介绍
- 直接回归目标的类别和位置,在传统的目标检测算法中,想要获取目标区域的位置,一般都是候选框提取。从原始图片中不停的进行采样,找到目标区域。典型的为滑动窗口去采样。
- 不同尺度的特征图预测,这样可以完成对不同物体尺寸进行适应
SSD模型的网络结构:
- 主干网络为 VGG16,VGG-16在图中包含了Con4_3的卷积网络。图中的con4_3, conv6都是卷积层的名字,可以自己定义。主干网络是可以替换的,替换为深度可分离卷积即可
- 对于每一个特征图,都会进行对目标区域的定位,完成目标的区域位置与类别预测
- Default Bounding Box的类别分数,偏移量
比如300x300的图片在进行采样的时候,尺度倍率变化。 -> 150x150 -> 75x75 -> 38x38 -> 19x19 -> 10x10 -> 5x5 -> 3x3 -> 1x1
深度学习主要在主干网络 与 多尺度的特征图中学到的
在SSD网络中是考虑到6个特征图的尺寸,综合来看可能是比较优的一个选择。
Anchor & Default Box
这是在检测层涉及到的概念,在检测层会结合Anchor机制,通过DefaultBox进行目标的区域与分类预测。
图中8x8和4x4代表两个不同尺度的特征图。
图中分为了很多网格,每一个网格都可以看做Anchor,每一个网络都表达了一个感受野的概念,每一个网格都对应原图中的一块区域。一块区域就可以看做一组特征。然后对这些特征进行分类和回归
- 计算每一个Anchor与真实物体区域的IOU值
DefaultBox
- m * n个单元,每一个单元都是一个Anchor
- 每个单元上生成固定尺寸和长度比的box
- 假设每一个特征图中有mxn个单元,每个单元对应k个default box。每个default box预测C个类别概率分布和4个坐标
- (c + 4) * k *m * n个输出值
Prior box:
- 实际选择的default box叫做prior box
- 38 * 38 * 4 + 19 * 19 * 6 + 10 10 * 6 + 556 + 334 + 1 1 *4 = 8732个prior box 。可以看到并不是所有的box都被选择
损失函数:
- 分类: softMax
- 回归:smooth
样本构造:
- 正样本:
- GT Box。即目标区域的位置
- 从GT Box出发找出,真值中找到最匹配的prior box放入候选正样本集
- 从prior box集出发,寻找与GT Box满足IOU > 0.5的 prior box
- 负样本:
- 难例挖掘 难区分的
- 正负样本比 1:3
数据增强:
- 从输入图片中随机选择一些小区域,控制区域的比例
- 在目标区域附近采样,尽量不要选到背景的区域
- 随机翻转图片,修改亮度,饱和度,等方式
- Resize到固定大小