>>戳此处立即下载电子书<<,学习全套目标检测算法&模型
SSD
SSD[4] 同时借鉴了YOLO 网格的思想和Faster R-CNN 的anchor 机制,使得SSD 可以快速进行预测的同时又可以相对准确地获取目标的位置。
图2-15 中的(b)和(c)分别代表不同的特征层,(c)相对(b)离最终预测结果较近,因此跨越同样像素个数能检测的目标就越大。按照图2-15 所示,在特征层(b)的每个点上都将产生4 个不同大小的anchor(1:1 两个,1:2 两个),在特征层(c)上也是如此。因此,根据真实目标矩形框与每个anchor 的IOU 大小计算可知,(b)中有2 个anchor 为正样本,(c)中1 个anchor 为正样本。
图2-15 SSD 特征层与anchor 示意图[4]
对比之前学过的Faster R-CNN,接下来我们介绍SSD 的一些特点:
● 使用多尺度特征层进行检测。
在 Faster Rcnn 的 RPN 中,anchor 是在主干网络的最后一个特征层上生成的,而在SSD 中,anchor 不仅仅在最后一个特征层上产生,在几个高层特征层处同时也在产生anchor。如图2-16 所示,SSD 在VGG16 的conv6 开始,在conv7、conv8、conv9、conv10 都产生anchor。这些特征层大小依次递减,使得SSD 可以检测不同尺度的目标。这里简单解释下,比如同样一个3×3 的anchor,它在conv6 看到的目标(感受野)就要远小于conv10 看到的目标,可以理解为靠前的特征层用于检测小目标,而靠后的特征层用来检测大目标。与RPN 网络(2.2.3 中介绍)产生anchor 的方法类似,SSD 也是在特征层的每个点上产生多个比例、多个尺度的n 个anchor。如图2-15(b)是一个8×8 的特征层,每个小方格子是一个特征点,每个特征点上可以产生宽高比为1:1,1:2,1:3,大小多个尺度的anchor。
图2-16 SSD 结构图[4]
● SSD 中所有特征层产生的 anchor 都将经过正负样本的筛选(在 2.2.3 介绍过如何使用IOU 进行anchor 的筛选)后直接进行分类分数以及bbox 位置的学习。
也就是说,特征层上生成的正负样本直接进行最终的分类(ClassNum 个类别)以及bbox 的学习,不像Faster R-CNN 那样先在第一步学是否有物体(只有0/1 两个类别)和bbox 位置,然后在第二步学最终的分类(ClassNum个类别)以及对bbox 位置的微调。
实际应用时我们往往不仅关注精度,很多情况下也要考虑速度,比如对视频内容进行实时地检测,这时候我们就希望有方法可以很好的做速度和精度的平衡。YOLO是第一个提出来效果很好的1-stage 检测方法,SSD 借鉴了它的一些思想并在其基础上做了改进,做到了比较好的平衡。