我们知道Yolo的核心思想是将物体检测问题转化了单一的回归问题(之前的是分类和回归问题),而SSD算法是一种直接预测目标类别和bounding box的多目标检测算法。在正式介绍SSD之前,我们先来看一下论文,了解了这篇论文之后,SSD的思路就会清晰很多。
Paper:Scalable Object Detection using Deep Neural Networks论文:基于深度网络的可扩目标检测【01. 解决的主要问题】
检测一张图片中同一类别的多个物体。之前的方法一般都是将训练好的某一类检测器在图片的每个位置进行移动、缩放来检测物体(穷举法),当类别增多的时候计算上就很费力。
【02. 主要贡献】
(1)将物体检测定义为多个边界框坐标的回归问题。对于每个预测框,网络输出一个置信度得分,显示该框包含对象的可能性。(传统方法在预先定义的框中对特性进行评分),效率高。
(2)将边界框预测器作为网络的一部分进行训练,根据预测框和ground truth来调整并通过反向传播算法更新框的位置、置信度和特征。
(3)在训练边界预测器时不考虑物体的类别。
【03. 创新点】
本文主打的就是scalable,可扩展性,具体是指物体类别增多的情况下,bounding box的数目不会成线性增加。这样就很容易扩展到其他更大的数据集上。
【04. 主要方法】
用一个Deep Neural Network(DNN)产生固定数量的边界框,每一个边界框都有其包含某个物体的置信度(此时并不知道每个框中具体是什么,置信度只代表了其包含物体的可能性大小)。【延伸:Faster RCNN的思想也是如此,其RPN就是做region proposal ,然后利用Fast RCNN进行分类。】
【05. 模型】
采用Alexnet作为基础网络,但是将Alexnet最后一层的输出改为回归,输出边界框的坐标(左上和右下)以及其置信度(介于0~1之间)。这些坐标都是用图像尺度进行了归一化的,目的是为了让网络适用于各种尺度的图像。
【06. 训练过程】
训练DNN来预测边界框和他们的置信度(分数),使最高分的边界框和ground truth最匹配。假设有一个训练样本,有M个物体被打了标签(根据M个ground truth打标签,K远大于M)(K是预测框,M是ground truth框)。然后只优化最匹配ground truth 的边界框,修改它的坐标来提升匹配度,最大化置信度,并减小其余的预测器的置信度(本来就定位不是很好的预测框)。
论文构造了一个分配的问题,如果第i个预测框被分配给第j个目标,则x_ij=1,否则为0,分配的目标函数为:
F m a t c h ( x , l ) = 1 2 ∑ i , j ∣ ∣ l i − g i ∣ ∣ 2 2 F_{match}(x,l) = \frac{1}{2} \sum_{i,j} || l_i - g_i ||_2^2 Fmatch(x,l)=21i,j∑∣∣li−gi∣∣22其中, l i l_i li是预测框的坐标向量, g j g_j gj是真实框的坐标向量(左上和右下),用L2距离来度量。
然后要最优化置信度,减少loss:
F c o n f ( x , c ) = − ∑ i , j x i j l o g ( c i ) − ∑ i ( 1 − ∑ j x i j ) l o g ( 1 − c i ) F_{conf}(x,c) = -\sum_{i,j} x_{ij}log(c_i)-\sum_{i}(1-\sum_{j}x_{ij})log(1-c_i) Fconf(x,c)=−i,j∑xijlog(c