论文:SSD: Single Shot MultiBox Detector(ECCV 2016)
动机
大多精度高的算法计算量对于嵌入式系统来说都太大,YOLO等单阶段目标检测算法虽然够快,但是精度却又不够高,因此急需兼顾速度和精度的检测器。
SSD
计算量小、速度快,当然得用单阶段检测器,那么该如何提高其速度和精度呢?
多尺度特征
利用多个不同层的特征进行预测,浅层特征尺度较大,感受野想对较小,含更多小目标信息,因此可以直接利用不同尺度的特征对各个尺度的目标进行检测
与 YOLOv1 对比:
卷积代替全连接
与Yolo最后采用全连接层不同,SSD直接采用 3 × 3 3\times3 3×3卷积对不同的特征图提取检测结果,类似RPN结构
先验框
和faster rcnn中的Anchor一样,特征图上的每个像素点作为中心生成各个尺度Anchor,只不过SSD有6个不同尺度的特征层,且每个尺度特征层生成的Anchor尺度和数目也不同
default box 在不同的feature层有不同的scale:
s
m
i
n
s_{min}
smin=0.2,表最底层scale为0.2,;
s
m
a
x
s_{max}
smax=0.9,表最高层scale为0.9
default box 在同一个feature层又有不同的aspect ratio,大致有 a r = { 1 , 2 , 3 , 1 2 , 1 3 } a_r=\{1,2,3,\frac12,\frac13\} ar={1,2,3,21,31}五种:
- 宽 w k a = s k a r w^a_k=s_k\sqrt{a_r} wka=skar
- 高 h k a = s k / a r h^a_k=s_k/\sqrt{a_r} hka=sk/ar
- 当aspect ratio为1时,还有一种scale的default box:
s
k
′
=
s
k
s
k
+
1
s^\prime_k=\sqrt{s_ks_k+1}
sk′=sksk+1
因此,feature map cell共有6种default box
正负样本划分:IoU最大的以及超过阈值的框都算作正样本小于阈值的则作为负样本,因此一个ground truth可能对应多个default box 。此时负样本仍远远多于正样本,因此采用hard negative mining策略,按置信度排序,选取top_k置信度小(预测为背景的越小误差越大),使得正负样本比例保持在 1:3 左右
损失函数
损失函数为位置误差与置信度误差加权和:
其中,位置误差为:
置信度误差,其采用softmax loss:
实验
存在的问题
容易出现相同物体被不同大小的框同时检测出来,对小目标检测不佳
可做一些不同尺度间的融合,充分利用特征层间的信息,类似FPN结构加以改进
FSSD
【
6
】
^{【6】}
【6】
RSSD
【
5
】
^{【5】}
【5】
参考文献
【1】目标检测算法之SSD
【2】目标检测|SSD原理与实现
【3】总结-空洞卷积(Dilated/Atrous Convolution)
【4】目标检测——SSD简介及代码注释(附github代码——已跑通)
【5】Enhancement of SSD by concatenating feature maps for object detection(2017论文)
【6】FSSD: Feature Fusion Single Shot Multibox Detector(2017论文)