SSD同YOLO,是目标检测领域的经典算法。考虑到YOLO-V3和SSD有类似之处,同时这两个算法也是目前目标检测领域业界广泛使用的算法,所以在介绍SSD核心思想之外,对两个算法进行比较,加深理解。
SSD包含以下几个核心特征:
- Multi-scale feature map for prediction:也即是在网络多个分辨率不同的特征图上进行预测,通常会在8x,16x,32x,...等下采样倍数特征图上进行。大下采样倍数特征图cell感受野更大,一般用于预测大尺度物体,小下采样倍数特征图一般用于预测小尺度物体。
- Anchor boxes:SSD借鉴了Faster-RCNN的Anchor思想,在输出特征图每一个位置放置不同大小&Aspect ratio的先验框,这些先验框可手工依据经验配置,也可使用yolo算法中cluster算法,以提升和GT的match程度。
- Hard negative mining:anchor的作用是提供训练过程中的正负样本,SSD anchor和GT的match过程包含两步:1. 对每一个GT,匹配和其IoU最大的anchor,这样保证了每个GT至少匹配一个anchor;2.对剩余未匹配的anchor,计算和其IoU最大的GT,若IoU大于设定的threshold,则为正样本,否则为负样本,考虑到正样本数量一般远远大于负样本,训练中会采用难例样本挖掘策略,一般保证正负样本比例为1:3,难例样本选择的策略是标定分类置信度高的anchor作为负样本。
- Anchor编解码:具体如下图所示,其中
为matched anchor的中心点和宽高,为对应预测框的中心点和宽高,可以看到对中心点而言,回归的是预测框和对应anchor的offset,宽高预测的是两者比值的对数(yolo-v1回归值开根号,意义和这边一样,都是减小框尺度大小对loss的影响)。另外下图所示为anchor编码过程,inference过程需解码,得到预测框在图片上绝对位置。
5. 损失函数:上图是位置回归loss,只作用于正样本,损失函数采用smooth-l1;检测需同时输出类别信息,SSD采用softmax损失,作用于正负样本。smooth-l1基于改进l1和l2损失而来,l2损失的问题在于对离群点敏感,smooth-l1当
时,导数为1,对离群点鲁邦;l1损失的问题在于收敛慢,同时训练到最后,当loss较小时候会震动,而smooth-l1当
时,导数为x,在训练后期收敛更为稳定。
下面比较一下SSD和YOLO-V3的异同,具体可参见YOLO系列算法。
- YOLO-V3采用了FPN而SSD没有,当然现在采用SSD时一般都会添加FPN;
- 检测框中心点解码方式不一致,SSD回归的是相比anchor中心店的offset,而YOLO-V3回归的是相比对应grid左上角的offset。
- 是否解耦包含物体置信度和分类置信度。