SSD: Single Shot MultiBox Detector
参考:
https://blog.csdn.net/ytusdc/article/details/86577939
https://arxiv.org/abs/1512.02325
原理:SSD的核心,对于feature map上每一个格子(cell),生成多个default box,然后利用small convolutional filters 预测盒子偏移量和分类。
创新点:多尺度预测,因为模型感受野不同,小目标放在浅层预测,大目标放在后层预测
Pipeline:
首先用VGG16做特征提取,得到特征feats
for feat, reg_conv, cls_conv in zip(feats, self.reg_convs,
self.cls_convs):
cls_scores.append(cls_conv(feat))
bbox_preds.append(reg_conv(feat))
return cls_scores, bbox_preds
再对backbone的每层特征都做cls和bbox回归,这样便完成forward啦
再谈loss
损失函数分成两部分,一是分类loss,二是定位loss
此处N代表匹配的框的数量,SSD的匹配策略是,不仅仅选择最高score的匹配框作为整理,而且选择了大量IOU大于0.5的框,意图是简化训练难度。对于定位使用的是L1 loss,对于分类使用的是softmax损失
SSD使用到的多尺度训练,在每个尺度上只放同一尺度的anchor,只是比例不一样
难例挖掘:作者发现,在一阶段检测器里,正例会很少,负例很多,那么就对负例进行筛选,使得负例:正例=3:1,会训练的更快
看一下SSD为什么能比Faster RCNN厉害,这是因为它将不同面积(scale)大小anchor放到不同特征图下面去做了,所以Faster RCNN解决多尺度是通过设置不同大小的anchor解决,SSD是通过利用不同尺度的特征图+不同尺度的anchor解决
利用数据增强策略,即随机裁剪,这样就相当于放大了,便可以认识更多物体的特征
Q:SSD为什么能加速?
A:https://blog.csdn.net/ytusdc/article/details/86577939第五章讲的很好