SSD是第一个在 multi-scale feature map ,也就是常说的 feature pyramid 上 生成anchor 的算法。在论文中提到的“default box”,其实就是“anchor”:
既然第一个意识到可以好好开发 multi-scale feature map,那么SSD一下子对各层feature map进行了大开发。具体地,SSD分别在 conv4_3
、fc7
、conv8_2
、conv9_2
、conv10_2
、conv11_2
这六个逐级scale/2×2的feature map上,按照 K 依次等于 4
、6
、6
、6
、4
、4
来在每层的feature map上逐点生成K个anchor:
作者在文中也做了ablation实验,取六个scale的feature map对SSD效果最好:
然而,在检测算法后续的所有重要工作中,一般只取2~4个scale的逐级feature map。且在同一个算法中进行anchor生成的feature map上,K值 (每个 滑窗 生成的anchor数) 均保持一致 (不像SSD这样一会儿4一会儿6的)。
并且,anchor的size和aspect ratio也大有搞头。不同size和aspect ratio会分别对应不同的效应。SSD也是第一个对此作了研究的:
与YOLOv1 (下面的那个网络) 相比,SSD的basemodel设置为去掉了fc的VGG。
题外话,YOLOv1也探究过拿VGG当做basemodel,当时觉得精度只是稍微提升但是速度慢了不少(因为fc严重拖累了VGG的速度),所以权衡利弊YOLOv1就采用了山寨版的GoogleNet作为basemodel。半年后SSD一出来,在精度和速度上吊打YOLOv1,YOLOv1 (带有fc层) 坐不住了,发现原来去掉fc后的VGG这么好,于是在YOLOv2中不再使用fc,并且也学着SSD,将去掉fc后的vgg作为了basemodel。
在VOC2007上,SSD的检测精度高过当时的精度之王Faster R-CNN (然而这只是论文中给出来的数据,实际上精度差了Faster R-CNN一大截):
在VOC2012上也是如此:
COCO数据集也同样:
最后贴点效果图:
[1] SSD: Single Shot MultiBox Detector [2] 深度学习论文笔记:SSD [3] 检测任务专题1: SSD在训练什么 [4] SSD关键源码解析