对于two-stage的目标检测方法,通常是生成候选框(利用selective search,RPN等),然后再在候选框上进行分类和回归出位置。而one-stage则是在生成候选框的同时,进行分类和回归,因此在速度上会有保证。但是不像two-stage有专门的生成框的网络保证在进行分类时已经对框进行了一部分筛选,避免了负样本过多的情况,因而准确率要逊色于two-stage。
SSD的贡献:
1. 比Yolo还要快,同时准确率能够达到faster-RCNN的程度
2. 通过应用在不同feature map的小的卷积核,对生成的default box进行分类和回归位置
3. 实现端到端训练,同时在低分辨率图片上有不俗表现、
SSD模型:
SSD对处于不同尺寸feature map的每个位置(可看作图b和图c的小格子)生成的不同长宽比的固定数目的default box(即虚线框)进行评估,既预测其位置偏移同时预测对于所有目标种类的概率。训练时将default box与标注的框进行匹配,和标注框匹配的default box为正样本,其余的框则为负样本。计算损失时对位置损失以及类别的损失进行求和。
在此之后进行NMS( non-maximum suppression非极大抑制值)来得到最终预测
SSD的模型构造基于一个分类网络(通常成为base network),去掉分类的部分,再补充一些卷积层。一大特点是在不同的feature map上分别进行检测,得到了多尺度的检测。在增加的层与选中的feature map上进行卷积得到固定数目的预测框,对于m×n×p(p为通道数)的feature map,用3×3×p的小卷积核进行卷积来得到类的分数或是位置的偏移。
将(如上图)中的小方格称为feature map的一个cell,其中default box 相对于cell 的位置是固定的,一个cell产生的default box的数目也是固定的。如果num(default box)=k,那么一个cell的输出参数为 k*(c+4) ,c为类的总数,对于m×n的feature map,总参数为mn×k*(c+4)。default box 与faster-RCNN中anchor box的概念类似。
需要注意的是,default box并不是最终预测结果,在defaut box基础上进行偏移得到的才是预测框。
SSD训练:
如同上面所讲,SSD在训练时将标注框与default box进行匹配,进而能够进行端到端损失函数计算与反向传播。在训练中涉及到对default box 和检测的尺度(因为在不同feature map上都做了检测)的选择,以及进行难例mining 和数据增强。
首先,the best jaccard overlap,然后与阈值大于0.5的default box进行匹配。
SSD同时利用了底层与高层的feature map使得语义信息更加丰富。不同feature map对应的default box的尺寸也是不同的,具体见论文。长宽比包括:{1, 2, 3, 1/2, 1/3}。在实际使用中,可以根据数据集的情况对长宽比进行自己的修改设置。
在匹配之后,负样本事实上要多很多,去掉类损失最高的一些default box,将正负样本比例调整到1:3,使得优化更快训练也更稳定。
(数据增强的部分没太懂)