本文不赘述SSD的算法流程,主要总结SSD的几处重点做总结。

  • 多尺度特征图进行预测

SSD使用多个尺度的特征图进行检测,其目的是使用大的特征图检测相对较小的目标,小的特征图主要负责检测大的目标。

那么问题来了,大的特征图对检测较大目标的贡献是否大于小的特征图呢。

应该不会,模型给每个单元设置了一个比较小的先验框,并不是很大,先验框的感受野并不会占图片太大的比例,即便是偏移值也不会偏移较大。

  • 采用卷积层进行预测

与YOLO层最后采用全连接不同,SSD直接采用卷积后的特征图来代表检测值。

  • 设置先验框。

基于anchor的理念,在每个单元设置尺度或者长宽比不同的先验框,对于每一个先验框都有对应的一套检测值(边界框的中心位置和相对先验框位置偏移量,以及边界框的偏移量)。在实验中,先验框的数目高达9000+。

  • hard negative mining 解决正负样本不均衡的问题

anchor的方法的坏处就是会cover许多背景,这些背景属于负样本,在训练过程中将会造成样本严重不均衡的问题。后续提出的focal loss对缓解该问题有一定的帮助,而SSD算法则是采用的hard negative mining的技术,对负样本进行抽样,抽样时按照置信度误差(置信度为0~1,误差越大,置信度越小)进行降序排列,选取误差较大的top - k 作为训练的负样本,以保证正负样本的比例接近1:3,减少负样本的数目。

  • 先验框匹配原则。
    • ground truth box 与 IOU最大的先验框匹配,这个得到匹配的先验框被成为正样本先验框,但是gt box毕竟数目很少,会有很多的先验框作为负样本。
    • 除了使用困难样本挖掘技术之外,SSD增加了一条匹配原则,就是某个负样本先验框如果与gt box 的IOU的大于某个阈值(一般为0.5)的话,那么这个负样本就被认为是正样本。

其实第一条原则只是第二条原则的一个特例而已,一般来说,有了第二个原则,那么第一个原则就成立了(不过实际代码还是都实现了这两个原则)。

问题又来了,这样匹配就会出现一个gt box对应多个先验框,这样一个gt box就会有多个预测框。我们使用NMS(非最大化抑制)来去除重复多余的框。

  • 数据扩增

主要采用的技术有水平翻转(horizontal flip),随机裁剪加颜色扭曲(random crop & color distortion),随机采集块域(Randomly sample a patch)(获取小目标训练样本),