首先要明确SSD的motivation:要让目标检测任务又快又准。怎么快?那就是将two-stage改为one-stage。怎么准?尽可能多预测些box(当然这里也有trade-off,毕竟预测的box越多计算量就越大,越耗时)。针对这些,SSD的关键技术在于:
- one-stage(相对于Faster RCNN);
- 采用anchor box机制(相对于YOLOv1);
- 采用多尺度特征图预测(相对于Faster RCNN和YOLOv1)。
采用anchor box机制,为要预测的box加入一些先验,可以使得模型更加鲁棒,降低出现不收敛的风险。anchor box机制相对来说可以在提出少量的box的基础上保证检测任务的准确率和召回率,结合anchor机制SSD需要预测8千多个box(Faster RCNN则需要预测2万3千多个box,更多的box意味着更多的计算,从而降低了实时性;YOLOv1只需要预测98个box,但是在MAP上表现一般)。
采用多尺度特征图,尽可能引入不同接收野的特征。这样尽管每个gird对应的anchor box都是相同的size,但是由于不同层特征图的接收野不同,所以相同的anchor在不同层对应的image实际区域也不同。总的来说,大尺度特征图(比如1919)用来检测小的target,而小尺度特征图(比如11)用来检测大的target。
其他还需要注意的点:
- 匹配机制:首先,保证每个ground truth和一个anchor box匹配上(评判标准是最大的jaccard overlap);然后,将jaccard overlap值大于0.5的anchor box与ground truth也匹配上。也就是说,对于每个ground truth,至少有一个anchor box能匹配上。
- 损失函数分析:SSD的损失函数为,可见损失函数包含2项——置信误差和定位误差。定位误差公式是,可见定位误差只考虑了正样本(有object的anchor box)。置信误差公式是,其中,置信误差就是计算了正负样本的交叉熵,正样本考虑了粗分类误差(是否有object)和细分类误差(object具体类别),负样本只考虑了粗分类误差。
- 对比下SSD和YOLO的区别注:SSD负样本采样机制——按照置信度误差(预测背景的置信度越小,误差越大)进行降序排列,选取误差的较大的top-k作为训练的负样本,以保证正负样本比例接近1:3(也就是每次选择最容易误判的负样本)。
网友评论