SSD / DSSD学习笔记

一,SSD

one-stage结构,在YOLO基础上加入先验框和多尺度预测。

SSD / DSSD学习笔记1,贡献

(1)多尺度预测;

(2)使用一系列3*3大小的卷积核得到相对于先验框的偏移和类别分数(YOLO用的全连接),每个m*n大小的feature map一共有(c+4)*k*m*n个输出,c是类别,k为每个box输出的框的个数;

(3)端到端训练。

2,训练

(1)匹配策略

首先给每个真实框匹配IoU最大的先验框,以保证每个真实框都被匹配;然后,向每个默认框匹配IoU大于阈值(论文中取0.5)的真实框。

(2)loss function

首先,令SSD / DSSD学习笔记,表示第i个先验框和第j个真实框的匹配关系,P表示种类,1就是匹配,0就是不匹配。

总损失函数:

                   SSD / DSSD学习笔记

其中,N是匹配的先验框的个数;

回归损失是预测框和真实框之间的Smooth L1损失,和FRCN类似,具体如下:

SSD / DSSD学习笔记
分类损失是softmax损失,如下:

SSD / DSSD学习笔记

3,先验框的尺度和长宽比

不同尺度的特征度负责检测不同尺度的对象,故为每个尺度的feature map设置不同大小的prior box,总体思想是随着特征变深,prior box尺度变大,具体如下:

                                                SSD / DSSD学习笔记  

论文中Smin和Smax取0.2和0.9(整个特征图大小设为1)

然后,长宽比有五种尺度:{1,2,3,1/2,1/3},记为a。对于a=1,增加一个尺度 SSD / DSSD学习笔记

故一个box输出6个prior box,每个先验框的宽,高,中心坐标如下(fk为特征图大小,i、j为box左上角坐标):

                        SSD / DSSD学习笔记

4,难负样本挖掘

将负样本根据置信度进行排序,选取最高的那几个,并且保证负样本、正样本的比例为3:1

5,数据扩充

每张原始的训练图片用以下策略进行扩充:

(1)使用原始图片;

(2)在图片上采集patch作为训练输入,要求满足patch和真实框IoU为{0.1,0.3,0.5,0.7,0.9};

(3)在图片上随机采集patch作为训练输入。

patch大小要求为原图像的0.1倍到1之间,宽高比在1/2到2之间。

如果真实框的中心位于patch内,便保留patch和真实框的重叠部分。

上述步骤完成后,统一到固定尺寸,然后又0.5的概率水平翻转。

二、DSSD

如下图,在SSD基础上,加入了以下创新:

SSD / DSSD学习笔记

1,用ResNet101替换VGG16,然后在conv5-x后增加SSD层(蓝),在conv3-x,conv5-x以及SSD Layers预测分类概率和边框偏移

2,增加DSSD层(红),方法是对当前层做反卷积,使其和上一层尺度相同,然后融合得到新的层,用来做预测,如此循环。反卷积和融合的具体做法如下所示:

SSD / DSSD学习笔记

使用元素点积的方法融合,即元素对应相乘。

3,预测,预测层后增加残差模块

SSD / DSSD学习笔记

4,训练,基本和SSD一样。在设置先验框宽高比之前,先运行K-means聚类,根据结果,在原有五种尺度{1,2,3,1/2,1/3}上增加了1.6这个宽高比。