SSD

1、概述

不同于对faster检测器的各个组件进行改进从而提升精度的一系列方法,ssd不对假设包围框进行像素或特征的重采样,而是直接进行默认框的类别预测和边框位置的预测,并且基于不同尺度的特征图进行不同尺度目标框的预测,这些设计特点使得低分辨率图片就能取得很好效果, 从而进一步提高速度。最终在voc2007数据集上取得速度与精度均超过yolo和faster的成绩。

2、SSD框架和训练方法

SSD_第1张图片

作者在文章中将ssd与yolo的框架进行了对比。与faster不同,他俩同属于one-stage方法,不需要经过候选框提取这一步骤,从而在速度上显著快于two-stage方法。同时,从框架对比图可以看出,一,相比于yolo,ssd直接采用3*3卷积核做检测,没有全连接层; 二,ssd提取了不同尺度特征图来做检测;三,ssd设计了和faster类似的先验框,从而根据纵横比进行显式的分离预测,提高位置预测的精度。

训练方法细节:

默认框的设计:

首先有一个概念,default box,是指在feature map的每个小格(cell)上都有一系列固定大小的box。作者对每一层feature map的scale取了不同的值,然后结合纵横比,计算出default box的宽高,设计的比较复杂,暂时没有想明白他为什么要这样设计。但其实这是个开放性问题,读者可以按照自己的想法和需求设计不同的default box,文章的设计方法具体如图:


SSD_第2张图片

算了一下conv4_3的默认框对应的原图大小,16*0.2~3个像素尺度,感觉很小,不知道是不是自己理解的不对。

正负样本的划分:

当默认框设计好了之后,需要对其进行打tag,文章里使用的划分策略是这样的:先是从groudtruth box出发给每个groudtruth box找到了最匹配的prior box放入候选正样本集,然后再从prior box出发为prior box集中寻找与groundtruth box满足IOU>0.5的一个IOU最大的prior box(如果有的话)放入候选正样本集,这样显然就增大了候选正样本集的数量,而剩余所有与gt没有匹配成功的默认框作为负样本集。

训练样本的选取:

一般情况下,正样本的数量相比于负样本要少得多,这会让训练难以收敛(但是后来出来的大神文Focal loss提出Single stage detector不好的原因完全在于:

极度不平衡的正负样本比例: anchor近似于sliding window的方式会使正负样本接近1000:1,而且绝大部分负样本都是easy example,这就导致下面一个问题:

gradient被easy example dominant的问题:往往这些easy example虽然loss很低,但由于数量众多,对于loss依旧有很大贡献,从而导致收敛到不够好的一个结果。(引自链接https://www.zhihu.com/question/63581984/answer/210832009)

本文采用OHEM方法,先将每一个物体位置上对应 predictions(prior boxes)loss 进行排序。 对于候选正样本集:选择最高的几个prior box与正样本集匹配(box索引同时存在于这两个集合里则匹配成功),匹配不成功则删除这个正样本(因为这个正样本不在难例里已经很接近ground truth box了,不需要再训练了);对于候选负样本集:选择最高的几个prior box与候选负样本集匹配,匹配成功则作为负样本,控制正负样本比例1:3。每迭代一次都要像这样重新sample。

数据增广:

每一张训练图像,随机的进行如下几种选择:

使用原始的图像

随机采样多个 patch(CropImage),与物体之间最小的 jaccard overlap 为:0.1,0.3,0.5,0.7 与 0.9,采样的 patch 是原始图像大小比例是 [0.3,1.0],aspect ratio 在 0.5 或 2。当 groundtruth box 的 中心(center)在采样的 patch 中且在采样的 patch中 groundtruth box面积大于0时,我们保留CropImage。

在这些采样步骤之后,每一个采样的 patch 被 resize 到固定的大小,并且以 0.5 的概率随机的 水平翻转(horizontally flipped,翻转不翻转看prototxt,默认不翻转)

损失函数:

SSD_第3张图片

损失函数=1/N *[分类的softmax损失 + 位置的smoothL1损失] (N是正样本数目)

思考:

了解和总结的ssd存在的一些问题:

1、对小物体检测recall提升不明显:一方面,可能是ssd的输入300*300确实比较小,相对来说524的输入就能提高一些;另一方面,这可能是ssd网络设计的问题,虽然利用了多feature map,低层特征的分辨率高,高层特征的感受野大,语义信息丰富,但在检测时并没有进行融合复用,导致低层检测可能语义信息不足。(FPN的提出)也可能是小样本能够匹配的正样本数目本身小,训练不充分。(不同意有人猜想数据增强部分是为了提升小目标检测率,因为crop之后,相对应是大尺度默认框得到了更充分地训练。)

2、采用OHEM的样本选择方法:focal loss指出one-stage方法的精度提升并非在于样本的不平衡,而OHEM方法直接忽略了其余负样本的训练。(Focal loss)

参考文章:https://blog.csdn.net/wfei101/article/details/78176322

你可能感兴趣的:(SSD)